From 9d69224972e09bbe0bb6f120e9bbe724f763c8bd Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Wed, 5 Apr 2023 07:32:09 +0100 Subject: [PATCH 01/29] fix podfile error due to format error --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 99 +- FoodbLog/Podfile | 3 + FoodbLog/Podfile.lock | 20 +- .../Pod/Classes/Objective-C/Chameleon_.m | 4 +- .../AFNetworking/AFHTTPRequestOperation.h | 1 - .../AFHTTPRequestOperationManager.h | 1 - .../AFNetworking/AFHTTPSessionManager.h | 1 - .../AFNetworkActivityIndicatorManager.h | 1 - .../AFNetworkReachabilityManager.h | 1 - .../Private/AFNetworking/AFNetworking.h | 1 - .../Private/AFNetworking/AFSecurityPolicy.h | 1 - .../AFNetworking/AFURLConnectionOperation.h | 1 - .../AFNetworking/AFURLRequestSerialization.h | 1 - .../AFNetworking/AFURLResponseSerialization.h | 1 - .../AFNetworking/AFURLSessionManager.h | 1 - .../UIActivityIndicatorView+AFNetworking.h | 1 - .../AFNetworking/UIAlertView+AFNetworking.h | 1 - .../AFNetworking/UIButton+AFNetworking.h | 1 - .../AFNetworking/UIImage+AFNetworking.h | 1 - .../AFNetworking/UIImageView+AFNetworking.h | 1 - .../Private/AFNetworking/UIKit+AFNetworking.h | 1 - .../UIProgressView+AFNetworking.h | 1 - .../UIRefreshControl+AFNetworking.h | 1 - .../AFNetworking/UIWebView+AFNetworking.h | 1 - .../Private/Bolts/BFCancellationToken.h | 1 - .../Bolts/BFCancellationTokenRegistration.h | 1 - .../Private/Bolts/BFCancellationTokenSource.h | 1 - .../Pods/Headers/Private/Bolts/BFDefines.h | 1 - .../Pods/Headers/Private/Bolts/BFExecutor.h | 1 - FoodbLog/Pods/Headers/Private/Bolts/BFTask.h | 1 - .../Private/Bolts/BFTaskCompletionSource.h | 1 - FoodbLog/Pods/Headers/Private/Bolts/Bolts.h | 1 - .../Pods/Headers/Private/Bolts/BoltsVersion.h | 1 - .../Private/ChameleonFramework/Chameleon.h | 1 - .../ChameleonFramework/ChameleonConstants.h | 1 - .../ChameleonFramework/ChameleonEnums.h | 1 - .../ChameleonFramework/ChameleonMacros.h | 1 - .../Private/ChameleonFramework/Chameleon_.h | 1 - .../ChameleonFramework/NSArray+Chameleon.h | 1 - .../ChameleonFramework/UIButton+Chameleon.h | 1 - .../ChameleonFramework/UIColor+Chameleon.h | 1 - .../UIColor+ChameleonPrivate.h | 1 - .../UIImage+ChameleonPrivate.h | 1 - .../ChameleonFramework/UILabel+Chameleon.h | 1 - .../UINavigationController+Chameleon.h | 1 - .../UIView+ChameleonPrivate.h | 1 - .../UIViewController+Chameleon.h | 1 - .../Headers/Private/FlatUIKit/FUIAlertView.h | 1 - .../Headers/Private/FlatUIKit/FUIButton.h | 1 - .../Private/FlatUIKit/FUICellBackgroundView.h | 1 - .../FlatUIKit/FUIPopoverBackgroundView.h | 1 - .../Private/FlatUIKit/FUISegmentedControl.h | 1 - .../Headers/Private/FlatUIKit/FUISwitch.h | 1 - .../Headers/Private/FlatUIKit/FUITextField.h | 1 - .../Headers/Private/FlatUIKit/FlatUIKit.h | 1 - .../Private/FlatUIKit/NSString+Icons.h | 1 - .../FlatUIKit/UIBarButtonItem+FlatUI.h | 1 - .../Private/FlatUIKit/UIColor+FlatUI.h | 1 - .../Headers/Private/FlatUIKit/UIFont+FlatUI.h | 1 - .../Private/FlatUIKit/UIImage+FlatUI.h | 1 - .../FlatUIKit/UINavigationBar+FlatUI.h | 1 - .../FlatUIKit/UIPopoverController+FlatUI.h | 1 - .../Private/FlatUIKit/UIProgressView+FlatUI.h | 1 - .../Private/FlatUIKit/UISlider+FlatUI.h | 1 - .../Private/FlatUIKit/UIStepper+FlatUI.h | 1 - .../Private/FlatUIKit/UITabBar+FlatUI.h | 1 - .../FlatUIKit/UITableViewCell+FlatUI.h | 1 - .../Private/FlatUIKit/UIToolbar+FlatUI.h | 1 - .../IQKeyboardManager/IQBarButtonItem.h | 1 - .../IQKeyboardManager/IQKeyboardManager.h | 1 - .../IQKeyboardManagerConstants.h | 1 - .../IQKeyboardManagerConstantsInternal.h | 1 - .../IQKeyboardReturnKeyHandler.h | 1 - .../IQKeyboardManager/IQNSArray+Sort.h | 1 - .../IQSegmentedNextPrevious.h | 1 - .../Private/IQKeyboardManager/IQTextView.h | 1 - .../IQKeyboardManager/IQTitleBarButtonItem.h | 1 - .../Private/IQKeyboardManager/IQToolbar.h | 1 - .../IQUITextFieldView+Additions.h | 1 - .../IQKeyboardManager/IQUIView+Hierarchy.h | 1 - .../IQUIView+IQKeyboardToolbar.h | 1 - .../IQUIViewController+Additions.h | 1 - .../IQKeyboardManager/IQUIWindow+Hierarchy.h | 1 - .../IQKeyboardManager/KeyboardManager.h | 1 - .../Headers/Private/Parse/BFTask+Private.h | 1 - FoodbLog/Pods/Headers/Private/Parse/PFACL.h | 1 - .../Pods/Headers/Private/Parse/PFACLPrivate.h | 1 - .../Pods/Headers/Private/Parse/PFACLState.h | 1 - .../Private/Parse/PFACLState_Private.h | 1 - .../Pods/Headers/Private/Parse/PFAlertView.h | 1 - .../Pods/Headers/Private/Parse/PFAnalytics.h | 1 - .../Private/Parse/PFAnalyticsController.h | 1 - .../Private/Parse/PFAnalyticsUtilities.h | 1 - .../Private/Parse/PFAnalytics_Private.h | 1 - .../Parse/PFAnonymousAuthenticationProvider.h | 1 - .../Headers/Private/Parse/PFAnonymousUtils.h | 1 - .../Private/Parse/PFAnonymousUtils_Private.h | 1 - .../Headers/Private/Parse/PFApplication.h | 1 - .../Pods/Headers/Private/Parse/PFAssert.h | 1 - .../Headers/Private/Parse/PFAsyncTaskQueue.h | 1 - .../Headers/Private/Parse/PFBase64Encoder.h | 1 - .../Pods/Headers/Private/Parse/PFBaseState.h | 1 - .../Private/Parse/PFCachedQueryController.h | 1 - .../Headers/Private/Parse/PFCategoryLoader.h | 1 - FoodbLog/Pods/Headers/Private/Parse/PFCloud.h | 1 - .../Private/Parse/PFCloudCodeController.h | 1 - .../Headers/Private/Parse/PFCommandCache.h | 1 - .../Private/Parse/PFCommandCache_Private.h | 1 - .../Headers/Private/Parse/PFCommandResult.h | 1 - .../Headers/Private/Parse/PFCommandRunning.h | 1 - .../Private/Parse/PFCommandRunningConstants.h | 1 - .../Parse/PFCommandURLRequestConstructor.h | 1 - .../Pods/Headers/Private/Parse/PFConfig.h | 1 - .../Private/Parse/PFConfigController.h | 1 - .../Headers/Private/Parse/PFConfig_Private.h | 1 - .../Pods/Headers/Private/Parse/PFConstants.h | 1 - .../Private/Parse/PFCoreDataProvider.h | 1 - .../Headers/Private/Parse/PFCoreManager.h | 1 - .../Private/Parse/PFCurrentConfigController.h | 1 - .../Parse/PFCurrentInstallationController.h | 1 - .../Parse/PFCurrentObjectControlling.h | 1 - .../Private/Parse/PFCurrentUserController.h | 1 - .../Headers/Private/Parse/PFDataProvider.h | 1 - .../Headers/Private/Parse/PFDateFormatter.h | 1 - .../Pods/Headers/Private/Parse/PFDecoder.h | 1 - .../Private/Parse/PFDefaultACLController.h | 1 - .../Pods/Headers/Private/Parse/PFDevice.h | 1 - .../Pods/Headers/Private/Parse/PFEncoder.h | 1 - .../Headers/Private/Parse/PFErrorUtilities.h | 1 - .../Headers/Private/Parse/PFEventuallyPin.h | 1 - .../Headers/Private/Parse/PFEventuallyQueue.h | 1 - .../Private/Parse/PFEventuallyQueue_Private.h | 1 - .../Headers/Private/Parse/PFFieldOperation.h | 1 - .../Private/Parse/PFFieldOperationDecoder.h | 1 - FoodbLog/Pods/Headers/Private/Parse/PFFile.h | 1 - .../Headers/Private/Parse/PFFileController.h | 1 - .../Headers/Private/Parse/PFFileDataStream.h | 1 - .../Headers/Private/Parse/PFFileManager.h | 1 - .../Private/Parse/PFFileStagingController.h | 1 - .../Pods/Headers/Private/Parse/PFFileState.h | 1 - .../Private/Parse/PFFileState_Private.h | 1 - .../Headers/Private/Parse/PFFile_Private.h | 1 - .../Pods/Headers/Private/Parse/PFGeoPoint.h | 1 - .../Headers/Private/Parse/PFGeoPointPrivate.h | 1 - .../Headers/Private/Parse/PFHTTPRequest.h | 1 - .../Parse/PFHTTPURLRequestConstructor.h | 1 - FoodbLog/Pods/Headers/Private/Parse/PFHash.h | 1 - .../Headers/Private/Parse/PFInstallation.h | 1 - .../Private/Parse/PFInstallationConstants.h | 1 - .../Private/Parse/PFInstallationController.h | 1 - .../Parse/PFInstallationIdentifierStore.h | 1 - .../PFInstallationIdentifierStore_Private.h | 1 - .../Private/Parse/PFInstallationPrivate.h | 1 - .../Headers/Private/Parse/PFInternalUtils.h | 1 - .../Private/Parse/PFJSONSerialization.h | 1 - .../Headers/Private/Parse/PFKeyValueCache.h | 1 - .../Private/Parse/PFKeyValueCache_Private.h | 1 - .../Headers/Private/Parse/PFKeychainStore.h | 1 - .../Headers/Private/Parse/PFLocationManager.h | 1 - .../Pods/Headers/Private/Parse/PFLogger.h | 1 - .../Pods/Headers/Private/Parse/PFLogging.h | 1 - .../Pods/Headers/Private/Parse/PFMacros.h | 1 - .../Private/Parse/PFMultiProcessFileLock.h | 1 - .../Parse/PFMultiProcessFileLockController.h | 1 - .../Private/Parse/PFMulticastDelegate.h | 1 - .../Headers/Private/Parse/PFMutableACLState.h | 1 - .../Private/Parse/PFMutableFileState.h | 1 - .../Private/Parse/PFMutableObjectState.h | 1 - .../Private/Parse/PFMutablePushState.h | 1 - .../Private/Parse/PFMutableQueryState.h | 1 - .../Private/Parse/PFMutableRelationState.h | 1 - .../Private/Parse/PFMutableUserState.h | 1 - .../Parse/PFNetworkActivityIndicatorManager.h | 1 - .../Headers/Private/Parse/PFNetworkCommand.h | 1 - .../Headers/Private/Parse/PFNullability.h | 1 - .../Headers/Private/Parse/PFObject+Subclass.h | 1 - .../Pods/Headers/Private/Parse/PFObject.h | 1 - .../Private/Parse/PFObjectBatchController.h | 1 - .../Headers/Private/Parse/PFObjectConstants.h | 1 - .../Private/Parse/PFObjectController.h | 1 - .../Parse/PFObjectController_Private.h | 1 - .../Private/Parse/PFObjectControlling.h | 1 - .../Private/Parse/PFObjectEstimatedData.h | 1 - .../Headers/Private/Parse/PFObjectFileCoder.h | 1 - .../Private/Parse/PFObjectFileCodingLogic.h | 1 - .../Parse/PFObjectFilePersistenceController.h | 1 - .../Private/Parse/PFObjectLocalIdStore.h | 1 - .../Headers/Private/Parse/PFObjectPrivate.h | 1 - .../Headers/Private/Parse/PFObjectState.h | 1 - .../Private/Parse/PFObjectState_Private.h | 1 - .../Private/Parse/PFObjectSubclassInfo.h | 1 - .../Parse/PFObjectSubclassingController.h | 1 - .../Headers/Private/Parse/PFObjectUtilities.h | 1 - .../Private/Parse/PFOfflineObjectController.h | 1 - .../Private/Parse/PFOfflineQueryController.h | 1 - .../Private/Parse/PFOfflineQueryLogic.h | 1 - .../Headers/Private/Parse/PFOfflineStore.h | 1 - .../Headers/Private/Parse/PFOperationSet.h | 1 - .../Parse/PFPaymentTransactionObserver.h | 1 - .../PFPaymentTransactionObserver_Private.h | 1 - FoodbLog/Pods/Headers/Private/Parse/PFPin.h | 1 - .../Private/Parse/PFPinningEventuallyQueue.h | 1 - .../Private/Parse/PFPinningObjectStore.h | 1 - .../Headers/Private/Parse/PFProduct+Private.h | 1 - .../Pods/Headers/Private/Parse/PFProduct.h | 1 - .../Private/Parse/PFProductsRequestHandler.h | 1 - .../Headers/Private/Parse/PFPropertyInfo.h | 1 - .../Private/Parse/PFPropertyInfo_Private.h | 1 - .../Private/Parse/PFPropertyInfo_Runtime.h | 1 - .../Pods/Headers/Private/Parse/PFPurchase.h | 1 - .../Private/Parse/PFPurchaseController.h | 1 - FoodbLog/Pods/Headers/Private/Parse/PFPush.h | 1 - .../Private/Parse/PFPushChannelsController.h | 1 - .../Headers/Private/Parse/PFPushController.h | 1 - .../Headers/Private/Parse/PFPushManager.h | 1 - .../Headers/Private/Parse/PFPushPrivate.h | 1 - .../Pods/Headers/Private/Parse/PFPushState.h | 1 - .../Private/Parse/PFPushState_Private.h | 1 - .../Headers/Private/Parse/PFPushUtilities.h | 1 - FoodbLog/Pods/Headers/Private/Parse/PFQuery.h | 1 - .../Headers/Private/Parse/PFQueryController.h | 1 - .../Headers/Private/Parse/PFQueryPrivate.h | 1 - .../Pods/Headers/Private/Parse/PFQueryState.h | 1 - .../Private/Parse/PFQueryState_Private.h | 1 - .../Headers/Private/Parse/PFQueryUtilities.h | 1 - .../Private/Parse/PFRESTAnalyticsCommand.h | 1 - .../Private/Parse/PFRESTCloudCommand.h | 1 - .../Headers/Private/Parse/PFRESTCommand.h | 1 - .../Private/Parse/PFRESTCommand_Private.h | 1 - .../Private/Parse/PFRESTConfigCommand.h | 1 - .../Headers/Private/Parse/PFRESTFileCommand.h | 1 - .../Private/Parse/PFRESTObjectBatchCommand.h | 1 - .../Private/Parse/PFRESTObjectCommand.h | 1 - .../Headers/Private/Parse/PFRESTPushCommand.h | 1 - .../Private/Parse/PFRESTQueryCommand.h | 1 - .../Private/Parse/PFRESTSessionCommand.h | 1 - .../Headers/Private/Parse/PFRESTUserCommand.h | 1 - .../Headers/Private/Parse/PFReachability.h | 1 - .../Pods/Headers/Private/Parse/PFRelation.h | 1 - .../Headers/Private/Parse/PFRelationPrivate.h | 1 - .../Headers/Private/Parse/PFRelationState.h | 1 - .../Private/Parse/PFRelationState_Private.h | 1 - FoodbLog/Pods/Headers/Private/Parse/PFRole.h | 1 - .../Headers/Private/Parse/PFSQLiteDatabase.h | 1 - .../Parse/PFSQLiteDatabaseController.h | 1 - .../Private/Parse/PFSQLiteDatabaseResult.h | 1 - .../Private/Parse/PFSQLiteDatabase_Private.h | 1 - .../Headers/Private/Parse/PFSQLiteStatement.h | 1 - .../Pods/Headers/Private/Parse/PFSession.h | 1 - .../Private/Parse/PFSessionController.h | 1 - .../Private/Parse/PFSessionUtilities.h | 1 - .../Headers/Private/Parse/PFSession_Private.h | 1 - .../Headers/Private/Parse/PFSubclassing.h | 1 - .../Pods/Headers/Private/Parse/PFTaskQueue.h | 1 - .../Headers/Private/Parse/PFThreadsafety.h | 1 - .../Headers/Private/Parse/PFURLConstructor.h | 1 - .../Pods/Headers/Private/Parse/PFURLSession.h | 1 - .../Private/Parse/PFURLSessionCommandRunner.h | 1 - .../Parse/PFURLSessionCommandRunner_Private.h | 1 - .../Parse/PFURLSessionDataTaskDelegate.h | 1 - .../PFURLSessionDataTaskDelegate_Private.h | 1 - .../PFURLSessionFileDownloadTaskDelegate.h | 1 - .../Parse/PFURLSessionJSONDataTaskDelegate.h | 1 - .../Parse/PFURLSessionUploadTaskDelegate.h | 1 - .../Private/Parse/PFURLSession_Private.h | 1 - FoodbLog/Pods/Headers/Private/Parse/PFUser.h | 1 - .../Parse/PFUserAuthenticationController.h | 1 - .../Parse/PFUserAuthenticationDelegate.h | 1 - .../Headers/Private/Parse/PFUserConstants.h | 1 - .../Headers/Private/Parse/PFUserController.h | 1 - .../Private/Parse/PFUserFileCodingLogic.h | 1 - .../Headers/Private/Parse/PFUserPrivate.h | 1 - .../Pods/Headers/Private/Parse/PFUserState.h | 1 - .../Private/Parse/PFUserState_Private.h | 1 - .../Pods/Headers/Private/Parse/PFWeakValue.h | 1 - FoodbLog/Pods/Headers/Private/Parse/Parse.h | 1 - .../Headers/Private/Parse/ParseInternal.h | 1 - .../Pods/Headers/Private/Parse/ParseManager.h | 1 - .../Pods/Headers/Private/Parse/ParseModule.h | 1 - .../Headers/Private/Parse/Parse_Private.h | 1 - .../Headers/Private/ParseUI/PFActionButton.h | 1 - ...FActivityIndicatorCollectionReusableView.h | 1 - .../PFActivityIndicatorTableViewCell.h | 1 - .../Private/ParseUI/PFCollectionViewCell.h | 1 - .../Pods/Headers/Private/ParseUI/PFColor.h | 1 - .../Headers/Private/ParseUI/PFDismissButton.h | 1 - .../Pods/Headers/Private/ParseUI/PFImage.h | 1 - .../Headers/Private/ParseUI/PFImageCache.h | 1 - .../Headers/Private/ParseUI/PFImageView.h | 1 - .../Headers/Private/ParseUI/PFLoadingView.h | 1 - .../Headers/Private/ParseUI/PFLocalization.h | 1 - .../Headers/Private/ParseUI/PFLogInView.h | 1 - .../Private/ParseUI/PFLogInViewController.h | 1 - .../Private/ParseUI/PFLogInView_Private.h | 1 - .../Headers/Private/ParseUI/PFPrimaryButton.h | 1 - .../ParseUI/PFProductTableViewController.h | 1 - .../Private/ParseUI/PFPurchaseTableViewCell.h | 1 - .../ParseUI/PFQueryCollectionViewController.h | 1 - .../ParseUI/PFQueryTableViewController.h | 1 - .../Pods/Headers/Private/ParseUI/PFRect.h | 1 - .../Headers/Private/ParseUI/PFResources.h | 1 - .../Headers/Private/ParseUI/PFSignUpView.h | 1 - .../Private/ParseUI/PFSignUpViewController.h | 1 - .../Headers/Private/ParseUI/PFTableViewCell.h | 1 - .../Headers/Private/ParseUI/PFTextButton.h | 1 - .../Headers/Private/ParseUI/PFTextField.h | 1 - .../Headers/Private/ParseUI/PFUIAlertView.h | 1 - .../Pods/Headers/Private/ParseUI/ParseUI.h | 1 - .../Private/ParseUI/ParseUIConstants.h | 1 - .../SDWebImage/NSData+ImageContentType.h | 1 - .../Headers/Private/SDWebImage/SDImageCache.h | 1 - .../Private/SDWebImage/SDWebImageCompat.h | 1 - .../Private/SDWebImage/SDWebImageDecoder.h | 1 - .../Private/SDWebImage/SDWebImageDownloader.h | 1 - .../SDWebImageDownloaderOperation.h | 1 - .../Private/SDWebImage/SDWebImageManager.h | 1 - .../Private/SDWebImage/SDWebImageOperation.h | 1 - .../Private/SDWebImage/SDWebImagePrefetcher.h | 1 - .../Private/SDWebImage/UIButton+WebCache.h | 1 - .../Headers/Private/SDWebImage/UIImage+GIF.h | 1 - .../Private/SDWebImage/UIImage+MultiFormat.h | 1 - .../UIImageView+HighlightedWebCache.h | 1 - .../Private/SDWebImage/UIImageView+WebCache.h | 1 - .../SDWebImage/UIView+WebCacheOperation.h | 1 - .../Pods/Headers/Private/Unirest/Base64.h | 1 - .../Unirest/HttpRequest/UNIBaseRequest.h | 1 - .../Unirest/HttpRequest/UNIBodyRequest.h | 1 - .../Unirest/HttpRequest/UNISimpleRequest.h | 1 - .../HttpResponse/UNIHTTPBinaryResponse.h | 1 - .../HttpResponse/UNIHTTPJsonResponse.h | 1 - .../Unirest/HttpResponse/UNIHTTPResponse.h | 1 - .../HttpResponse/UNIHTTPStringResponse.h | 1 - .../Unirest/HttpResponse/UNIJsonNode.h | 1 - .../Private/Unirest/UNIHTTPClientHelper.h | 1 - .../Headers/Private/Unirest/UNIHTTPRequest.h | 1 - .../Private/Unirest/UNIHTTPRequestWithBody.h | 1 - .../Pods/Headers/Private/Unirest/UNIRest.h | 1 - .../Private/Unirest/UNIUrlConnection.h | 1 - FoodbLog/Pods/Manifest.lock | 20 +- .../ParseUI/ParseUI/Generated/PFResources.h | 18 +- FoodbLog/Pods/Pods.xcodeproj/project.pbxproj | 7059 +++++++++-------- .../xcschemes/AFNetworking.xcscheme | 60 - .../xcschemes/ChameleonFramework.xcscheme | 60 - .../xcschemes/FlatUIKit.xcscheme | 60 - .../xcschemes/IQKeyboardManager.xcscheme | 60 - .../xcschemes/SDWebImage.xcscheme | 60 - .../xcschemes/AFNetworking.xcscheme} | 34 +- .../xcschemes/Bolts.xcscheme | 34 +- .../xcschemes/ChameleonFramework.xcscheme | 58 + .../xcschemes/FlatUIKit.xcscheme | 58 + .../xcschemes/IQKeyboardManager.xcscheme | 58 + .../xcschemes/Parse.xcscheme | 34 +- .../xcschemes/ParseUI.xcscheme | 34 +- .../xcschemes/Pods-FoodbLog.xcscheme | 58 + .../xcschemes/SDWebImage.xcscheme | 58 + .../xcschemes/Unirest.xcscheme | 34 +- .../xcschemes/xcschememanagement.plist | 55 +- .../{Info.plist => AFNetworking-Info.plist} | 2 +- .../AFNetworking/AFNetworking-prefix.pch | 8 + .../AFNetworking/AFNetworking-umbrella.h | 10 + .../AFNetworking/AFNetworking.debug.xcconfig | 12 + .../AFNetworking.release.xcconfig | 12 + .../AFNetworking/AFNetworking.xcconfig | 5 - .../Bolts/{Info.plist => Bolts-Info.plist} | 2 +- .../Bolts/Bolts-prefix.pch | 8 + .../Bolts/Bolts-umbrella.h | 10 + .../Bolts/Bolts.debug.xcconfig | 11 + .../Bolts/Bolts.release.xcconfig | 11 + .../Target Support Files/Bolts/Bolts.xcconfig | 4 - ...fo.plist => ChameleonFramework-Info.plist} | 2 +- .../ChameleonFramework-prefix.pch | 8 + .../ChameleonFramework-umbrella.h | 14 +- .../ChameleonFramework.debug.xcconfig | 12 + .../ChameleonFramework.release.xcconfig | 12 + .../ChameleonFramework.xcconfig | 5 - .../{Info.plist => FlatUIKit-Info.plist} | 2 +- .../FlatUIKit/FlatUIKit-prefix.pch | 8 + .../FlatUIKit/FlatUIKit-umbrella.h | 10 + .../FlatUIKit/FlatUIKit.debug.xcconfig | 12 + .../FlatUIKit/FlatUIKit.release.xcconfig | 12 + .../FlatUIKit/FlatUIKit.xcconfig | 5 - ...nfo.plist => IQKeyboardManager-Info.plist} | 2 +- .../IQKeyboardManager-prefix.pch | 8 + .../IQKeyboardManager-umbrella.h | 10 + .../IQKeyboardManager.debug.xcconfig | 11 + .../IQKeyboardManager.release.xcconfig | 11 + .../IQKeyboardManager.xcconfig | 4 - .../Parse/{Info.plist => Parse-Info.plist} | 2 +- .../Parse/Parse-prefix.pch | 8 + .../Parse/Parse-umbrella.h | 10 + .../Parse/Parse.debug.xcconfig | 13 + .../Parse/Parse.release.xcconfig | 13 + .../Target Support Files/Parse/Parse.xcconfig | 5 - .../{Info.plist => ParseUI-Info.plist} | 2 +- .../ParseUI/ParseUI-prefix.pch | 8 + .../ParseUI/ParseUI-umbrella.h | 12 +- .../ParseUI/ParseUI.debug.xcconfig | 13 + .../ParseUI/ParseUI.release.xcconfig | 13 + .../ParseUI/ParseUI.xcconfig | 5 - .../Pods-FoodbLog-Info.plist} | 2 +- .../Pods-FoodbLog-acknowledgements.markdown} | 2 +- .../Pods-FoodbLog-acknowledgements.plist} | 22 +- .../Pods-FoodbLog/Pods-FoodbLog-dummy.m | 5 + .../Pods-FoodbLog/Pods-FoodbLog-frameworks.sh | 202 + .../Pods-FoodbLog/Pods-FoodbLog-umbrella.h | 16 + .../Pods-FoodbLog.debug.xcconfig | 12 + .../Pods-FoodbLog/Pods-FoodbLog.modulemap | 6 + .../Pods-FoodbLog.release.xcconfig | 12 + .../Target Support Files/Pods/Pods-dummy.m | 5 - .../Pods/Pods-frameworks.sh | 107 - .../Pods/Pods-resources.sh | 95 - .../Target Support Files/Pods/Pods-umbrella.h | 6 - .../Pods/Pods.debug.xcconfig | 6 - .../Target Support Files/Pods/Pods.modulemap | 6 - .../Pods/Pods.release.xcconfig | 6 - .../{Info.plist => SDWebImage-Info.plist} | 2 +- .../SDWebImage/SDWebImage-prefix.pch | 8 + .../SDWebImage/SDWebImage-umbrella.h | 10 + .../SDWebImage/SDWebImage.debug.xcconfig | 12 + .../SDWebImage/SDWebImage.release.xcconfig | 12 + .../SDWebImage/SDWebImage.xcconfig | 5 - .../{Info.plist => Unirest-Info.plist} | 2 +- .../Unirest/Unirest-prefix.pch | 8 + .../Unirest/Unirest-umbrella.h | 26 +- .../Unirest/Unirest.debug.xcconfig | 11 + .../Unirest/Unirest.release.xcconfig | 11 + .../Unirest/Unirest.xcconfig | 4 - 427 files changed, 4803 insertions(+), 4537 deletions(-) delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperation.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperationManager.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/AFHTTPSessionManager.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/AFNetworkActivityIndicatorManager.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/AFNetworkReachabilityManager.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/AFNetworking.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/AFSecurityPolicy.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/AFURLConnectionOperation.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/AFURLRequestSerialization.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/AFURLResponseSerialization.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/AFURLSessionManager.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/UIActivityIndicatorView+AFNetworking.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/UIAlertView+AFNetworking.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/UIButton+AFNetworking.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/UIImage+AFNetworking.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/UIImageView+AFNetworking.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/UIKit+AFNetworking.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/UIProgressView+AFNetworking.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/UIRefreshControl+AFNetworking.h delete mode 120000 FoodbLog/Pods/Headers/Private/AFNetworking/UIWebView+AFNetworking.h delete mode 120000 FoodbLog/Pods/Headers/Private/Bolts/BFCancellationToken.h delete mode 120000 FoodbLog/Pods/Headers/Private/Bolts/BFCancellationTokenRegistration.h delete mode 120000 FoodbLog/Pods/Headers/Private/Bolts/BFCancellationTokenSource.h delete mode 120000 FoodbLog/Pods/Headers/Private/Bolts/BFDefines.h delete mode 120000 FoodbLog/Pods/Headers/Private/Bolts/BFExecutor.h delete mode 120000 FoodbLog/Pods/Headers/Private/Bolts/BFTask.h delete mode 120000 FoodbLog/Pods/Headers/Private/Bolts/BFTaskCompletionSource.h delete mode 120000 FoodbLog/Pods/Headers/Private/Bolts/Bolts.h delete mode 120000 FoodbLog/Pods/Headers/Private/Bolts/BoltsVersion.h delete mode 120000 FoodbLog/Pods/Headers/Private/ChameleonFramework/Chameleon.h delete mode 120000 FoodbLog/Pods/Headers/Private/ChameleonFramework/ChameleonConstants.h delete mode 120000 FoodbLog/Pods/Headers/Private/ChameleonFramework/ChameleonEnums.h delete mode 120000 FoodbLog/Pods/Headers/Private/ChameleonFramework/ChameleonMacros.h delete mode 120000 FoodbLog/Pods/Headers/Private/ChameleonFramework/Chameleon_.h delete mode 120000 FoodbLog/Pods/Headers/Private/ChameleonFramework/NSArray+Chameleon.h delete mode 120000 FoodbLog/Pods/Headers/Private/ChameleonFramework/UIButton+Chameleon.h delete mode 120000 FoodbLog/Pods/Headers/Private/ChameleonFramework/UIColor+Chameleon.h delete mode 120000 FoodbLog/Pods/Headers/Private/ChameleonFramework/UIColor+ChameleonPrivate.h delete mode 120000 FoodbLog/Pods/Headers/Private/ChameleonFramework/UIImage+ChameleonPrivate.h delete mode 120000 FoodbLog/Pods/Headers/Private/ChameleonFramework/UILabel+Chameleon.h delete mode 120000 FoodbLog/Pods/Headers/Private/ChameleonFramework/UINavigationController+Chameleon.h delete mode 120000 FoodbLog/Pods/Headers/Private/ChameleonFramework/UIView+ChameleonPrivate.h delete mode 120000 FoodbLog/Pods/Headers/Private/ChameleonFramework/UIViewController+Chameleon.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/FUIAlertView.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/FUIButton.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/FUICellBackgroundView.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/FUIPopoverBackgroundView.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/FUISegmentedControl.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/FUISwitch.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/FUITextField.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/FlatUIKit.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/NSString+Icons.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/UIBarButtonItem+FlatUI.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/UIColor+FlatUI.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/UIFont+FlatUI.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/UIImage+FlatUI.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/UINavigationBar+FlatUI.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/UIPopoverController+FlatUI.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/UIProgressView+FlatUI.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/UISlider+FlatUI.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/UIStepper+FlatUI.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/UITabBar+FlatUI.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/UITableViewCell+FlatUI.h delete mode 120000 FoodbLog/Pods/Headers/Private/FlatUIKit/UIToolbar+FlatUI.h delete mode 120000 FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQBarButtonItem.h delete mode 120000 FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQKeyboardManager.h delete mode 120000 FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQKeyboardManagerConstants.h delete mode 120000 FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQKeyboardManagerConstantsInternal.h delete mode 120000 FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQKeyboardReturnKeyHandler.h delete mode 120000 FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQNSArray+Sort.h delete mode 120000 FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQSegmentedNextPrevious.h delete mode 120000 FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQTextView.h delete mode 120000 FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQTitleBarButtonItem.h delete mode 120000 FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQToolbar.h delete mode 120000 FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUITextFieldView+Additions.h delete mode 120000 FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUIView+Hierarchy.h delete mode 120000 FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUIView+IQKeyboardToolbar.h delete mode 120000 FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUIViewController+Additions.h delete mode 120000 FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUIWindow+Hierarchy.h delete mode 120000 FoodbLog/Pods/Headers/Private/IQKeyboardManager/KeyboardManager.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/BFTask+Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFACL.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFACLPrivate.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFACLState.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFACLState_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFAlertView.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFAnalytics.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFAnalyticsController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFAnalyticsUtilities.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFAnalytics_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFAnonymousAuthenticationProvider.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFAnonymousUtils.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFAnonymousUtils_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFApplication.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFAssert.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFAsyncTaskQueue.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFBase64Encoder.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFBaseState.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFCachedQueryController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFCategoryLoader.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFCloud.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFCloudCodeController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFCommandCache.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFCommandCache_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFCommandResult.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFCommandRunning.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFCommandRunningConstants.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFCommandURLRequestConstructor.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFConfig.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFConfigController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFConfig_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFConstants.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFCoreDataProvider.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFCoreManager.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFCurrentConfigController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFCurrentInstallationController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFCurrentObjectControlling.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFCurrentUserController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFDataProvider.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFDateFormatter.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFDecoder.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFDefaultACLController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFDevice.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFEncoder.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFErrorUtilities.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFEventuallyPin.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFEventuallyQueue.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFEventuallyQueue_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFFieldOperation.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFFieldOperationDecoder.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFFile.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFFileController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFFileDataStream.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFFileManager.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFFileStagingController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFFileState.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFFileState_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFFile_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFGeoPoint.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFGeoPointPrivate.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFHTTPRequest.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFHTTPURLRequestConstructor.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFHash.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFInstallation.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFInstallationConstants.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFInstallationController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFInstallationIdentifierStore.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFInstallationIdentifierStore_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFInstallationPrivate.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFInternalUtils.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFJSONSerialization.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFKeyValueCache.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFKeyValueCache_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFKeychainStore.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFLocationManager.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFLogger.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFLogging.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFMacros.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFMultiProcessFileLock.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFMultiProcessFileLockController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFMulticastDelegate.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFMutableACLState.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFMutableFileState.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFMutableObjectState.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFMutablePushState.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFMutableQueryState.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFMutableRelationState.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFMutableUserState.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFNetworkActivityIndicatorManager.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFNetworkCommand.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFNullability.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFObject+Subclass.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFObject.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFObjectBatchController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFObjectConstants.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFObjectController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFObjectController_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFObjectControlling.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFObjectEstimatedData.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFObjectFileCoder.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFObjectFileCodingLogic.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFObjectFilePersistenceController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFObjectLocalIdStore.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFObjectPrivate.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFObjectState.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFObjectState_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFObjectSubclassInfo.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFObjectSubclassingController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFObjectUtilities.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFOfflineObjectController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFOfflineQueryController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFOfflineQueryLogic.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFOfflineStore.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFOperationSet.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFPaymentTransactionObserver.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFPaymentTransactionObserver_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFPin.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFPinningEventuallyQueue.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFPinningObjectStore.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFProduct+Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFProduct.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFProductsRequestHandler.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFPropertyInfo.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFPropertyInfo_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFPropertyInfo_Runtime.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFPurchase.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFPurchaseController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFPush.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFPushChannelsController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFPushController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFPushManager.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFPushPrivate.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFPushState.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFPushState_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFPushUtilities.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFQuery.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFQueryController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFQueryPrivate.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFQueryState.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFQueryState_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFQueryUtilities.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFRESTAnalyticsCommand.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFRESTCloudCommand.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFRESTCommand.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFRESTCommand_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFRESTConfigCommand.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFRESTFileCommand.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFRESTObjectBatchCommand.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFRESTObjectCommand.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFRESTPushCommand.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFRESTQueryCommand.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFRESTSessionCommand.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFRESTUserCommand.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFReachability.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFRelation.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFRelationPrivate.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFRelationState.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFRelationState_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFRole.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFSQLiteDatabase.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFSQLiteDatabaseController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFSQLiteDatabaseResult.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFSQLiteDatabase_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFSQLiteStatement.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFSession.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFSessionController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFSessionUtilities.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFSession_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFSubclassing.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFTaskQueue.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFThreadsafety.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFURLConstructor.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFURLSession.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFURLSessionCommandRunner.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFURLSessionCommandRunner_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFURLSessionDataTaskDelegate.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFURLSessionDataTaskDelegate_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFURLSessionFileDownloadTaskDelegate.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFURLSessionJSONDataTaskDelegate.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFURLSessionUploadTaskDelegate.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFURLSession_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFUser.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFUserAuthenticationController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFUserAuthenticationDelegate.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFUserConstants.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFUserController.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFUserFileCodingLogic.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFUserPrivate.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFUserState.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFUserState_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/PFWeakValue.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/Parse.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/ParseInternal.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/ParseManager.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/ParseModule.h delete mode 120000 FoodbLog/Pods/Headers/Private/Parse/Parse_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFActionButton.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFActivityIndicatorCollectionReusableView.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFActivityIndicatorTableViewCell.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFCollectionViewCell.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFColor.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFDismissButton.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFImage.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFImageCache.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFImageView.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFLoadingView.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFLocalization.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFLogInView.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFLogInViewController.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFLogInView_Private.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFPrimaryButton.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFProductTableViewController.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFPurchaseTableViewCell.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFQueryCollectionViewController.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFQueryTableViewController.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFRect.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFResources.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFSignUpView.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFSignUpViewController.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFTableViewCell.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFTextButton.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFTextField.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/PFUIAlertView.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/ParseUI.h delete mode 120000 FoodbLog/Pods/Headers/Private/ParseUI/ParseUIConstants.h delete mode 120000 FoodbLog/Pods/Headers/Private/SDWebImage/NSData+ImageContentType.h delete mode 120000 FoodbLog/Pods/Headers/Private/SDWebImage/SDImageCache.h delete mode 120000 FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageCompat.h delete mode 120000 FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageDecoder.h delete mode 120000 FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageDownloader.h delete mode 120000 FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageDownloaderOperation.h delete mode 120000 FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageManager.h delete mode 120000 FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageOperation.h delete mode 120000 FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImagePrefetcher.h delete mode 120000 FoodbLog/Pods/Headers/Private/SDWebImage/UIButton+WebCache.h delete mode 120000 FoodbLog/Pods/Headers/Private/SDWebImage/UIImage+GIF.h delete mode 120000 FoodbLog/Pods/Headers/Private/SDWebImage/UIImage+MultiFormat.h delete mode 120000 FoodbLog/Pods/Headers/Private/SDWebImage/UIImageView+HighlightedWebCache.h delete mode 120000 FoodbLog/Pods/Headers/Private/SDWebImage/UIImageView+WebCache.h delete mode 120000 FoodbLog/Pods/Headers/Private/SDWebImage/UIView+WebCacheOperation.h delete mode 120000 FoodbLog/Pods/Headers/Private/Unirest/Base64.h delete mode 120000 FoodbLog/Pods/Headers/Private/Unirest/HttpRequest/UNIBaseRequest.h delete mode 120000 FoodbLog/Pods/Headers/Private/Unirest/HttpRequest/UNIBodyRequest.h delete mode 120000 FoodbLog/Pods/Headers/Private/Unirest/HttpRequest/UNISimpleRequest.h delete mode 120000 FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIHTTPBinaryResponse.h delete mode 120000 FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIHTTPJsonResponse.h delete mode 120000 FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIHTTPResponse.h delete mode 120000 FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIHTTPStringResponse.h delete mode 120000 FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIJsonNode.h delete mode 120000 FoodbLog/Pods/Headers/Private/Unirest/UNIHTTPClientHelper.h delete mode 120000 FoodbLog/Pods/Headers/Private/Unirest/UNIHTTPRequest.h delete mode 120000 FoodbLog/Pods/Headers/Private/Unirest/UNIHTTPRequestWithBody.h delete mode 120000 FoodbLog/Pods/Headers/Private/Unirest/UNIRest.h delete mode 120000 FoodbLog/Pods/Headers/Private/Unirest/UNIUrlConnection.h delete mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/AFNetworking.xcscheme delete mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/ChameleonFramework.xcscheme delete mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/FlatUIKit.xcscheme delete mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/IQKeyboardManager.xcscheme delete mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/SDWebImage.xcscheme rename FoodbLog/Pods/Pods.xcodeproj/xcuserdata/{ayunavogel.xcuserdatad/xcschemes/Pods.xcscheme => esikmalazman.xcuserdatad/xcschemes/AFNetworking.xcscheme} (73%) rename FoodbLog/Pods/Pods.xcodeproj/xcuserdata/{ayunavogel.xcuserdatad => esikmalazman.xcuserdatad}/xcschemes/Bolts.xcscheme (73%) create mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/ChameleonFramework.xcscheme create mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/FlatUIKit.xcscheme create mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/IQKeyboardManager.xcscheme rename FoodbLog/Pods/Pods.xcodeproj/xcuserdata/{ayunavogel.xcuserdatad => esikmalazman.xcuserdatad}/xcschemes/Parse.xcscheme (73%) rename FoodbLog/Pods/Pods.xcodeproj/xcuserdata/{ayunavogel.xcuserdatad => esikmalazman.xcuserdatad}/xcschemes/ParseUI.xcscheme (73%) create mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Pods-FoodbLog.xcscheme create mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/SDWebImage.xcscheme rename FoodbLog/Pods/Pods.xcodeproj/xcuserdata/{ayunavogel.xcuserdatad => esikmalazman.xcuserdatad}/xcschemes/Unirest.xcscheme (73%) rename FoodbLog/Pods/Pods.xcodeproj/xcuserdata/{ayunavogel.xcuserdatad => esikmalazman.xcuserdatad}/xcschemes/xcschememanagement.plist (51%) rename FoodbLog/Pods/Target Support Files/AFNetworking/{Info.plist => AFNetworking-Info.plist} (92%) create mode 100644 FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.debug.xcconfig create mode 100644 FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig rename FoodbLog/Pods/Target Support Files/Bolts/{Info.plist => Bolts-Info.plist} (92%) create mode 100644 FoodbLog/Pods/Target Support Files/Bolts/Bolts.debug.xcconfig create mode 100644 FoodbLog/Pods/Target Support Files/Bolts/Bolts.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/Bolts/Bolts.xcconfig rename FoodbLog/Pods/Target Support Files/ChameleonFramework/{Info.plist => ChameleonFramework-Info.plist} (92%) create mode 100644 FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.debug.xcconfig create mode 100644 FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.xcconfig rename FoodbLog/Pods/Target Support Files/FlatUIKit/{Info.plist => FlatUIKit-Info.plist} (92%) create mode 100644 FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.debug.xcconfig create mode 100644 FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.xcconfig rename FoodbLog/Pods/Target Support Files/IQKeyboardManager/{Info.plist => IQKeyboardManager-Info.plist} (92%) create mode 100644 FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.debug.xcconfig create mode 100644 FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.xcconfig rename FoodbLog/Pods/Target Support Files/Parse/{Info.plist => Parse-Info.plist} (92%) create mode 100644 FoodbLog/Pods/Target Support Files/Parse/Parse.debug.xcconfig create mode 100644 FoodbLog/Pods/Target Support Files/Parse/Parse.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/Parse/Parse.xcconfig rename FoodbLog/Pods/Target Support Files/ParseUI/{Info.plist => ParseUI-Info.plist} (92%) create mode 100644 FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.debug.xcconfig create mode 100644 FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.xcconfig rename FoodbLog/Pods/Target Support Files/{Pods/Info.plist => Pods-FoodbLog/Pods-FoodbLog-Info.plist} (92%) rename FoodbLog/Pods/Target Support Files/{Pods/Pods-acknowledgements.markdown => Pods-FoodbLog/Pods-FoodbLog-acknowledgements.markdown} (99%) rename FoodbLog/Pods/Target Support Files/{Pods/Pods-acknowledgements.plist => Pods-FoodbLog/Pods-FoodbLog-acknowledgements.plist} (95%) create mode 100644 FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-dummy.m create mode 100755 FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-frameworks.sh create mode 100644 FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-umbrella.h create mode 100644 FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.debug.xcconfig create mode 100644 FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.modulemap create mode 100644 FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/Pods/Pods-dummy.m delete mode 100755 FoodbLog/Pods/Target Support Files/Pods/Pods-frameworks.sh delete mode 100755 FoodbLog/Pods/Target Support Files/Pods/Pods-resources.sh delete mode 100644 FoodbLog/Pods/Target Support Files/Pods/Pods-umbrella.h delete mode 100644 FoodbLog/Pods/Target Support Files/Pods/Pods.debug.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/Pods/Pods.modulemap delete mode 100644 FoodbLog/Pods/Target Support Files/Pods/Pods.release.xcconfig rename FoodbLog/Pods/Target Support Files/SDWebImage/{Info.plist => SDWebImage-Info.plist} (92%) create mode 100644 FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig create mode 100644 FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig rename FoodbLog/Pods/Target Support Files/Unirest/{Info.plist => Unirest-Info.plist} (92%) create mode 100644 FoodbLog/Pods/Target Support Files/Unirest/Unirest.debug.xcconfig create mode 100644 FoodbLog/Pods/Target Support Files/Unirest/Unirest.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/Unirest/Unirest.xcconfig diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index 1a08009..4eb8168 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -30,8 +30,8 @@ 50F7C67E1BCB08BA00A969D1 /* FoodFeedCustomCVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F7C67D1BCB08BA00A969D1 /* FoodFeedCustomCVC.m */; }; 5D2957241BD3F8FE0029FD65 /* FoodFeedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D2957231BD3F8FE0029FD65 /* FoodFeedObject.m */; }; 5DAB1BE71BCDD7480088D08D /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DAB1BE61BCDD7480088D08D /* CoreLocation.framework */; }; - 98DA133F1216497FA2A9B319 /* (null) in Frameworks */ = {isa = PBXBuildFile; settings = {ATTRIBUTES = (Weak, ); }; }; - BAB623CC979C537B9A0119AA /* Pods.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 944D074E2107E9536203368A /* Pods.framework */; }; + 98DA133F1216497FA2A9B319 /* BuildFile in Frameworks */ = {isa = PBXBuildFile; settings = {ATTRIBUTES = (Weak, ); }; }; + C3B336E8EF6CFBF4BDE8E605 /* Pods_FoodbLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFC92113A3941C665760DE31 /* Pods_FoodbLog.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -75,7 +75,6 @@ 29F703601BCB923F009B7A82 /* FoodbLogCustomCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodbLogCustomCell.m; sourceTree = ""; }; 29F703A11BD08C5C009B7A82 /* FoodbLogObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodbLogObject.h; sourceTree = ""; }; 29F703A21BD08C5C009B7A82 /* FoodbLogObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodbLogObject.m; sourceTree = ""; }; - 4F3DE19BDA436F961CEABBD8 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; 507F55871BD965B10059C2B3 /* RecipeTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecipeTableViewCell.h; sourceTree = ""; }; 507F55881BD965B10059C2B3 /* RecipeTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecipeTableViewCell.m; sourceTree = ""; }; 50967FC61BD5C8F40029D6AB /* SignPainter-HouseScript.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SignPainter-HouseScript.ttf"; sourceTree = ""; }; @@ -97,8 +96,9 @@ 5D2957221BD3F8FE0029FD65 /* FoodFeedObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodFeedObject.h; sourceTree = ""; }; 5D2957231BD3F8FE0029FD65 /* FoodFeedObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodFeedObject.m; sourceTree = ""; }; 5DAB1BE61BCDD7480088D08D /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; - 944D074E2107E9536203368A /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C4F2B7031D22598F1B3D5DC1 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; + 69A81EF376647BA708026D38 /* Pods-FoodbLog.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FoodbLog.debug.xcconfig"; path = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog.debug.xcconfig"; sourceTree = ""; }; + AFC92113A3941C665760DE31 /* Pods_FoodbLog.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FoodbLog.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FCF5CA5CCBE07821CE7C4EE2 /* Pods-FoodbLog.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FoodbLog.release.xcconfig"; path = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -107,8 +107,8 @@ buildActionMask = 2147483647; files = ( 5DAB1BE71BCDD7480088D08D /* CoreLocation.framework in Frameworks */, - 98DA133F1216497FA2A9B319 /* (null) in Frameworks */, - BAB623CC979C537B9A0119AA /* Pods.framework in Frameworks */, + 98DA133F1216497FA2A9B319 /* BuildFile in Frameworks */, + C3B336E8EF6CFBF4BDE8E605 /* Pods_FoodbLog.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -129,15 +129,6 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 27E047CF39786B40DDD4078C /* Pods */ = { - isa = PBXGroup; - children = ( - 4F3DE19BDA436F961CEABBD8 /* Pods.debug.xcconfig */, - C4F2B7031D22598F1B3D5DC1 /* Pods.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; 294C32BB1C93181400795520 /* Controllers */ = { isa = PBXGroup; children = ( @@ -266,8 +257,8 @@ 29E25D611BCAB8480015A16F /* FoodbLogTests */, 29E25D6C1BCAB8490015A16F /* FoodbLogUITests */, 29E25D461BCAB8480015A16F /* Products */, - 27E047CF39786B40DDD4078C /* Pods */, AEE7B9CF621872427CD71282 /* Frameworks */, + 672B5A81475EC2F3CBACC423 /* Pods */, ); sourceTree = ""; }; @@ -325,11 +316,21 @@ path = FoodbLogUITests; sourceTree = ""; }; + 672B5A81475EC2F3CBACC423 /* Pods */ = { + isa = PBXGroup; + children = ( + 69A81EF376647BA708026D38 /* Pods-FoodbLog.debug.xcconfig */, + FCF5CA5CCBE07821CE7C4EE2 /* Pods-FoodbLog.release.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; AEE7B9CF621872427CD71282 /* Frameworks */ = { isa = PBXGroup; children = ( 5DAB1BE61BCDD7480088D08D /* CoreLocation.framework */, - 944D074E2107E9536203368A /* Pods.framework */, + AFC92113A3941C665760DE31 /* Pods_FoodbLog.framework */, ); name = Frameworks; sourceTree = ""; @@ -341,12 +342,11 @@ isa = PBXNativeTarget; buildConfigurationList = 29E25D721BCAB8490015A16F /* Build configuration list for PBXNativeTarget "FoodbLog" */; buildPhases = ( - F433D663C89494078E8DB4CC /* Check Pods Manifest.lock */, + 5E42E5DB88889C24E0912075 /* [CP] Check Pods Manifest.lock */, 29E25D411BCAB8480015A16F /* Sources */, 29E25D421BCAB8480015A16F /* Frameworks */, 29E25D431BCAB8480015A16F /* Resources */, - 7A4286E4D9F0C79AA4E97E06 /* Copy Pods Resources */, - C92D5850777D7E9EA317FF7C /* Embed Pods Frameworks */, + DD13F1704473FA55C1900AB0 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -467,49 +467,60 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 7A4286E4D9F0C79AA4E97E06 /* Copy Pods Resources */ = { + 5E42E5DB88889C24E0912075 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - ); - name = "Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - C92D5850777D7E9EA317FF7C /* Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( + inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Embed Pods Frameworks"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-FoodbLog-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F433D663C89494078E8DB4CC /* Check Pods Manifest.lock */ = { + DD13F1704473FA55C1900AB0 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - ); - name = "Check Pods Manifest.lock"; + "${PODS_ROOT}/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework", + "${BUILT_PRODUCTS_DIR}/Bolts/Bolts.framework", + "${BUILT_PRODUCTS_DIR}/ChameleonFramework/ChameleonFramework.framework", + "${BUILT_PRODUCTS_DIR}/FlatUIKit/FlatUIKit.framework", + "${BUILT_PRODUCTS_DIR}/IQKeyboardManager/IQKeyboardManager.framework", + "${BUILT_PRODUCTS_DIR}/Parse/Parse.framework", + "${BUILT_PRODUCTS_DIR}/ParseUI/ParseUI.framework", + "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework", + "${BUILT_PRODUCTS_DIR}/Unirest/Unirest.framework", + ); + name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Bolts.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ChameleonFramework.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FlatUIKit.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IQKeyboardManager.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Parse.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ParseUI.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Unirest.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -663,7 +674,7 @@ }; 29E25D731BCAB8490015A16F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4F3DE19BDA436F961CEABBD8 /* Pods.debug.xcconfig */; + baseConfigurationReference = 69A81EF376647BA708026D38 /* Pods-FoodbLog.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; @@ -679,7 +690,7 @@ }; 29E25D741BCAB8490015A16F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C4F2B7031D22598F1B3D5DC1 /* Pods.release.xcconfig */; + baseConfigurationReference = FCF5CA5CCBE07821CE7C4EE2 /* Pods-FoodbLog.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; diff --git a/FoodbLog/Podfile b/FoodbLog/Podfile index d6b1baf..55dbe57 100644 --- a/FoodbLog/Podfile +++ b/FoodbLog/Podfile @@ -1,3 +1,5 @@ +target 'FoodbLog' do + use_frameworks! pod 'ChameleonFramework' @@ -9,3 +11,4 @@ pod 'IQKeyboardManager', '~> 3.3' pod 'FlatUIKit' pod 'Unirest', '~> 1.1.4' +end \ No newline at end of file diff --git a/FoodbLog/Podfile.lock b/FoodbLog/Podfile.lock index 10f2f61..5eed667 100644 --- a/FoodbLog/Podfile.lock +++ b/FoodbLog/Podfile.lock @@ -46,15 +46,29 @@ DEPENDENCIES: - SDWebImage (~> 3.7) - Unirest (~> 1.1.4) +SPEC REPOS: + trunk: + - AFNetworking + - Bolts + - ChameleonFramework + - FlatUIKit + - IQKeyboardManager + - Parse + - ParseUI + - SDWebImage + - Unirest + SPEC CHECKSUMS: - AFNetworking: 8e4e60500beb8bec644cf575beee72990a76d399 + AFNetworking: cd116683fd5dd1a34715a3c9410b6d7b8745d8b9 Bolts: 805a4a87413e49d4a0c2b7d469084cbc46b09342 ChameleonFramework: 5abe69b1f2a6cc79c3c435fcd9d3d855748225ee FlatUIKit: 1b41f0d4952ce8d970d8479ce79df54a960242c4 IQKeyboardManager: d863eb0bca424d1f6dad6bdd1f856af52664add8 Parse: 712efbc476d4f47b0f96b70db7e53101575753aa - ParseUI: 8a22e448c03f825203d8c379c80523517f68baa3 + ParseUI: a5e6d48f2e4fcc61f78c4f31a3252c0e7c0b2d79 SDWebImage: 1d2b1a1efda1ade1b00b6f8498865f8ddedc8a84 Unirest: 5e4d93eaf32463bf619a4ecd3bbc8c32acf21eac -COCOAPODS: 0.39.0 +PODFILE CHECKSUM: 03d171a15bf65394dfd97b11c36be192765b3f6e + +COCOAPODS: 1.11.3 diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/Chameleon_.m b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/Chameleon_.m index 9a72058..a37b1ed 100644 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/Chameleon_.m +++ b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/Chameleon_.m @@ -254,7 +254,7 @@ + (void)customizeButtonWithPrimaryColor:(UIColor *)primaryColor } [[UIButton appearance] setTintColor:contentColor]; -// [[UIButton appearance] setBackgroundColor:primaryColor]; + [[UIButton appearance] setBackgroundColor:primaryColor]; [[UIButton appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:contentColor]; @@ -747,7 +747,7 @@ + (void)customizeToolbarWithPrimaryColor:(UIColor *)primaryColor } [[UIToolbar appearance] setTintColor:contentColor]; - [[UIToolbar appearance] setBarTintColor:[UIColor groupTableViewBackgroundColor]]; + [[UIToolbar appearance] setBarTintColor:primaryColor]; [[UIToolbar appearance] setClipsToBounds:YES]; } diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperation.h b/FoodbLog/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperation.h deleted file mode 120000 index ac762c8..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/AFNetworking/AFHTTPRequestOperation.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperationManager.h b/FoodbLog/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperationManager.h deleted file mode 120000 index 9dcc623..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperationManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/AFHTTPSessionManager.h b/FoodbLog/Pods/Headers/Private/AFNetworking/AFHTTPSessionManager.h deleted file mode 120000 index 56feb9f..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/AFHTTPSessionManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/AFNetworking/AFHTTPSessionManager.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/AFNetworkActivityIndicatorManager.h b/FoodbLog/Pods/Headers/Private/AFNetworking/AFNetworkActivityIndicatorManager.h deleted file mode 120000 index 67519d9..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/AFNetworkActivityIndicatorManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/AFNetworkReachabilityManager.h b/FoodbLog/Pods/Headers/Private/AFNetworking/AFNetworkReachabilityManager.h deleted file mode 120000 index 68fc774..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/AFNetworkReachabilityManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/AFNetworking/AFNetworkReachabilityManager.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/AFNetworking.h b/FoodbLog/Pods/Headers/Private/AFNetworking/AFNetworking.h deleted file mode 120000 index a5a38da..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/AFNetworking/AFNetworking.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/AFSecurityPolicy.h b/FoodbLog/Pods/Headers/Private/AFNetworking/AFSecurityPolicy.h deleted file mode 120000 index fd1322d..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/AFSecurityPolicy.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/AFNetworking/AFSecurityPolicy.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/AFURLConnectionOperation.h b/FoodbLog/Pods/Headers/Private/AFNetworking/AFURLConnectionOperation.h deleted file mode 120000 index d9b35fb..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/AFURLConnectionOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/AFNetworking/AFURLConnectionOperation.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/AFURLRequestSerialization.h b/FoodbLog/Pods/Headers/Private/AFNetworking/AFURLRequestSerialization.h deleted file mode 120000 index ca8209b..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/AFURLRequestSerialization.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/AFNetworking/AFURLRequestSerialization.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/AFURLResponseSerialization.h b/FoodbLog/Pods/Headers/Private/AFNetworking/AFURLResponseSerialization.h deleted file mode 120000 index e36a765..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/AFURLResponseSerialization.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/AFNetworking/AFURLResponseSerialization.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/AFURLSessionManager.h b/FoodbLog/Pods/Headers/Private/AFNetworking/AFURLSessionManager.h deleted file mode 120000 index 835101d..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/AFURLSessionManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/AFNetworking/AFURLSessionManager.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/UIActivityIndicatorView+AFNetworking.h b/FoodbLog/Pods/Headers/Private/AFNetworking/UIActivityIndicatorView+AFNetworking.h deleted file mode 120000 index c534ebf..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/UIActivityIndicatorView+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/UIAlertView+AFNetworking.h b/FoodbLog/Pods/Headers/Private/AFNetworking/UIAlertView+AFNetworking.h deleted file mode 120000 index f992813..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/UIAlertView+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/UIButton+AFNetworking.h b/FoodbLog/Pods/Headers/Private/AFNetworking/UIButton+AFNetworking.h deleted file mode 120000 index 8f2e221..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/UIButton+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/UIImage+AFNetworking.h b/FoodbLog/Pods/Headers/Private/AFNetworking/UIImage+AFNetworking.h deleted file mode 120000 index 74f6649..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/UIImage+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/UIImageView+AFNetworking.h b/FoodbLog/Pods/Headers/Private/AFNetworking/UIImageView+AFNetworking.h deleted file mode 120000 index a95d673..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/UIImageView+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/UIKit+AFNetworking.h b/FoodbLog/Pods/Headers/Private/AFNetworking/UIKit+AFNetworking.h deleted file mode 120000 index 95017cc..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/UIKit+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/UIProgressView+AFNetworking.h b/FoodbLog/Pods/Headers/Private/AFNetworking/UIProgressView+AFNetworking.h deleted file mode 120000 index 730b167..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/UIProgressView+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/UIRefreshControl+AFNetworking.h b/FoodbLog/Pods/Headers/Private/AFNetworking/UIRefreshControl+AFNetworking.h deleted file mode 120000 index 8efd826..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/UIRefreshControl+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/AFNetworking/UIWebView+AFNetworking.h b/FoodbLog/Pods/Headers/Private/AFNetworking/UIWebView+AFNetworking.h deleted file mode 120000 index c8df6ef..0000000 --- a/FoodbLog/Pods/Headers/Private/AFNetworking/UIWebView+AFNetworking.h +++ /dev/null @@ -1 +0,0 @@ -../../../AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Bolts/BFCancellationToken.h b/FoodbLog/Pods/Headers/Private/Bolts/BFCancellationToken.h deleted file mode 120000 index 0b69486..0000000 --- a/FoodbLog/Pods/Headers/Private/Bolts/BFCancellationToken.h +++ /dev/null @@ -1 +0,0 @@ -../../../Bolts/Bolts/Common/BFCancellationToken.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Bolts/BFCancellationTokenRegistration.h b/FoodbLog/Pods/Headers/Private/Bolts/BFCancellationTokenRegistration.h deleted file mode 120000 index c587ca7..0000000 --- a/FoodbLog/Pods/Headers/Private/Bolts/BFCancellationTokenRegistration.h +++ /dev/null @@ -1 +0,0 @@ -../../../Bolts/Bolts/Common/BFCancellationTokenRegistration.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Bolts/BFCancellationTokenSource.h b/FoodbLog/Pods/Headers/Private/Bolts/BFCancellationTokenSource.h deleted file mode 120000 index d3d5985..0000000 --- a/FoodbLog/Pods/Headers/Private/Bolts/BFCancellationTokenSource.h +++ /dev/null @@ -1 +0,0 @@ -../../../Bolts/Bolts/Common/BFCancellationTokenSource.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Bolts/BFDefines.h b/FoodbLog/Pods/Headers/Private/Bolts/BFDefines.h deleted file mode 120000 index 5df18ff..0000000 --- a/FoodbLog/Pods/Headers/Private/Bolts/BFDefines.h +++ /dev/null @@ -1 +0,0 @@ -../../../Bolts/Bolts/Common/BFDefines.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Bolts/BFExecutor.h b/FoodbLog/Pods/Headers/Private/Bolts/BFExecutor.h deleted file mode 120000 index c071e8c..0000000 --- a/FoodbLog/Pods/Headers/Private/Bolts/BFExecutor.h +++ /dev/null @@ -1 +0,0 @@ -../../../Bolts/Bolts/Common/BFExecutor.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Bolts/BFTask.h b/FoodbLog/Pods/Headers/Private/Bolts/BFTask.h deleted file mode 120000 index 5468334..0000000 --- a/FoodbLog/Pods/Headers/Private/Bolts/BFTask.h +++ /dev/null @@ -1 +0,0 @@ -../../../Bolts/Bolts/Common/BFTask.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Bolts/BFTaskCompletionSource.h b/FoodbLog/Pods/Headers/Private/Bolts/BFTaskCompletionSource.h deleted file mode 120000 index c74760f..0000000 --- a/FoodbLog/Pods/Headers/Private/Bolts/BFTaskCompletionSource.h +++ /dev/null @@ -1 +0,0 @@ -../../../Bolts/Bolts/Common/BFTaskCompletionSource.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Bolts/Bolts.h b/FoodbLog/Pods/Headers/Private/Bolts/Bolts.h deleted file mode 120000 index 146ac6e..0000000 --- a/FoodbLog/Pods/Headers/Private/Bolts/Bolts.h +++ /dev/null @@ -1 +0,0 @@ -../../../Bolts/Bolts/Common/Bolts.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Bolts/BoltsVersion.h b/FoodbLog/Pods/Headers/Private/Bolts/BoltsVersion.h deleted file mode 120000 index 0fa0e2d..0000000 --- a/FoodbLog/Pods/Headers/Private/Bolts/BoltsVersion.h +++ /dev/null @@ -1 +0,0 @@ -../../../Bolts/Bolts/Common/BoltsVersion.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ChameleonFramework/Chameleon.h b/FoodbLog/Pods/Headers/Private/ChameleonFramework/Chameleon.h deleted file mode 120000 index f0cd1b4..0000000 --- a/FoodbLog/Pods/Headers/Private/ChameleonFramework/Chameleon.h +++ /dev/null @@ -1 +0,0 @@ -../../../ChameleonFramework/Pod/Classes/Objective-C/Chameleon.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ChameleonFramework/ChameleonConstants.h b/FoodbLog/Pods/Headers/Private/ChameleonFramework/ChameleonConstants.h deleted file mode 120000 index 51aa580..0000000 --- a/FoodbLog/Pods/Headers/Private/ChameleonFramework/ChameleonConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../ChameleonFramework/Pod/Classes/Objective-C/ChameleonConstants.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ChameleonFramework/ChameleonEnums.h b/FoodbLog/Pods/Headers/Private/ChameleonFramework/ChameleonEnums.h deleted file mode 120000 index 8dae61b..0000000 --- a/FoodbLog/Pods/Headers/Private/ChameleonFramework/ChameleonEnums.h +++ /dev/null @@ -1 +0,0 @@ -../../../ChameleonFramework/Pod/Classes/Objective-C/ChameleonEnums.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ChameleonFramework/ChameleonMacros.h b/FoodbLog/Pods/Headers/Private/ChameleonFramework/ChameleonMacros.h deleted file mode 120000 index f8f6295..0000000 --- a/FoodbLog/Pods/Headers/Private/ChameleonFramework/ChameleonMacros.h +++ /dev/null @@ -1 +0,0 @@ -../../../ChameleonFramework/Pod/Classes/Objective-C/ChameleonMacros.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ChameleonFramework/Chameleon_.h b/FoodbLog/Pods/Headers/Private/ChameleonFramework/Chameleon_.h deleted file mode 120000 index 79c30ab..0000000 --- a/FoodbLog/Pods/Headers/Private/ChameleonFramework/Chameleon_.h +++ /dev/null @@ -1 +0,0 @@ -../../../ChameleonFramework/Pod/Classes/Objective-C/Chameleon_.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ChameleonFramework/NSArray+Chameleon.h b/FoodbLog/Pods/Headers/Private/ChameleonFramework/NSArray+Chameleon.h deleted file mode 120000 index 7ff10d4..0000000 --- a/FoodbLog/Pods/Headers/Private/ChameleonFramework/NSArray+Chameleon.h +++ /dev/null @@ -1 +0,0 @@ -../../../ChameleonFramework/Pod/Classes/Objective-C/NSArray+Chameleon.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ChameleonFramework/UIButton+Chameleon.h b/FoodbLog/Pods/Headers/Private/ChameleonFramework/UIButton+Chameleon.h deleted file mode 120000 index 0fac48a..0000000 --- a/FoodbLog/Pods/Headers/Private/ChameleonFramework/UIButton+Chameleon.h +++ /dev/null @@ -1 +0,0 @@ -../../../ChameleonFramework/Pod/Classes/Objective-C/UIButton+Chameleon.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ChameleonFramework/UIColor+Chameleon.h b/FoodbLog/Pods/Headers/Private/ChameleonFramework/UIColor+Chameleon.h deleted file mode 120000 index 05e4379..0000000 --- a/FoodbLog/Pods/Headers/Private/ChameleonFramework/UIColor+Chameleon.h +++ /dev/null @@ -1 +0,0 @@ -../../../ChameleonFramework/Pod/Classes/Objective-C/UIColor+Chameleon.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ChameleonFramework/UIColor+ChameleonPrivate.h b/FoodbLog/Pods/Headers/Private/ChameleonFramework/UIColor+ChameleonPrivate.h deleted file mode 120000 index 9b926b3..0000000 --- a/FoodbLog/Pods/Headers/Private/ChameleonFramework/UIColor+ChameleonPrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../ChameleonFramework/Pod/Classes/Objective-C/UIColor+ChameleonPrivate.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ChameleonFramework/UIImage+ChameleonPrivate.h b/FoodbLog/Pods/Headers/Private/ChameleonFramework/UIImage+ChameleonPrivate.h deleted file mode 120000 index c93db3d..0000000 --- a/FoodbLog/Pods/Headers/Private/ChameleonFramework/UIImage+ChameleonPrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../ChameleonFramework/Pod/Classes/Objective-C/UIImage+ChameleonPrivate.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ChameleonFramework/UILabel+Chameleon.h b/FoodbLog/Pods/Headers/Private/ChameleonFramework/UILabel+Chameleon.h deleted file mode 120000 index 4350e1e..0000000 --- a/FoodbLog/Pods/Headers/Private/ChameleonFramework/UILabel+Chameleon.h +++ /dev/null @@ -1 +0,0 @@ -../../../ChameleonFramework/Pod/Classes/Objective-C/UILabel+Chameleon.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ChameleonFramework/UINavigationController+Chameleon.h b/FoodbLog/Pods/Headers/Private/ChameleonFramework/UINavigationController+Chameleon.h deleted file mode 120000 index 2052867..0000000 --- a/FoodbLog/Pods/Headers/Private/ChameleonFramework/UINavigationController+Chameleon.h +++ /dev/null @@ -1 +0,0 @@ -../../../ChameleonFramework/Pod/Classes/Objective-C/UINavigationController+Chameleon.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ChameleonFramework/UIView+ChameleonPrivate.h b/FoodbLog/Pods/Headers/Private/ChameleonFramework/UIView+ChameleonPrivate.h deleted file mode 120000 index 9713ec0..0000000 --- a/FoodbLog/Pods/Headers/Private/ChameleonFramework/UIView+ChameleonPrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../ChameleonFramework/Pod/Classes/Objective-C/UIView+ChameleonPrivate.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ChameleonFramework/UIViewController+Chameleon.h b/FoodbLog/Pods/Headers/Private/ChameleonFramework/UIViewController+Chameleon.h deleted file mode 120000 index be31ef4..0000000 --- a/FoodbLog/Pods/Headers/Private/ChameleonFramework/UIViewController+Chameleon.h +++ /dev/null @@ -1 +0,0 @@ -../../../ChameleonFramework/Pod/Classes/Objective-C/UIViewController+Chameleon.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/FUIAlertView.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/FUIAlertView.h deleted file mode 120000 index 55fde89..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/FUIAlertView.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/FUIAlertView.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/FUIButton.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/FUIButton.h deleted file mode 120000 index a51b9dd..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/FUIButton.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/FUIButton.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/FUICellBackgroundView.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/FUICellBackgroundView.h deleted file mode 120000 index ea25fe4..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/FUICellBackgroundView.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/FUICellBackgroundView.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/FUIPopoverBackgroundView.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/FUIPopoverBackgroundView.h deleted file mode 120000 index f3da45d..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/FUIPopoverBackgroundView.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/FUIPopoverBackgroundView.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/FUISegmentedControl.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/FUISegmentedControl.h deleted file mode 120000 index e6d9670..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/FUISegmentedControl.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/FUISegmentedControl.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/FUISwitch.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/FUISwitch.h deleted file mode 120000 index c2f381b..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/FUISwitch.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/FUISwitch.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/FUITextField.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/FUITextField.h deleted file mode 120000 index 1c9026f..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/FUITextField.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/FUITextField.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/FlatUIKit.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/FlatUIKit.h deleted file mode 120000 index 2065349..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/FlatUIKit.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/FlatUIKit.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/NSString+Icons.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/NSString+Icons.h deleted file mode 120000 index cfe25dd..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/NSString+Icons.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/NSString+Icons.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/UIBarButtonItem+FlatUI.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/UIBarButtonItem+FlatUI.h deleted file mode 120000 index 5b1c315..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/UIBarButtonItem+FlatUI.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/UIBarButtonItem+FlatUI.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/UIColor+FlatUI.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/UIColor+FlatUI.h deleted file mode 120000 index a44aeb0..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/UIColor+FlatUI.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/UIColor+FlatUI.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/UIFont+FlatUI.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/UIFont+FlatUI.h deleted file mode 120000 index d6de6f5..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/UIFont+FlatUI.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/UIFont+FlatUI.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/UIImage+FlatUI.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/UIImage+FlatUI.h deleted file mode 120000 index 772c1a2..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/UIImage+FlatUI.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/UIImage+FlatUI.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/UINavigationBar+FlatUI.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/UINavigationBar+FlatUI.h deleted file mode 120000 index 1f3b20a..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/UINavigationBar+FlatUI.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/UINavigationBar+FlatUI.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/UIPopoverController+FlatUI.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/UIPopoverController+FlatUI.h deleted file mode 120000 index 0e15c01..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/UIPopoverController+FlatUI.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/UIPopoverController+FlatUI.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/UIProgressView+FlatUI.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/UIProgressView+FlatUI.h deleted file mode 120000 index 41a8eb1..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/UIProgressView+FlatUI.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/UIProgressView+FlatUI.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/UISlider+FlatUI.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/UISlider+FlatUI.h deleted file mode 120000 index 6c212a0..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/UISlider+FlatUI.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/UISlider+FlatUI.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/UIStepper+FlatUI.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/UIStepper+FlatUI.h deleted file mode 120000 index 010f0fd..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/UIStepper+FlatUI.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/UIStepper+FlatUI.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/UITabBar+FlatUI.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/UITabBar+FlatUI.h deleted file mode 120000 index 0ec2c0f..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/UITabBar+FlatUI.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/UITabBar+FlatUI.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/UITableViewCell+FlatUI.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/UITableViewCell+FlatUI.h deleted file mode 120000 index 81999ea..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/UITableViewCell+FlatUI.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/UITableViewCell+FlatUI.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/FlatUIKit/UIToolbar+FlatUI.h b/FoodbLog/Pods/Headers/Private/FlatUIKit/UIToolbar+FlatUI.h deleted file mode 120000 index e8a7eb9..0000000 --- a/FoodbLog/Pods/Headers/Private/FlatUIKit/UIToolbar+FlatUI.h +++ /dev/null @@ -1 +0,0 @@ -../../../FlatUIKit/Classes/ios/UIToolbar+FlatUI.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQBarButtonItem.h b/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQBarButtonItem.h deleted file mode 120000 index 268d46b..0000000 --- a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQBarButtonItem.h +++ /dev/null @@ -1 +0,0 @@ -../../../IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQBarButtonItem.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQKeyboardManager.h b/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQKeyboardManager.h deleted file mode 120000 index 1135900..0000000 --- a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQKeyboardManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../IQKeyboardManager/IQKeyBoardManager/IQKeyboardManager.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQKeyboardManagerConstants.h b/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQKeyboardManagerConstants.h deleted file mode 120000 index 4a3fcf2..0000000 --- a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQKeyboardManagerConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../IQKeyboardManager/IQKeyBoardManager/Constants/IQKeyboardManagerConstants.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQKeyboardManagerConstantsInternal.h b/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQKeyboardManagerConstantsInternal.h deleted file mode 120000 index 0eb9c1d..0000000 --- a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQKeyboardManagerConstantsInternal.h +++ /dev/null @@ -1 +0,0 @@ -../../../IQKeyboardManager/IQKeyBoardManager/Constants/IQKeyboardManagerConstantsInternal.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQKeyboardReturnKeyHandler.h b/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQKeyboardReturnKeyHandler.h deleted file mode 120000 index 0b93ce9..0000000 --- a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQKeyboardReturnKeyHandler.h +++ /dev/null @@ -1 +0,0 @@ -../../../IQKeyboardManager/IQKeyBoardManager/IQKeyboardReturnKeyHandler.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQNSArray+Sort.h b/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQNSArray+Sort.h deleted file mode 120000 index 895e37a..0000000 --- a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQNSArray+Sort.h +++ /dev/null @@ -1 +0,0 @@ -../../../IQKeyboardManager/IQKeyBoardManager/Categories/IQNSArray+Sort.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQSegmentedNextPrevious.h b/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQSegmentedNextPrevious.h deleted file mode 120000 index 3f584df..0000000 --- a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQSegmentedNextPrevious.h +++ /dev/null @@ -1 +0,0 @@ -../../../IQKeyboardManager/IQKeyBoardManager/IQSegmentedNextPrevious/IQSegmentedNextPrevious.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQTextView.h b/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQTextView.h deleted file mode 120000 index 699d4bc..0000000 --- a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQTextView.h +++ /dev/null @@ -1 +0,0 @@ -../../../IQKeyboardManager/IQKeyBoardManager/IQTextView/IQTextView.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQTitleBarButtonItem.h b/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQTitleBarButtonItem.h deleted file mode 120000 index 8b266c6..0000000 --- a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQTitleBarButtonItem.h +++ /dev/null @@ -1 +0,0 @@ -../../../IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQToolbar.h b/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQToolbar.h deleted file mode 120000 index 54f3cd1..0000000 --- a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQToolbar.h +++ /dev/null @@ -1 +0,0 @@ -../../../IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQToolbar.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUITextFieldView+Additions.h b/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUITextFieldView+Additions.h deleted file mode 120000 index a01000c..0000000 --- a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUITextFieldView+Additions.h +++ /dev/null @@ -1 +0,0 @@ -../../../IQKeyboardManager/IQKeyBoardManager/Categories/IQUITextFieldView+Additions.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUIView+Hierarchy.h b/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUIView+Hierarchy.h deleted file mode 120000 index c5e317e..0000000 --- a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUIView+Hierarchy.h +++ /dev/null @@ -1 +0,0 @@ -../../../IQKeyboardManager/IQKeyBoardManager/Categories/IQUIView+Hierarchy.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUIView+IQKeyboardToolbar.h b/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUIView+IQKeyboardToolbar.h deleted file mode 120000 index 98c5d0a..0000000 --- a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUIView+IQKeyboardToolbar.h +++ /dev/null @@ -1 +0,0 @@ -../../../IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUIViewController+Additions.h b/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUIViewController+Additions.h deleted file mode 120000 index e549a6f..0000000 --- a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUIViewController+Additions.h +++ /dev/null @@ -1 +0,0 @@ -../../../IQKeyboardManager/IQKeyBoardManager/Categories/IQUIViewController+Additions.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUIWindow+Hierarchy.h b/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUIWindow+Hierarchy.h deleted file mode 120000 index c7e0f1a..0000000 --- a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/IQUIWindow+Hierarchy.h +++ /dev/null @@ -1 +0,0 @@ -../../../IQKeyboardManager/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/KeyboardManager.h b/FoodbLog/Pods/Headers/Private/IQKeyboardManager/KeyboardManager.h deleted file mode 120000 index a1adb35..0000000 --- a/FoodbLog/Pods/Headers/Private/IQKeyboardManager/KeyboardManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../IQKeyboardManager/IQKeyBoardManager/KeyboardManager.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/BFTask+Private.h b/FoodbLog/Pods/Headers/Private/Parse/BFTask+Private.h deleted file mode 120000 index 10159b2..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/BFTask+Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/BFTask+Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFACL.h b/FoodbLog/Pods/Headers/Private/Parse/PFACL.h deleted file mode 120000 index 7c3c14f..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFACL.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFACL.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFACLPrivate.h b/FoodbLog/Pods/Headers/Private/Parse/PFACLPrivate.h deleted file mode 120000 index 2879692..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFACLPrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/ACL/PFACLPrivate.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFACLState.h b/FoodbLog/Pods/Headers/Private/Parse/PFACLState.h deleted file mode 120000 index d3b8d9b..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFACLState.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/ACL/State/PFACLState.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFACLState_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFACLState_Private.h deleted file mode 120000 index d9dd502..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFACLState_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/ACL/State/PFACLState_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFAlertView.h b/FoodbLog/Pods/Headers/Private/Parse/PFAlertView.h deleted file mode 120000 index 85018b0..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFAlertView.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFAlertView.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFAnalytics.h b/FoodbLog/Pods/Headers/Private/Parse/PFAnalytics.h deleted file mode 120000 index 7751f45..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFAnalytics.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFAnalytics.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFAnalyticsController.h b/FoodbLog/Pods/Headers/Private/Parse/PFAnalyticsController.h deleted file mode 120000 index e1fc43f..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFAnalyticsController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Analytics/Controller/PFAnalyticsController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFAnalyticsUtilities.h b/FoodbLog/Pods/Headers/Private/Parse/PFAnalyticsUtilities.h deleted file mode 120000 index b383f8f..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFAnalyticsUtilities.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFAnalytics_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFAnalytics_Private.h deleted file mode 120000 index defa006..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFAnalytics_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Analytics/PFAnalytics_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFAnonymousAuthenticationProvider.h b/FoodbLog/Pods/Headers/Private/Parse/PFAnonymousAuthenticationProvider.h deleted file mode 120000 index 14cb5b3..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFAnonymousAuthenticationProvider.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFAnonymousUtils.h b/FoodbLog/Pods/Headers/Private/Parse/PFAnonymousUtils.h deleted file mode 120000 index 7b9b437..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFAnonymousUtils.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFAnonymousUtils.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFAnonymousUtils_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFAnonymousUtils_Private.h deleted file mode 120000 index 8b4fcef..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFAnonymousUtils_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFApplication.h b/FoodbLog/Pods/Headers/Private/Parse/PFApplication.h deleted file mode 120000 index b0d8ee6..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFApplication.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFApplication.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFAssert.h b/FoodbLog/Pods/Headers/Private/Parse/PFAssert.h deleted file mode 120000 index 370352c..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFAssert.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFAssert.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFAsyncTaskQueue.h b/FoodbLog/Pods/Headers/Private/Parse/PFAsyncTaskQueue.h deleted file mode 120000 index 87cce9d..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFAsyncTaskQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFAsyncTaskQueue.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFBase64Encoder.h b/FoodbLog/Pods/Headers/Private/Parse/PFBase64Encoder.h deleted file mode 120000 index adae939..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFBase64Encoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFBase64Encoder.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFBaseState.h b/FoodbLog/Pods/Headers/Private/Parse/PFBaseState.h deleted file mode 120000 index 6c1b489..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFBaseState.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFBaseState.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFCachedQueryController.h b/FoodbLog/Pods/Headers/Private/Parse/PFCachedQueryController.h deleted file mode 120000 index 0712e6e..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFCachedQueryController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Query/Controller/PFCachedQueryController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFCategoryLoader.h b/FoodbLog/Pods/Headers/Private/Parse/PFCategoryLoader.h deleted file mode 120000 index 7dedc13..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFCategoryLoader.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFCategoryLoader.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFCloud.h b/FoodbLog/Pods/Headers/Private/Parse/PFCloud.h deleted file mode 120000 index 4070bb1..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFCloud.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFCloud.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFCloudCodeController.h b/FoodbLog/Pods/Headers/Private/Parse/PFCloudCodeController.h deleted file mode 120000 index 38ca262..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFCloudCodeController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/CloudCode/PFCloudCodeController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFCommandCache.h b/FoodbLog/Pods/Headers/Private/Parse/PFCommandCache.h deleted file mode 120000 index b9d3183..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFCommandCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFCommandCache.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFCommandCache_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFCommandCache_Private.h deleted file mode 120000 index aafb22b..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFCommandCache_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFCommandCache_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFCommandResult.h b/FoodbLog/Pods/Headers/Private/Parse/PFCommandResult.h deleted file mode 120000 index 2f1114a..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFCommandResult.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFCommandResult.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFCommandRunning.h b/FoodbLog/Pods/Headers/Private/Parse/PFCommandRunning.h deleted file mode 120000 index f2d7c78..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFCommandRunning.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunning.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFCommandRunningConstants.h b/FoodbLog/Pods/Headers/Private/Parse/PFCommandRunningConstants.h deleted file mode 120000 index 3a73786..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFCommandRunningConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFCommandURLRequestConstructor.h b/FoodbLog/Pods/Headers/Private/Parse/PFCommandURLRequestConstructor.h deleted file mode 120000 index bb68366..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFCommandURLRequestConstructor.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFConfig.h b/FoodbLog/Pods/Headers/Private/Parse/PFConfig.h deleted file mode 120000 index 919b834..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFConfig.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFConfig.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFConfigController.h b/FoodbLog/Pods/Headers/Private/Parse/PFConfigController.h deleted file mode 120000 index 354d1e5..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFConfigController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Config/Controller/PFConfigController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFConfig_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFConfig_Private.h deleted file mode 120000 index 64be7b4..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFConfig_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Config/PFConfig_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFConstants.h b/FoodbLog/Pods/Headers/Private/Parse/PFConstants.h deleted file mode 120000 index 3b96186..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFConstants.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFCoreDataProvider.h b/FoodbLog/Pods/Headers/Private/Parse/PFCoreDataProvider.h deleted file mode 120000 index 738cd66..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFCoreDataProvider.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFCoreDataProvider.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFCoreManager.h b/FoodbLog/Pods/Headers/Private/Parse/PFCoreManager.h deleted file mode 120000 index c856497..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFCoreManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFCoreManager.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFCurrentConfigController.h b/FoodbLog/Pods/Headers/Private/Parse/PFCurrentConfigController.h deleted file mode 120000 index aa2f13d..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFCurrentConfigController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Config/Controller/PFCurrentConfigController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFCurrentInstallationController.h b/FoodbLog/Pods/Headers/Private/Parse/PFCurrentInstallationController.h deleted file mode 120000 index c935649..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFCurrentInstallationController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFCurrentObjectControlling.h b/FoodbLog/Pods/Headers/Private/Parse/PFCurrentObjectControlling.h deleted file mode 120000 index 0d5e144..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFCurrentObjectControlling.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFCurrentUserController.h b/FoodbLog/Pods/Headers/Private/Parse/PFCurrentUserController.h deleted file mode 120000 index 4c70eaa..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFCurrentUserController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/User/CurrentUserController/PFCurrentUserController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFDataProvider.h b/FoodbLog/Pods/Headers/Private/Parse/PFDataProvider.h deleted file mode 120000 index 52db407..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFDataProvider.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFDataProvider.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFDateFormatter.h b/FoodbLog/Pods/Headers/Private/Parse/PFDateFormatter.h deleted file mode 120000 index 14af49b..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFDateFormatter.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFDateFormatter.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFDecoder.h b/FoodbLog/Pods/Headers/Private/Parse/PFDecoder.h deleted file mode 120000 index e8ca6e2..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFDecoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFDecoder.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFDefaultACLController.h b/FoodbLog/Pods/Headers/Private/Parse/PFDefaultACLController.h deleted file mode 120000 index 28ee2d0..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFDefaultACLController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFDevice.h b/FoodbLog/Pods/Headers/Private/Parse/PFDevice.h deleted file mode 120000 index 45f3174..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFDevice.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFDevice.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFEncoder.h b/FoodbLog/Pods/Headers/Private/Parse/PFEncoder.h deleted file mode 120000 index ccfe72c..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFEncoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFEncoder.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFErrorUtilities.h b/FoodbLog/Pods/Headers/Private/Parse/PFErrorUtilities.h deleted file mode 120000 index 6cc92b4..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFErrorUtilities.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFErrorUtilities.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFEventuallyPin.h b/FoodbLog/Pods/Headers/Private/Parse/PFEventuallyPin.h deleted file mode 120000 index d7914fd..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFEventuallyPin.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFEventuallyPin.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFEventuallyQueue.h b/FoodbLog/Pods/Headers/Private/Parse/PFEventuallyQueue.h deleted file mode 120000 index 93c4119..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFEventuallyQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFEventuallyQueue.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFEventuallyQueue_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFEventuallyQueue_Private.h deleted file mode 120000 index b7d09c4..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFEventuallyQueue_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFEventuallyQueue_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFFieldOperation.h b/FoodbLog/Pods/Headers/Private/Parse/PFFieldOperation.h deleted file mode 120000 index f0a3bab..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFFieldOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/FieldOperation/PFFieldOperation.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFFieldOperationDecoder.h b/FoodbLog/Pods/Headers/Private/Parse/PFFieldOperationDecoder.h deleted file mode 120000 index 2cd60fe..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFFieldOperationDecoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/FieldOperation/PFFieldOperationDecoder.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFFile.h b/FoodbLog/Pods/Headers/Private/Parse/PFFile.h deleted file mode 120000 index 05ca154..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFFile.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFFile.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFFileController.h b/FoodbLog/Pods/Headers/Private/Parse/PFFileController.h deleted file mode 120000 index 8c0f296..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFFileController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/File/Controller/PFFileController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFFileDataStream.h b/FoodbLog/Pods/Headers/Private/Parse/PFFileDataStream.h deleted file mode 120000 index 54cbb17..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFFileDataStream.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/File/FileDataStream/PFFileDataStream.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFFileManager.h b/FoodbLog/Pods/Headers/Private/Parse/PFFileManager.h deleted file mode 120000 index 09a9757..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFFileManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFFileManager.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFFileStagingController.h b/FoodbLog/Pods/Headers/Private/Parse/PFFileStagingController.h deleted file mode 120000 index af38d1e..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFFileStagingController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/File/Controller/PFFileStagingController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFFileState.h b/FoodbLog/Pods/Headers/Private/Parse/PFFileState.h deleted file mode 120000 index f70310a..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFFileState.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/File/State/PFFileState.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFFileState_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFFileState_Private.h deleted file mode 120000 index fd636fa..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFFileState_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/File/State/PFFileState_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFFile_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFFile_Private.h deleted file mode 120000 index 53b4a61..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFFile_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/File/PFFile_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFGeoPoint.h b/FoodbLog/Pods/Headers/Private/Parse/PFGeoPoint.h deleted file mode 120000 index e9079fe..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFGeoPoint.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFGeoPoint.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFGeoPointPrivate.h b/FoodbLog/Pods/Headers/Private/Parse/PFGeoPointPrivate.h deleted file mode 120000 index f151ab9..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFGeoPointPrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFGeoPointPrivate.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFHTTPRequest.h b/FoodbLog/Pods/Headers/Private/Parse/PFHTTPRequest.h deleted file mode 120000 index 578b9f2..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFHTTPRequest.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/HTTPRequest/PFHTTPRequest.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFHTTPURLRequestConstructor.h b/FoodbLog/Pods/Headers/Private/Parse/PFHTTPURLRequestConstructor.h deleted file mode 120000 index f2e4304..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFHTTPURLRequestConstructor.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFHash.h b/FoodbLog/Pods/Headers/Private/Parse/PFHash.h deleted file mode 120000 index ecea29b..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFHash.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFHash.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFInstallation.h b/FoodbLog/Pods/Headers/Private/Parse/PFInstallation.h deleted file mode 120000 index 1f2d37a..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFInstallation.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFInstallation.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFInstallationConstants.h b/FoodbLog/Pods/Headers/Private/Parse/PFInstallationConstants.h deleted file mode 120000 index a4ca8a6..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFInstallationConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Installation/Constants/PFInstallationConstants.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFInstallationController.h b/FoodbLog/Pods/Headers/Private/Parse/PFInstallationController.h deleted file mode 120000 index 530f6c2..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFInstallationController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Installation/Controller/PFInstallationController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFInstallationIdentifierStore.h b/FoodbLog/Pods/Headers/Private/Parse/PFInstallationIdentifierStore.h deleted file mode 120000 index 827fb6c..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFInstallationIdentifierStore.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFInstallationIdentifierStore_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFInstallationIdentifierStore_Private.h deleted file mode 120000 index acff66f..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFInstallationIdentifierStore_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFInstallationPrivate.h b/FoodbLog/Pods/Headers/Private/Parse/PFInstallationPrivate.h deleted file mode 120000 index fc6ac83..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFInstallationPrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Installation/PFInstallationPrivate.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFInternalUtils.h b/FoodbLog/Pods/Headers/Private/Parse/PFInternalUtils.h deleted file mode 120000 index a0e19bf..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFInternalUtils.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFInternalUtils.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFJSONSerialization.h b/FoodbLog/Pods/Headers/Private/Parse/PFJSONSerialization.h deleted file mode 120000 index 786edd6..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFJSONSerialization.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFJSONSerialization.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFKeyValueCache.h b/FoodbLog/Pods/Headers/Private/Parse/PFKeyValueCache.h deleted file mode 120000 index f68af04..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFKeyValueCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/KeyValueCache/PFKeyValueCache.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFKeyValueCache_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFKeyValueCache_Private.h deleted file mode 120000 index d971da7..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFKeyValueCache_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFKeychainStore.h b/FoodbLog/Pods/Headers/Private/Parse/PFKeychainStore.h deleted file mode 120000 index 1609762..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFKeychainStore.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFKeychainStore.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFLocationManager.h b/FoodbLog/Pods/Headers/Private/Parse/PFLocationManager.h deleted file mode 120000 index c534560..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFLocationManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFLocationManager.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFLogger.h b/FoodbLog/Pods/Headers/Private/Parse/PFLogger.h deleted file mode 120000 index f100f88..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFLogger.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFLogger.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFLogging.h b/FoodbLog/Pods/Headers/Private/Parse/PFLogging.h deleted file mode 120000 index 0957f9c..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFLogging.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFLogging.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFMacros.h b/FoodbLog/Pods/Headers/Private/Parse/PFMacros.h deleted file mode 120000 index be0a4a8..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFMacros.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFMacros.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFMultiProcessFileLock.h b/FoodbLog/Pods/Headers/Private/Parse/PFMultiProcessFileLock.h deleted file mode 120000 index d40b109..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFMultiProcessFileLock.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFMultiProcessFileLockController.h b/FoodbLog/Pods/Headers/Private/Parse/PFMultiProcessFileLockController.h deleted file mode 120000 index 8e59276..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFMultiProcessFileLockController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFMulticastDelegate.h b/FoodbLog/Pods/Headers/Private/Parse/PFMulticastDelegate.h deleted file mode 120000 index c731e9b..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFMulticastDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFMulticastDelegate.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFMutableACLState.h b/FoodbLog/Pods/Headers/Private/Parse/PFMutableACLState.h deleted file mode 120000 index 05bf135..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFMutableACLState.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/ACL/State/PFMutableACLState.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFMutableFileState.h b/FoodbLog/Pods/Headers/Private/Parse/PFMutableFileState.h deleted file mode 120000 index d08ab4a..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFMutableFileState.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/File/State/PFMutableFileState.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFMutableObjectState.h b/FoodbLog/Pods/Headers/Private/Parse/PFMutableObjectState.h deleted file mode 120000 index e715fb4..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFMutableObjectState.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/State/PFMutableObjectState.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFMutablePushState.h b/FoodbLog/Pods/Headers/Private/Parse/PFMutablePushState.h deleted file mode 120000 index 3fe0c5d..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFMutablePushState.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Push/State/PFMutablePushState.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFMutableQueryState.h b/FoodbLog/Pods/Headers/Private/Parse/PFMutableQueryState.h deleted file mode 120000 index 8e8c7a5..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFMutableQueryState.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Query/State/PFMutableQueryState.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFMutableRelationState.h b/FoodbLog/Pods/Headers/Private/Parse/PFMutableRelationState.h deleted file mode 120000 index 13a1999..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFMutableRelationState.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Relation/State/PFMutableRelationState.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFMutableUserState.h b/FoodbLog/Pods/Headers/Private/Parse/PFMutableUserState.h deleted file mode 120000 index d5dbab7..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFMutableUserState.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/User/State/PFMutableUserState.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFNetworkActivityIndicatorManager.h b/FoodbLog/Pods/Headers/Private/Parse/PFNetworkActivityIndicatorManager.h deleted file mode 120000 index 1ae2fdb..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFNetworkActivityIndicatorManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFNetworkActivityIndicatorManager.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFNetworkCommand.h b/FoodbLog/Pods/Headers/Private/Parse/PFNetworkCommand.h deleted file mode 120000 index 2c8a391..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFNetworkCommand.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFNetworkCommand.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFNullability.h b/FoodbLog/Pods/Headers/Private/Parse/PFNullability.h deleted file mode 120000 index d3b6c2e..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFNullability.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFNullability.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFObject+Subclass.h b/FoodbLog/Pods/Headers/Private/Parse/PFObject+Subclass.h deleted file mode 120000 index ccbad16..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFObject+Subclass.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFObject+Subclass.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFObject.h b/FoodbLog/Pods/Headers/Private/Parse/PFObject.h deleted file mode 120000 index b00d5bb..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFObject.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFObject.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFObjectBatchController.h b/FoodbLog/Pods/Headers/Private/Parse/PFObjectBatchController.h deleted file mode 120000 index ed0585f..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFObjectBatchController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/BatchController/PFObjectBatchController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFObjectConstants.h b/FoodbLog/Pods/Headers/Private/Parse/PFObjectConstants.h deleted file mode 120000 index 2834ef6..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFObjectConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/Constants/PFObjectConstants.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFObjectController.h b/FoodbLog/Pods/Headers/Private/Parse/PFObjectController.h deleted file mode 120000 index 19d572b..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFObjectController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/Controller/PFObjectController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFObjectController_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFObjectController_Private.h deleted file mode 120000 index 3df14b2..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFObjectController_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/Controller/PFObjectController_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFObjectControlling.h b/FoodbLog/Pods/Headers/Private/Parse/PFObjectControlling.h deleted file mode 120000 index facfd09..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFObjectControlling.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/Controller/PFObjectControlling.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFObjectEstimatedData.h b/FoodbLog/Pods/Headers/Private/Parse/PFObjectEstimatedData.h deleted file mode 120000 index 2627e92..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFObjectEstimatedData.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFObjectFileCoder.h b/FoodbLog/Pods/Headers/Private/Parse/PFObjectFileCoder.h deleted file mode 120000 index 4d9fc61..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFObjectFileCoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/Coder/File/PFObjectFileCoder.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFObjectFileCodingLogic.h b/FoodbLog/Pods/Headers/Private/Parse/PFObjectFileCodingLogic.h deleted file mode 120000 index c5bb3c6..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFObjectFileCodingLogic.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFObjectFilePersistenceController.h b/FoodbLog/Pods/Headers/Private/Parse/PFObjectFilePersistenceController.h deleted file mode 120000 index b2f5bb6..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFObjectFilePersistenceController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFObjectLocalIdStore.h b/FoodbLog/Pods/Headers/Private/Parse/PFObjectLocalIdStore.h deleted file mode 120000 index e2cbdf8..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFObjectLocalIdStore.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFObjectPrivate.h b/FoodbLog/Pods/Headers/Private/Parse/PFObjectPrivate.h deleted file mode 120000 index 849167d..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFObjectPrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/PFObjectPrivate.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFObjectState.h b/FoodbLog/Pods/Headers/Private/Parse/PFObjectState.h deleted file mode 120000 index 8835423..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFObjectState.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/State/PFObjectState.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFObjectState_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFObjectState_Private.h deleted file mode 120000 index 0068676..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFObjectState_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/State/PFObjectState_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFObjectSubclassInfo.h b/FoodbLog/Pods/Headers/Private/Parse/PFObjectSubclassInfo.h deleted file mode 120000 index f408e73..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFObjectSubclassInfo.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFObjectSubclassingController.h b/FoodbLog/Pods/Headers/Private/Parse/PFObjectSubclassingController.h deleted file mode 120000 index 6f54ea8..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFObjectSubclassingController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFObjectUtilities.h b/FoodbLog/Pods/Headers/Private/Parse/PFObjectUtilities.h deleted file mode 120000 index ca1e591..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFObjectUtilities.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/Utilities/PFObjectUtilities.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFOfflineObjectController.h b/FoodbLog/Pods/Headers/Private/Parse/PFOfflineObjectController.h deleted file mode 120000 index 2450581..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFOfflineObjectController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFOfflineQueryController.h b/FoodbLog/Pods/Headers/Private/Parse/PFOfflineQueryController.h deleted file mode 120000 index 61522e9..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFOfflineQueryController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Query/Controller/PFOfflineQueryController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFOfflineQueryLogic.h b/FoodbLog/Pods/Headers/Private/Parse/PFOfflineQueryLogic.h deleted file mode 120000 index 51de493..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFOfflineQueryLogic.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFOfflineStore.h b/FoodbLog/Pods/Headers/Private/Parse/PFOfflineStore.h deleted file mode 120000 index e2a28d5..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFOfflineStore.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFOperationSet.h b/FoodbLog/Pods/Headers/Private/Parse/PFOperationSet.h deleted file mode 120000 index b62dded..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFOperationSet.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/OperationSet/PFOperationSet.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFPaymentTransactionObserver.h b/FoodbLog/Pods/Headers/Private/Parse/PFPaymentTransactionObserver.h deleted file mode 120000 index 0cf1120..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFPaymentTransactionObserver.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFPaymentTransactionObserver_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFPaymentTransactionObserver_Private.h deleted file mode 120000 index 80578e3..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFPaymentTransactionObserver_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFPin.h b/FoodbLog/Pods/Headers/Private/Parse/PFPin.h deleted file mode 120000 index a7301b9..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFPin.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/LocalDataStore/Pin/PFPin.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFPinningEventuallyQueue.h b/FoodbLog/Pods/Headers/Private/Parse/PFPinningEventuallyQueue.h deleted file mode 120000 index 5481dca..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFPinningEventuallyQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFPinningEventuallyQueue.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFPinningObjectStore.h b/FoodbLog/Pods/Headers/Private/Parse/PFPinningObjectStore.h deleted file mode 120000 index 5ac2044..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFPinningObjectStore.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Object/PinningStore/PFPinningObjectStore.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFProduct+Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFProduct+Private.h deleted file mode 120000 index d698072..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFProduct+Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Product/PFProduct+Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFProduct.h b/FoodbLog/Pods/Headers/Private/Parse/PFProduct.h deleted file mode 120000 index f4f4940..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFProduct.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFProduct.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFProductsRequestHandler.h b/FoodbLog/Pods/Headers/Private/Parse/PFProductsRequestHandler.h deleted file mode 120000 index b06ea1d..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFProductsRequestHandler.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFPropertyInfo.h b/FoodbLog/Pods/Headers/Private/Parse/PFPropertyInfo.h deleted file mode 120000 index 3571a7e..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFPropertyInfo.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PropertyInfo/PFPropertyInfo.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFPropertyInfo_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFPropertyInfo_Private.h deleted file mode 120000 index 3568406..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFPropertyInfo_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFPropertyInfo_Runtime.h b/FoodbLog/Pods/Headers/Private/Parse/PFPropertyInfo_Runtime.h deleted file mode 120000 index 6c7c2b3..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFPropertyInfo_Runtime.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFPurchase.h b/FoodbLog/Pods/Headers/Private/Parse/PFPurchase.h deleted file mode 120000 index 8d7cb4a..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFPurchase.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFPurchase.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFPurchaseController.h b/FoodbLog/Pods/Headers/Private/Parse/PFPurchaseController.h deleted file mode 120000 index 91f42f4..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFPurchaseController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Purchase/Controller/PFPurchaseController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFPush.h b/FoodbLog/Pods/Headers/Private/Parse/PFPush.h deleted file mode 120000 index 930cb47..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFPush.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFPush.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFPushChannelsController.h b/FoodbLog/Pods/Headers/Private/Parse/PFPushChannelsController.h deleted file mode 120000 index 84a2d30..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFPushChannelsController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Push/ChannelsController/PFPushChannelsController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFPushController.h b/FoodbLog/Pods/Headers/Private/Parse/PFPushController.h deleted file mode 120000 index 3f11f0e..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFPushController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Push/Controller/PFPushController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFPushManager.h b/FoodbLog/Pods/Headers/Private/Parse/PFPushManager.h deleted file mode 120000 index 04cbb0d..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFPushManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Push/Manager/PFPushManager.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFPushPrivate.h b/FoodbLog/Pods/Headers/Private/Parse/PFPushPrivate.h deleted file mode 120000 index d25e5ff..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFPushPrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Push/PFPushPrivate.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFPushState.h b/FoodbLog/Pods/Headers/Private/Parse/PFPushState.h deleted file mode 120000 index 686f491..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFPushState.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Push/State/PFPushState.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFPushState_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFPushState_Private.h deleted file mode 120000 index 87e61e5..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFPushState_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Push/State/PFPushState_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFPushUtilities.h b/FoodbLog/Pods/Headers/Private/Parse/PFPushUtilities.h deleted file mode 120000 index e6460a3..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFPushUtilities.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Push/Utilites/PFPushUtilities.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFQuery.h b/FoodbLog/Pods/Headers/Private/Parse/PFQuery.h deleted file mode 120000 index 1ea0442..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFQuery.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFQueryController.h b/FoodbLog/Pods/Headers/Private/Parse/PFQueryController.h deleted file mode 120000 index 5635d68..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFQueryController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Query/Controller/PFQueryController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFQueryPrivate.h b/FoodbLog/Pods/Headers/Private/Parse/PFQueryPrivate.h deleted file mode 120000 index 2f1bf2f..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFQueryPrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Query/PFQueryPrivate.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFQueryState.h b/FoodbLog/Pods/Headers/Private/Parse/PFQueryState.h deleted file mode 120000 index 381352e..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFQueryState.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Query/State/PFQueryState.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFQueryState_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFQueryState_Private.h deleted file mode 120000 index 97a6657..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFQueryState_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Query/State/PFQueryState_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFQueryUtilities.h b/FoodbLog/Pods/Headers/Private/Parse/PFQueryUtilities.h deleted file mode 120000 index f5c92e2..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFQueryUtilities.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Query/Utilities/PFQueryUtilities.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFRESTAnalyticsCommand.h b/FoodbLog/Pods/Headers/Private/Parse/PFRESTAnalyticsCommand.h deleted file mode 120000 index 6fe355e..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFRESTAnalyticsCommand.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/PFRESTAnalyticsCommand.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFRESTCloudCommand.h b/FoodbLog/Pods/Headers/Private/Parse/PFRESTCloudCommand.h deleted file mode 120000 index 46f5e1f..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFRESTCloudCommand.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/PFRESTCloudCommand.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFRESTCommand.h b/FoodbLog/Pods/Headers/Private/Parse/PFRESTCommand.h deleted file mode 120000 index 4fe070b..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFRESTCommand.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/PFRESTCommand.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFRESTCommand_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFRESTCommand_Private.h deleted file mode 120000 index df23738..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFRESTCommand_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/PFRESTCommand_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFRESTConfigCommand.h b/FoodbLog/Pods/Headers/Private/Parse/PFRESTConfigCommand.h deleted file mode 120000 index f671a72..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFRESTConfigCommand.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/PFRESTConfigCommand.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFRESTFileCommand.h b/FoodbLog/Pods/Headers/Private/Parse/PFRESTFileCommand.h deleted file mode 120000 index e31ba58..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFRESTFileCommand.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/PFRESTFileCommand.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFRESTObjectBatchCommand.h b/FoodbLog/Pods/Headers/Private/Parse/PFRESTObjectBatchCommand.h deleted file mode 120000 index 828b203..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFRESTObjectBatchCommand.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/PFRESTObjectBatchCommand.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFRESTObjectCommand.h b/FoodbLog/Pods/Headers/Private/Parse/PFRESTObjectCommand.h deleted file mode 120000 index 7de026d..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFRESTObjectCommand.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/PFRESTObjectCommand.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFRESTPushCommand.h b/FoodbLog/Pods/Headers/Private/Parse/PFRESTPushCommand.h deleted file mode 120000 index d2a676e..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFRESTPushCommand.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/PFRESTPushCommand.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFRESTQueryCommand.h b/FoodbLog/Pods/Headers/Private/Parse/PFRESTQueryCommand.h deleted file mode 120000 index 82f2793..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFRESTQueryCommand.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/PFRESTQueryCommand.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFRESTSessionCommand.h b/FoodbLog/Pods/Headers/Private/Parse/PFRESTSessionCommand.h deleted file mode 120000 index e3651cb..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFRESTSessionCommand.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/PFRESTSessionCommand.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFRESTUserCommand.h b/FoodbLog/Pods/Headers/Private/Parse/PFRESTUserCommand.h deleted file mode 120000 index 9a13083..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFRESTUserCommand.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/PFRESTUserCommand.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFReachability.h b/FoodbLog/Pods/Headers/Private/Parse/PFReachability.h deleted file mode 120000 index ac4e8fa..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFReachability.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFReachability.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFRelation.h b/FoodbLog/Pods/Headers/Private/Parse/PFRelation.h deleted file mode 120000 index a3e8444..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFRelation.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFRelation.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFRelationPrivate.h b/FoodbLog/Pods/Headers/Private/Parse/PFRelationPrivate.h deleted file mode 120000 index 0115a6f..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFRelationPrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Relation/PFRelationPrivate.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFRelationState.h b/FoodbLog/Pods/Headers/Private/Parse/PFRelationState.h deleted file mode 120000 index f2659be..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFRelationState.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Relation/State/PFRelationState.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFRelationState_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFRelationState_Private.h deleted file mode 120000 index ac2cfe1..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFRelationState_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Relation/State/PFRelationState_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFRole.h b/FoodbLog/Pods/Headers/Private/Parse/PFRole.h deleted file mode 120000 index 26cd86c..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFRole.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFRole.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFSQLiteDatabase.h b/FoodbLog/Pods/Headers/Private/Parse/PFSQLiteDatabase.h deleted file mode 120000 index 787b1e8..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFSQLiteDatabase.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFSQLiteDatabaseController.h b/FoodbLog/Pods/Headers/Private/Parse/PFSQLiteDatabaseController.h deleted file mode 120000 index 37b616f..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFSQLiteDatabaseController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFSQLiteDatabaseResult.h b/FoodbLog/Pods/Headers/Private/Parse/PFSQLiteDatabaseResult.h deleted file mode 120000 index a2c98a3..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFSQLiteDatabaseResult.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFSQLiteDatabase_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFSQLiteDatabase_Private.h deleted file mode 120000 index 3165b80..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFSQLiteDatabase_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFSQLiteStatement.h b/FoodbLog/Pods/Headers/Private/Parse/PFSQLiteStatement.h deleted file mode 120000 index 3ef2050..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFSQLiteStatement.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFSession.h b/FoodbLog/Pods/Headers/Private/Parse/PFSession.h deleted file mode 120000 index 4c43360..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFSession.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFSession.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFSessionController.h b/FoodbLog/Pods/Headers/Private/Parse/PFSessionController.h deleted file mode 120000 index 19acd46..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFSessionController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Session/Controller/PFSessionController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFSessionUtilities.h b/FoodbLog/Pods/Headers/Private/Parse/PFSessionUtilities.h deleted file mode 120000 index 13ac6c5..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFSessionUtilities.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Session/Utilities/PFSessionUtilities.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFSession_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFSession_Private.h deleted file mode 120000 index 077e55a..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFSession_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Session/PFSession_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFSubclassing.h b/FoodbLog/Pods/Headers/Private/Parse/PFSubclassing.h deleted file mode 120000 index 901cadc..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFSubclassing.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFSubclassing.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFTaskQueue.h b/FoodbLog/Pods/Headers/Private/Parse/PFTaskQueue.h deleted file mode 120000 index d7ccda7..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFTaskQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFTaskQueue.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFThreadsafety.h b/FoodbLog/Pods/Headers/Private/Parse/PFThreadsafety.h deleted file mode 120000 index d670b07..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFThreadsafety.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/ThreadSafety/PFThreadsafety.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFURLConstructor.h b/FoodbLog/Pods/Headers/Private/Parse/PFURLConstructor.h deleted file mode 120000 index 6760b55..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFURLConstructor.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/HTTPRequest/PFURLConstructor.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFURLSession.h b/FoodbLog/Pods/Headers/Private/Parse/PFURLSession.h deleted file mode 120000 index 767bbbf..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFURLSession.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionCommandRunner.h b/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionCommandRunner.h deleted file mode 120000 index a5bcf23..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionCommandRunner.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionCommandRunner_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionCommandRunner_Private.h deleted file mode 120000 index 4079814..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionCommandRunner_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionDataTaskDelegate.h b/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionDataTaskDelegate.h deleted file mode 120000 index c0c5ccb..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionDataTaskDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionDataTaskDelegate_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionDataTaskDelegate_Private.h deleted file mode 120000 index 8d6abcf..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionDataTaskDelegate_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionFileDownloadTaskDelegate.h b/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionFileDownloadTaskDelegate.h deleted file mode 120000 index 61d5d80..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionFileDownloadTaskDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionJSONDataTaskDelegate.h b/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionJSONDataTaskDelegate.h deleted file mode 120000 index 1933d5b..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionJSONDataTaskDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionUploadTaskDelegate.h b/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionUploadTaskDelegate.h deleted file mode 120000 index 5327ead..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFURLSessionUploadTaskDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFURLSession_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFURLSession_Private.h deleted file mode 120000 index d3c1649..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFURLSession_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFUser.h b/FoodbLog/Pods/Headers/Private/Parse/PFUser.h deleted file mode 120000 index 01e4199..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFUser.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFUser.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFUserAuthenticationController.h b/FoodbLog/Pods/Headers/Private/Parse/PFUserAuthenticationController.h deleted file mode 120000 index 3b222ff..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFUserAuthenticationController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFUserAuthenticationDelegate.h b/FoodbLog/Pods/Headers/Private/Parse/PFUserAuthenticationDelegate.h deleted file mode 120000 index 3b6b473..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFUserAuthenticationDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/PFUserAuthenticationDelegate.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFUserConstants.h b/FoodbLog/Pods/Headers/Private/Parse/PFUserConstants.h deleted file mode 120000 index 2ad9193..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFUserConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/User/Constants/PFUserConstants.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFUserController.h b/FoodbLog/Pods/Headers/Private/Parse/PFUserController.h deleted file mode 120000 index ed6c494..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFUserController.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/User/Controller/PFUserController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFUserFileCodingLogic.h b/FoodbLog/Pods/Headers/Private/Parse/PFUserFileCodingLogic.h deleted file mode 120000 index ca0302d..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFUserFileCodingLogic.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFUserPrivate.h b/FoodbLog/Pods/Headers/Private/Parse/PFUserPrivate.h deleted file mode 120000 index 114e09a..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFUserPrivate.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/User/PFUserPrivate.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFUserState.h b/FoodbLog/Pods/Headers/Private/Parse/PFUserState.h deleted file mode 120000 index f18a548..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFUserState.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/User/State/PFUserState.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFUserState_Private.h b/FoodbLog/Pods/Headers/Private/Parse/PFUserState_Private.h deleted file mode 120000 index b5b0d81..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFUserState_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/User/State/PFUserState_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/PFWeakValue.h b/FoodbLog/Pods/Headers/Private/Parse/PFWeakValue.h deleted file mode 120000 index 7cc66d2..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/PFWeakValue.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/PFWeakValue.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/Parse.h b/FoodbLog/Pods/Headers/Private/Parse/Parse.h deleted file mode 120000 index 699c11c..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/Parse.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Parse.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/ParseInternal.h b/FoodbLog/Pods/Headers/Private/Parse/ParseInternal.h deleted file mode 120000 index 96a779a..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/ParseInternal.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/ParseInternal.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/ParseManager.h b/FoodbLog/Pods/Headers/Private/Parse/ParseManager.h deleted file mode 120000 index 1644f32..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/ParseManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/ParseManager.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/ParseModule.h b/FoodbLog/Pods/Headers/Private/Parse/ParseModule.h deleted file mode 120000 index 9f00abd..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/ParseModule.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/ParseModule.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Parse/Parse_Private.h b/FoodbLog/Pods/Headers/Private/Parse/Parse_Private.h deleted file mode 120000 index c149580..0000000 --- a/FoodbLog/Pods/Headers/Private/Parse/Parse_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../Parse/Parse/Internal/Parse_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFActionButton.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFActionButton.h deleted file mode 120000 index 4218e48..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFActionButton.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFActivityIndicatorCollectionReusableView.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFActivityIndicatorCollectionReusableView.h deleted file mode 120000 index df46b16..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFActivityIndicatorCollectionReusableView.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFActivityIndicatorTableViewCell.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFActivityIndicatorTableViewCell.h deleted file mode 120000 index 50c1ce3..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFActivityIndicatorTableViewCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFCollectionViewCell.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFCollectionViewCell.h deleted file mode 120000 index af4cf00..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFCollectionViewCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFColor.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFColor.h deleted file mode 120000 index 2042f25..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFColor.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFDismissButton.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFDismissButton.h deleted file mode 120000 index a736731..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFDismissButton.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFImage.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFImage.h deleted file mode 120000 index 8da6b34..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFImage.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFImageCache.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFImageCache.h deleted file mode 120000 index 6aefcce..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFImageCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/Internal/PFImageCache.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFImageView.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFImageView.h deleted file mode 120000 index 6998b25..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFImageView.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/Views/PFImageView.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFLoadingView.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFLoadingView.h deleted file mode 120000 index 23ffd12..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFLoadingView.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFLocalization.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFLocalization.h deleted file mode 120000 index 81c19f7..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFLocalization.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/Internal/PFLocalization.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFLogInView.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFLogInView.h deleted file mode 120000 index 03efbc7..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFLogInView.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFLogInViewController.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFLogInViewController.h deleted file mode 120000 index f640f6e..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFLogInViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFLogInView_Private.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFLogInView_Private.h deleted file mode 120000 index 5a1445a..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFLogInView_Private.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/LogInViewController/PFLogInView_Private.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFPrimaryButton.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFPrimaryButton.h deleted file mode 120000 index b3b12bf..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFPrimaryButton.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFProductTableViewController.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFProductTableViewController.h deleted file mode 120000 index b59c01b..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFProductTableViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFPurchaseTableViewCell.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFPurchaseTableViewCell.h deleted file mode 120000 index 4832020..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFPurchaseTableViewCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFQueryCollectionViewController.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFQueryCollectionViewController.h deleted file mode 120000 index 2912eff..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFQueryCollectionViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFQueryTableViewController.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFQueryTableViewController.h deleted file mode 120000 index e61be1d..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFQueryTableViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFRect.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFRect.h deleted file mode 120000 index fcab421..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFRect.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFResources.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFResources.h deleted file mode 120000 index cb18b2f..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFResources.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Generated/PFResources.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFSignUpView.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFSignUpView.h deleted file mode 120000 index ce44295..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFSignUpView.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFSignUpViewController.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFSignUpViewController.h deleted file mode 120000 index 5c962e0..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFSignUpViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFTableViewCell.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFTableViewCell.h deleted file mode 120000 index 1f9ce36..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFTableViewCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFTextButton.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFTextButton.h deleted file mode 120000 index bd398e9..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFTextButton.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFTextField.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFTextField.h deleted file mode 120000 index 51edbe9..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFTextField.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/Views/PFTextField.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/PFUIAlertView.h b/FoodbLog/Pods/Headers/Private/ParseUI/PFUIAlertView.h deleted file mode 120000 index 0f32862..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/PFUIAlertView.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/ParseUI.h b/FoodbLog/Pods/Headers/Private/ParseUI/ParseUI.h deleted file mode 120000 index 6b5f250..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/ParseUI.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Other/ParseUI.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/ParseUI/ParseUIConstants.h b/FoodbLog/Pods/Headers/Private/ParseUI/ParseUIConstants.h deleted file mode 120000 index 58c59ff..0000000 --- a/FoodbLog/Pods/Headers/Private/ParseUI/ParseUIConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../ParseUI/ParseUI/Other/ParseUIConstants.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/SDWebImage/NSData+ImageContentType.h b/FoodbLog/Pods/Headers/Private/SDWebImage/NSData+ImageContentType.h deleted file mode 120000 index 8457498..0000000 --- a/FoodbLog/Pods/Headers/Private/SDWebImage/NSData+ImageContentType.h +++ /dev/null @@ -1 +0,0 @@ -../../../SDWebImage/SDWebImage/NSData+ImageContentType.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/SDWebImage/SDImageCache.h b/FoodbLog/Pods/Headers/Private/SDWebImage/SDImageCache.h deleted file mode 120000 index 0040b06..0000000 --- a/FoodbLog/Pods/Headers/Private/SDWebImage/SDImageCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../SDWebImage/SDWebImage/SDImageCache.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageCompat.h b/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageCompat.h deleted file mode 120000 index 6ca2478..0000000 --- a/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageCompat.h +++ /dev/null @@ -1 +0,0 @@ -../../../SDWebImage/SDWebImage/SDWebImageCompat.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageDecoder.h b/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageDecoder.h deleted file mode 120000 index a2f3a68..0000000 --- a/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageDecoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../SDWebImage/SDWebImage/SDWebImageDecoder.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageDownloader.h b/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageDownloader.h deleted file mode 120000 index 303b03b..0000000 --- a/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageDownloader.h +++ /dev/null @@ -1 +0,0 @@ -../../../SDWebImage/SDWebImage/SDWebImageDownloader.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageDownloaderOperation.h b/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageDownloaderOperation.h deleted file mode 120000 index 99441c4..0000000 --- a/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageDownloaderOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../../SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageManager.h b/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageManager.h deleted file mode 120000 index 1b81848..0000000 --- a/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../SDWebImage/SDWebImage/SDWebImageManager.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageOperation.h b/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageOperation.h deleted file mode 120000 index 20e5b89..0000000 --- a/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImageOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../../SDWebImage/SDWebImage/SDWebImageOperation.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImagePrefetcher.h b/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImagePrefetcher.h deleted file mode 120000 index 50585c6..0000000 --- a/FoodbLog/Pods/Headers/Private/SDWebImage/SDWebImagePrefetcher.h +++ /dev/null @@ -1 +0,0 @@ -../../../SDWebImage/SDWebImage/SDWebImagePrefetcher.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/SDWebImage/UIButton+WebCache.h b/FoodbLog/Pods/Headers/Private/SDWebImage/UIButton+WebCache.h deleted file mode 120000 index 19d2d8e..0000000 --- a/FoodbLog/Pods/Headers/Private/SDWebImage/UIButton+WebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../SDWebImage/SDWebImage/UIButton+WebCache.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/SDWebImage/UIImage+GIF.h b/FoodbLog/Pods/Headers/Private/SDWebImage/UIImage+GIF.h deleted file mode 120000 index 14d5aad..0000000 --- a/FoodbLog/Pods/Headers/Private/SDWebImage/UIImage+GIF.h +++ /dev/null @@ -1 +0,0 @@ -../../../SDWebImage/SDWebImage/UIImage+GIF.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/SDWebImage/UIImage+MultiFormat.h b/FoodbLog/Pods/Headers/Private/SDWebImage/UIImage+MultiFormat.h deleted file mode 120000 index 1fb9650..0000000 --- a/FoodbLog/Pods/Headers/Private/SDWebImage/UIImage+MultiFormat.h +++ /dev/null @@ -1 +0,0 @@ -../../../SDWebImage/SDWebImage/UIImage+MultiFormat.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/SDWebImage/UIImageView+HighlightedWebCache.h b/FoodbLog/Pods/Headers/Private/SDWebImage/UIImageView+HighlightedWebCache.h deleted file mode 120000 index fd4dea4..0000000 --- a/FoodbLog/Pods/Headers/Private/SDWebImage/UIImageView+HighlightedWebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/SDWebImage/UIImageView+WebCache.h b/FoodbLog/Pods/Headers/Private/SDWebImage/UIImageView+WebCache.h deleted file mode 120000 index 0c53a47..0000000 --- a/FoodbLog/Pods/Headers/Private/SDWebImage/UIImageView+WebCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../SDWebImage/SDWebImage/UIImageView+WebCache.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/SDWebImage/UIView+WebCacheOperation.h b/FoodbLog/Pods/Headers/Private/SDWebImage/UIView+WebCacheOperation.h deleted file mode 120000 index f9890c4..0000000 --- a/FoodbLog/Pods/Headers/Private/SDWebImage/UIView+WebCacheOperation.h +++ /dev/null @@ -1 +0,0 @@ -../../../SDWebImage/SDWebImage/UIView+WebCacheOperation.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Unirest/Base64.h b/FoodbLog/Pods/Headers/Private/Unirest/Base64.h deleted file mode 120000 index 2779320..0000000 --- a/FoodbLog/Pods/Headers/Private/Unirest/Base64.h +++ /dev/null @@ -1 +0,0 @@ -../../../Unirest/Unirest/Base64.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Unirest/HttpRequest/UNIBaseRequest.h b/FoodbLog/Pods/Headers/Private/Unirest/HttpRequest/UNIBaseRequest.h deleted file mode 120000 index 7fa0b42..0000000 --- a/FoodbLog/Pods/Headers/Private/Unirest/HttpRequest/UNIBaseRequest.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Unirest/Unirest/HttpRequest/UNIBaseRequest.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Unirest/HttpRequest/UNIBodyRequest.h b/FoodbLog/Pods/Headers/Private/Unirest/HttpRequest/UNIBodyRequest.h deleted file mode 120000 index 4f6e4c1..0000000 --- a/FoodbLog/Pods/Headers/Private/Unirest/HttpRequest/UNIBodyRequest.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Unirest/Unirest/HttpRequest/UNIBodyRequest.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Unirest/HttpRequest/UNISimpleRequest.h b/FoodbLog/Pods/Headers/Private/Unirest/HttpRequest/UNISimpleRequest.h deleted file mode 120000 index 17fabab..0000000 --- a/FoodbLog/Pods/Headers/Private/Unirest/HttpRequest/UNISimpleRequest.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Unirest/Unirest/HttpRequest/UNISimpleRequest.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIHTTPBinaryResponse.h b/FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIHTTPBinaryResponse.h deleted file mode 120000 index ece7c0b..0000000 --- a/FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIHTTPBinaryResponse.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Unirest/Unirest/HttpResponse/UNIHTTPBinaryResponse.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIHTTPJsonResponse.h b/FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIHTTPJsonResponse.h deleted file mode 120000 index cfffec1..0000000 --- a/FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIHTTPJsonResponse.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Unirest/Unirest/HttpResponse/UNIHTTPJsonResponse.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIHTTPResponse.h b/FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIHTTPResponse.h deleted file mode 120000 index 487ac88..0000000 --- a/FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIHTTPResponse.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Unirest/Unirest/HttpResponse/UNIHTTPResponse.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIHTTPStringResponse.h b/FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIHTTPStringResponse.h deleted file mode 120000 index 3b07217..0000000 --- a/FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIHTTPStringResponse.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Unirest/Unirest/HttpResponse/UNIHTTPStringResponse.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIJsonNode.h b/FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIJsonNode.h deleted file mode 120000 index a8f7724..0000000 --- a/FoodbLog/Pods/Headers/Private/Unirest/HttpResponse/UNIJsonNode.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Unirest/Unirest/HttpResponse/UNIJsonNode.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Unirest/UNIHTTPClientHelper.h b/FoodbLog/Pods/Headers/Private/Unirest/UNIHTTPClientHelper.h deleted file mode 120000 index 6c043bd..0000000 --- a/FoodbLog/Pods/Headers/Private/Unirest/UNIHTTPClientHelper.h +++ /dev/null @@ -1 +0,0 @@ -../../../Unirest/Unirest/UNIHTTPClientHelper.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Unirest/UNIHTTPRequest.h b/FoodbLog/Pods/Headers/Private/Unirest/UNIHTTPRequest.h deleted file mode 120000 index c490ec4..0000000 --- a/FoodbLog/Pods/Headers/Private/Unirest/UNIHTTPRequest.h +++ /dev/null @@ -1 +0,0 @@ -../../../Unirest/Unirest/UNIHTTPRequest.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Unirest/UNIHTTPRequestWithBody.h b/FoodbLog/Pods/Headers/Private/Unirest/UNIHTTPRequestWithBody.h deleted file mode 120000 index 6751043..0000000 --- a/FoodbLog/Pods/Headers/Private/Unirest/UNIHTTPRequestWithBody.h +++ /dev/null @@ -1 +0,0 @@ -../../../Unirest/Unirest/UNIHTTPRequestWithBody.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Unirest/UNIRest.h b/FoodbLog/Pods/Headers/Private/Unirest/UNIRest.h deleted file mode 120000 index 1795471..0000000 --- a/FoodbLog/Pods/Headers/Private/Unirest/UNIRest.h +++ /dev/null @@ -1 +0,0 @@ -../../../Unirest/Unirest/UNIRest.h \ No newline at end of file diff --git a/FoodbLog/Pods/Headers/Private/Unirest/UNIUrlConnection.h b/FoodbLog/Pods/Headers/Private/Unirest/UNIUrlConnection.h deleted file mode 120000 index d961761..0000000 --- a/FoodbLog/Pods/Headers/Private/Unirest/UNIUrlConnection.h +++ /dev/null @@ -1 +0,0 @@ -../../../Unirest/Unirest/UNIUrlConnection.h \ No newline at end of file diff --git a/FoodbLog/Pods/Manifest.lock b/FoodbLog/Pods/Manifest.lock index 10f2f61..5eed667 100644 --- a/FoodbLog/Pods/Manifest.lock +++ b/FoodbLog/Pods/Manifest.lock @@ -46,15 +46,29 @@ DEPENDENCIES: - SDWebImage (~> 3.7) - Unirest (~> 1.1.4) +SPEC REPOS: + trunk: + - AFNetworking + - Bolts + - ChameleonFramework + - FlatUIKit + - IQKeyboardManager + - Parse + - ParseUI + - SDWebImage + - Unirest + SPEC CHECKSUMS: - AFNetworking: 8e4e60500beb8bec644cf575beee72990a76d399 + AFNetworking: cd116683fd5dd1a34715a3c9410b6d7b8745d8b9 Bolts: 805a4a87413e49d4a0c2b7d469084cbc46b09342 ChameleonFramework: 5abe69b1f2a6cc79c3c435fcd9d3d855748225ee FlatUIKit: 1b41f0d4952ce8d970d8479ce79df54a960242c4 IQKeyboardManager: d863eb0bca424d1f6dad6bdd1f856af52664add8 Parse: 712efbc476d4f47b0f96b70db7e53101575753aa - ParseUI: 8a22e448c03f825203d8c379c80523517f68baa3 + ParseUI: a5e6d48f2e4fcc61f78c4f31a3252c0e7c0b2d79 SDWebImage: 1d2b1a1efda1ade1b00b6f8498865f8ddedc8a84 Unirest: 5e4d93eaf32463bf619a4ecd3bbc8c32acf21eac -COCOAPODS: 0.39.0 +PODFILE CHECKSUM: 03d171a15bf65394dfd97b11c36be192765b3f6e + +COCOAPODS: 1.11.3 diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Generated/PFResources.h b/FoodbLog/Pods/ParseUI/ParseUI/Generated/PFResources.h index 8b05c21..9e01c13 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Generated/PFResources.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Generated/PFResources.h @@ -1,13 +1,13 @@ // This is an auto-generated file. #import @interface PFResources : NSObject -+ (NSData *)facebook_icon_png;//modified:2015-10-15 11:50:04 -0400 -+ (NSData *)facebook_icon2x_png;//modified:2015-10-15 11:50:04 -0400 -+ (NSData *)facebook_icon3x_png;//modified:2015-10-15 11:50:04 -0400 -+ (NSData *)parse_logo_png;//modified:2015-10-15 11:50:04 -0400 -+ (NSData *)parse_logo2x_png;//modified:2015-10-15 11:50:04 -0400 -+ (NSData *)parse_logo3x_png;//modified:2015-10-15 11:50:04 -0400 -+ (NSData *)twitter_icon_png;//modified:2015-10-15 11:50:04 -0400 -+ (NSData *)twitter_icon2x_png;//modified:2015-10-15 11:50:04 -0400 -+ (NSData *)twitter_icon3x_png;//modified:2015-10-15 11:50:04 -0400 ++ (NSData *)facebook_icon_png;//modified:2023-04-05 07:30:44 +0100 ++ (NSData *)facebook_icon2x_png;//modified:2023-04-05 07:30:44 +0100 ++ (NSData *)facebook_icon3x_png;//modified:2023-04-05 07:30:44 +0100 ++ (NSData *)parse_logo_png;//modified:2023-04-05 07:30:44 +0100 ++ (NSData *)parse_logo2x_png;//modified:2023-04-05 07:30:44 +0100 ++ (NSData *)parse_logo3x_png;//modified:2023-04-05 07:30:44 +0100 ++ (NSData *)twitter_icon_png;//modified:2023-04-05 07:30:44 +0100 ++ (NSData *)twitter_icon2x_png;//modified:2023-04-05 07:30:44 +0100 ++ (NSData *)twitter_icon3x_png;//modified:2023-04-05 07:30:44 +0100 @end diff --git a/FoodbLog/Pods/Pods.xcodeproj/project.pbxproj b/FoodbLog/Pods/Pods.xcodeproj/project.pbxproj index 1cb3c88..5989698 100644 --- a/FoodbLog/Pods/Pods.xcodeproj/project.pbxproj +++ b/FoodbLog/Pods/Pods.xcodeproj/project.pbxproj @@ -7,3125 +7,3207 @@ objects = { /* Begin PBXBuildFile section */ - 00C7470973DA089B399739C3C8FA3261 /* PFConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 26E9373EDD16A74B95926BC6C3C8935A /* PFConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 019CBBA1F0B35123BC7D10A6193906B3 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 83D09D1579320C595EAB76A27A66A393 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 02665DAFADACC82A7315554BDCE85F03 /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = CE518703881DE5CA423A20499ECDC6AD /* PFMutableFileState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 02A65C27E48E80BE747C4932BFFFFAF3 /* PFNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 20AD7A66980A24CEED5FEFF10C43C907 /* PFNullability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 02AAD5EB239375F6DCF31CC964589164 /* PFOperationSet.m in Sources */ = {isa = PBXBuildFile; fileRef = B581DD1ACB958FFDB072BAA4F2237507 /* PFOperationSet.m */; }; - 0348BC4197B03EA005FADC6D63870811 /* PFSignUpViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1378696FD6E88031008A312FFA80F0BE /* PFSignUpViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 041A2F2CF584FB5FEA239A92D31074D4 /* PFPropertyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = F101F813C282DB4B68E1395D8B435B3A /* PFPropertyInfo.m */; }; - 045B4AF365765B9288107C388AC7CDC1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DB6BC0F44FADD25C922940ACF72E8E2 /* Foundation.framework */; }; - 054CCF861A1760AFA43690CDA493DCE7 /* IQTitleBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F72FEBD3BFAC399D64BBF2628A4BB5D /* IQTitleBarButtonItem.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 05A6481EBC9C1D64BE2143BFA46D1364 /* UIImage+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B8464F07E251683523617CE1C8DCD6E /* UIImage+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 05D157847239824F4D4312D3376C76E1 /* Pods-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BCC458FDD5F692BBB2BFC64BB5701FC /* Pods-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 05EBF7663E6672F4B4B1D57D59699783 /* PFPinningObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E723872EB18F77CB30EE5A350765C6 /* PFPinningObjectStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 060FAE6738D4A523F6B4FAF1574108E7 /* PFObjectState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7329083460ED8B649477E95909F03887 /* PFObjectState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 06BC5CD9B86633BB7DF4C7CF7707C4F2 /* UIColor+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 34E153BBD9AAB5FCAEC5F2C8976F3343 /* UIColor+ChameleonPrivate.m */; }; - 070236D0B58D890654DF03242AE34225 /* PFCommandURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B0589FBE7A6803057FC5D6D3FCB639A /* PFCommandURLRequestConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 075A87D234F2C77C04D2D66E29EF055A /* UIImage+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7154543FC0EDEF72C9DAA39A933C7F1F /* UIImage+ChameleonPrivate.m */; }; - 075C96EC2BE69F7BFCB48378D69A7D3B /* PFQueryCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C37215148F69DC2DE5BCDF103D9EBCD3 /* PFQueryCollectionViewController.m */; }; - 078201E171E284AFE36960EC9FCE97A5 /* Unirest-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D63CAF2AF89704D532ED74A5F3B1806 /* Unirest-dummy.m */; }; - 07EA55EDAC7169BB5B7B0F5A5B8CB138 /* PFJSONSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = F5981C852078B840ABABABDEC5CF1BC0 /* PFJSONSerialization.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 081A50535FCDF50D0118223459790167 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 103FF4C21FC1A058E47E222F14825A8B /* UIImageView+AFNetworking.m */; }; - 08341BBDE78EE81BBC73C2AB4915D516 /* PFNetworkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 7561E1617CDB3676851A461B32BAD227 /* PFNetworkCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 085BF93D37DC7D94456A18B05E2EF856 /* PFObjectLocalIdStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 438DDEBF7F22477BF899EFD13A21B646 /* PFObjectLocalIdStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 097E6D2C2111CC0AC7461AF45F1D8755 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F0280896C56576AC9033B1015CC54A /* QuartzCore.framework */; }; - 0A82F2A0A315DE01EAE41F64995E6267 /* IQKeyboardReturnKeyHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 51019DCF51504FFB0E18650FF8076701 /* IQKeyboardReturnKeyHandler.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 0B541C92E1E37077895643AD634F021B /* PFPaymentTransactionObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = ADB7018CBCF8438824B821ED70CA23BC /* PFPaymentTransactionObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0B7C881616BB559CC31A81C21BECCC65 /* PFKeyValueCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9291AF9D8AB933D3FFB984F58175FA99 /* PFKeyValueCache_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0BB2B530D1993F5804817AFDB3395405 /* UNIHTTPClientHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = C8A145036FC8B98160AAF10120A5EEF9 /* UNIHTTPClientHelper.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 0BF949FCBA3FBC12A5F83A5A9A24027A /* PFObjectSubclassingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9959A698F7854FAC8C6FA6CAD244E42E /* PFObjectSubclassingController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0C12340640015917EAC4EDCD39056719 /* PFPaymentTransactionObserver_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 59670B276943E78259AC1BA4451BC0F6 /* PFPaymentTransactionObserver_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0C175305C5AA6D51FFCFFF1BC3884E23 /* PFCurrentUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A66FD291F0EA148EAA8C127374B8F95 /* PFCurrentUserController.m */; }; - 0C346AA65B7AF010350F7F6D80CFECE8 /* PFEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 70A011368DB31350D4B8817E5E2854FF /* PFEventuallyQueue.m */; }; - 0C5291482A3F7BA2CC58320C9B5BCA16 /* FUIButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 16B57DFA233CDD41F9CBF2EAC30FEB3D /* FUIButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0C7114D262099F0725F0E2B4676F31AA /* PFDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = DF86B1471532F9FDDE0E21010BC35454 /* PFDataProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0C8193BB3438FD577E908844C52CBAE3 /* PFAnonymousUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = B546148DC567CB2FA17FC9BA413889E4 /* PFAnonymousUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0CE5E24F250E53E29F25C2E572347E37 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AECC8BC20B105122A1E79F9C7E14A1C /* BFCancellationTokenSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 0D38863C2F0C8C62FA41D4EBF0CCCDCE /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = F2BEB596D4234E666A47493046F22D9D /* BFExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 0D5BD5E3C62E8A802636BCAEEC2B6C99 /* PFMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 1058E8056D3FA36C9E8A152F802601F3 /* PFMacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0DD61B3BBC161817A4B0D0F69953B817 /* PFURLSessionCommandRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C6494683E07D5C70C872F4947A38578 /* PFURLSessionCommandRunner.m */; }; - 0EE089FF67095D05E638EFFE242ED8CD /* PFWeakValue.m in Sources */ = {isa = PBXBuildFile; fileRef = B2DCBEE27C7147DD02409495780E224F /* PFWeakValue.m */; }; - 0F69DED292C765610B9A2F38D01DD159 /* PFQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C796C5611EDAAB47F4E3BF6D9EEA9CC /* PFQueryState.m */; }; - 0F818565739B13360E63C07AF5B20931 /* PFRect.m in Sources */ = {isa = PBXBuildFile; fileRef = BDE1EF913DC938935CD74F59A32BBBC6 /* PFRect.m */; }; - 10C17C2B7C038CBE685BA997596FC6BD /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C153997184ED2FF1E8380B9139AC366 /* PFPushUtilities.m */; }; - 112A4FB2ECD2A55F39EDA4928D2ACA9D /* FUIAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 181C4E315BFA03A426998EBF9FED2616 /* FUIAlertView.m */; }; - 11CB9FA5E328C6A63DD864216EDFF695 /* PFRESTAnalyticsCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 0636531503B8A71FA7D528F8E9D1F2CC /* PFRESTAnalyticsCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 12CE322100BCF8F851455345B0BBE993 /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F860F4621C29DA310856A566C83712D /* PFURLConstructor.m */; }; - 137CB10D45ADB684EB29A3D1E8135328 /* IQKeyboardManagerConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ADEC44E5D6F5925C1A7DB967F2B1183 /* IQKeyboardManagerConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1389748BE24F9D2223187CB20D9A020C /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E680D1B9471E7031E6AE543909FCE25 /* AFURLRequestSerialization.m */; }; - 147FA8C1A763341DFA6B838D9532FC55 /* Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = A8790641E8E896F7C5FE93C04AF0C64B /* Base64.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 15028369186C1FA07E92A2C523793346 /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 383772F4F9E375D079487664672483CA /* Parse_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1506ABD5E6E321807F63BC4AB8D02476 /* PFHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 307342BCC7CF73A49CC184FCE4B81110 /* PFHash.m */; }; - 1553363B4807FFD3280496BEBEEDF7B9 /* PFObjectUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = D8B2ACC39357BAAB14306E00BA3E428B /* PFObjectUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 15BF1F1A314A6178051DD32340104201 /* PFCommandURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E627F00F8F898388BF877F78E1353BB /* PFCommandURLRequestConstructor.m */; }; - 16458A90629AA31591FB90202D7515A5 /* UNIRest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8583B03CF719746652269BBF2917F4CE /* UNIRest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 16A2D80762322755D21CD8FEF9D4CE24 /* PFURLSessionJSONDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 910165D4217068C24C287CE5AF13D6BD /* PFURLSessionJSONDataTaskDelegate.m */; }; - 16B1B84F040D411768F471AD5518D757 /* PFOfflineStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 7594F8FEE9A171F78D2E3F6CDE674229 /* PFOfflineStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 16CFF11408F9C860822B1C08C5B947B2 /* UNIBodyRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = AC266D051A2E16F08229630682665D45 /* UNIBodyRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1768B9615B6D6518F559FA5355AE3C7E /* FUICellBackgroundView.h in Headers */ = {isa = PBXBuildFile; fileRef = F20F9C68EDBCD177CACC721BD11D0002 /* FUICellBackgroundView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17E279F36DF637ABB37F9F718654E7A1 /* PFProductTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 215BC1A6142BD130A05E3E3A4C8C12C8 /* PFProductTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1860DE8DF1B53B872C81AAC82D8664D2 /* PFCommandResult.m in Sources */ = {isa = PBXBuildFile; fileRef = B84E240F3DC71E49D016279DA276FC95 /* PFCommandResult.m */; }; - 18B8C836904EE4CFDDE436EF990D9AD9 /* PFDismissButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 445DD7A5A6030BC73417C0194ADF04DA /* PFDismissButton.m */; }; - 1A15E1DAB1BF63371AE5ADFAED9169E5 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = A0A2EC5C748A58FEB0FE76B1573EA9BF /* UIRefreshControl+AFNetworking.m */; }; - 1A1996C93383A3C703E7DA5BC59F0FDB /* flat-ui-icons-regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A33D64DFDE960845EFBE18C004B51247 /* flat-ui-icons-regular.ttf */; }; - 1ABF8D2D35FB298C1EDDCF4EED79EEAB /* PFFileStagingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 62A792546F47E6C090C59ECB9CA2104A /* PFFileStagingController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1B2D82F03E5A9115C9FA56EE380DC92F /* PFObjectConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = FB83ED9CED7C0E54F55F8D79DEF90CCE /* PFObjectConstants.m */; }; - 1B8D06F57ABB9C73800ED039173E80A2 /* UINavigationBar+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = A9B77D002118589E53B6B4E8E232CFB9 /* UINavigationBar+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1BFBBAED468A71E741B9B1EA8DDCD84D /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE54DB6796C0FB12AC1B5FA18EAC0D36 /* Security.framework */; }; - 1C4130F636D2C8035EA27ABDC8BF6BF0 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 3ACDA3B548B75B13FC54C1C0A484A047 /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 1CC6C0407717ACF5D33185F2DDBD4070 /* PFPurchaseTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C9CC69BD277ACA79976DE7696F7D082 /* PFPurchaseTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1D144D582E410C4BF4A26DE2BA6D49AF /* PFMutableUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = 075A9E0DA603A9C6B020AEE7FC5B7A91 /* PFMutableUserState.m */; }; - 1D6EB198244B1A45A8AC515FB55F8A31 /* PFBase64Encoder.m in Sources */ = {isa = PBXBuildFile; fileRef = CB99750FE622958635551E3E8BB18757 /* PFBase64Encoder.m */; }; - 1D8F9FD9CA6B7463F88EAC84744B131A /* PFQueryCollectionViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 400DCDC4E9E38584679B4F52E6D0D946 /* PFQueryCollectionViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1DE1FD67F8ACAF781BFBA35294731340 /* PFCloudCodeController.h in Headers */ = {isa = PBXBuildFile; fileRef = 80784BFB290943A33F98473FA5DED611 /* PFCloudCodeController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1E257FF36AC3E450D96E4EB09899344A /* PFLogInView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A6B265414CAC10A84A1B1D3A8C1DFF8 /* PFLogInView_Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1E2C5495D45D2D139E10CE25437DB731 /* PFProductTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A46A8CFC11DCD8D2AD372EC17EC957C /* PFProductTableViewController.m */; }; - 1E2F63454C414C566931F58FFD8B0366 /* PFFileState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 38AB88C207BEB56FAA7E8597DF2B4151 /* PFFileState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1E77F47173B565CBEEFE192E550EF3C3 /* ParseUI-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D2543AFDB68E8D9AF03BF013BCC4294 /* ParseUI-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1EA06503C7AF1CA5E13950E3E7D7830E /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1112AB4B9D811AA4D841354E84FBA4A6 /* AFNetworkActivityIndicatorManager.m */; }; - 1EA983380DF81353ED043D3FFCC62E7D /* UNIRest.h in Headers */ = {isa = PBXBuildFile; fileRef = 592E53EF56C0467535E73FA3211C5C7A /* UNIRest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F00ABAAF2ED02430D7D0DEBA14EAA0E /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A3039C23FDAA1C416B9A8B4B571DEF1 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F01150CCF0FBD91A951A60C457623EC /* UISlider+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 525E18ED456A67A6C083FF690D580D99 /* UISlider+FlatUI.m */; }; - 2010B04FB060C15EF817627F7325F019 /* PFUserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A78A342E3D58FAB3B9BCF2E2A6640FE /* PFUserConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 201742A2D20350811849AC7E279D89C1 /* FUIAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 73BC51738F3FAAEE3D05B8A6205DFB81 /* FUIAlertView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 20210326E14FAA2C05DEC09A2C822462 /* FUITextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 387423F5FDBDCB213C41BCA75B12DF5D /* FUITextField.m */; }; - 20C7252EEE066D91929BF7D8B5C6838F /* PFRole.h in Headers */ = {isa = PBXBuildFile; fileRef = 701CB3B6C89D2BF5586DA0598F75C795 /* PFRole.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 220645DE2CEE49F8337B8CEE9B24DA82 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DB6BC0F44FADD25C922940ACF72E8E2 /* Foundation.framework */; }; - 22CB5A83D72BF7789AFE172FA691F1F8 /* IQUIView+Hierarchy.h in Headers */ = {isa = PBXBuildFile; fileRef = 465D78482E8BED6A866F750CE0177935 /* IQUIView+Hierarchy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 23357D71E2218F329CCBA7272D131D11 /* UNIJsonNode.m in Sources */ = {isa = PBXBuildFile; fileRef = DBA35F1F048CEE8DCF4BEC592328E5CF /* UNIJsonNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 23A447603B862AF8F293FD85256A41BF /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AFA589B0E7364B47DD39581ED7F8997F /* PFURLSession_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 23DA567FCA367B078F006BC80B385A72 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = D21B7F4B6E163639A4CF504445B8B112 /* PFBaseState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 244B1AEF00568E1C2DF604812D37F68A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73AEBCE7EBCC8AA67FB8C9E277D17E93 /* CoreGraphics.framework */; }; - 245DFC6EA6488BC00D79FEBDD67120CC /* PFMutableACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 65FF31D34C22C23F62FBA20D9B7D7C22 /* PFMutableACLState.m */; }; - 246CDDDAF453166D28D1DED4D0EE307B /* PFHTTPURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 94C75B08294E8CBDFC8C121C04DFD0BB /* PFHTTPURLRequestConstructor.m */; }; - 25146AB44EF9BA9137640A1ADF1A7251 /* PFRelation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D4F461316B1B02A7332A20432095322 /* PFRelation.m */; }; - 25C7D6A015D734D046617621AD633F77 /* UIViewController+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E8270CB580B17C43E533286D51C2D7C /* UIViewController+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 261A6EC9FDC79586F2F79B132D39B0E6 /* PFURLSessionDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F215C518E3FFBEF197136D91C115EE0 /* PFURLSessionDataTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2651AC8373EFD218E9B31DE0BC70BB46 /* PFCurrentConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9650EED2F75B573BEE08F1336DE9E234 /* PFCurrentConfigController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2653154AB4F1D2D1EFC3A0D1B3EBDD6F /* UIButton+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F1C54627C59B634F5A8A947CB08EE44 /* UIButton+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2722BE2D92728CC58538D79DCCC6AB8A /* PFImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 29D52266B5750467BA0428D47EE49E5D /* PFImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 275BFA703F01104255FBA5C586059D95 /* PFCurrentConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 70876A25B7F7788BB693E26322A1C049 /* PFCurrentConfigController.m */; }; - 275E9C8E81428BFFA25A8A6792ED7F15 /* PFPush.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F89FFDAA4292F5FBED5DCC1AD20E60C /* PFPush.m */; }; - 27807F377EF9514FD15B400CF601DE4C /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32354577455AA4A647CBA8E3512A5B7A /* CoreLocation.framework */; }; - 27E3D7D2DADC9260E839D0BCE7970AA7 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 99E82BD8E277629EAEF26AA8860F2772 /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 28232786D68CFA798B58F0CB7B3053F4 /* PFOfflineObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C9E435584357B992826E680CBFE5DFF /* PFOfflineObjectController.m */; }; - 290353FFD70C6FED0E88244849792541 /* AFHTTPRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 73573BBD9C0340CC70CD913FB8E71C04 /* AFHTTPRequestOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 29B61540AF67174BB27CB2C2D7674E52 /* PFSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F3C1717348891BC57725A0810D7DF6 /* PFSQLiteDatabase.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2A1E59654B89E214A131F4AA82B8741A /* UIPopoverController+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = FBAFB0E07236F9DACE08B20299F82F99 /* UIPopoverController+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2A20DD6FD5B9EA1CB9D7D33AD25F6990 /* Lato-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AC61BEB041A14C32EEC908BD93EC3D53 /* Lato-Italic.ttf */; }; - 2A91F18E93B99740BB80D48C536DD0B2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DB6BC0F44FADD25C922940ACF72E8E2 /* Foundation.framework */; }; - 2AB0ABAC419E9261CEF57B3AEF01892A /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 95783CA02ACC8DE896F47A0F4FAD5845 /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 2AC664C8C0DC0C5C450FC5F535FC5CD7 /* ParseUIConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A0418A853E7240E53037AA831D5D0A57 /* ParseUIConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2B20A8A653974DF6C186E953D400934A /* PFImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 99C896B7ED249DADC8B48DB72D9370D9 /* PFImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2B732D60AE1287E07F1015309D18D0AD /* PFRESTQueryCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 981AD73BD30C2A11D8AA68A9DE64E0C5 /* PFRESTQueryCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2BF0B0FCAF17D3F661A9DBDDE4C1A0CD /* PFACL.m in Sources */ = {isa = PBXBuildFile; fileRef = 15AD0861C36EAA2BDAE76ABA34F7A71E /* PFACL.m */; }; - 2BF9D4C9E9BC46EA9B0C278A6192077C /* UIColor+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = CB1797C033036090B451088C89260E49 /* UIColor+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2C9CFCC48CDDF031048B7044BB349D12 /* UNIBaseRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = BD1854542CC0D92ACF2AB3F821DADBD9 /* UNIBaseRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 2DEBCB4D624508DCA9C8F86FE4A65AC8 /* PFHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = A83EEAE0B09A222BC1C9AA21E68D0205 /* PFHTTPRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2E8B5131B7D8788D688EF2ED7C654406 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22572AC878D5BE990EF6D072798377E8 /* CoreText.framework */; }; - 2EC685DD508470C1788C87CDDF007558 /* PFSessionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 20C725EA9656F619043E7F4C0CCBC219 /* PFSessionUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2ECF841EB016889D3AF3A8615708FB37 /* NSString+Icons.h in Headers */ = {isa = PBXBuildFile; fileRef = E1BB6ED375FB84D2A9EC26785EE0AF1B /* NSString+Icons.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2EF4E8B5DA06CF8CF7E4C7437C04390A /* UIToolbar+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D534F9545A9DA36F94320F0181C5501 /* UIToolbar+FlatUI.m */; }; - 2FA3641B2811D21FFBC3732564E11BD9 /* UIColor+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7C4C5ACBC2CA96E8A42ABD4A159BBB /* UIColor+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2FD368C3F18F5F6AFAE5D2C1166D28F3 /* FUICellBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D38CDF4EBB1D62CCE0EAB280D6C7478 /* FUICellBackgroundView.m */; }; - 301143C8C212294FFCC42F86D6A99846 /* IQKeyboardManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6868458725E6CC0FF0C6BC77E989CCE3 /* IQKeyboardManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 305A3C67521F65A1F3748A841816DC0B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DB6BC0F44FADD25C922940ACF72E8E2 /* Foundation.framework */; }; - 30686CFDA8810EA3FD79C81676D8BEE4 /* FUISwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F4056A3D848C81DD6C4943C0C3DEC17 /* FUISwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 30DDAD1EFC6C9D23DE6DC67CF129B024 /* PFObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 2985BFC5C86CBD73F98331A8CBE0AC82 /* PFObjectConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3153F65AE472C546D0B82A0506EAE405 /* PFFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B9AC06D85D58069D13A34C1333509EEE /* PFFileManager.m */; }; - 31A5A0D5B06C83E2BC06706B5C71D701 /* PFActivityIndicatorTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 020C493C4366159B060D27D05A4264EE /* PFActivityIndicatorTableViewCell.m */; }; - 3202AC804F373286713C96F5C232CA05 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EFA3E7B0A7046719D611EF8F8C9A7939 /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 321EFB06767949574D5A41A53BCBD75E /* PFActivityIndicatorTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 8054A84736C7E30F048F96C56BF8AD15 /* PFActivityIndicatorTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3285313A5750267631C83B26AA91C70E /* PFRelationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = C059DE90663E3A5B3FAB03899B3EE981 /* PFRelationPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 32BE0FB08D9ECD2974197D862E320E36 /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 3772DE6021E4CAEBBA3DD14A4CF8ED7D /* UIWebView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 33CABB84169CD5A9EA49749CE8D5AF69 /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = BB49BEF95C912EB1E9E2500A8EDD423D /* PFConfig.m */; }; - 33EA698C418DC89924743F66BEBD4BB1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 884235E504353D70ED1552FA3C950881 /* UIKit.framework */; }; - 34BEE08ED8F8B9B3B939D4D732CFBEFE /* AFNetworking-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E5C14A4D20250982D60F0E6603D66AD5 /* AFNetworking-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35BD8AE2C1DFE6EAFA33AD500529D6C1 /* PFHTTPURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 36DC9E026ED1115FFFEBA4E7E80205D1 /* PFHTTPURLRequestConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 35D90B1648728CE3D3B8899C45F81C6D /* PFCachedQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 11F23EFA8DB1918E42FADA63407FBEF6 /* PFCachedQueryController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 35E2BE33BEBA6A706183B7236177FB67 /* PFReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 39965C065F1A6625731B58560E98A306 /* PFReachability.m */; }; - 362782D9DE0225DE35683BFEE4BD74D7 /* PFQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = A72EA68DFEA7E21C47FD42437F8897F9 /* PFQueryState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 36287F3CFD42E28E556EA2DBFEACEF13 /* PFRESTSessionCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 52781911B0E8FC1A6419C6DB628698D9 /* PFRESTSessionCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3663EF1579F35B5063E6D197E3AB625B /* UILabel+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = D037863CFD3CE4061E8C22D77EE6DD5A /* UILabel+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 36F6F33837CB843338FDE20F04EEA53B /* PFResources.m in Sources */ = {isa = PBXBuildFile; fileRef = D53D3A6402C17CB2FB58232563BF2DFC /* PFResources.m */; }; - 375C6DC137523B08F9A51780453E0435 /* UNIHTTPStringResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 168335B29B073BD3E6C9DCE33793F3F3 /* UNIHTTPStringResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37A5FFB9EF68EA6EE760C165B863D5CC /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B6C8C1244901A4DC13F98B0BD264307 /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 37C62F1CCE30D9F53B739FD6A1564EBE /* PFPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = 70D415D5D8A179CBA96E760BAA1CEBF6 /* PFPurchase.m */; }; - 38CE9B95E08CBFE1FECE35CA70A80585 /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E4BF8807282EB99DD8B3198775CCD440 /* PFMulticastDelegate.m */; }; - 38D3FF3179ABF5053A3020FAA1734BCF /* PFCurrentUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 98ED373FF4FD8124A98CF4CE145E1AC1 /* PFCurrentUserController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3908E0D63B537D99AF0305F4B6368C4E /* PFOfflineQueryLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 91D3B95A12116CBA1AE9ABED59FCEEB0 /* PFOfflineQueryLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 39210257D058B5AA51250AA258FA6899 /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A60E6832260DEEA85851BDB87E31EFE /* PFRESTConfigCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3A7FE81FF3C97DDFA9F5D7B692369683 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14F57C1395EAAA6BF0969FAF3CEACB04 /* SystemConfiguration.framework */; }; - 3AF6CD10F85C9E6BCD008611943EA541 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A1A3BAE08183E61A9D99E03845A1950 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B371953B0238DB248DE1BC578CC1763 /* PFActivityIndicatorCollectionReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 564066383C34EA69FF40575B4F602BD0 /* PFActivityIndicatorCollectionReusableView.m */; }; - 3BD2E7A18782C72F168E30E45A368B73 /* UINavigationController+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = DBCC900D32AFEFDA4E083D025D1CDCAC /* UINavigationController+Chameleon.m */; }; - 3BEC156281D69151048A9799FB68580A /* UITabBar+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B0290200A3CD16A2526FF77F159042C /* UITabBar+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C64DD057709EE6FBC1C3ECA57190668 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 21CC19E2C87AFF19ADB03FA733CB1953 /* CFNetwork.framework */; }; - 3C66A01E32541AED7FE6DE40F9603317 /* PFDismissButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 430DF1B522DBE43E7FECCD02BD215175 /* PFDismissButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C993E9055C907D131B70A13725FCBD2 /* UITableViewCell+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 11D918B1DBF342814743C236913D6EEB /* UITableViewCell+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3CC1C5E8E24095195429DCEC031E5142 /* PFQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = A6F89455E34EE7028968AEDF82F78CDF /* PFQuery.m */; }; - 3CE2490C31C654B4FC925FF423DD59F6 /* PFQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = EA3DD2288239EFA0AA3CB9B39F38F54F /* PFQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3D74313147EEE5D8185617B018976DB3 /* ChameleonMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = AF77BCE7F4E600FB0FF25AD70D5860A0 /* ChameleonMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3E2A5D1F275AF382312EA06AE35D31CE /* BFDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 68DFA1C5606B064C64972A0D99D79614 /* BFDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3E2FCC09E1EA105175022BD457421DA5 /* PFCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 10C69C37D20A9F965DCCEBE8A59BD1AA /* PFCategoryLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3E41EEEF24D5E3A8B51F6913EB56C1F9 /* PFCommandRunningConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = C9BB2BB3ABD697F1A0B2EA61302872BA /* PFCommandRunningConstants.m */; }; - 3F7ABD7936923EE0144B79C5A9D149D9 /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 46B4B08EA86C057DDF2D5999D4AD5896 /* PFRESTPushCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3F83EB6916D3C7D050C0012134605DED /* PFResources.h in Headers */ = {isa = PBXBuildFile; fileRef = 75141355D477772C4B5E5DD52B69FD10 /* PFResources.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 401C2DDD1436B4AD6B3A43D775389EA4 /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = EB1C14F4C3EB11646EDE6682C4237038 /* UIButton+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4083C11735406B070C50A3F0EE869D82 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A51395ED2E252C6A88DABEFDBDDB8EE2 /* ImageIO.framework */; }; - 4097EF9AA60FB31D9363255EB2736A04 /* PFObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = C67B9105DBF2A4806B810D4C91492A7A /* PFObjectController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 40989E62DFC2D61D9AE058DDA08D2283 /* PFOfflineQueryLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = B0716E42F47F257A3770B7DD8081EDC1 /* PFOfflineQueryLogic.m */; }; - 40F91C3C6723E7A874F8F1C2CE94E25C /* PFACLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 99A99B181BD884F5B8D26ACFDE5446C2 /* PFACLPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 410B8B0EDAF6420C411731D37B919BA7 /* PFAnonymousAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A053E5374735D20B3CCEDA790784BC5 /* PFAnonymousAuthenticationProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4126FC06B09C1514C4623BEF344EEDF2 /* AFHTTPRequestOperationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DD5966B7E55EF3B77EE33556D7F3B042 /* AFHTTPRequestOperationManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 41B96055DADDE86477BA31048B29A279 /* PFRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 49078E325B83F07DF6DEDE0A8AF6C0B9 /* PFRelationState.m */; }; - 420E5F12AB7FC7093F055D7B3EEE0595 /* UIFont+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 32C8E3331FFE95E5B0CE1F1F65D7EE57 /* UIFont+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 42DA9E8C04518B363512866ED3437C21 /* PFRESTSessionCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C59735CBC2ADCF341B3403FA4E54F31 /* PFRESTSessionCommand.m */; }; - 42E18C787CA22639EF8861529053CA25 /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D6B0F03D8DC15123121CC57FD885AC5 /* ParseModule.m */; }; - 43BC8D2611C04A47C0BE9FFB228E07A5 /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CCBCC644097EC37BCE679EE3F3E76534 /* AFHTTPSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 443CA6F7BCEE6AD0A10CB1B7EAAB0F49 /* PFCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 96F4CF51DCA1800B1216B335A1065B20 /* PFCollectionViewCell.m */; }; - 44ECFCC0BC6C81844A0A7E9F0AAB84A4 /* PFURLSessionUploadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 670A877E489DE7EA116B48C111981C8A /* PFURLSessionUploadTaskDelegate.m */; }; - 4544A6870F05203BEBD5F0E110000F79 /* UNIHTTPBinaryResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = F9EF953ADCADA1A251E9323131F70F15 /* UNIHTTPBinaryResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 45F3667CBF936682FCC7CA8BC4CC3D5A /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 184CDD6D4BEC4A05DA974D0905409BB5 /* BFCancellationTokenRegistration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 46412ECE623580E072CBD5365C6A3B6D /* PFProduct+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 96445D7015BFE014D85E10B2485BED3F /* PFProduct+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 468FF44FFA482F55A8F2C3380821DFAA /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D20CBAAD1BA598F1D6247B41E4566FF /* PFPinningEventuallyQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 46DE21C634CA5EC0092EF560A0AE9F83 /* PFAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = C120EB784B7384DEC6CC34FCC8B9EA6E /* PFAnalytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 471F4767970DEA5F148FCD710A036038 /* UNISimpleRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 10C40E8D14D8388ECC0708FE0A0E4FDA /* UNISimpleRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 472F9DBEF608A75DAFFFE2DA99EDC720 /* PFQueryTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A26E4702F966BF133A51C178E3F12663 /* PFQueryTableViewController.m */; }; - 4806A50F7A4DAA174839EFBD769CEC28 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DB6BC0F44FADD25C922940ACF72E8E2 /* Foundation.framework */; }; - 48303E0C3327C7EB6FAF609E6B42387E /* UIImage+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 80A6747CA95094227C1769E7029F101E /* UIImage+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 48CAF2410DF2D6C38CC34301D7FAF80B /* IQUIView+IQKeyboardToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = EBFA7A7850EC4610EEB3C6261E1F2785 /* IQUIView+IQKeyboardToolbar.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 4920C0B4C91124C5CF9E105EE2D61F0D /* UIButton+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = C47EA5E0FE2EDE215EF920002C45CABC /* UIButton+Chameleon.m */; }; - 4AAC225B0755F97FDFDBEA15F19DF8D9 /* IQTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 989BA274614EE585E049BE41CB1B0E3D /* IQTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4B101F882432C961929B98E8ACE9EA3E /* PFACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = F83E541BE3033DDFE40F96410A3E848B /* PFACLState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4BDFF6BEA49BDB9DBB4E06E17868248D /* FlatUIKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 781AAE433E7B2E65709B75066F0B5B8D /* FlatUIKit-dummy.m */; }; - 4BE30B66812541495636DD163FF1883E /* PFMutableQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = A528111D7A936F28A8552C9982E93715 /* PFMutableQueryState.m */; }; - 4D08AAD4280B4F3DAF62BEE648397C5B /* PFColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DAFFF182ED1EBA987995F61A6A223C8 /* PFColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4E126FAFFB6F5CE28E3E624C3EDC0F91 /* PFFileController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9981EDA58981856A99D4405188D1658 /* PFFileController.m */; }; - 4E32C6B26518F18DC4AB3E225B86EE88 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9690030D094375D9A87123004BEEEB3A /* AFSecurityPolicy.m */; }; - 4E94B8F460BF431A50D94814F7C8AF61 /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = E58F8383E7BEF7B6D7E8497170CCA20D /* UIActivityIndicatorView+AFNetworking.m */; }; - 4EADE6F30CCDB0CB4E7DD0F9CE2138DD /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14F57C1395EAAA6BF0969FAF3CEACB04 /* SystemConfiguration.framework */; }; - 4F093F6FBA6E6B060CF66145CF214E14 /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 340FDC8139576C7FAFDA34FC6FA32C81 /* AFNetworkReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 501928C7544ADD4A1C1D94EC4C80504D /* PFQueryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = CD86AF14E6AC36C77A150AE85409AE37 /* PFQueryUtilities.m */; }; - 5028F505B6C29ECC75690F30D2EC562F /* PFRESTCloudCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F235F78B07EDEC0A4ABEA5492758AC6 /* PFRESTCloudCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 50D3556B4B8004C309EA48A3C98855EF /* UNIUrlConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = CCC3A88CE615BBD76C105F8042FB8D4A /* UNIUrlConnection.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 50E14D6844CEDB186D967AAB4AA6614E /* PFFile_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2338E18E87793296BA6AF5025AC078AA /* PFFile_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 510E3B949ED2FE3D73B41E8FEC958B0F /* PFCoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5757B6527369A55B6115FA6887EED9AD /* PFCoreManager.m */; }; - 5157B840FF52F188E3E995231CBBDA61 /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = C1EF55F530A54A7FA4E2A1F21B9C2A6C /* PFUserState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5170AC51A5B179F66390148099B8DBD2 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = F26F2A46EFE8B567CF8E9058C95C550C /* BFCancellationToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 51E4CEC68B0F3280E78E936DE2C802A8 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 41B0B19F9EC056DDEB90C861DD253385 /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 520223B8DB085DA0141770459F092D61 /* PFSignUpView.m in Sources */ = {isa = PBXBuildFile; fileRef = D88644925B762799165B07723831F61A /* PFSignUpView.m */; }; - 52378D0E3E8D15E556AD0D938C565904 /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 64739D6CD551B96EA4F5A2696E757077 /* PFDecoder.m */; }; - 5246DA130CEE97E101DAB2A2A6BE3589 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C0356BBA99F327689450897B320B7B3 /* BFTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 52690608022C3FC67334E1B4CEFD2075 /* Parse.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CA3956F2F7B9DB4B12A3579F8BED6E6 /* Parse.framework */; }; - 52C42A3F8ECB3F273A0FD4F686914C47 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DB6BC0F44FADD25C922940ACF72E8E2 /* Foundation.framework */; }; - 52ED970A283D03D34DC00909A1999A83 /* Base64.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A26B58BB9CF52CB918DB7AFCBD39A82 /* Base64.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 53171C2389BC7B3907FD218BB525BE7B /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E004D344C095F55232FB0E20CE0039D /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 53346BF42179DEA6DC34CB3365E11DA8 /* PFSubclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = 51E1566E07DFF49B458706F904502E3E /* PFSubclassing.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 53DDC5A20AE0FC36B9EB9057E73E2334 /* PFObjectLocalIdStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 05966AE09355F02D4FED4D2118B95475 /* PFObjectLocalIdStore.m */; }; - 54721C3C85DE8FC60FD62F346A8BC198 /* UIViewController+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = F3D49D3F596E2FF8547A010509605767 /* UIViewController+Chameleon.m */; }; - 5493FA81C5903BF9869E1907692EEDE2 /* PFPropertyInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A95E9EA935826FB78AE6D397AE3194A /* PFPropertyInfo_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 54CCEE7F9DA84B548532A8ED8BDC94FA /* PFRESTCommand_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D66B6E411C773A4C325070F091A185F /* PFRESTCommand_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 559511CDAB19CB7BE18CFB3FA8475EC6 /* PFReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F95840228CCB23871D1FDA853144584 /* PFReachability.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 559DF047869A009C0B54AE0FE810A629 /* PFFileDataStream.h in Headers */ = {isa = PBXBuildFile; fileRef = DD9685C6D6B07C68DC58D461BAABD9EC /* PFFileDataStream.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55E51673B1F545892D10FEAF5E212CB0 /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A22E843656CB49C6E68E4BE98036F2C /* BFTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 561FDB72BA8B61417BC0109D57FB53DD /* Lato-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A82C0A5B3CB5F1436C7E2A5F0543ABC5 /* Lato-Bold.ttf */; }; - 5638E8C1AC3D36348BF52B821A63184E /* FlatUIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 41FC81788EC8B32D98571DFB25FFA43F /* FlatUIKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 56A004470E655CD8F393A21E3C1A04A6 /* UNIHTTPStringResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 3551766882C50016BF54BEF1A2806D87 /* UNIHTTPStringResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 56C20D36C1BE8A7DAE8498DA7D73F8F7 /* FUIButton.m in Sources */ = {isa = PBXBuildFile; fileRef = FB58DA014582A87D188CB8089758DF86 /* FUIButton.m */; }; - 56C8D4F00869E61F210A24E0EE8F3A13 /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 38B24E4D6538C00EB19CA86398ED5FA7 /* UIActivityIndicatorView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 57268F36D7FDFB0B9FF18B194021E66F /* PFDefaultACLController.m in Sources */ = {isa = PBXBuildFile; fileRef = CA680C5B2F2FE889E39264C907BCD1EF /* PFDefaultACLController.m */; }; - 57711B2EEAA9634082C80C5B5B2685F0 /* PFRESTCloudCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = B65B209398DEEE0639810752FA7A18D7 /* PFRESTCloudCommand.m */; }; - 580666EB7E509B4DF24325CB34CEB527 /* IQTitleBarButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B27A3D9E9D60FD7397856DF5BC27CB4 /* IQTitleBarButtonItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5833A4E8C4BB9D66FE2E6046AEAB0A82 /* PFPushPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 50BA63747E27C27E4D5B2B8E842C794B /* PFPushPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 583A8B552243810FD5CAB2C252EA246D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F0280896C56576AC9033B1015CC54A /* QuartzCore.framework */; }; - 58875F6CFB33E6C2577F3B66DC98D408 /* PFCoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E44CE59217F10B74270250DB12ABCBC5 /* PFCoreManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 58F8F5123EBE7C0BADAC8CA5940E15B2 /* PFWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = E10977BA6FFA295F2AD61B795B2C7FD7 /* PFWeakValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 58FF88FEC2138455D35915B1A410FE97 /* PFUserFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 7158AF2B7D008CB9610944ABC757C3D0 /* PFUserFileCodingLogic.m */; }; - 59259920887AD1C28099DE102068ABBC /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 61A6CC3AD49D1EC0236AC77C6C3FDEE2 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5A34E208AB8566495FE40B32FC0F6CDE /* PFObjectUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 0091577C9867D249011C372417312830 /* PFObjectUtilities.m */; }; - 5AF0906E3CC401EF05B9E306B3EFD499 /* UIBarButtonItem+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = EE6C59A2AB9D0F99FD7D3E3AA0512736 /* UIBarButtonItem+FlatUI.m */; }; - 5B53AC29851339D724FE275129B15F51 /* IQSegmentedNextPrevious.m in Sources */ = {isa = PBXBuildFile; fileRef = 672624EB4DB14FD16D375F3074B89502 /* IQSegmentedNextPrevious.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 5BF915D0480268928F160D158F775441 /* PFThreadsafety.h in Headers */ = {isa = PBXBuildFile; fileRef = AED0C7F4991EEDAD40B929FE5954A58A /* PFThreadsafety.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5C00F9E0420C0AEF441F7DDAD11DB9FD /* PFSQLiteDatabaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = BD7F6400C626D55400820230D04C5F7F /* PFSQLiteDatabaseController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5C92B2B9089ECEFB4F281922A5667DF1 /* PFTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 320CFC4C5A2917CD08B1E18952FBA50C /* PFTableViewCell.m */; }; - 5D94624CF0D13486F1116A90AC544355 /* PFQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E14F114F990190EA018F59BFD8A7CA1 /* PFQueryController.m */; }; - 5E29911F3B449B3B34A5F5FE17091D65 /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 7625861250EB678747DBDB0DA87F845C /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 5F072C98A3888CDCE924B1E0AE6CE025 /* UITabBar+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = A280C3E99D716C42901CD456018C0E66 /* UITabBar+FlatUI.m */; }; - 5F2C44621812CC7FC58C42540E2B8DF9 /* PFObjectFileCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 62CAFF354F98B00137C57CC547DF0DF1 /* PFObjectFileCoder.m */; }; - 5F2F9A38D20F0DA3A1216644C2FCE99F /* UIImage+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 49CDC6C1BAFD451541A07318A6666A2F /* UIImage+FlatUI.m */; }; - 5F3CB2BB91D0113EFA8C7BE2EFF0C515 /* PFObjectSubclassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E7B7161635919425AA5D7D3A5558804 /* PFObjectSubclassInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5F48BA1FC07FF9E9FB70FD20539B73D6 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 448B673FD293D7336F276231DF7DE1FC /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 5F4B66E46F7665627618343D1ED4D14D /* IQUIViewController+Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 60500F371C7FC40E17FBBDEB2A5859B0 /* IQUIViewController+Additions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F87DC7216AAAC3E8C5F686FCD75504E /* Parse.m in Sources */ = {isa = PBXBuildFile; fileRef = E9FB1635B38CC6137103F129D89F7308 /* Parse.m */; }; - 5FBC0462F76FE448FC25613F5871DD3C /* PFPushState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 49E8615A4B8AAD457BEECB6AC39FBC7F /* PFPushState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 600FCE6E7E6328890DA0C6492FFF9DFB /* PFCommandCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D14E15CFDF8111D1EE5A9810542B455 /* PFCommandCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 602A4FFEB249B2EAA9CB1577144E15F7 /* PFObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 349C704F429F4C4E216F689070040BB4 /* PFObjectController.m */; }; - 6047CAC2349B1C186BA37A51DE790C9E /* Lato-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AF63697BC3DC8455B0CDF64447936DEC /* Lato-Regular.ttf */; }; - 609379F36815C46BB2D1DE0D0D79A4D9 /* PFAnalyticsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A94CB5EDDD62CD822188CBC63AEB555 /* PFAnalyticsController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 615C7E0E8B8ADA53684AF3C18E20C103 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 659235A87B6E9B8D50AC86824833B4C6 /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 61F85E9DCA99CE232D1BC17CBBA75F17 /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = AE7C306D0EC5E02AF1AC9D97F419ABE4 /* PFUser.m */; }; - 6385A4FCE4594DB3C4C0AE3630B86375 /* FUISwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = 973ECCD84B38F38AD2373E6B314D30A7 /* FUISwitch.m */; }; - 63AC6B54C96332522D2E1D3A2B5A9FCA /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2185FDCDE303483489621D861E875441 /* PFObjectSubclassingController.m */; }; - 642EB58AD882CD39AC00D6AF2D86AB0F /* PFAnonymousUtils_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 583A8A566A6323A2BA9A8CDC16265050 /* PFAnonymousUtils_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 64942E20979F0BBFAB53A9587344574A /* ParseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C9EA3E96E8F608083FF2042FAC5C1E5 /* ParseManager.m */; }; - 65068196154B9043E9F0CD4E10A6FCD9 /* PFSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5074739FCD9F69FED5FDF7014860BB24 /* PFSession_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 650C1E4F37B6A46F29FBE1159B4FED23 /* PFPrimaryButton.m in Sources */ = {isa = PBXBuildFile; fileRef = F2E43F17F2C4AFCBD7C41B354CFD4110 /* PFPrimaryButton.m */; }; - 651A97908209001C692BADB99D592CC4 /* PFUserAuthenticationController.h in Headers */ = {isa = PBXBuildFile; fileRef = CCAD3E3BBFF0D6A1F1CBE0F58445B6C8 /* PFUserAuthenticationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 659516FF10399AFA658E5C32D30ED819 /* PFQueryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A7E2B8D9A365D86227F46D0BDDCDD07 /* PFQueryPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 65C63243CF9B34F40546B4773EB0F188 /* UIFont+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 06E9A79DE9206B87BE74F471F54F9AD0 /* UIFont+FlatUI.m */; }; - 67B70A96D6BBBB9C9DC6D7BC1BE729D6 /* UINavigationBar+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 017A97106C6887F74558A68F58973669 /* UINavigationBar+FlatUI.m */; }; - 67BB72A2583031B6F4C77075DBD1EAF9 /* PFRESTAnalyticsCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = F4013A55E87016979FBEC0CC2D707560 /* PFRESTAnalyticsCommand.m */; }; - 6822E7FBF25AA2E3447B742A8C012E17 /* PFSQLiteDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6463ABEE30CC6F5D3278EB29F094EA5C /* PFSQLiteDatabaseController.m */; }; - 68CBBF9F8662197E97FBC617B1F5E612 /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EC2DB9D26240C2630858BA37A5591DE2 /* PFURLSessionDataTaskDelegate_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 68F25493DF29423FEA798D2247A6C918 /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 09E4578933143185EC9EA7F753E6827D /* AFSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 692DBA32F537001D163F3420F1FCF576 /* PFURLConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 161E3FAF78679E3EDFED60CD40654CFE /* PFURLConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6957DB4354F09F27956C7BD159A738B9 /* PFRESTObjectBatchCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = FF33B85D0ECE3439AEBAC37BDAA6C3C1 /* PFRESTObjectBatchCommand.m */; }; - 6963CDE7099BEF7479F5B30BC9CEE780 /* PFURLSessionDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1990BFF9E6D313BBE004A6390A0AC1D8 /* PFURLSessionDataTaskDelegate.m */; }; - 6986AEC5F67808322A3448D59D93D907 /* PFUIAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = F9B353920B0C8860AD30FFA8FB0E7C84 /* PFUIAlertView.m */; }; - 6994FD62E98115B34E1064735491A3E8 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FBC35C1E8CA28EDFF045C5C6A6AB64B /* BFCancellationTokenRegistration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 69A0BF96DC2497ED9235983A1F3C99D1 /* UIColor+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 679635BCDBAAA84085EA29352E7478C6 /* UIColor+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6AEED4415FDF6F732EA5FC7FE91DE387 /* PFAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C9ED06688BC1CB99B5D19703F26282D /* PFAlertView.m */; }; - 6B21CA125A5B44F5D0CF90AEE2B4A390 /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 9D3AD8A69DC720901BD1A037490C5F03 /* en.lproj */; }; - 6B4F96C280717746A98B11A1EAFD274F /* FUIPopoverBackgroundView.h in Headers */ = {isa = PBXBuildFile; fileRef = 895783DFE891E3A117F5B9AE9A04C4CB /* FUIPopoverBackgroundView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6B9014C83E7F6D9632EB74343BEE2582 /* UNIHTTPResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 23ACB2B7432184BA453E98ED0E2EDBED /* UNIHTTPResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 6B90807B73E419A00ADBBE09FC10AA0A /* PFOfflineQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0113C7DDD735C654297621D228AFDEB3 /* PFOfflineQueryController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6BCECB2C3FBF48D1939E2B0CB01369BB /* PFAnonymousAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B69F1BCFE902317AFA58B0D3736D5FC /* PFAnonymousAuthenticationProvider.m */; }; - 6C732292C1F52E0D63FE1366A5167CCF /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = CB7BC0721D61927E1CA5E5A15874B94C /* PFURLSessionFileDownloadTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6CE894F876E1564D6E0ED560102A78EF /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC23D8D1583323AEC4319A567379AE0F /* PFMultiProcessFileLockController.m */; }; - 6D48CA47C9FC90699498549AB385B7AA /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FF8FF2DDCD099016EB3DFD7FA99B73ED /* PFEncoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6DA2ECE77CC2784A64A26E90F014A43E /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = EA7C8A67AD890502B88C38EC734BDD54 /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 6E3613B326C980EF5EE22FE9B8409521 /* UIView+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 08ECFA9AF8B024A3D543EE06C7273F36 /* UIView+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6E42ACBF90AC267ACDDA8799CA89BB64 /* ParseUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 280F5D3DCF3108AF47CF8BB4F3A6E251 /* ParseUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6F0672EDB0EF772409C5208AB63D2A64 /* PFObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 30FF88F63B1181C7F1D5B463098BD749 /* PFObject.m */; }; - 6F211D52A51BB3B7132D3C533DCD38FA /* PFPushController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F9A09A43164225380B1BDCE467353C7 /* PFPushController.m */; }; - 6F2B81E52BF94D21B7E5998594B45660 /* PFLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AFC27DF393243493EC5ECBE91DD283C /* PFLocationManager.m */; }; - 6FB9CB1FEFF184671C880C6F1367CD9A /* PFHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C6E13FD355083FC23FDDB87F0B9D918 /* PFHash.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6FD778F16C4C4B1E0F0EF1D062793381 /* PFTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = AF65D7903D16F1336FA4C292618EE4D1 /* PFTextField.m */; }; - 6FDE95FB21B7F5E1EC7A9F49489DAC62 /* AFURLConnectionOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CB6713546ED5550951A36F155898DA4 /* AFURLConnectionOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 701B467861F2E4FFD952FB4222CB69D1 /* PFBase64Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8733C8CDCF74E51CD4066CA88EF3DEC7 /* PFBase64Encoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 70DE08E9F704FCB278344B3E28BE3CEC /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 43EF76379A5B47561340CD04EDED49D0 /* BFTaskCompletionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 711F182E232E170C30B9A4910D4F4A1C /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E85BC94017DD51217EED919EF5604C8B /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7123412A3B504586417AEC7FDCFA9A0A /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 894E5DA93A9F359521A89826BE6DA777 /* Pods-dummy.m */; }; - 716C6053E4E72481420CEDBF7B4D97F0 /* PFSQLiteStatement.m in Sources */ = {isa = PBXBuildFile; fileRef = FA0A405D111BD368A804BC5E6B23F3DC /* PFSQLiteStatement.m */; }; - 717FF800BFB8012F5E9BF2C5E5E6CEBD /* PFSQLiteDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = B466BAD6E30106D96C85707E09AA357B /* PFSQLiteDatabaseResult.m */; }; - 719C7DFEF49882C658A4AB9BBF945214 /* PFObjectBatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = DEF456870840E66AE413DE98C5013DA4 /* PFObjectBatchController.m */; }; - 71C23B2C8D4F20077DDFDE7592C85F94 /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 6324BF755ED8BCFC32F3DDEBB21DA098 /* PFAsyncTaskQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 736C8D4C0851A2F2334668FFF20DE0B4 /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 7D2C8F743E5C2B50ECAA21543B1A6444 /* en.lproj */; }; - 73AFC60BBDB9F55916E851790E95BF7A /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F0280896C56576AC9033B1015CC54A /* QuartzCore.framework */; }; - 74BB711F61F6158AB83734F028642AD0 /* IQKeyboardManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AA23AC7E45B8B079E7D327730D22F393 /* IQKeyboardManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74CFCCDE620A8A7618A9B30E77E774CE /* UNISimpleRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0796250D30A27D5316D74D277081D040 /* UNISimpleRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 74F36D84B65EC8A5DFFACB41425FD8E8 /* PFLogInView.m in Sources */ = {isa = PBXBuildFile; fileRef = 38DB4714E17A08D8DCBCDBBEEC3895F4 /* PFLogInView.m */; }; - 75F6E77D0C3CF4CB2D8DC5E6A04DCA2B /* PFConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CA6F9B308027556F4F9377422333BF6 /* PFConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 769360684E30131957237D08EB031319 /* PFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E07AD1BDC7C8535E1A0A1B7958025A92 /* PFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 76C1FA68EFCD242119622AE2CEB4D24F /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 3593A73D342B1EFDA86078A912A7AABD /* AFURLResponseSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 76C72D9FA8C86EBBC7E3E4AF7F0B4BB5 /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 12141DC6DC4E3FFE804DFE337A3374C7 /* UIImage+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 76EBBA34637F5D9263E2F80DD560327A /* PFPushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 08A2139169368DCEA2B9DDFF8FC52DC0 /* PFPushState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 77279ECB1DD6E318B41237C0C81AA22F /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3829F70779211216073D6EB001F14DDB /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 777CA4DC7736301999870E265BC46206 /* PFObjectFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 45E05BDE47E9DB32B931EE360B02476B /* PFObjectFileCodingLogic.m */; }; - 77E79A433697DD877A226FB07BA3B6C7 /* PFQueryTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = B7882188B6F860973D29C8A074FF8023 /* PFQueryTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 78861AAFBF083EDFE5EEAE5224092B32 /* UIView+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = DFD4D5F1EA65A4AFBD41C94594DC0926 /* UIView+ChameleonPrivate.m */; }; - 78A8A850CF4468F3941A7C0FED24B478 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 952CDBE90871479F4265EF2DFD8AE480 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7999F436677B92F6DDA1C3D45B67762F /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 640E6EE31F76BFD4D000EC49F5EC7E9F /* UIProgressView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 79D287D48B2A81896F365CA21F0B27D6 /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E971BE0DEBFF48B45DEB3916FCECACA /* UIWebView+AFNetworking.m */; }; - 79FD6CD16310D02D71E73BEFB2348E25 /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = A11BE6F0EF47FDB22B242D1F0C0D6575 /* PFEventuallyPin.m */; }; - 7AE363356D9DAF059498E982C5BD0AD9 /* NSString+Icons.m in Sources */ = {isa = PBXBuildFile; fileRef = 1975C53F78F9228E9C7F23E9F4ABA5FE /* NSString+Icons.m */; }; - 7B551F81DAEAE48E0B109F1E95DC593E /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = EC56529C7E683E2B46B011FAB4F87A2E /* BFExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7B7C3638B6E988319B3FA952C346CBFA /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F7534EE7BD51C1E47D6B3FB6990034C /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 7D070B8F5BB7F1528204D9F2B7476300 /* PFRole.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A03934E6774452C43AC8C689387D333 /* PFRole.m */; }; - 7D866D159BD8DD5F53DED0E5051D2958 /* PFCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = F9476414FFBA4A18C4113640F84A51D9 /* PFCollectionViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D99F27B54676A48D67363BD873A7B8B /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 531AB65EED2C24DDFCE29F4E32570062 /* PFURLSessionFileDownloadTaskDelegate.m */; }; - 7DBC9A33EB62F47CEDD87B597862A5E7 /* PFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 102B0616995BF67CEC55063F3F545963 /* PFFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7E62EA04B22D78CABD00D2A263D579DF /* PFEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = F82E6BDCE885882BB80C8E02C363DC27 /* PFEventuallyQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7E641831952CCEA0E69040B9C2A763AC /* PFCurrentObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = AB7234A3F4D28A8A54D6B0BE9E88B0B8 /* PFCurrentObjectControlling.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7E72F70FA02633AA541059978F9C6F58 /* PFAnalyticsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 970EFE29AFD068B739491AD36219AB30 /* PFAnalyticsUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7EB69C6302B1F8B6EB8A6A2B1235BAA5 /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FBA40CFD6FA663EBA96754B663BE570 /* PFCommandCache.m */; }; - 7F2D1B51012B9B065FB7A7F045F17197 /* PFCommandResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D84102C012613A8D84A4EBD474FE57B /* PFCommandResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7F61EAC54FAB0FC8FE6D003010E5F53E /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F1832873F525EA20EA9754E692770264 /* PFGeoPointPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 80B16D5378DE9FEC09BE4DD6B6736251 /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = 02803148C151FFBA5545DBA0D2F6D83D /* PFCommandRunning.m */; }; - 80DB3811EC52219701D567DD67725E8A /* UNIHTTPBinaryResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BDCA1AAEF4745A195464ACE049E133E /* UNIHTTPBinaryResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 812B691E8FAC951A069A1BA5C6760663 /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = D47E2B50535BEBB984A44A5E380A1899 /* PFMutableUserState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 81544A20CF8B4EE6B524F41A4EDC25F3 /* PFMutableQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 043864EF7F65C382A51BEA16C5EBB115 /* PFMutableQueryState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 81D506DFD069CB4DD07720C7E5241A00 /* PFRelationState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FA8BCD13675B9DB1665D76BA15065FFB /* PFRelationState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 82480D9A8C3DB40AA7FCA061306BCE82 /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = F51B64596F4498733BDF1F586BBD2219 /* PFCoreDataProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 82FF48E83B021EA3C284BB01D5171684 /* PFAnalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = ABA91E0D9EFC2B073550E47FAD4B6D5C /* PFAnalyticsUtilities.m */; }; - 834DB7506CF876239CFB19FE84EA3311 /* Chameleon_.m in Sources */ = {isa = PBXBuildFile; fileRef = F8EDD29F24657A06C6E7F595BEB0FE2F /* Chameleon_.m */; }; - 8437F2118C0FDBB86032177892F5D133 /* PFRESTCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = E47461E98082A9CA98BD79A9B64FB02B /* PFRESTCommand.m */; }; - 84A8E078987034C1AFF3E7E0A8DEF315 /* PFAnalytics_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1543959E7A6D54C0513BD5007D1E6C06 /* PFAnalytics_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 85525C684E0D4BEB7CDE65630A944455 /* PFPin.h in Headers */ = {isa = PBXBuildFile; fileRef = FF372967FCF6DDE5A2CFFED0A29DF613 /* PFPin.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 865D170D75568308E5B3162A4B7D64D4 /* PFPushChannelsController.h in Headers */ = {isa = PBXBuildFile; fileRef = F65D1CCFE6679492E73D2B496A3538B0 /* PFPushChannelsController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8666CAD3866D86E8C68DCB05F3AEF7EE /* Parse.h in Headers */ = {isa = PBXBuildFile; fileRef = 22A4230F1535BF7EEA26F0B0B6A2FC92 /* Parse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 86D9414B63998C22E2FDAABE2CFC7AF6 /* PFSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = DAC816672E32BF119EB78DE481DF82C4 /* PFSQLiteDatabase.m */; }; - 86EBF8540C0611DF735C4B9179439A57 /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 82C9F7010D830A1139C299899A83B9C2 /* PFPushManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 86EFAED63E331229C9A850686E235D3C /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = 45580BD459DF4A00A74028429FABC4D8 /* Bolts.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 87E645C82E157EAD9C62984142547C28 /* PFURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 0213DC0ECD5BC986C04AF1771A8B8315 /* PFURLSession.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 880795DD5DE964C5923A626DD6D179F0 /* PFPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = CCBECCDD0315E3F03B8C7115AEF53966 /* PFPropertyInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 88CD8AAA69B82F1F799BAD087C171F4C /* PFConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 6395957FD69B28F1FBF0315448ACD66F /* PFConstants.m */; }; - 88EADA4973AE1FEE667184FFFF8D2AF6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DB6BC0F44FADD25C922940ACF72E8E2 /* Foundation.framework */; }; - 894DC3B2B49C7389A533622E67F8F22D /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = DD5095A8F8D31FD6548CA972007FE2F2 /* BFCancellationToken.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 89A77C3D22986C2A698E695CAEFE0700 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 50EF6BFB1B51671BA3A588A55B967472 /* AudioToolbox.framework */; }; - 89BD75891C23C737B4E1FBE04BC93912 /* PFInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = F33B071C96E8C452B416F92718E4459D /* PFInstallationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8A133A2111354CB3069F496C3E6EA4D7 /* PFColor.m in Sources */ = {isa = PBXBuildFile; fileRef = C7D9D7B4B9B8F3BF20EB1371E8568DEF /* PFColor.m */; }; - 8C1C6EBE791F72132E73E26A2C397472 /* PFRESTFileCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D05CFABD73D1FB90C529520B0DC77F20 /* PFRESTFileCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8CEE29E1F162FF05BAD17F3E7A0E8CE8 /* PFMutablePushState.m in Sources */ = {isa = PBXBuildFile; fileRef = D8B69E7AD96CC6404E9A378A007761C3 /* PFMutablePushState.m */; }; - 8F802C08F3A6B223608B7BAE5026653F /* PFFieldOperationDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 44FBA4EB83A6123C98B57E3CE091D509 /* PFFieldOperationDecoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 907EA38681D1EABC5FF76E97F2B1815D /* PFFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C0418242E51162B39D697CC698FE6B37 /* PFFileManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 90BCBF4E7A7FAB6A6D87B97CF4AC0EB0 /* PFUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AB74A37510E78D1DBF9E663451E9941 /* PFUser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 90DDA06C040487F539952B9DEED0EE9C /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 417CBC7A056859D68354BE8D34EA2955 /* PFAnalytics.m */; }; - 914F063FBFF81D8FC168201362C3AD03 /* PFProductsRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C2D23C919350BCE1204859E2D3084E1 /* PFProductsRequestHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 91633EC8047DE0A4EB60BCDE94F5C9CB /* PFPushChannelsController.m in Sources */ = {isa = PBXBuildFile; fileRef = C0FB09BF7F073967C701AC4CBD6E943B /* PFPushChannelsController.m */; }; - 9175F59D0D655B86986E1ECF24B7113F /* PFPinningObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 0852D13FDBDEF928743F6173924EB4AE /* PFPinningObjectStore.m */; }; - 91A66B0DA11044668B3290268B010A91 /* PFObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC40A69DAFB3828DE1563F57092BA09 /* PFObjectControlling.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 922364D450785E692289C4B3E634AA0B /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 7910FE4828145D6DFF00FF8C66F08B32 /* ParseModule.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 924358D61DABAE0D987FCD59C876641F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 884235E504353D70ED1552FA3C950881 /* UIKit.framework */; }; - 926F1EE7FBF6754B79D96D2A15EEB906 /* ChameleonFramework-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 247240BB32080D2A5B4CFF53D3AB001E /* ChameleonFramework-dummy.m */; }; - 933ADDA7D35D7E996E34179032B93265 /* PFUserAuthenticationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = EF61CFA03E984B1560E98203F1CF9D40 /* PFUserAuthenticationDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 93593C8CEC4D5CD10176165A1FB590FE /* PFInstallationIdentifierStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E954F15444F31FCD63CBBDEC836EFD0 /* PFInstallationIdentifierStore.m */; }; - 9447963BE5DC80296250810555FD675A /* PFFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E4384AACFBA3ACDE573EC5B89A33CDB /* PFFileState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 94568474EE97E77A387746CF37D38E40 /* KeyboardManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 419BCF873CD408CCC0A983F2D2D9FDCA /* KeyboardManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 945C9834347A969CDD4FB9A5AB9FF0E0 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C014A0946EFDB150DF88EA618EF6A35A /* AFURLSessionManager.m */; }; - 94673C48A7772B6FB619DE778C9E3089 /* IQUITextFieldView+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CC75AB1002F3294731EA254B7F3D7FC /* IQUITextFieldView+Additions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9533993DD6C1EEFAB0B8D8A10E9FC459 /* PFImage.m in Sources */ = {isa = PBXBuildFile; fileRef = EA5C374819AEBD53E0D5F1D734155695 /* PFImage.m */; }; - 957629014B639AF56B4E3CBD3810706B /* UNIUrlConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = F7A1836D57286EA1DC6B4FB15B3D9ADF /* UNIUrlConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96247D22CC837A06A450BB49F1D2F79E /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 698DBAF223726A3F15202086E20202C6 /* AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96480A6B7B7FE7CC3FB468A1A4649991 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 945B8EB1B5E9F204BDA638C028956715 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96B8E925EA9DD5D8394039CB6E187FAA /* UIStepper+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = A2A54E97FABF661517A1762333B79AB6 /* UIStepper+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 97188DAFC24B71E114F099B7D5B9D4B7 /* PFActionButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A7A6EC76B67BFE97D72C327BEE579A7 /* PFActionButton.m */; }; - 978E0B62FABE7A8807CC10E029BAD3FA /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = CD3BE94284E25134F4C852DF25C2BB81 /* PFThreadsafety.m */; }; - 97C1D50670F0A109D5533CD3B1A3F6BF /* UIStepper+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 054C63340788AB84052D2C3EFDB3BDDA /* UIStepper+FlatUI.m */; }; - 97F56E7243ACF006365782F47CCE163A /* IQToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = AB62F77C89A99FF36884B62A8A2030FB /* IQToolbar.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 983532B8471523F38F8B9EB87ADECBB6 /* UNIHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 02BB568F82766393033FEE2267792E4B /* UNIHTTPRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 983719E3BCBA2346289FCFA98597C211 /* PFObjectBatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = A60C0A0DD9BA6E60D184841F050BD285 /* PFObjectBatchController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 98D96015298020EBD1F8CEF29A018899 /* PFInstallationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = D82B1A59C6D060B31454EE1BA1AFEA58 /* PFInstallationConstants.m */; }; - 98DEDCCCFC26916C1C0B17FD5685DD78 /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF707A6B74089D8250C9AEEDB522B65 /* BFTaskCompletionSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9953A1F6E763CEED3CC4DB86C9D55845 /* UISlider+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D24992010A1CD9B06DC44C2BDE41893 /* UISlider+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 99763C2E67BD206ECF0617053727ECF1 /* PFOperationSet.h in Headers */ = {isa = PBXBuildFile; fileRef = CCD35CE7907E6242CDB7C52C7FF9CB0E /* PFOperationSet.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 99A9201DA721AF740C01B5EDFAABA362 /* PFCachedQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = D6802ADB6DBFB9D15784481AA9178A00 /* PFCachedQueryController.m */; }; - 9AA2F1D9208BABD6BDC47F071EE6B2F5 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 95DE36BCC0193B52A414C8C4089114E9 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9AFFDCBD2EFA5FCC852FC11B130F1D58 /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7968EFEFA2E9B8164D4F55D4EBB331 /* PFCloud.m */; }; - 9BD2657D9CC128E3FC8ADDA5C6E435F1 /* PFRESTUserCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 12F717FA93D810E6E56AA79E8DA31F49 /* PFRESTUserCommand.m */; }; - 9BD8BED31DA9CD2892F6A3FC69094F86 /* Bolts-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 63444FBD778C241A425F28E45FB6A4A2 /* Bolts-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9BEAABBA382F9FF8BEDA67D82DC1ED2C /* IQToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 1773A1E245CCEF2E969C3BF79F4F2458 /* IQToolbar.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9C2932109FC679BE463FC331B50423AF /* PFInstallationIdentifierStore_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A024773FB8E17B08C96866E88799BAA /* PFInstallationIdentifierStore_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9C4A72FAB5327D6CA6AC1FD538FFF765 /* PFAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15250DE419E242129E0E575BA94CACC4 /* PFAnalyticsController.m */; }; - 9C4D0E6A8615B969362891FA9DBE59D6 /* PFPushController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FF2D1B9FAE8A0A6023A7692CC3C779D /* PFPushController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9C6E0E56B52CA1D3B3A0B703770CAE28 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73AEBCE7EBCC8AA67FB8C9E277D17E93 /* CoreGraphics.framework */; }; - 9DE007397D46FCD7EDCAAD914D362962 /* PFObjectPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = E1F2965F8C307884A46B1AAE4D8ECD98 /* PFObjectPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9E795055729E8F398250A5687BB00AE2 /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 39DCC2C5EF00A91CDD98FA4B087203B3 /* UIImageView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9EA16CADFB87A87B82F31805D5A206E5 /* PFRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B953C43F63BC08C42ECA4BEFFCB844D /* PFRect.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9F5716CA913F8214ADFF20CD50D717A7 /* UNIHTTPRequestWithBody.h in Headers */ = {isa = PBXBuildFile; fileRef = A5B144F5DE20F0C9141DDA95DB67AA39 /* UNIHTTPRequestWithBody.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A02EAC529F09443BD7A356116F6501B8 /* PFCurrentInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = DFB8E151B324B332BF30802F7BFE111B /* PFCurrentInstallationController.m */; }; - A08F870B965E23DB26F9F3BC9614AB09 /* ChameleonConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C2D1C4E98593EC75192FB9A4BA3ECB4A /* ChameleonConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A0DB84D629D67D67F58170F664DCE670 /* ChameleonConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 40A9F64F4334B4832DA1DAE7B7993FD8 /* ChameleonConstants.m */; }; - A1818D9416A84341F98AFC7AF54565DC /* UIColor+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = D46C7BBB9E7029D26FF7C191FB0F27E2 /* UIColor+FlatUI.m */; }; - A291AA7D8E6EC71A2BC94DAF4FC8FCDE /* PFConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = F6313567F626FD94ED9D75F8A5528B0D /* PFConfigController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A301B8F6BC707D768D1BA401B66CA18A /* FUISegmentedControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 22C9302ABB92E8C64F812A55B64178FE /* FUISegmentedControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A354F1562F901C110DABC0A353DC4176 /* UILabel+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 25815FEB0DE47ED86D8ED80B2A8909AA /* UILabel+Chameleon.m */; }; - A3856F999C2EBB1F3A28359DD1F9C49A /* UIPopoverController+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BDDA33E16DC66582EF95196C6F77136 /* UIPopoverController+FlatUI.m */; }; - A47C4933C85C24DCBDCA72DCD85AD6E1 /* PFMultiProcessFileLockController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8414D497D5AF83A586CE597084435FAE /* PFMultiProcessFileLockController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A4D8D309B5FFB1FED10B0A9C00B0F512 /* PFRESTQueryCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = D0F85BD16C75AA3CE44524754ECC9372 /* PFRESTQueryCommand.m */; }; - A4DF94441F347ABF847CCCF27504E329 /* UIColor+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F422A1C8B0F6527F123CE3D95BC2051 /* UIColor+Chameleon.m */; }; - A5945AF79FE4C3CC8A97251440C3F4E3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DB6BC0F44FADD25C922940ACF72E8E2 /* Foundation.framework */; }; - A5C292991526FD5421D49EDAC373900A /* PFTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FA2345F3E38B080C28690468CB56BCE /* PFTaskQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A5DD8FB83FC8F1D925B77AAE426871DB /* PFAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 97B9289CF2E13853E6653DB6AA968E35 /* PFAlertView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A62F0B680C4DA4ECA92F35A3A31A79EE /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 512E8FF912FFD36699AEDF3133DB49FC /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A66F7659D963A8B2F9B3F781178F7EDB /* Unirest-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F3C1A3ABFDF15B4DA28FAE55E6A8F9B8 /* Unirest-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A674F09CCD944283805048A08AF69A8D /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = B8E23EF1AC15E1DBC62546834E3CC9EC /* PFDecoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A67A4AD2C47453ED4CB39D51C300BCA3 /* PFMutableRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 2210AC0B8E1C36C531569431FED76C6F /* PFMutableRelationState.m */; }; - A755BC067D0CDDA8896338F585481CBD /* PFInstallationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = BFDE86646969B14B9DDE0FB0504D891A /* PFInstallationConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A788FD9477EE0E296E76D40EC7D708BE /* PFCommandRunning.h in Headers */ = {isa = PBXBuildFile; fileRef = 521412CB4C17B8D388EF9AA530ADF53E /* PFCommandRunning.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A8658D6CDD36670490167A1E317ED0E8 /* PFPropertyInfo_Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = D16736489B2F33CEE9D10BB1901E56F4 /* PFPropertyInfo_Runtime.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A8AF2E3383DACBAFC662073B21A3B773 /* PFRESTFileCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B5EF0AD4F734B79EDED699BCB4D4BB0 /* PFRESTFileCommand.m */; }; - A95789DD338E2B4F4DE4A6F526C2D9AB /* PFFieldOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC2DD4C7D08C328C3E76B833B15CE35 /* PFFieldOperation.m */; }; - AB432F93648CE14F642AC0D1B54B820B /* PFURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = A83BE4181E146B3BD3F668BB14864CE0 /* PFURLSession.m */; }; - ACBC76600923025F280CB9B8B7AB4F0A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73AEBCE7EBCC8AA67FB8C9E277D17E93 /* CoreGraphics.framework */; }; - ACE1EEC5A30626AE9ECC8B8D13D1BBC6 /* UIProgressView+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EB0842FFEC81DB8129CA41730BB264D /* UIProgressView+FlatUI.m */; }; - ACF3C5FC3D4BDA62237AF449A9CF36F7 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B84B94BA546CAD368DB53A7DFB7D87B /* BFCancellationTokenSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ADBF656E8ABD4B5E7F842C83D70D3A2C /* PFCommandCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CCB37AE324FC6748009FBF33A162CF0 /* PFCommandCache_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ADE10A2BCF73315551544ACB9609A9F9 /* PFImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 64439EB290B8FA9845544A1DEA783BA4 /* PFImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AE6F1E5466D6A156C4ACABF32EE7BFF9 /* PFDefaultACLController.h in Headers */ = {isa = PBXBuildFile; fileRef = 03FF0651A96F8A339DA7B5F5278250AF /* PFDefaultACLController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AEBC8D138ED39354A6CB7C337A9868E6 /* PFSQLiteStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D3165725CDF1149D3CCA74613D69C71 /* PFSQLiteStatement.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AF6BC627636C58624D1EB0AA12D8D015 /* PFObject+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = FD3ADD8CA3E681E4082BE70B65F75C59 /* PFObject+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AF70918BA4A1F7B01BF4806ABF4EBCC5 /* PFPaymentTransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 2749A3FC2730A5F92649D4FA2C5D48EF /* PFPaymentTransactionObserver.m */; }; - AFDB8DFEFC8E9CB1824D5E8E486E7477 /* PFActionButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 111416E352A374E5572C2A0923719A7D /* PFActionButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AFEB92BEE0C21C0467A0355D0A665ED1 /* PFTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3E24B4E9AF44DE4EE49241CE0F751D /* PFTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B00994C1B019F9E34747157F32DAF3C5 /* PFOfflineQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A5FCE7E535A69957FAD0C1B32F14873 /* PFOfflineQueryController.m */; }; - B04876885B79CFA7197C5B2D5DAED7A8 /* PFProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = FF61D452E7B69C442EFEC72A2A7580FE /* PFProduct.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B13162A34641F63442064CE3A7F9531B /* PFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A861617C3B27410695B312CDD54CC9A /* PFDateFormatter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B19E110869DC3DF422B3762F933F2947 /* BFTask+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BC6D7AFFA36EDC2F1A1F3F5AE103D40D /* BFTask+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B1D6EA77252B50043DFD235B103C032E /* PFPushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ADD777B2E527B0D2F8A8AC96C48FE6E /* PFPushState.m */; }; - B1FA32E48268C4736E684891B7EDD16F /* PFLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFDB98CF3C5203ED1947FB7978F111E /* PFLoadingView.m */; }; - B256D9D106272C802ACD308D87482EC9 /* PFLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F65BE61AA1211314E4C269AC92D1057 /* PFLogging.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B311DF0C9AF2973969DF5F3D5DB59893 /* PFMultiProcessFileLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E9ECAB2E005E92FF1711C904032D845 /* PFMultiProcessFileLock.m */; }; - B34971AA2F492262DC290548D036FB9E /* Bolts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05A161C52BA4C93E0F7C7F443ED3785E /* Bolts.framework */; }; - B3E957A28CE946DAAB3E2128AA110F5E /* PFLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = C5C0949E4094DAB10E007D58354FFE6C /* PFLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B42A49260E02658534FF92164B6FC311 /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 124E3271A7DC3EF54FAD044CE7F7F652 /* UIRefreshControl+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B42ADCFDB245CA79715D0C2EA78DA719 /* PFConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = FCDAC6140870D371ECB57D0F2C306D25 /* PFConfigController.m */; }; - B481D759AF6F9575FF8A734265863284 /* PFPush.h in Headers */ = {isa = PBXBuildFile; fileRef = F7B69ECB48E71EF166AA0B4EEEAF886B /* PFPush.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B52BF523C19BC2BE9BEACDF246492BBF /* PFMutableFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F13645A1FC49585D4052A12F65BAC07 /* PFMutableFileState.m */; }; - B5360419A1D37E8AD521422A349937B5 /* ParseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = AC6C812E0EFAAEEA409ED82F6D29F891 /* ParseInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B560A64CC02086C8E849A9E4E5B6B95E /* PFCommandRunningConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EA9750580BAC118BB72E201DDED2160 /* PFCommandRunningConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B58C6D6F3BF6C13592066A9577BFE7A4 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = D04EDCD4786B77A896200D1559245584 /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B5CE0157F1F9EB6AF6F004D818F58A3A /* FUISegmentedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 479870A54E4C0784E09BABC858FAE81A /* FUISegmentedControl.m */; }; - B60C9D7DB05B984086E8CA1E1D7F87B2 /* PFPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 6928FC9D915EE8FECB9382A37F4E3446 /* PFPin.m */; }; - B6B7EBF4D22CC0A218910F801E3E7893 /* PFRESTObjectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = E59D99D003850337B845D727F83D8F81 /* PFRESTObjectCommand.m */; }; - B6C7D295D947EF5EEF765DC28F477ABA /* PFLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BC665F170641D769B9A99262F203250 /* PFLoadingView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B70CA4BC7BB83E481E558E6AAA8412C5 /* Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = E95B033A6FF1B30BFDD04AE4D596F2EA /* Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B750116226049256663DE15211774B7D /* ChameleonEnums.h in Headers */ = {isa = PBXBuildFile; fileRef = BDAFD7316C60383055E23BC9BF253BC5 /* ChameleonEnums.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7B497851D50FB6FEA63C93E0DD011A3 /* UNIHTTPJsonResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 94B22E37D02A86293A063773ACD7E464 /* UNIHTTPJsonResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B8079CC4A6F4028A5A8F00AEB5D15D84 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = B149C76BFE429BA3CEFD6436D38D06A5 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B8D2A44973A3398DFAB2CFC555945E9F /* PFInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2463BFBD8A92B6595C4A21F6AB9AE7B4 /* PFInstallation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B8F552D52402155DEA1C3ABAADA5AB1C /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = 84513CB26B8A0050F9E684391FC1BC5D /* Bolts.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B960B40A6AE7B82EA2CEAFA132701A38 /* PFFileStagingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 360F1AB2B9AB436B138BAA4F2FADF706 /* PFFileStagingController.m */; }; - B9AD565BEFE8914A96E216DC39BF62D8 /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 92A90342C0F0E20145742435B920F2FF /* PFPushManager.m */; }; - B9B7F2451F157D9458ED688A59812404 /* PFOfflineStore.m in Sources */ = {isa = PBXBuildFile; fileRef = B736120F3CE5A59BD18E4D01F84A0B2D /* PFOfflineStore.m */; }; - BA0E56DF8E304354DAFFBB3FF5DD9F86 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 86F1AD27F1609FA38C3E2584530BD685 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BA7C5D5CBDC2B2A01DF616F5F9F44F53 /* PFApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 87620DD218BABB98B36BCE28B5DD8AF4 /* PFApplication.m */; }; - BACC3A14C83F687DAD862608C61D43A0 /* PFLogInViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1029345A196003C0EE67B1F1B3C6F1CA /* PFLogInViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BADD133A360C992EE7BC76C6308E2078 /* PFObjectEstimatedData.h in Headers */ = {isa = PBXBuildFile; fileRef = D0B71153D34E562ACF68F48FB7FDADAB /* PFObjectEstimatedData.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BB4BDDF1BF7CC2EF1BC174D807E8745E /* PFUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = FB320B22C54E1E2869AD39B77A7BD653 /* PFUserController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BB82DC2891A35AC22DD6D5CE4CAE4364 /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = A3DC79169AA38109A4D516CEFB2B3089 /* UIButton+AFNetworking.m */; }; - BC3A816654C98C980701953A602FEBE8 /* PFSession.m in Sources */ = {isa = PBXBuildFile; fileRef = F6ADB903F627F6C71373F05CDF219611 /* PFSession.m */; }; - BC579CE26DDD15A574021B2FB19403AB /* UINavigationController+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F047216A5E0C25046A45A773B453E53 /* UINavigationController+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC7DF6411CDD947A4754A1DA47FF1966 /* PFMultiProcessFileLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CAE70A224DB0AFCFC0EE841D4C56CD6 /* PFMultiProcessFileLock.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BCB526791EA218830B02817A425FC7B0 /* UITableViewCell+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 09E0AD1CB33CE49A06DF396A16EB44A4 /* UITableViewCell+FlatUI.m */; }; - BCE96BAF7792AC191408409C216392EC /* PFGeoPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F86D7AD4019B993FC793C54A2B9FE2 /* PFGeoPoint.m */; }; - BDF120CAD7F04E844A83AD6D3F23B170 /* PFMutableRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D3F66F90965E3A12CB64DEAE106CCC4 /* PFMutableRelationState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BEDE08E573291D509C6CED1FD1331AD9 /* PFFieldOperationDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 250859A0E42785F3AA24C0D32F9A6693 /* PFFieldOperationDecoder.m */; }; - BF09611D4DF15F03C1A17A151920771F /* PFSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = CA16BCCFE65EA3B9355F70FC4E81B1D5 /* PFSessionController.m */; }; - BF1DCE7A1E61FA20BEB85FADB980E8ED /* PFMutablePushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F0E9294301984DC28389681C02CAE9B /* PFMutablePushState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BF8025C47B161CF683A15E799A0C4257 /* PFObjectFilePersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = 04B8709A759AFBF2338CD683415C1896 /* PFObjectFilePersistenceController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BFA7FADD2B26A4ED79AA1C51DF3FC8F4 /* PFDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 646363071D33807E74E00D422A069342 /* PFDateFormatter.m */; }; - BFCBCD5704852B8629D48325773197BB /* PFRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = D9207DF0F12014BFB1CFDCE5A3B13FB7 /* PFRelationState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BFFE9519EE8562F0475D608948DBBF44 /* Bolts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05A161C52BA4C93E0F7C7F443ED3785E /* Bolts.framework */; }; - C087B9B3A493BC8232CBA4DB1CB47A67 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 78FD0C91FA78980063D8363E85FF7315 /* AFNetworkReachabilityManager.m */; }; - C0CC3307CCB98501AE5F9229451B1673 /* PFMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 359A857EBA1F996333DB3D4E97A6C171 /* PFMulticastDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C162D829CB46A3EE6F60AF6C1FEC397E /* PFSQLiteDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 87A95FA6B2DDA6FF87424D908CC257B8 /* PFSQLiteDatabase_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C1FE8FEB63E91B414194A3BE33D6E932 /* PFRESTConfigCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 87C3814F3B0BD8F178C11CCFC60DA422 /* PFRESTConfigCommand.m */; }; - C28FDD4A6A228F0415AD40DEC282792C /* PFSignUpView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CF9A31CA35A27E97FBBA6C7F1094DD0 /* PFSignUpView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C3B1893774804AEFBBE540A51F18F306 /* PFAnonymousUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = B042F300D303CA764C76ADF2750F904C /* PFAnonymousUtils.m */; }; - C42D1B9307FE4CB40AC97EBCE5BF4D0C /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = A33AF9AA1A3171F8C88DDE6C178C64B1 /* PFKeychainStore.m */; }; - C4860B9A56C65B06A6A62F48E922EAD4 /* IQBarButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 214BFEFA3DCA45F9F77B522BE284D059 /* IQBarButtonItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C487BF47D0AEBFFB32FDA30A03F2903D /* UIBarButtonItem+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D39C18F1087363DA78B7AF8228B31041 /* UIBarButtonItem+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C48FF36B83FBF7976BE709EA55A98796 /* IQKeyboardManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 142AD357A99708346D62ABE27889D639 /* IQKeyboardManager-dummy.m */; }; - C496676BBA0A1803D2956D050648BC2B /* Parse-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C215F34F0C6B81200F3B21B59E574C4 /* Parse-dummy.m */; }; - C51B96A7E543F72CD7925968E35DC041 /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DFF3FDB3E1DBB2B57D6B105B337F26B5 /* AFNetworking-dummy.m */; }; - C52D24546D38397CC3628E749B3072C2 /* ParseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AD7301C3D83C67C2134BCAEE708C819C /* ParseManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C5ECC4860D1F76FDAAF747464E5115EC /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = C592047BF5023A3B9425932EEB2645D8 /* PFCategoryLoader.m */; }; - C6CDABE1AEBB5DC4A35A6B221BB98D13 /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 74EFE70E0EE45A51F1CF1BBB47BCE616 /* AFURLConnectionOperation.m */; }; - C6D894730B4F071F9DE54B9F0533CD6B /* PFURLSessionCommandRunner_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 76D651F3BCB876EB2B8F7F5C4E0062FF /* PFURLSessionCommandRunner_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C70AC3CB2D21E9466D55F37D6167DBA5 /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = B420E3B76BA771BB141A4869B8EB491C /* UIKit+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C7464F54166E991F02625B391966E116 /* PFFileDataStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 81CD390E4ED30F1847B6E9429A3F13FD /* PFFileDataStream.m */; }; - C7A28D0D2CA57377088C993FE4004B15 /* NSArray+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 751D3443C2AA75402B1A10DDA758A575 /* NSArray+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C7B655603FB1089A5E2D28FCE12DF12F /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4504A3BE29DC08F74E6F39B08DD5E10F /* AFHTTPRequestOperationManager.m */; }; - C875CB2BA348DA2E8E75996718D4ABBE /* Parse-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 42AFF659E9E3F99529B442E5A4B428AE /* Parse-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C910EABE33979FDF4C2ED6D0F6C13892 /* IQKeyboardManagerConstantsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B5A65FF9D6CFC8EBF9BD2B2B541A345 /* IQKeyboardManagerConstantsInternal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C9160C9D7D4C5BA5A58C15D7BEC9FBC8 /* PFMutableObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = A09A8B330777A976623A127D00A31688 /* PFMutableObjectState.m */; }; - C92FFCE3C06282C2D08A98524079060D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DB6BC0F44FADD25C922940ACF72E8E2 /* Foundation.framework */; }; - C95564703E95A934CCC53561C84FA280 /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D1B41D28557100B7599E736F8BD7E62 /* PFInstallation.m */; }; - C9AE5EF700DBE91C6177D13237F947F1 /* PFSessionController.h in Headers */ = {isa = PBXBuildFile; fileRef = BC4DB7A7953625E3259CE8EFBF4B48A0 /* PFSessionController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C9BF259B4A008A4F8E04302C2128F39B /* PFACLState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 72A6BD4F8F889172C800D9EEB621ED1F /* PFACLState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CAC311E7208D8B268D01C33A0877E796 /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = C8869D548301C534BEC8788DACFA7BCB /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CB2E26B6FD21531996D5E818EE0E86D5 /* PFOfflineObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD848862A585F198F6FCAC8B8EFB72E /* PFOfflineObjectController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CB6C2E1FC30E23D0FD4170C0E997965E /* PFAsyncTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 050F03BFD82CD0FACBAD65B2D27B5918 /* PFAsyncTaskQueue.m */; }; - CBE6077CCD0144B5CBBA97B2BA1A589F /* PFUserAuthenticationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 165C1917DABAAC14E0BB7825B8C068D6 /* PFUserAuthenticationController.m */; }; - CC008B1632F73EB16B48AD745FF5A569 /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 677A67215E9F5421372FF71C51A9CBEF /* PFLocationManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CC1CB2CD7FD4950419F251F7E71FD6B7 /* PFObjectController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 166D99DF393A0B52E9B7797AD00151D1 /* PFObjectController_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CCB526D3794E632CC0958E9648F8A105 /* PFUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = B408965C776EA83368E1BA4B52F57587 /* PFUserController.m */; }; - CCD89E374EFF51BDB69B2E83BCD866CD /* UNIHTTPRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 78698C19DFDE818FEDA3F7ADD32F3664 /* UNIHTTPRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - CD2BB9C4D23280239B9E4C4FACAB3F1D /* UNIHTTPJsonResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = AF13FF764B0AD249E4820CA29F05FF1D /* UNIHTTPJsonResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CD5269A8E00F9F1B4AEBC8E26BE87446 /* PFUIAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DAF268985E635B91784C5906DAF3927 /* PFUIAlertView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CDF14B17CBC7DA990B1865D06741F776 /* IQUIViewController+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = CDF6842F6121DBA0831C14D0E8F65015 /* IQUIViewController+Additions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - CE215822CBE1DDC09FD815295B8ECCE1 /* UNIHTTPRequestWithBody.m in Sources */ = {isa = PBXBuildFile; fileRef = 00485ACEA6057321188E09242DCB45CF /* UNIHTTPRequestWithBody.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - CEDFE191DF66B8884828359B3494F8E9 /* UIAlertView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 69AB466A89966108035F106401A75D3C /* UIAlertView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CF051D17275C20E0FBF5736E3C8A0573 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = E48CF71243F5A2BBFC8F7F74E80A2E81 /* UIProgressView+AFNetworking.m */; }; - CF4BBBB487F1B90564858FBA920DB06C /* PFImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = BBA6FA187736BA1C3D8A168CFFD3ED7C /* PFImageCache.m */; }; - CF4FB0904DD7229A65A31AF7DE90514D /* PFTextField.h in Headers */ = {isa = PBXBuildFile; fileRef = C0BE03A6E7E183FC699EBB426F345255 /* PFTextField.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CFD11F42A5832B2D710A1A1C2821F218 /* IQKeyboardReturnKeyHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 07189350CCFE83C37773559EAE2F1E99 /* IQKeyboardReturnKeyHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CFE750013160AF86E0FA288F613BEF23 /* PFActivityIndicatorCollectionReusableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 87E5BE149B74031F7D503DEA017BAAF4 /* PFActivityIndicatorCollectionReusableView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D065F7FE6168EE2B3FB388E113DAB933 /* PFInstallationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = BB6655C00D3CD2E63257C48537A65FAF /* PFInstallationPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D0770A9624B9CEA68A8B26D2F68EF3A8 /* IQUITextFieldView+Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 213CBF9D8367A95FC91F9C691871F00D /* IQUITextFieldView+Additions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0BD3B6BA410A1F68CA467F83C8A1F66 /* PFObjectFilePersistenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8256FA5420925F6CADCB4C5AC7CE573B /* PFObjectFilePersistenceController.m */; }; - D163FD41FEC0BE74060FB498ED499801 /* PFUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = 50C5DCAFBBEE9E4B148EFD23665B1FD2 /* PFUserState.m */; }; - D18F22A3F173743A23B0DA16E60903F4 /* IQTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = C6A7E92CB10858CD3FABB85A6FD99B84 /* IQTextView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D1CD80193235F94027F4182A056190A6 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE54DB6796C0FB12AC1B5FA18EAC0D36 /* Security.framework */; }; - D1DA2DC264C897235DE0BDEB8B1BC224 /* PFErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E31393F91A23688342164EE5B397EF6 /* PFErrorUtilities.m */; }; - D24AE8094558747F6234D62835B70069 /* PFFileController.h in Headers */ = {isa = PBXBuildFile; fileRef = F86B02F5EDF93DEFA5042328F03D7376 /* PFFileController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D29768D0274DCC14B8417BAA3437B76E /* PFRelation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E547C2347FABBF6388F1EF5F0718731 /* PFRelation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D2C16698521B60E99C434317D85C784A /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 28EBD86C43DADC2E0614A6FF816D6268 /* PFQueryController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D2E0B5F8552B7289349FA1FDA8327BE4 /* PFURLSessionUploadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F202FA64ADCF9050D08CB944B331392 /* PFURLSessionUploadTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D31DDC75C40F7802A5909C87FD92D689 /* PFKeyValueCache.m in Sources */ = {isa = PBXBuildFile; fileRef = DB18C85E52D0CCCDFB9117C741639AD0 /* PFKeyValueCache.m */; }; - D415C495170B2A2E7E69ABA5B139A2FD /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = C617F4B4A1CE53AEAC7582E501F4DB3C /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D418B83B7A6BB0095E345D682BD9F4B2 /* PFUserState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A7C521FC2EC885334AB4AE8A70A34975 /* PFUserState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D4534103AAF36517168B1585A34C0662 /* PFRESTCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E4572E64BE534864C8EDDB5AFDCDCCE /* PFRESTCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D4FA238C23A1F6B1489D87258EF7FED6 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 5969F1692114D93014B5D9B9FFC0D2BD /* PFObjectFileCodingLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D520CFD6CB433229A09975C500CE9B07 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F5AAAE929C4C74F67C9EDCE3E0EB9FB /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D524881CD777E35975CAB82E6DCCF7EE /* PFURLSessionCommandRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = 95E1D1F624E0E8D6C0FAD45089D5480D /* PFURLSessionCommandRunner.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D5501A84B14B55285EA233E188E29D37 /* IQUIWindow+Hierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DD67D11257E1D4BDD39573F974F005C /* IQUIWindow+Hierarchy.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D561FA307BEA6A6DE6EE95F54FEA65D7 /* PFLocalization.h in Headers */ = {isa = PBXBuildFile; fileRef = E375C6AED0190D9C67BBE0F21356C911 /* PFLocalization.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D5DBB64D5E73E9F6948261968BA4C55C /* PFRESTObjectBatchCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A198263993B0BD6D29BF39EAB72DAFA /* PFRESTObjectBatchCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D5F44193689A0F8B022452B5A23B1551 /* PFUserPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EA3E4C86DB2F16D57983EE7A65D5B49 /* PFUserPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D60E0A78EB64C0A3AA2B8A1FE82C9C24 /* PFSignUpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 21E02715B92BE89482B27815AC036627 /* PFSignUpViewController.m */; }; - D615322AEC8910260E315C8F6FC9B208 /* PFGeoPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 0920CA605C2CB8ABBD20EA56A984167A /* PFGeoPoint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6551C65069FFCC73F7FEF21371EE1D7 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 69DFF6E4BCAFB2D84CF88A79538591A4 /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D6AF54BD822E58E71B02BDBE42E4C7C5 /* IQNSArray+Sort.h in Headers */ = {isa = PBXBuildFile; fileRef = AF9162235873B70447F51065419627E0 /* IQNSArray+Sort.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D72448C129C6C3093EFB47F9B360649C /* UNIBaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 229EA31BF1622CEADC763DBE38272F7B /* UNIBaseRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D7C1594DC6A0E38E33E8971C288A9F82 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 415EFD8319500DD739DEF0680C2937FD /* AFURLRequestSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D7DD50AECF05688CC255BDF250F11D3F /* PFObjectSubclassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BD7B193C39EC475280660DD0302D6E2 /* PFObjectSubclassInfo.m */; }; - D84D44AAAD865013AA9455693FFCA05A /* PFSessionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = C2D09C30034987C004CAC0DD30E50EF3 /* PFSessionUtilities.m */; }; - D86913E8F8A1CA01D792A1DFD3AE671C /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B16B2C84C57EBD6CFFAE8942DF8C1910 /* AFHTTPSessionManager.m */; }; - D869A997D224A53FD7AEE199188A47F3 /* PFLogInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FEFC9A58974A874BB87FF5345A6245F /* PFLogInViewController.m */; }; - D88B5ABB7774B96D1A9F141F663974FF /* PFUserFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A4B336BA9ACE65629272FCD913D35C /* PFUserFileCodingLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D9E185864F41628CE6012D1BD953B3BB /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FA4B4072C875B54C90E5CC56115DA2BF /* Bolts-dummy.m */; }; - DA50FB2C52DE8E1B97B5DC7295C306EF /* PFFile.m in Sources */ = {isa = PBXBuildFile; fileRef = AF76D767432F274AD4283482532FDBCC /* PFFile.m */; }; - DA6210F0AF6691B4B5DF3D4235195E35 /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EC1A04BDC009E62BD763037FA2606BC /* PFEventuallyQueue_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DB3E49E9C65CD7BB5A8B80E56051FA0F /* PFPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = CE7CAE3094180B95240126C2822042E2 /* PFPurchaseController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DB840EF5FD9645993A399CDE849E784C /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = D8A9951D90F820CABE4AF9DC10B30028 /* AFURLResponseSerialization.m */; }; - DBB9EFDC23CAD3FBF96BA742FF368DFF /* PFQueryState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 18BF33071D03951244C7767E1153C152 /* PFQueryState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DBD729AF645DD5F138040B2AE18ECBEF /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A54FA38C63D857F9723CD97B1EEC26DE /* StoreKit.framework */; }; - DC46A579BFDE8D3AC76D0254644D0E62 /* PFCurrentInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FBCBE064AB11059CE4858CF3A0858CF /* PFCurrentInstallationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DCAD1FDA90F25CCD484CEA417972DE0E /* IQUIWindow+Hierarchy.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFD8CF6CCC0DD60743E813435223F07 /* IQUIWindow+Hierarchy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD0DC07C8FAA28906ED06BDBB7796B26 /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 1707513017DDDD0D6CC76E94459428E5 /* PFAssert.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DD20695DA1E0462A054919557698F81A /* PFACL.h in Headers */ = {isa = PBXBuildFile; fileRef = ECFD68C941FF94329F1908F60C5A00A6 /* PFACL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD5A7AF485CECD375D8A31A0E565C0B7 /* PFCloudCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = 56685CD10639BA9FD0A64000D41D1800 /* PFCloudCodeController.m */; }; - DD64D07491A39A4FC01CA497039556C7 /* PFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = F05383268A125B0EE32BE793F2940942 /* PFObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD861EF2AAD1E9FBDBD58BDD993F8D32 /* PFTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 79DB596B5868A1F37939AA5E108ED2AA /* PFTaskQueue.m */; }; - DDD1AB18B4FA19A76848B762B363F30B /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = DEC3E90FB8D9ABC8A00A31F38C7B82DA /* PFKeychainStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DE59377917D4F6739F7D33692BBF5E36 /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 61A606587D26AA7BF2064492D964C1B1 /* PFConfig_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DE7E038BD46CB042C27E8B6AC613CE6B /* PFPropertyInfo_Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D74B8A82D1C235550B3CFCBEB08229D /* PFPropertyInfo_Runtime.m */; }; - DE88747F5E12625871B4DE2BC7766F78 /* UNIHTTPClientHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 73856CC2B008DC55022AD9FCC2AD19AE /* UNIHTTPClientHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DE88AADD6CDD355FDEF74226741ADA01 /* UIToolbar+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CA87DD640C394F87E065F2D91959B58 /* UIToolbar+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DF22181FA0AA2171CD5A90FD5A9CF463 /* PFObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 452F073FE5B24730589F500D722C4CB2 /* PFObjectState.m */; }; - DF4112FFA156222BF7053EF22A8827B9 /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 81F9F39F51AD9E314989D743049BCF3F /* AFHTTPRequestOperation.m */; }; - DF4E97FC3CD796A33F6184C7FE4A7037 /* IQSegmentedNextPrevious.h in Headers */ = {isa = PBXBuildFile; fileRef = 4687602C78AD0F9B7C4EA5B7D151BE8E /* IQSegmentedNextPrevious.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DF747723F77FB06F718D406056389E95 /* PFPurchaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C254B2D112ACF8B32BBA3B5B47AD3D3 /* PFPurchaseController.m */; }; - DF9783A9F560D5610A0264999DC12176 /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D90FCBC2346FA86310C29CE608FAAEC /* PFBaseState.m */; }; - DFC29AA19504EF95C8902348017273A8 /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CA92D4296853F6D1AF511A3E56D26B0E /* AFURLSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DFCB6C03701911A2580798FC2A15207E /* PFRESTObjectCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 41094D76ED63E327FE9C849B59884D75 /* PFRESTObjectCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E0063948C636F6269566C641EABDFE4E /* NSArray+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 47D632AD5CAB17E28A0843C0107B3A73 /* NSArray+Chameleon.m */; }; - E018C8425DAE43110469B2BB53F55181 /* PFImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = B063D943B310E78B3D5CB17AB9252598 /* PFImageView.m */; }; - E02B2DFE8A7D8B891A15251B1B875CAD /* UNIHTTPResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = F5895DDF80CD5C0F172240E8EF6ADB6F /* UNIHTTPResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E13B595DBD5150D4B49772197400C99F /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CAA631FA9A2B83D46BA332E8F8821786 /* MobileCoreServices.framework */; }; - E14E2BA988329F8623EA43EA9C00EBF2 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2827E635AE454DC870F2874F7615C635 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E175EDF8790813A2AC21686AFB4E5BA4 /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 6698D999B8C3EFC728172EC43B1557FC /* PFPinningEventuallyQueue.m */; }; - E1761D6F516823FBFD10DD72C4656A02 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F0280896C56576AC9033B1015CC54A /* QuartzCore.framework */; }; - E255BBC6E62B0077402B1019C428FC69 /* PFUserConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 3173C656ABA36E19AFFAE28189BBC6EF /* PFUserConstants.m */; }; - E4CE54E7E5E7761C3F218A02EEF93937 /* IQBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = E829FC20C3C5109FE89CB86523FDB840 /* IQBarButtonItem.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - E4DCD5BB38F50C4450D50973C5D4D1DA /* IQUIView+Hierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = 930C5DC459F360648A3E300EB979867D /* IQUIView+Hierarchy.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - E558BC559ED38B40C8C86E4D988C284C /* PFObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = 435DAA47CFDDF383FBFCBDAD51AA78B2 /* PFObjectState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E568A48D66409BA8A0D72948A76BA7C3 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BEC61C2360A2BB5FF68CFC83A8712DD /* PFEncoder.m */; }; - E5995AC544AA3F6BEF60D0CED31BE825 /* PFProduct.m in Sources */ = {isa = PBXBuildFile; fileRef = 695743A26F0576E1D0B7E9A2BDACD034 /* PFProduct.m */; }; - E5B487076917F1226B4C1A56D773DFD0 /* Chameleon_.h in Headers */ = {isa = PBXBuildFile; fileRef = E7777D9C8AEF9BE8A47A082328045E3C /* Chameleon_.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E69EBA135C06410746DE7C745328E4B1 /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F75CC1FF1A14AC8642A5E4C206F7A2B /* PFJSONSerialization.m */; }; - E6F69DD4C2753BA72C50A560093295AA /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EB4361565435188A9EE00823DB76D92 /* PFInstallationController.m */; }; - E6FE82B23F8EA7A2244E7009B5BE9B35 /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = B7F2C88E55C448F571A16FF3A03467C6 /* BFTask+Private.m */; }; - E72D4099ECAD2C2EF446D7A15ABF1AB5 /* IQKeyboardManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F737C85949702755570FD4507BF9272E /* IQKeyboardManager.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - E74AB182BF3A6C46BBD707E21BAD477E /* IQNSArray+Sort.m in Sources */ = {isa = PBXBuildFile; fileRef = 70E06F8737725A9805CE924BC61F207F /* IQNSArray+Sort.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - E79DF6B53296F28FF0EECEA83A52E785 /* PFQueryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = DDF8F676322E06A458A9455290D831AD /* PFQueryUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E7A0DF07BEE9186EAA58D701552BEBE0 /* UIProgressView+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = DCD0D941688A6475E88FA24B8EE6E272 /* UIProgressView+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E7FA21C38D6A1CB113BE2DA22E73B845 /* UIAlertView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 86CCF8CA09C85DC9F7A1996054A59F84 /* UIAlertView+AFNetworking.m */; }; - E7FD11B05D61D259B28A00D734C8ADCE /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7577D0E1E50364D2BC3E96468B5A8B08 /* SDWebImage-dummy.m */; }; - E824A7479B453062B8E1078E5FEB6593 /* PFFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = B20A4C5260282598EE2A9122AE28C581 /* PFFileState.m */; }; - E838191640FDD81D844B51A75FBBC22A /* PFLogInView.h in Headers */ = {isa = PBXBuildFile; fileRef = E00CA5AD72C3FB68BA10ADBC27D808C3 /* PFLogInView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EA52F5267A63804A76EBCC450C31655C /* PFPrimaryButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A72A93443D78BFA94C80C7CBAFD5D38 /* PFPrimaryButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EB51F11A058B57302652970171C78A8E /* PFMutableACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = E89FDC075819C960003126B2E4A6CD5C /* PFMutableACLState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EBCE0AF5480E47AB4426F1DB159DD7F3 /* PFMutableObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = 29AC84ACC2284DC7D4A26CD3DE2F5593 /* PFMutableObjectState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EC0114D4481435148BC84A2EDBBC7AC4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DB6BC0F44FADD25C922940ACF72E8E2 /* Foundation.framework */; }; - EC31DA0AD2D9DC6C3CC480E38B06EE48 /* PFLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = FF1B02B31B87AF83F0B2E1C043B37586 /* PFLogger.m */; }; - EC747314543C5820CFA3FAB3DDDB5E4F /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C4443D07955C1B82EAE1FF5ED9802D5 /* PFInternalUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ECAC99B54CC6AC50099C82D5E69C7EC1 /* PFPurchaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FED305E7E186A0EDC106E74204F4C4DD /* PFPurchaseTableViewCell.m */; }; - ED57B9619E1F3F4E022A01BE00EF4530 /* IQKeyboardManager.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 458C815BEBC54F8DDE0D496B144D4926 /* IQKeyboardManager.bundle */; }; - EE34A74782C680986EC70CF85F41B837 /* PFSQLiteDatabaseResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB1C00F959E71B835BF4CBA71F2A4DC /* PFSQLiteDatabaseResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EF25F1828B2E522567620CF65D9CB2B3 /* PFApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CCDE24DEF2EF06A2A56C44BB829E19B /* PFApplication.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EF479ABEEE6F16D8B37197AA22C70A02 /* FUIPopoverBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F39661C276400B9DFFCA5E6AC2F5FEA /* FUIPopoverBackgroundView.m */; }; - EF88E78AD45E08C4F4835AEADBA00528 /* UNIBodyRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 41EDEF6519ED977D63C2247DFD5A1E7F /* UNIBodyRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - EF9DB6673456532F88CB0565833BC135 /* PFKeyValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 26D6F7E58C3F63F67253B5D30DACCF6E /* PFKeyValueCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F0316F2F6E503EDD935F39D8B12DDAEF /* IQUIView+IQKeyboardToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E3CBE479BC045A20A860642A628208D /* IQUIView+IQKeyboardToolbar.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F04BFF3F29ADD7871EBA1AD5E2DD697D /* PFTextButton.m in Sources */ = {isa = PBXBuildFile; fileRef = CD61F185287A802EF797C04EFAD3593B /* PFTextButton.m */; }; - F12120CD70A4A707EB19F2A4C3ADDBE8 /* UNIJsonNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D218E6E9217CF6B09EE11F316F2BDC2D /* UNIJsonNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F197180E30542A978335A060E3F48CA4 /* PFFieldOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 33F368B6E02D9CE1920FD6A9A46E7379 /* PFFieldOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F24372B3FA3A2DFED3FF5C5C36BD5134 /* PFURLSessionJSONDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = F3B6ACDE18741CD97E959576C1D39CDD /* PFURLSessionJSONDataTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F2E9945B7494E20ED7DC4720A2B8CDC9 /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CE94DB6C100CE51E45FAF3164C75AE11 /* AFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F2FA2A4CAE1467E990B61BA78254E651 /* Lato-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 79386F7E1DE21CAF81AF526BD30B8A95 /* Lato-Light.ttf */; }; - F2FBDA42A1914B2442436C5E46331DC2 /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B637A7F2698FA5CA2C8865433E40C77 /* PFInternalUtils.m */; }; - F31577AE2382F8C6B6C1FA2EA2516B5B /* PFPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = 367AE0EE476D9C3AD44EFC68E0EC667A /* PFPurchase.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F32EF9C380E16DDF332B529C0D807248 /* ChameleonFramework-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BBB27FEB94C2B7FE3B0DD9AB84BCD1EC /* ChameleonFramework-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F3C5711AFBF65D0516DE2CC5B82327AA /* PFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 241DE7E720235E1293C880CBB92E6037 /* PFNetworkActivityIndicatorManager.m */; }; - F3CE9ADEE55B3C0C530162B443AF1480 /* PFRESTUserCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = FA772C990873A5D9CEA1C1147D5F3999 /* PFRESTUserCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F48A0073A83F52B546CBD0F83AE4B5E9 /* PFACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = B8D6AA9709B0A2DA0AF6FD356C37A4FC /* PFACLState.m */; }; - F4C3BA9D56570D7677B5A3B8C06E6284 /* PFProductsRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 992C8C2C65196C7C84875BE02C16F5BF /* PFProductsRequestHandler.m */; }; - F509A9C960A71CF54CA3A6D6BAABD73E /* PFSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 9921F60FE1CC3C791C3B38E4C7BC3840 /* PFSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F6A79B06EAE6692D583D6788CEF9DACA /* PFDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = CCA31BD912D907C4293A1D90827CB1B4 /* PFDevice.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F72B08E476AEE8FDA496E5AFF22E1211 /* PFDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = F8B83F8A69CB0F2EDD6F5FC0A0F1ACF3 /* PFDevice.m */; }; - F80AA3446181FBEC955728C0DEFFD0EF /* PFRESTPushCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 89B0FEF6909A74F2C8A2B4851AC77B72 /* PFRESTPushCommand.m */; }; - F80F0C5DD55B014CBCE737C87E3E24F0 /* FUITextField.h in Headers */ = {isa = PBXBuildFile; fileRef = 7189FA61279ECB3D508F4CDC70CC531A /* FUITextField.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F888C8B955E332D7B81BA8E85F1BCC4B /* FlatUIKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D9DC10C5D58CA654587C102A2D9AB0F7 /* FlatUIKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F8FD10687BAC1412515D48E501BFAFCC /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AC94B957B5EE460B0672AD2E1CC4E90 /* PFPushUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F970CEBE2BFE2C75D77F1430EA1A8070 /* PFObjectEstimatedData.m in Sources */ = {isa = PBXBuildFile; fileRef = 516589740C3BFF83DA4A36876F16A619 /* PFObjectEstimatedData.m */; }; - F9F6A80DFFD7DE5540E15117F031CB72 /* PFInstallationIdentifierStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941B7CE65411420D590479786152661 /* PFInstallationIdentifierStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FB78E1EED116341AD5EF7C599173ABCD /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73AEBCE7EBCC8AA67FB8C9E277D17E93 /* CoreGraphics.framework */; }; - FBA5CB027B1188E85093444910F59EBB /* BoltsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F8406F5398993A992C272C81CFDE2BC /* BoltsVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FD72DD1FC7AA611C0DF4EBBD03C42363 /* PFEventuallyPin.h in Headers */ = {isa = PBXBuildFile; fileRef = F38F459BB20A409D6BB725DC07CAF532 /* PFEventuallyPin.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FEEE6031EC08A0265F3B4248F047BCBA /* PFTextButton.h in Headers */ = {isa = PBXBuildFile; fileRef = D21DDC280E179412F2B736E809065821 /* PFTextButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FF579D3BBF1E7DBC750EF3F759FF0B3A /* PFCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = DEDFD5BE658CAEB920A1275B5C15F769 /* PFCloud.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF9A53DD199C04199F21EA2A2E35A17B /* PFErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 51C2376FD47B67BBB57034D0A5D9F577 /* PFErrorUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FFCB95154B6D3FFE635D0B029C9DCDCD /* ParseUI-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E674A27E491B0E73114499235656BA3 /* ParseUI-dummy.m */; }; - FFF9ABFCA518F8DA659C4F7DBA760D07 /* PFObjectFileCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 73BF8BE9385A3D1A65CD98FFEE2D3D1C /* PFObjectFileCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 000A86E96A999630D18730F9FE407521 /* PFSessionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 62FADD9376E95D055AF0A96D39FD267C /* PFSessionUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 015904FC34AD7AC33B5C17A8B4DC2E5E /* PFPurchaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CFB2DE553F71F9BD4D38BFE889EE5A1 /* PFPurchaseTableViewCell.m */; }; + 01903DCA721AA027FF2C4BFB3235968F /* ParseUIConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 830900A05A897F050CC8C0CCDE4C4FD8 /* ParseUIConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 01BB74BC139D1D09260F64D925379F49 /* PFQueryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 61FF4D40E535915FF2A5E6013656D65F /* PFQueryUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0354AEA3E753D30AE8E6B94A701A1A90 /* PFRESTFileCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 48347C3BCE6F2F0E9F400C6727FC975A /* PFRESTFileCommand.m */; }; + 03737B28D6BAF57168047F81B5FC83DC /* PFAnonymousUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 139DF95532D69618F5A132FBD855F503 /* PFAnonymousUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 03C60FBD9CB7547B458B40058168BB28 /* UNIHTTPClientHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 242785A2D898F8B3178C5C87B1AD01AC /* UNIHTTPClientHelper.h */; }; + 03E5826A251D0DE9BF070EAB5A3F6B07 /* PFSQLiteStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AC19EA4CDEEFAFF25CAB498F92DE3C8 /* PFSQLiteStatement.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 03FDAA175EB6B999D72B4EB88E67B03E /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 69460567E8D0F3A25083496C96A69461 /* BFCancellationTokenRegistration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0433ED820B0734E79BC0D1269B11B1DF /* PFLogInView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B1DAEDA8CCCACC84601EECDB3E6D1FF6 /* PFLogInView_Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 04BE8237D681A07B607B091DCB0FCE6A /* PFRESTUserCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = C64ACA14342A9ECCF8A0C727A2193004 /* PFRESTUserCommand.m */; }; + 04CB32149BEA0320CF6F9640A78D8327 /* PFConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D2AE97133B1C7AD99D02E0CBDFB4DE9 /* PFConfigController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 04DBFADECB060B72536903FAD0684BBE /* FUISegmentedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A6C012A4F3D5A672788A760562623DA /* FUISegmentedControl.m */; }; + 055F10145C443934BB202FE4BE8E3DB2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; + 056D70251AC8E24C6BF38B23DD1714E8 /* PFQueryCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A8E2C8071F308F79E8DC8D5E1A0A736 /* PFQueryCollectionViewController.m */; }; + 056DDAB5F33D617C977BAE5F25ECD98C /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC37C36EDC5E7749DCC7CEC01B8E91 /* AFHTTPRequestOperation.m */; }; + 05896B286C7BD0C5F16B9AFE7857FAC4 /* PFACL.m in Sources */ = {isa = PBXBuildFile; fileRef = C2CA7B1027D42D64DAA67C1E2011479E /* PFACL.m */; }; + 05BD04A5F73E3D27A7D713F3C5CB5F7A /* IQKeyboardManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E61330560D82210F3152034DA8D29E3E /* IQKeyboardManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 064CF6A1C6BD102075020713D14FB109 /* PFFileDataStream.m in Sources */ = {isa = PBXBuildFile; fileRef = C1648D08CE8E716C210353B82071411F /* PFFileDataStream.m */; }; + 084E0CA489A67284CCA0A3CACBF8B0E7 /* PFInstallationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B7DC16C982ED9197D1D5205693D4D1E /* PFInstallationConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0871B276C9E86024967A75834BF8BA6A /* UIButton+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = EC3F8E5AAA0D556290B7B5552E7891B8 /* UIButton+Chameleon.m */; }; + 08F77CB26BD05FE1B343D55D81CBEAD3 /* IQBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = B72FD366845653BD01ECF1385B7EA338 /* IQBarButtonItem.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 09256B3E535A3C628240CF7C752E131C /* PFUIAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F0311DC1C98B85666BEDBEE32749F74 /* PFUIAlertView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 09292E938D63ED03EE26FFF12249BDD0 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DEB4FC3937D0DC7EB7B1CE6AE0C79D6 /* BFCancellationToken.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 09AD6095076F77A17AF15C8FA5DADC7A /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A670E98EA122B6C249D0794F87C5973 /* PFJSONSerialization.m */; }; + 09FDD64FF016A46433ABC8E1A95CE5B6 /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = E15E68480948E1C08CA894190BF3AF27 /* Bolts.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0C0D5C75A59E94327ABF2F1277BA6325 /* UIBarButtonItem+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC33545EC4D27DD8FBAA13A736EB786 /* UIBarButtonItem+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0C26152F6C1310B04B876FD3B44B1021 /* IQKeyboardManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ED929F9AD4980BC36464DF3BE248120C /* IQKeyboardManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0C4D15C99084144F0AE0AACF24644554 /* PFRESTCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 385261552CFAF1B884CE31C0FDFAC71A /* PFRESTCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0C90ECF0F1EE859A59AFA69F87780746 /* PFHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 636B22993762DB16840604D7D3A30F70 /* PFHash.m */; }; + 0CC24C2247F9698B3E15F4CD4A651E9D /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 71906898F9D4CCF17CBD5FC16B0E40FB /* PFURLSessionDataTaskDelegate_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0CCEBBF735A04B98E5C808E82DAE4CA8 /* PFObjectBatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = B658BAA68F8498FD1647DDC21EFA343D /* PFObjectBatchController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0D86170F1985007D9E2EB7D2CAFE1BCE /* IQNSArray+Sort.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D30F5219BDECE4875E21C7C337CAB52 /* IQNSArray+Sort.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0E46571B85EE1DEB0E0BBE4324B2F5CE /* PFFileDataStream.h in Headers */ = {isa = PBXBuildFile; fileRef = FDB1BAB3B8D54F4259C686820194F1B4 /* PFFileDataStream.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0F5680893697DCD762345A72BE90A107 /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F396B4049BADC218F3C27A0FB8AF963 /* UIProgressView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0FA4BDB376E469CB553E01E199BBB63A /* PFRESTPushCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = C10C515D0450CC29CCEF68EA816542D5 /* PFRESTPushCommand.m */; }; + 0FC757A2467A1C8278B3C8E0FD126CB9 /* PFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 2247D4BD60404A85E31A8014A3D24BB5 /* PFObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0FF92B7CA2702E3FB545DBC76EB8F7DD /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = AFA966371146146D7F2018130EFE0F66 /* UIActivityIndicatorView+AFNetworking.m */; }; + 105080EA61E3AD581D9D992B1C5EB418 /* PFOfflineQueryLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = FDBF6836162C2F1E62D2A5B6917F4F50 /* PFOfflineQueryLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1053442EE9C1B64B2AAD7CB91CC8F960 /* PFHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A930BF850559AE082DDFACF6887C72E /* PFHash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 11BCBDEFED4629E3C8FC48ED753E74E6 /* PFPaymentTransactionObserver_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 318C56533FDD447102932A6E5A233A7E /* PFPaymentTransactionObserver_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1233214C807850AC28C1C7BC25C7606D /* PFSQLiteDatabaseResult.h in Headers */ = {isa = PBXBuildFile; fileRef = ABFBC5AE1B18C02508CD09769DD4415A /* PFSQLiteDatabaseResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 12818D0029FE4E7608CDA06B0E38E47D /* flat-ui-icons-regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7389E3A97A4248463F61AE93C1902809 /* flat-ui-icons-regular.ttf */; }; + 135A844B6167C7B3BBC7AED7CA8826DA /* PFObjectFilePersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F9F93F92926388C8FFB4EC13EA0DEBD /* PFObjectFilePersistenceController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1383661E416ECA10B53C370FD7DA478C /* PFMultiProcessFileLockController.h in Headers */ = {isa = PBXBuildFile; fileRef = D10834D8E017BD682BEB53FD751CEB75 /* PFMultiProcessFileLockController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 13CDBBD7FCCA51D3FD1983ED9C0486D1 /* UNIHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = A283BA24B8BC2F745E053B68490B43ED /* UNIHTTPRequest.h */; }; + 13EFAF7127423EC8B6BE3BC894FAB0DC /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 412765A1C5B6953A288C3BAEBC8E6B37 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1443D972565FC29DF40A16022899A59D /* UIColor+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 27E94F52DD7FEA4FD150E6DFECA07CF1 /* UIColor+ChameleonPrivate.m */; }; + 15821E308FD874609FFFE7B07AA7BEE9 /* PFOfflineQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AB3B84C7DF66F47815CEE5E52615C7A /* PFOfflineQueryController.m */; }; + 16765937127A9DE7C2E2BB1C5F588B65 /* IQUIView+IQKeyboardToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = EB082ABFA0DCDEA7C961D1A1D072C3B9 /* IQUIView+IQKeyboardToolbar.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 16ADBCAD54B5CF1F3995F1AF0154F67B /* PFSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F1D3010E400E70C042940F75036BF3D /* PFSessionController.m */; }; + 16B523016828FB603F9E4D9DB07CD7AF /* PFUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0225577578F0F538D3E335508E84D451 /* PFUserController.m */; }; + 16C9563FC522AFCBB4B9593E72899D21 /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D3DED295E0CF4409F8BC8976A09F184 /* SDWebImage-dummy.m */; }; + 16CFA704931431EC2146912A493064F2 /* PFObjectEstimatedData.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CAC2D7C9A799C8A55D219041965A2B1 /* PFObjectEstimatedData.m */; }; + 170B81C1284725FB6076446FABCCDFE3 /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = BF319A176D7C5D07103C1757D1C4A6FC /* PFConfig.m */; }; + 17407DB318F6ECE65359F1988EB587C6 /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F017C36C635B636A8A9720DF93844C2F /* PFConfig_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 17826DD59204D4468835FC0C09E9EBA5 /* UNIJsonNode.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = E291C26D7FB8D9A151C45977AB616E47 /* UNIJsonNode.h */; }; + 17987D10D1BCBE60B5B277B9194A1CE1 /* PFPushController.h in Headers */ = {isa = PBXBuildFile; fileRef = 38D7F1933A49B1054CE8669A45108CF3 /* PFPushController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 17FFB9A78D520A8A0C2133681F0C4589 /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AE1A480AE466808EAF88E6FA440AA1F /* PFQueryController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1810DA64266F52B6508F1AF0754D7D1F /* FUIPopoverBackgroundView.h in Headers */ = {isa = PBXBuildFile; fileRef = 23D27BEF28A85F709CBDB0B8CB65DE48 /* FUIPopoverBackgroundView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18BFB3DF28A19F110FE09F0BCC652A99 /* PFPinningObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = E36DC6F0E757E7535DDD2E9C1B846AED /* PFPinningObjectStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 18F82D1C6E5E33BAFAD4215A6CC4ADD3 /* PFResources.h in Headers */ = {isa = PBXBuildFile; fileRef = F6895F2BAF98D8298BFB0A2C2E84DF25 /* PFResources.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 192494CAD9AAE36D9D54BE9950D74FA4 /* PFUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = BD99F6ACFEC1E975F0FE0DF810A977A0 /* PFUserState.m */; }; + 19BEEA34AF0C75BF7625B3E99E24D16B /* PFQueryState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D7825E186E2129768F652FA322E5FD2 /* PFQueryState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1A18FCCEB1D3BF943E9E049EC19EA46D /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 1760FE20743A856B0B1A742482064BC4 /* AFURLResponseSerialization.m */; }; + 1A8275935FF8BACEEA3858BEA3434421 /* PFUserAuthenticationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F2689D7BF9856AA54533AE6210302B0 /* PFUserAuthenticationDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1A871FF7D4F4A5A7CA464BE20B506535 /* PFLogInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CF59640D2C379A8552A7FE126379C1A /* PFLogInViewController.m */; }; + 1AF8E5D403591848BFA38386949654ED /* PFInstallationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE893D8A79BCE927BD34935557FC189 /* PFInstallationPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1AFB8287EE97FBB14C982D3730384309 /* PFObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 87D7C7463212CB7E7A2C6DDE9D75FFF5 /* PFObjectControlling.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B1F1AF2A1AB6F428F22E527890F4BD2 /* PFActivityIndicatorTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 98B7E2A8BF0A20332398DEB41B1BB68E /* PFActivityIndicatorTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B3EB346D29198E022DC233258C133B7 /* PFURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EE7C503197A62ADD66AD452FCFEFAB7 /* PFURLSession.m */; }; + 1B63D74CBA62C2E4CEA16D613970A1D9 /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D716BF50FFA96153B62E0AE932F3E47 /* PFPinningEventuallyQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B7B817BF37A32BD3EC434F3C36C4764 /* UITabBar+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 04E51A30E638BD5F2089972DC7339D76 /* UITabBar+FlatUI.m */; }; + 1C6C96BE29A770F780EDC084673E03DA /* PFCoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A78827F2D79D32394CB2A7F8AC054D28 /* PFCoreManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1D1597CB5319D82AB03C4656A4FFC3E2 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F62BD8D055CECF254F18875CD46DFA2 /* CoreLocation.framework */; }; + 1D4F83C8E6A5CCD96E035DF6E03A7C58 /* PFRESTAnalyticsCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E2E224B40477F06DF3B453832889DE /* PFRESTAnalyticsCommand.m */; }; + 1DBDEF199D3AEF9310F2935DBBBF1F89 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; + 1DD099BB263B6FC964DF781D1887C906 /* PFCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = EE1F78ECB62A69EB240E2BFAAD710CDB /* PFCategoryLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1E82CB078732A340B2516F9D5971E917 /* UNIJsonNode.h in Headers */ = {isa = PBXBuildFile; fileRef = E291C26D7FB8D9A151C45977AB616E47 /* UNIJsonNode.h */; }; + 1E8D6949CBCA40DB1BB2E04CBAC3A80F /* Unirest-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 937BA62AFDBF0A1259E42BCF5763391E /* Unirest-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1EA53431B0411D64E969C75020D2253D /* PFUserFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 92D60EA1BE94F7CC68B03B328E9DA910 /* PFUserFileCodingLogic.m */; }; + 1EBA3D2F590571ADD7C4824FD35C6CD2 /* UIPopoverController+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = A97F7D38BC76709C3A8940B642F9736F /* UIPopoverController+FlatUI.m */; }; + 1EDEA12414A8201331E9B8B22F1B7F92 /* PFPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FBADA788C844BC035F839991DA33BC7 /* PFPin.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1F14458F8079F45B39F591632AF289EE /* PFRESTObjectCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D3308E5C88DF7BD7EB9571B8F71861E2 /* PFRESTObjectCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1F74418A1A844AD6F2D0BE55DB5A565B /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B4598F68BAD6898D603B376A1FB1A8B /* AFNetworkActivityIndicatorManager.m */; }; + 1FC72C12CFE43E264EA429E7DB7C7787 /* UNIHTTPResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5272189E4887F0A7478864335C376F72 /* UNIHTTPResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 20868FC093029679C5D39FF2B3620B1D /* PFQueryTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A7759BCCF26709D483AEAA4CA39B1AC /* PFQueryTableViewController.m */; }; + 2122B48610E7556893633F090FF877DB /* ChameleonConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C1BEBF049C3CF3B9440DB6E9743072A /* ChameleonConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2142C67AE21760B7CC6503EA03FF5F66 /* PFAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 63E672189DC0628FEE2AF3B6EF6CE5F6 /* PFAnalytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 21486DFB5F9A1C12F5615840459CF0E1 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C9045272DB5D24BA18512C635B70BF34 /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 21BCE7766FE3C1F059C9002704419CA1 /* PFPaymentTransactionObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = AC8E66BCE1B2B67DA2045E7EB6549471 /* PFPaymentTransactionObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 21DC14D176AC70D4936783626B9F0377 /* PFSQLiteDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4075748CA8F21BAC0F4620D185E8FD8E /* PFSQLiteDatabase_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 21E02BBD258139C9B5170C242EAB46EB /* PFCommandRunningConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A29FD65C70682683A3D7D37BD9F78E53 /* PFCommandRunningConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 21F70A540678BB24C4996F1CD1855CA9 /* UIColor+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 73B12CABD664167D981D0544B9928022 /* UIColor+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2248CB8CC7031E8FAA06E3E917BC5734 /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BAFC8795A0D106AB97B4408C85D0A49 /* PFRESTPushCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2267E143F866BBFEB39DDB060F71B943 /* UNIHTTPBinaryResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A42508E95E64986B0EDAFC9E7C7942A /* UNIHTTPBinaryResponse.h */; }; + 22BAE8994ADCD5A6A4D71352BA0D0954 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3780C220917B4DD9DC02DDD7323405B0 /* SystemConfiguration.framework */; }; + 22C4D0EA9DC115B2C820CC447AA2DCBC /* PFSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DFD47DBE4E7606BA4FA86C0F5919CDD5 /* PFSession_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 235CA0C0E4047D17A23597B064580FDC /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 255D9757582A2D903E70F23C181DF04B /* PFLocationManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 237A599B046B4F3EB709E88AC0C2F107 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DE1802829062F013D376CB812C19065 /* UIKit.framework */; }; + 244941FCFAF0AF23318B474B95FDC752 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = CF3F287B1CCA362FEB1A80FCD3146513 /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 24C5777AA30FE28C5A943689139B9DA1 /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = AA2E139C45664A8F35F7CC0FC4652D64 /* PFAsyncTaskQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 24D23BC1BBB0A7A7F30C9EC3F45CCBB8 /* UNISimpleRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 45CDE5CE83E5FA7A91A9F1B5B0BA5342 /* UNISimpleRequest.h */; }; + 24F2BC96841F8A37EC52957AB59F2B70 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */; }; + 250A6A22ADFC9DCDE240E81BF031C373 /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 02CAE2970238AAA1CC6CCF79D78A95D9 /* PFMutableUserState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2552EF538219FE248A64E2D5ECE1F267 /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 2A04E1624A7D22B26C4108F5511DBA59 /* en.lproj */; }; + 25716D382DCFCAD7F4D883C97A203B25 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = E594ABB625D8E0146B3BC5AF5C3BD580 /* BFTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2572640CFC23B4C317C822B8F7052777 /* PFTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3E3071B72FB3D58BE54787E6BDFB30E /* PFTableViewCell.m */; }; + 2577E5E644A5FDDF4CB92BAF5F31EC7D /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EDC42BD069E7A8A5E8A432640A1F523 /* PFPushUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 262301EFB0DF84B163076AE6AE233A63 /* PFUser.h in Headers */ = {isa = PBXBuildFile; fileRef = CFFDDC90032F16F94B5EC26EFEF453DF /* PFUser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2644C9F43A44BDE784C59C428084FC25 /* PFRESTCloudCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = C4ECEB822EE787E43E4B3D81D192BD08 /* PFRESTCloudCommand.m */; }; + 278C6EAEEE0A5BF8D626590F9CE97ACD /* PFMutableFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 70A3394AFCD610A0CB8D77E3345EDC43 /* PFMutableFileState.m */; }; + 287FFE08BB132472B7CE5BB3F47506B6 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F47F6AD14A34D9AF4DC5B0EC8FF52D24 /* CFNetwork.framework */; }; + 2921ACB9BA038E23AD06882CA0726C09 /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 10047E16CC827DC41FA3CA3C588A92AA /* AFSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 29BBF790B6F414BA173B1B782F99AB27 /* IQKeyboardManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 748B0CC576A8F49BAB1FF66E84471822 /* IQKeyboardManager-dummy.m */; }; + 2C9ABA75D5226F81794858C2526DCC7C /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */; }; + 2D88653DF74717862CA3930405E6B1A6 /* UISlider+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = F06AE122820D7A69B28B8EE2E62E85F1 /* UISlider+FlatUI.m */; }; + 2DE51A8444F0CEE2BEA32BBE1D5A2C54 /* PFSQLiteDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = E743DD9EBFBFF918EF56FABFE4C5AC4D /* PFSQLiteDatabaseResult.m */; }; + 2EE700C80315947D821E53B00AA74847 /* Parse.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C58B900BAB52BE6C1A6AC9401D85688 /* Parse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2FAA5B2F5F9FDDE4AA56578E1EAC701A /* PFTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 15E60AC5AE5D9C7E54C124BD0AF98894 /* PFTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3005D65B0D40094D6DA7A7D7213106DF /* PFImage.h in Headers */ = {isa = PBXBuildFile; fileRef = B76589E19EEC53370B66781B36DA63ED /* PFImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 30363108F907B435D4933CECA8A71F1C /* PFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C38C5BECC83269A118226CDCB9D7F23 /* PFNetworkActivityIndicatorManager.m */; }; + 30DE4D927EC179D0C616A2855CDB459A /* PFLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E151F5F8DCE58DAE5D1BA2B8EF1ABE8 /* PFLoadingView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 30EE70080B2F12E67F05AD0CAC186B75 /* NSArray+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 866C32999AC6688E43E9E3A792BC2D34 /* NSArray+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 31185487A9186107B6DE9891D14BFE90 /* IQTitleBarButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = BA5631014AC595496E91221859D20693 /* IQTitleBarButtonItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 312C40EA300F699058F45DE66C7F9C51 /* UNIBaseRequest.h in Copy HttpRequest Public Headers */ = {isa = PBXBuildFile; fileRef = B3DEB5E877C555C69169163E7AE3DCD1 /* UNIBaseRequest.h */; }; + 313BD1D22D3DE3450A1B4727713A15E9 /* UIAlertView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 13D51BF48F5AB0EACFEFDE67304AE0AE /* UIAlertView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 31C43362935AD5BBD696F7FAA1492DD0 /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 37FA8F56A1FA6A8339B3BF6A946BAEE1 /* PFCategoryLoader.m */; }; + 324F9FD525319CA2193E87C87FD96700 /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CB133094501625DCA52F72F4C4E2B46 /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 32B13741B4A59633A35C03D3BD085300 /* PFPush.h in Headers */ = {isa = PBXBuildFile; fileRef = A869D04D94D174D538E8EEC8AD639A3F /* PFPush.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 32C1805D7037A65C326F15AAD4BE4831 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D76EBB2E083B394F15EA609C72DA53F /* BFCancellationTokenSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 32F3C97B6182D3AC5A80BA4739537E08 /* UITabBar+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 71F87070D4783A8D6F354D8BCAB875C3 /* UITabBar+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 33263E341C1322500C5F2632B22EECA7 /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DE2D5472532E535898481C5442AAA5B /* UIWebView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3365FAB014526B23559C5872E3437594 /* PFObjectFileCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 13F31358F978DB7AE6B1DDF2572DD630 /* PFObjectFileCoder.m */; }; + 33DDA524C70EF2A533A82C76BC02D588 /* UNISimpleRequest.h in Copy HttpRequest Public Headers */ = {isa = PBXBuildFile; fileRef = 45CDE5CE83E5FA7A91A9F1B5B0BA5342 /* UNISimpleRequest.h */; }; + 33E6684C7788A971BC853F79DFF4CEBB /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C575A54BA05AD27990EABB75C2F2926 /* BFCancellationToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 34282579CDF97D7263F08A2B79AF81D6 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = B9DD11F8C4BB31A6C209F4164F43F64F /* PFEncoder.m */; }; + 343BA4FDC3A386CEC60414AF4686A9B9 /* PFLogInView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EDBAED551FD57F89EBFB1F16C24A8BC /* PFLogInView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 34548E9B4CDB70E6E52F11A181092423 /* UNIHTTPRequestWithBody.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 843985569B6BCF4CD645497A32668195 /* UNIHTTPRequestWithBody.h */; }; + 348A4B6738A8BD6637F87F3926564CEF /* UIImage+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 0071EAC09DA0FFDA8FB3410D2936CA80 /* UIImage+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3491354D5E3DF8A5EFB4DB1ACBAB9B29 /* IQTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3EC67DF2778EB45CB9E74820D228B3 /* IQTextView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 34A10781FF0D6156B2F0E33BB5DF0224 /* PFDefaultACLController.m in Sources */ = {isa = PBXBuildFile; fileRef = C571323D266A5975685DD2191C775A9A /* PFDefaultACLController.m */; }; + 354857C6F33F12FCA2CFDB52898A2255 /* UNIHTTPBinaryResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = A89D66CA82F4BB4ED27F23A368117AD8 /* UNIHTTPBinaryResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 35DFE8F14A41999C6A59595E8B8A147F /* PFObjectUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 08FAD9262BEE1666BF4D27626214085C /* PFObjectUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 365CF97A9023756C3B71A78C0F150024 /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 54A49B5066DC5E2D106E4AB7EC84E310 /* ParseModule.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 36D51FC3C4F0F93BF917316E39608365 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; + 37A3F447E3723760E69C1AC533341CF4 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 76CB784D54B055F86031B44399CB67A2 /* UIRefreshControl+AFNetworking.m */; }; + 38633D20F3A40F43C90014227D54371B /* PFConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = CB714FA67888C5CA046827C36660588D /* PFConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 38B64A887C7C04EAEE5414A2715EEC58 /* UNIHTTPJsonResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = BC984301125702EFEAEC41E5B9293303 /* UNIHTTPJsonResponse.h */; }; + 38D829CEA9E110D82321565160D8394C /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 6133AB3618602C2A8838511FEC730F13 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 390E4C4935A539E3C35633049F4C4C0D /* NSArray+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = EDF1B2BF95B7B8E40AF9358E2CAC9C93 /* NSArray+Chameleon.m */; }; + 3A066B9A2C17944AB5CE63613BCB1EC5 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BF3E9A8E7DEEA28BC70D87AF3DBEC43 /* BFCancellationTokenRegistration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3A1CC2DA6F8F25B29230E84636D88D6D /* PFCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = 998337F9EFB691B95AC04D0DEDFA76DF /* PFCloud.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3A83FC797677226A54553528FDC17526 /* PFURLSessionUploadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D840D2F9AFF823F94F3AB0131703459B /* PFURLSessionUploadTaskDelegate.m */; }; + 3BC2F4893F897433C613EEEE5EE935A2 /* FUIPopoverBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = CEE4FFACD555D625ACE047DB1EE70750 /* FUIPopoverBackgroundView.m */; }; + 3BFD15515778438F53184FB409F433FA /* PFHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = CD6556ADFAD1BE0857B3369A52050CC6 /* PFHTTPRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C4D35E189329636BFF6117BF20985E3 /* FUITextField.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D4160C37DEDD4C39102E2A7D159A51F /* FUITextField.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3C8E21B73FA1F3272C097FF1635AE123 /* PFJSONSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = F8778205B24E6652290E0F5E7CA361EC /* PFJSONSerialization.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3DBB6503CA0A6A4010CBF5811D2EF6A0 /* PFOfflineObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = F449C107CBE098205F80BDB0D60F2E22 /* PFOfflineObjectController.m */; }; + 3DC92CBA93056F0AB9A06A9690F79256 /* IQKeyboardReturnKeyHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EC3FC2DD569F8D2763648C4F041C266 /* IQKeyboardReturnKeyHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3E3D4C3FBC3D5752FB6F7D8CEC6DD58C /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EBF18A4C5D5CB1C2B68379E0F011BC7 /* PFEventuallyPin.m */; }; + 3E9C3B14F625AD4489FB47F637D3AD44 /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = C6620BB5952ABF0E4296A0D2DB7BE02F /* PFKeychainStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3F2C1610BA5B0F27BAB9D3067AC8FB30 /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F6C72DA72BB9A832890E4D4C02C794A /* PFBaseState.m */; }; + 3F9F253CF143CE15C66E99719E1296F6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; + 4017F157B6276B31A37E281C033F7D41 /* UINavigationBar+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = EA4EB23C725FCF4754FDC1ECC1A03D47 /* UINavigationBar+FlatUI.m */; }; + 402896AEC22293D8BCD6860E87020689 /* BFDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = BC79A8ADF356BE7E0C97159A9173BD3E /* BFDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4088CBC095D20D651F6BA5F7A3FED8FE /* PFActionButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C796738B070BC90BE32479A8A3AF602 /* PFActionButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 40F68DEA67982D3B13DF8EC32D23C859 /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 68664BFE50321FF5CE50A110AAE7E2E5 /* AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4258F7777937094D7BE116408C78DC46 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA6600846C35A33A9E0A0436C4B4BC26 /* StoreKit.framework */; }; + 42B6719FA91532EEEF59E348C9F722F6 /* PFRelation.h in Headers */ = {isa = PBXBuildFile; fileRef = B1A39241452F7C9E16CF2D824F7364DC /* PFRelation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 43F3A74CC45BE08D52C8BCDC56F58617 /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 40668A53B58A0048FA222C4AB7E2189E /* UIButton+AFNetworking.m */; }; + 446C0BBFFD9EAB06C6FCCF34AE0E5286 /* FUISwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B28432D4AB483D9A86C6817FB52BF45 /* FUISwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 448ED42670A895C7549BEB4765047AB3 /* PFURLSessionDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 46AA5FBD23466BC2877613E9ED755E8F /* PFURLSessionDataTaskDelegate.m */; }; + 44C1F895434928D4584C6938E69F6D32 /* PFUserPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 50662E86832F5B9AA451BDE684D8D13D /* PFUserPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44D664F52828716532BBE6F0A5D9BF6B /* PFPushChannelsController.h in Headers */ = {isa = PBXBuildFile; fileRef = F38FDD5066166323AEDEE66D20C6F9C2 /* PFPushChannelsController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 456125DA576BBA0E50106E319FF73A44 /* PFCommandURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 809F219DA65FEDD9A6F8E2DF586F7D62 /* PFCommandURLRequestConstructor.m */; }; + 457A1B73EB100DB2139DCBA29A6DB28A /* PFURLSessionJSONDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E725EA90CDD636F75AA6136536B4106E /* PFURLSessionJSONDataTaskDelegate.m */; }; + 466DA06DD6F7E087A1C72AA91896B56C /* PFMutableACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = CA65A1A27CD00A01A317F904467FD513 /* PFMutableACLState.m */; }; + 46A85D0B3E105715569CB1BC5C7C88C8 /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 311DAB5AE58D986B329A83CDA6086370 /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 46BF99BEBFFD63DBE8BC085CD18A4024 /* PFRESTAnalyticsCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B4159A9FBBE236E3AC1B55F41CC8C84 /* PFRESTAnalyticsCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 46C66D1485581BB40EFAB6E834BD8C47 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BE58929E3D2856E2FF1200233D5AEB2 /* PFEncoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 46F36C74EF8B07192275578A983B1E96 /* PFAnalyticsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = F2BA222B9F01795A4208422B79E054CA /* PFAnalyticsUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4777B57796CCF2501C8E4035ABC45459 /* PFRESTConfigCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 818DBD3B6CFCFF9DC445CD8574113BAA /* PFRESTConfigCommand.m */; }; + 4896AA0698E4DAD2C367D7660C9257A6 /* IQUIWindow+Hierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = 25397001B9BF4C1125DCF8D75A89971C /* IQUIWindow+Hierarchy.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 49213E71A202E706B4C67562EC826709 /* PFUserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = E7F24C0BF2AC1D3A0AB451BCE534C2D0 /* PFUserConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 492386F98E4215A5AD79F9CC7670AED3 /* ParseUI-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 586F2194798AE4805A6F8FE5E6F506DE /* ParseUI-dummy.m */; }; + 4927A5D31337BBF09B4D630EEBB29762 /* PFACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 41C24ABA60DD2C0A252F655A688A17C6 /* PFACLState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 493A39F7AB5CC399A17F93EB112A7C15 /* ChameleonMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = E99932D8C34D4E771914E628104B89C5 /* ChameleonMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 494AB2A28A1FE50E4A600C9EA897D4DD /* PFInstallationIdentifierStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CDDE8A709E5616D62A31C917FE40D76 /* PFInstallationIdentifierStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 499795646572C0F4982F952399B79430 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 00D07CDF153D8265CAE511A266EBBD92 /* AFSecurityPolicy.m */; }; + 49DF183B1AF52E821ED5A77B97CF6DCB /* UNIHTTPJsonResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B4F6F85D50E4CA8F5E785A0C0E8F842 /* UNIHTTPJsonResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 4B2AFEB8AA38E3742467F54CF68224C6 /* PFEventuallyPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 7870F841A362ED1E4FFA8F36CA9D297E /* PFEventuallyPin.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4B711F7739F9BC189B32ABDB6BA90A0F /* PFCurrentObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 99FBB19FAFA339DAE8A2130BCBCD5A90 /* PFCurrentObjectControlling.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4B9F5156E5DDC40B87884E5C37B1153B /* IQUIWindow+Hierarchy.h in Headers */ = {isa = PBXBuildFile; fileRef = C1E8E202F03E9DFA6AFB0F098ABD3A06 /* IQUIWindow+Hierarchy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4BAD01BECD8E7D90990BF6B30EAC04C3 /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 2028AA6088F4575DAF17E2F06D2DC064 /* PFAnalytics.m */; }; + 4C94CABF04CF5B40BA9A93E090EB08AD /* PFHTTPURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CFB142945D82B4D948325BA5F017A04 /* PFHTTPURLRequestConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4CAADF796B7A0A57121A9E3C287127C5 /* UIViewController+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 656E2AE30EB08EBE4FFC367B7AE4DEAE /* UIViewController+Chameleon.m */; }; + 4D410BAF4CB2B1C8C7AD0F85700EE2D8 /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = A24E7517836476C9939D680AAF9AAF11 /* PFAssert.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4D78D87B1BB66CD942A878041185C7C0 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BE6842882A4FB9F520482896F6AB111 /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 4D9D2707B9A1C9724DFCD9D69B993FA1 /* AFNetworking-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8852424B3CD79FB522C7DBB741B3A915 /* AFNetworking-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4E149934317AEC01048B753730F6EA9F /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D75D7FA476F50BC5FB3F3B0641D2926 /* AFURLSessionManager.m */; }; + 4E1AD5C16CF7F3F2397F4A106F313096 /* IQUIViewController+Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EFCD2984A81FFD36BD6341ECAD197B3 /* IQUIViewController+Additions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4E349CA31573A68A02AD4F89FDFAA05B /* UNIRest.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 6226CB7D1425E15682AC63FA51921DD7 /* UNIRest.h */; }; + 4EDC3D68FA4D08025BAF6A25AFB5E65B /* PFReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = DF725FD55935B6C23669417D4E1B2668 /* PFReachability.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4FB349659BB29F142EB4C5A11CF8D33E /* PFDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F3997BE1E4CB1C34C279A257963F192 /* PFDevice.m */; }; + 4FEBA5F071565CE6BEFF968CD56E365A /* PFRESTObjectBatchCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = C6725615AB0EB3D222E0B93D2EC3C6B7 /* PFRESTObjectBatchCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5064614BEFC3E1DCB85B376E7C849393 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1579F2982C42C23D86C4671BEFC5BC9E /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 50696775E4E363709DA7C32DDE26C749 /* PFPushController.m in Sources */ = {isa = PBXBuildFile; fileRef = D26D67D3B6418EC0A3EC02DFD678C696 /* PFPushController.m */; }; + 509F838C90BD33FB102E30FA553546A5 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC336EDAC9FA746257F40BD540DC9A75 /* Security.framework */; }; + 50A74BA500644CFE9D103329CBEB0D32 /* PFObjectLocalIdStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 065E4ABAE71F00350CBF5E154707399C /* PFObjectLocalIdStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5114F8D6A5939B847DDDC41E2B75D419 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */; }; + 516412468B9D294B708BB12CCDE0E76E /* PFSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 80684463B172C7670EDABBAB1D1D3482 /* PFSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 52347D4DE0F39E74CAFB1591E68221E7 /* PFObjectEstimatedData.h in Headers */ = {isa = PBXBuildFile; fileRef = FF246D759D5911D6B15A849D032F9E71 /* PFObjectEstimatedData.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 523D7711F694B582C1B3E89E912DF6B3 /* PFPushState.m in Sources */ = {isa = PBXBuildFile; fileRef = E474D6AB963D4ABAFB608C01EC10CCE0 /* PFPushState.m */; }; + 525611A9C3408922BB8EB81692E6D161 /* PFFileController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FC94E4C9D7446F799F1571C5E5D24B3 /* PFFileController.m */; }; + 525727E37B9DFED1CD3A18CFF752383C /* ChameleonFramework-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D79C12A61A4543E416CBB738D3FF37C3 /* ChameleonFramework-dummy.m */; }; + 52D60DFB5AF85D51AE70D3FA3B5F8633 /* PFURLSessionCommandRunner_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = ACB7449F5C2B0CE0404EEF1294771367 /* PFURLSessionCommandRunner_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 53363111800D0961A419E660FABB61E8 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62333A4D0E9AF8700874F1F22E9827D6 /* AudioToolbox.framework */; }; + 533BECEF90857A789B965FE3C20DA467 /* PFRelationState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E936219EC6142DBDD297B11DCA11AC0A /* PFRelationState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 533D41F33F1F148F6D7BBC7BB5C3DEA6 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D0E7ECA8260E9EE58E2D1D581456EE6 /* PFObjectFileCodingLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 535123250BC23D2854597629C68EF4F1 /* PFMutableObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 352A7DFC0FAD78D5F39DDCF907D02C5F /* PFMutableObjectState.m */; }; + 53C9A682E744C8CD8A71E7926530B78D /* UNIHTTPResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F8AB594F361E76ACA20213E0F3D3860 /* UNIHTTPResponse.h */; }; + 53CB0FAB7D337B035394604A48E7A357 /* PFUserConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 19176755A633092BD34527BD97CC9A2D /* PFUserConstants.m */; }; + 53EC95B96212B86A7482BE9466EB41BF /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E737BD38A79BE130905DB568587BBC4 /* UIWebView+AFNetworking.m */; }; + 543BA9CDC20915D1B7D6CE986E3C86BC /* PFQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 86017ED93042A0624A5FBBFEDCDEE976 /* PFQueryState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 54FA74375505B520AC81A5FE3C892313 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 01682B06EC1A9F5115B2823C70E94CA9 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5630A2F69424A9E46E93DE4E4407AE1C /* UIImage+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 44E08AAB6C070B945737B41031CFCAC4 /* UIImage+ChameleonPrivate.m */; }; + 56CAFB300305782D5B129B4DD0B0EE58 /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D464E14984EAF6352F7E733E899C8F4A /* PFRESTConfigCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5717FB78F8B2247DAF6CC1D1F0CD1D98 /* PFPushPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 41729ECC74ACE0C2F2268BD56ABD77D5 /* PFPushPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 57595893801E77A08FC28462EA856C40 /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 91F6CE6961CE84A5E762D863216E0997 /* AFNetworking-dummy.m */; }; + 58A62415FFD7B1782701548E67E4E8D0 /* UIFont+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC6A55FA3CDF0EF58B5D4BDD6F6CAD8 /* UIFont+FlatUI.m */; }; + 59E5D1E2428A166DDC257FAF4FB9F9C3 /* PFPropertyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = EE18541D7EEA1DE57DE7976E3835CA79 /* PFPropertyInfo.m */; }; + 5A25D889204C1D0838E27A486CEE76AA /* PFSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 3448DBBDFED1AD82ECE8A1B07DD53EB0 /* PFSession.m */; }; + 5BB2CC688FADABE72F1EE80DBCDE28A5 /* UNIBodyRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = AD75432B2BF6D1FC707CFCCD3527D979 /* UNIBodyRequest.h */; }; + 5BE7BF61E2C24AFF20EE09847B3462AA /* PFPaymentTransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 687B09B7B61E7AD8BBFAD05917EA3836 /* PFPaymentTransactionObserver.m */; }; + 5C069A9D5B4CAE514B4F46117B04E888 /* UITableViewCell+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 94D6AC2286C9B645008316B81D8156C7 /* UITableViewCell+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5CCE8599A31182489B7556A9A94C0CE7 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E6A437EBB862966A809668856F8E247 /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 5D0F6EB9FF087444D8C35C94F587FA90 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */; }; + 5E13FE4DEC63873FCFEE5E3F62CF76B3 /* UNIHTTPStringResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B09852DB9FD0FD28F70ECC80DCF2091 /* UNIHTTPStringResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 5E1CA14AAE9164EA9144A2D66C7ABCED /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; + 5E1DA51B25F43C73FAEC3F35A34CF6D7 /* UIProgressView+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = E5855B0E065B8C1A0EADD0781BD28D00 /* UIProgressView+FlatUI.m */; }; + 5E55D469ABDA00CB5E22565486F051AE /* PFKeyValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 98FC30222B791FD6C8D1E6F1BC6F7687 /* PFKeyValueCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5EF07666094CCCAD7F7FD9C75E1B1A39 /* IQUITextFieldView+Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F452750888B246772EB8A6877EBAF3F /* IQUITextFieldView+Additions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F7CFB98E474841AFEAC9142671E1607 /* PFURLSessionUploadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 30897A1EF233A016A554F6A64222767E /* PFURLSessionUploadTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5FC03CE121193E811A7A38226CEB7FE6 /* UIToolbar+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 20B6097286CC2E4C80A144D823873289 /* UIToolbar+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 60235CFEA89AAEDCC92FD14F7B13642E /* PFTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 28965A0B0DA8E71614774B97CBEF38BB /* PFTaskQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6117F0C2CD693D1223FF88671015CE8B /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = E715B6385F222A65C0AEDD033DAC27BF /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 617837DA00E113ED6434856AFD3B0655 /* PFLogInViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = D49A2F201D1F072E9F700F36FB9F6B9A /* PFLogInViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6195644CA3E3419A95951B95B12769B1 /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = B4E5AC1FC469AA6601F3D23C8271F2CA /* AFURLConnectionOperation.m */; }; + 625FF9AE4686AEA4FDCDA12811832704 /* PFSQLiteStatement.m in Sources */ = {isa = PBXBuildFile; fileRef = 40284536A49434B0DD0358F33A4F8172 /* PFSQLiteStatement.m */; }; + 62868B8A6396629E54D5A1B9EDC2DCED /* PFFileStagingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 641771E5ACE52EEBF054DF88C734432B /* PFFileStagingController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6355D259CFE41FA5DB24D153FB7A462A /* PFCurrentInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 241D90B262CD5D9CA1CE4E85B2753446 /* PFCurrentInstallationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 63972B7F495EB80B6B9A732BCFFC62D0 /* UIImage+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = F44A3C87BEE43E3E45E5CF3D64032D69 /* UIImage+FlatUI.m */; }; + 63B554E188C8F0ECE4E2FE49DC187B71 /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3667C7F789954F098ADC741D622D52B7 /* AFURLSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 63BA863394E7EEC25970ADD618763ADE /* UNIUrlConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E279FCCEB7C1AEB25BCE46F878D745B /* UNIUrlConnection.h */; }; + 63C8A6145BA13CC1357BACF7619571A9 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = A356B9DFCE0F6FA18DF48B6098125F04 /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 63FAAFF9D8F289AB5D001057E0A6E0C2 /* UIImage+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = DB9AB176562A9D6550C05D4A4094FF0F /* UIImage+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6449D6FF9A736A7B47059C6C6207F2E1 /* PFLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = F24E7092B94D3B25D84A505A530066AE /* PFLoadingView.m */; }; + 646E86EA149691E2A103AABC8ED83B3E /* Lato-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B4B9DA35E6B073D79C38529A56AD6105 /* Lato-Regular.ttf */; }; + 6474A151BAB6300B587DF01C1F4FFD7E /* PFCachedQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = D6A3F777F9D72A576946C81634647411 /* PFCachedQueryController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6482EBE780EB543371D426AC31797DAE /* PFSignUpViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FD643ED6BE8B1DFB4B3D62C42982411 /* PFSignUpViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6544222D2E3DD831AFFA9A3DCF39345D /* IQTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = BB33008CB3C2594164293FDA78B53616 /* IQTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 658DD32CED473FCE3E157760C94A6AB9 /* FlatUIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 44C38AD5632D2AB0489B5A84DAE0E5C3 /* FlatUIKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 65954C025FD7062A89E4CAB5E385B3DF /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = D76E57E96B10ED8D71DC4BE92815D2B3 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6607A316934DC065E94AA70556947F1E /* PFResources.m in Sources */ = {isa = PBXBuildFile; fileRef = 44E593737C598C091CC7B69331EE8F5A /* PFResources.m */; }; + 66761408528652240616F11E28CA1AD4 /* PFLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = FB8B3149AFFBFA7C33EB94E521126BBF /* PFLogging.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 66DB7FE778575C04997A47CE9AA4C978 /* ParseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A30756FBB458B3FFBE25E41C6A39E07 /* ParseManager.m */; }; + 6740D1151D0F74B100B549BA5D8068DB /* IQSegmentedNextPrevious.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C5CF7AB604577F8094BB7A4D0B1EA38 /* IQSegmentedNextPrevious.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 67E47244AD75E871069A0531DD9C9608 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B65C31D9152869F1CCD359EF540969 /* PFURLSessionFileDownloadTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 67E9AAA2DF855990B53C8E37179D1B08 /* PFAnalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = CCE21169E91B4F413E70BB27F172E902 /* PFAnalyticsUtilities.m */; }; + 684E3449A728EFEBE2160ED5F8E37900 /* Parse-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 12EE481EE7117C1AC26F8C373608E91D /* Parse-dummy.m */; }; + 69EBAC092096215DC0EA9C889002873B /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 305805548D87E2C5165C0A0FED697B4F /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69F700981DD5FE492C5E69C0AAD478C3 /* PFLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3661E7338F270E4C60D4CB7618DACD33 /* PFLocationManager.m */; }; + 6A204352C2657039376D9B800EEA73DC /* PFImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F9A8AE9C1EA56C8732FF0143F957D513 /* PFImageCache.m */; }; + 6A8840784D210166F0E75E0AF8E413AD /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = EE978A828BDE18C9C31167600F655876 /* UIButton+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6A8962718D8E9D7C66B2D3013F40D5C0 /* PFOfflineQueryLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE1874B575E1E5185B44168861EBBA9 /* PFOfflineQueryLogic.m */; }; + 6AEE6C668ADED265E5073A0C10F14DEA /* Parse.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CF52AD6C105BF59D3D2E0B1453E545F /* Parse.m */; }; + 6B4EAD36189A20ACB81F4AF6B62EDC93 /* PFCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 53523337F4B830F83880CFDC298F2BC8 /* PFCollectionViewCell.m */; }; + 6B9A30C0DEEE650ACE7112BEF04EB351 /* PFLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C7B8B94263BB8F789B6BD083776BBFC /* PFLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6CC8DAFDF47415C82B325AB167FB27C2 /* IQKeyboardManager.bundle in Resources */ = {isa = PBXBuildFile; fileRef = A4FDC68F75815A014551F0B6B572D2AF /* IQKeyboardManager.bundle */; }; + 6CE0BDF4BC45D85351D65C54058ADCA8 /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = D253FAF99DE0E9661935D36E6600717C /* BFTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 6D0EDE2C0500E59D3BCCDF8014073A8B /* PFOfflineObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CC6108EC34A6AB9D07BF82118825BE6 /* PFOfflineObjectController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6D856BD6272DC3B97FBAC3D6503343D8 /* UNIHTTPStringResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = C7F69AB63C5B9D83F940D7C9CA0CE984 /* UNIHTTPStringResponse.h */; }; + 6DA6530898EC420505935E4CBB869ADB /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = DE9F993B8C26D2CD762FFC2EB4E32734 /* UIKit+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6DDD9E6F6119619D1120F3D382CA208A /* PFObjectSubclassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 83F94635DF5FD3CB6C04F66A51892F22 /* PFObjectSubclassInfo.m */; }; + 6EB34C4A888CD75B1347430E8E2DC8AB /* PFPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = F5B5CF62D6DD8EC2B0ABA7B384CFB873 /* PFPropertyInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6EC4D234025E1A35DBB519302842C887 /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C823BA36B3996A5B127FB928AAFB071 /* PFCoreDataProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6ED02164B5E06B799C50961364EEC1DC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; + 6EFE18C45AAF6979BA21513D0DC45732 /* PFRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 67CE6D4D9A7B520EA991DDC9419C137E /* PFRelationState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 700F5568DDA1E624C522F380B8738A42 /* PFAsyncTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = CD3794F214603143EF12BBD7D35183B1 /* PFAsyncTaskQueue.m */; }; + 70AF59761E0C2A4A726B6E59FEE3CC24 /* PFProduct.m in Sources */ = {isa = PBXBuildFile; fileRef = 88DBADE931198B937A907C0F4A844AB0 /* PFProduct.m */; }; + 70BCB2E06955566BC275547B1CE87E1E /* PFColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 5407D6309498466D3BD9EEE5DC9171F2 /* PFColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 70E7F7CC26DD49AF7C5F885CBFED80EE /* PFActivityIndicatorTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 86BD4117D04BA8012C142C487374653B /* PFActivityIndicatorTableViewCell.m */; }; + 71406894593D147D7656C97D0BE33AE0 /* PFFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EADC0A4005E0A455E24E378AAEACAC44 /* PFFileManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 714FB212B725F8BDF3683F38B7F6B4CE /* AFHTTPRequestOperationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DD00DBDBA4AB7937FF095E5352F14E53 /* AFHTTPRequestOperationManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 71535E3B142F488A3F510A0A2D854A26 /* PFErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = FD4E574985753AA8FBFCD4DF93047E2C /* PFErrorUtilities.m */; }; + 72312D1A5AE5A6C1B984412285CF5E92 /* PFWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 852A83DBE22D8BF63D1F7D4F20EB25EF /* PFWeakValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 72CEF78CC6C2341AB78EC7ED7A3B2844 /* AFURLConnectionOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = FABD26BF571BCC663379AABBAAE7B44B /* AFURLConnectionOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 72FAFB0F0E6FF8AB2E9CB406A0C6D66B /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B6DC6273BB88E3B2428C06836FF537E5 /* Parse_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 733D1FF755A7E59F0218E2A9225E9ECA /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = F364E09FEB64FC9E1C8B7224CDCE8E01 /* UIImage+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 73468106D270D5373F13A88722F0F42B /* FlatUIKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 20D75D05C3716B1B1FCE88C6C2E9312D /* FlatUIKit-dummy.m */; }; + 73530A369BC0C71417737C7732EE4BE5 /* PFUserAuthenticationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A7D177985593F94AB3C85D6D51C42C6 /* PFUserAuthenticationController.m */; }; + 746B0BD3442F7C333D7F7E2C518E9031 /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = C8CC6659A6C2F9156DD09335364D0A48 /* UIRefreshControl+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 747E24F16EF4878D1A18D93BB11C1E48 /* PFActivityIndicatorCollectionReusableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B071309D9B499D128868D443A721FC7 /* PFActivityIndicatorCollectionReusableView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 74942D131A05E345D9BC3D47F8487C58 /* PFHTTPURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C225A32BD5AB6FEB97D66740F1E0931 /* PFHTTPURLRequestConstructor.m */; }; + 74D6C8F8FFCA98252D63ECB118C4A832 /* PFInstallationIdentifierStore_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 98CE93C5090192A08CBA7E7C5BF3D0EC /* PFInstallationIdentifierStore_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 755D05098517A360EA8B6BF70AED2F97 /* IQBarButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D206417FCB7E126D2076A47DEDF1A1C /* IQBarButtonItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 75DFF5A155538F100BE6FD0AEF6B2EEF /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 53977B705B1F2FD103C89A12B9885AA3 /* PFMulticastDelegate.m */; }; + 7604B65CA0E258822D5401A28AD4F6E0 /* PFFieldOperationDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 35AB26F5A3AAAB62DB4FDBFA45B6AE7B /* PFFieldOperationDecoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7652337C6698F42EC8AA67BEBABC57E8 /* PFFileController.h in Headers */ = {isa = PBXBuildFile; fileRef = 113A9AE0365FCE4FF2F8C95725E6A010 /* PFFileController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 76F0ADD573F39F6C2E6AA583EE3E28AD /* PFOperationSet.m in Sources */ = {isa = PBXBuildFile; fileRef = C0F69EF677BEDD5C5FA799A9275E6EAC /* PFOperationSet.m */; }; + 7715B49F4FD719BFF228560746AC6F96 /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DDF020AF63A140F55102296DFDB9C66 /* PFInstallation.m */; }; + 772FAB57D507F834419A8B53F81775FE /* PFCommandCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 97FB31513AE2FE8E761A9C0EEB5EC31F /* PFCommandCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7757891143F134EF973508DD56821CA6 /* PFRole.h in Headers */ = {isa = PBXBuildFile; fileRef = EF607DC0E28A9F3234F18C9B3BA88690 /* PFRole.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 77894BDDAFFE8441526B64E1BBB856C7 /* PFURLSessionCommandRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = 5358009CFED1962F15A2280446DB04A7 /* PFURLSessionCommandRunner.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 78CCEA1A83DC9E7EFD3198F14D7AB289 /* PFLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 3ECA32B49BAEAD29BCA93D40EE9CC6B7 /* PFLogger.m */; }; + 79227FA8FC3B6B7EA7D79083B641E36C /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3613B45ABCFAEBD5BADAE64A82A4746B /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 79D5AB7ED99F6F3FB99421D0DD941FC6 /* PFNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E3AAE5A1E6096A049F4DA5D191CBADC /* PFNullability.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79D915DCC0E57B431C2DB968A7BB6674 /* UIView+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 464C0397F3E6DFAFEB38909A49A88023 /* UIView+ChameleonPrivate.m */; }; + 79E30128DA0EB3E973E7089926A04270 /* PFGeoPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B4DD551A4377B715FBEA24BD68F23F7 /* PFGeoPoint.m */; }; + 79E628F0D120F5718AF6A64BDA3BFB05 /* ParseUI-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A505892A83F06969DC7D47BC6FC72B07 /* ParseUI-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7B1AC5CBBF99FE9A4DF4918085F741E7 /* PFPinningObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 666458A8556D81D46682CDDE3C99CFBD /* PFPinningObjectStore.m */; }; + 7B7E112AD433BAF56C889FF2C8D8828F /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 566D307A23F6EE2FF9B47E6A1C68C59E /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7B7EE0F54A3687CFB442555D1F00B532 /* PFPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = C582F437DEEFC2DC78C169737D7E9D53 /* PFPurchase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7BB986930A679B4F4A6E2F0567AA1118 /* UIPopoverController+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 11779F8DF80724C9D85DA16EE6D8F4EB /* UIPopoverController+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7BE8B7B3771AAA185FA9AF266ACB51D0 /* PFPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = EEFC9ED15A9741CB66AA57CF2B4D69FB /* PFPurchaseController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C2D840346C748D52A6E325D25703569 /* PFSignUpView.m in Sources */ = {isa = PBXBuildFile; fileRef = B8F7790A71F9CD28C39B9D26DA94ED71 /* PFSignUpView.m */; }; + 7C404DEBEDF06360F28C8E6C457520AF /* NSString+Icons.h in Headers */ = {isa = PBXBuildFile; fileRef = 22F5A1329C6658B77CE9B997619A6610 /* NSString+Icons.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7C57153FEFBA930A0F3DE7E6A5DDFD98 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; + 7CA0EC245101545B13439BA0D2D9B8CA /* PFOfflineStore.h in Headers */ = {isa = PBXBuildFile; fileRef = BF4961A65C147D1F0F5A6BC47121CBCF /* PFOfflineStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7CBF2011432C597B6BC5A384EE6454B3 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 799A25ED12D346D0E10745AF43D345D4 /* MobileCoreServices.framework */; }; + 7CE03C57C94CDC8B9A2074371BF4DD5E /* PFRelationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A2C468F7EBC72EDE2DDF8B4ADEF3EFF1 /* PFRelationPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D626270AE9630C1EC494E72B53795C5 /* PFProductTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 077B7B33826673C09B30B8671D0097CF /* PFProductTableViewController.m */; }; + 7D712156EAFC4E82DB10F63FF6DE9688 /* PFLocalization.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FFE49908079C5362E67099F8C05E1B8 /* PFLocalization.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D753DB6C985E2BA23D16756811EE941 /* IQToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = F494433C963318EF0C17653A4A373201 /* IQToolbar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7DA854BB5C3326B269441322D1C2628B /* PFProduct+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 98EC7EC190408FB4A48D91C9C6E633EC /* PFProduct+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E4206E2E57E51D8EDF9E49677C3DA3D /* AFHTTPRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 96B0AB09E758FB641EEAB8FB2C91C6C9 /* AFHTTPRequestOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7ECD6A8CE8FF5825DDD32C63DD6F2B43 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DE1802829062F013D376CB812C19065 /* UIKit.framework */; }; + 7F1A3ACA61A193AE5AC994B81D58AA12 /* PFActionButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 8536E7EDEE9BFAF06216BADC69B65005 /* PFActionButton.m */; }; + 7F514C48A1433CC4E7666EED8526EB82 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = A408C24FBC30C794341C29AD9ECA2CD1 /* UIImageView+AFNetworking.m */; }; + 7FBDBBC09E7D8CE63696847366DCFEE3 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 389E8A9F78577F9DC088BC37445C2F27 /* AFURLResponseSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7FC33645ED6F5B7A52A793A1F647EB67 /* IQKeyboardReturnKeyHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 54B90D0232ABF1B3E61A9DC3EEAA226A /* IQKeyboardReturnKeyHandler.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7FDF8C860061C943C172B1CD123039BF /* PFPropertyInfo_Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = 0725DB534BB32F744586EC0F2357B78B /* PFPropertyInfo_Runtime.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8011E13C93B1251BE83F73849CBA41D4 /* Base64.h in Headers */ = {isa = PBXBuildFile; fileRef = 473595C4DE2B48B0D88D8F99E55C5F45 /* Base64.h */; }; + 80701E4D0A3C6FD04DB9EA02163971E5 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = C1A50FE4924602AEF1988B628C5A61F6 /* PFBaseState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 808B6A1291FF164B160C5ED8A99652A5 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3691CA8C96F3BE2D408B9E1E7FCDD5A3 /* ImageIO.framework */; }; + 808F096E62506786671896B6BE8FC00E /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = F8C8EB38499DF1B91AD5834F3D8238B6 /* PFCloud.m */; }; + 80E0DE86061F5656E6CE5D4D06A38853 /* UITableViewCell+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = E2D1FC6E559818FF5E899D86DFDAE1F0 /* UITableViewCell+FlatUI.m */; }; + 818582725BCC7A824799342881C7FB4D /* IQUIView+IQKeyboardToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EFB510E35A2E19894B0116FF11AF2F8 /* IQUIView+IQKeyboardToolbar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 81CD1C3D3AEE6561FC8B25231388EDBA /* UNIJsonNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FE07D72A0D452DFEAACC04F124006CF /* UNIJsonNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 82193516C2657105BB1B20F27C8C012A /* PFRESTUserCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A28FD3FB992F202D240D12E7F2B7FD5 /* PFRESTUserCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 82A7493CFF424B02B1EA1D347F3EF1B5 /* PFPurchaseTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 780D44B2A921C4D352FA9A6D9693F79A /* PFPurchaseTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 831065AD23377EF92A22E15118931DED /* PFQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = 0766F2D21D2ED224A3E82F26E0B5CD52 /* PFQueryState.m */; }; + 83E42BD304254F2EA45636E1EBFEBCD5 /* PFAnalytics_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 22B70DF0AA41BAA3C080197E5CC5D07B /* PFAnalytics_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 848290264E2010E537F5B77148DD4D32 /* PFSQLiteDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 150C19C70C597D439FA96FCB3A6B68AC /* PFSQLiteDatabaseController.m */; }; + 85A58BD000E6A4ADF674465A45C88D41 /* PFConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = D918045D3E6E8340A10A1948E5BB7798 /* PFConfigController.m */; }; + 869568B070A4B8CAC7778AE5EE71BD5A /* UIStepper+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = BBEB6900A59681CD6E50CF6B6C2D6F9A /* UIStepper+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 86E6118CAFA8C90FC0ABF1688FE6E65E /* PFOperationSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E69CBD775346A00D22D02F01FAEEE59 /* PFOperationSet.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8702D2031C885CF3BB2D8795A6FC0C3A /* FUISegmentedControl.h in Headers */ = {isa = PBXBuildFile; fileRef = C137855C14937C945753B86B2CDA79D9 /* FUISegmentedControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 87753E6E8545A51BB7F4BDBD7DD3FAC2 /* PFObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 80865A22558AC6423CFCE3A112073FD6 /* PFObjectController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 881CD8405ABE6BEFB471F1622F70BC8D /* Lato-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4313FC1E27E9B9A96CC0E86A9963B5EE /* Lato-Light.ttf */; }; + 894AA3587AF5C3A6D545C4A4BA5B58AC /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 246514DFF438978008D8FA6C3DB62A87 /* UIActivityIndicatorView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 896FD5D0C72F697DF9C5D17F7B529E61 /* PFEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E4C754AF717C0F9578078037DD972B7 /* PFEventuallyQueue.m */; }; + 89982466919DA42C5657FB1D75221B9C /* ParseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 065EC0B26F5FCC313BF0CC772F0AAFCD /* ParseManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8A89A0B9F1586CA458B63C76E953F154 /* PFApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = B719C90D607E7C93D3CABC47049790CB /* PFApplication.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8BE7480FA5E61B80FCDAF98F65677B11 /* PFColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 171D6E3ADAA1BB99E7913D83084A2274 /* PFColor.m */; }; + 8C2E6C32E366F961F86C99CE651AF056 /* PFPrimaryButton.m in Sources */ = {isa = PBXBuildFile; fileRef = B37DB5C5090B2B2D7BED7A2071CCDA07 /* PFPrimaryButton.m */; }; + 8CCFEC94CDC419B16F917810D8439F39 /* UIFont+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B3157DA60A76070C8C1BC098218AB51 /* UIFont+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8D7B15921E081CC2B3191D35B5C4CEAF /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FFE8C5EB6588366F5E38E8025B4CAD0 /* BFExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 8E3CAFDA290A60D8B3A289E6DAD97C53 /* FUICellBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = D1E1BEDB5A8BC95C80FA17589D69210B /* FUICellBackgroundView.m */; }; + 8F43E873C338BF50D7914531236AAEDB /* UNIHTTPRequestWithBody.m in Sources */ = {isa = PBXBuildFile; fileRef = E3523BF1D55FC301141D3E8EA5BD9A1F /* UNIHTTPRequestWithBody.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 8F495189348B03AE6F7B46DA0413D883 /* PFPushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 85DE173836F20C196CF9443BA77C76A2 /* PFPushState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8F498BF52B76ACF30337C019FF3B30EC /* PFCommandRunningConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = C26F1D9455881336DF278C24466FBC70 /* PFCommandRunningConstants.m */; }; + 8F6BC9571604760D4F4E1AAA4105F39A /* PFDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F44CE6BEBD6122876882DCE9A46EBF2 /* PFDateFormatter.m */; }; + 8F78EF384897E4D8632DD80FB74EB452 /* PFProductsRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C1F692004740EFBE7FF1FF61AB5529B /* PFProductsRequestHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8F8BD8F9E8C2408792AE189075B4B7BC /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C3F57E6B4F1FB2E1F1904A1F180B1D6 /* BFTaskCompletionSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 8FAC5B4DDD700682A6B3A9167F863290 /* FUITextField.m in Sources */ = {isa = PBXBuildFile; fileRef = BBF5C97238A5D929CC8B153AEF2E9179 /* FUITextField.m */; }; + 8FB1DF7D54B01E7F8B51A01CCD305E7C /* PFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 614FAF041CF57C25CF92549363DC2B35 /* PFFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8FD6FCE130BFD1E16FB2A68476BED532 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7861C0328B9B37380137F55D5B766F21 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 91752E5ED76E71C38BC521664A4FD5B6 /* PFQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = DC3331AEC86B8C52429A342C01652D63 /* PFQuery.m */; }; + 91D1F2E5F9AECFF5785A6814972F9054 /* Lato-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 64999537AFDE8F90807B5B5991781283 /* Lato-Italic.ttf */; }; + 91F72E1C525A78F015595B286044D120 /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A5D2EBF57F51AF57F8C4C497E5D6AEA /* PFCommandRunning.m */; }; + 9303E978E2E7E3C00257DD5DC7B6E9B7 /* PFObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = D0874E998F9E9F408D294DF2386879A8 /* PFObjectConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9310D82E97611942915A3940EC448CB4 /* PFMutableUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = BC12683ED13AF4741D430BB224279C59 /* PFMutableUserState.m */; }; + 940E81601DA01C64F91AF1BAFE5D84AC /* PFPurchaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E00B62CEE59E199D07EB3F3B4F2710F /* PFPurchaseController.m */; }; + 94A9BD60599FB2C2AA2B0AB35934B758 /* PFCloudCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = 69A510A1BF3A452173802E1908C71DB3 /* PFCloudCodeController.m */; }; + 94D401C18BF19BD75CFAC4BFB763CE7C /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FF78B4C18BD5E661C223DA05F706583 /* PFUserState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9566EE1DC82CDB9049D8D21CB842C386 /* PFWeakValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FC24F36F6A0E253A147A902D4D87B3 /* PFWeakValue.m */; }; + 962F75F303F57D0673BD35FE3835415A /* PFMutablePushState.m in Sources */ = {isa = PBXBuildFile; fileRef = A0C767F598567EAD6A78E56703F0BF49 /* PFMutablePushState.m */; }; + 965E194205240C804A5CC4E09422F906 /* PFAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 96BBE1D7671D60064CCF9BFFA76E8E28 /* PFAnalyticsController.m */; }; + 966DE4286AC2490A6FCBACA8413C8067 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DAB5D2AB74AB4E6E40BC4E2BA5EC42C /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96AF27C042B48DFA54ACF2FAADFA773D /* PFRelation.m in Sources */ = {isa = PBXBuildFile; fileRef = BEE6E33A4974E21DDA04F659E990E8D5 /* PFRelation.m */; }; + 96BE3ED0FDDA9CBA6D0DF772A7BA40E0 /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E9D2D880354EC317D86A4349D035200 /* UIImageView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96D0CF407A2B521A9A520132685C2A53 /* PFImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 83B8FAAF482B78AC548BDC44BA540C3A /* PFImage.m */; }; + 96E3D29B214EBF429C504C8CA55D1B9F /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = BDB6A8639913CC9852F97AECC7B36C74 /* en.lproj */; }; + 96F1A018D913D4362A1013D53C417E4F /* PFPrimaryButton.h in Headers */ = {isa = PBXBuildFile; fileRef = D5BCBF924ED06727AAC5736473727FB8 /* PFPrimaryButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 97328A6D629EDD7889FB3194C26619E4 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F214F248D919BBE5E1846DA84E7EC571 /* AFNetworkReachabilityManager.m */; }; + 97BEC95DB23314A8FEB59FD75DE72D66 /* PFSQLiteDatabaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DF2C8BE2B249F69FCE01059E5C2E34E /* PFSQLiteDatabaseController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 97DAA182EA0457ECE6DF454FDFB50E71 /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = FF48AB657BBC095D80AA753EDFA8198E /* PFURLConstructor.m */; }; + 9835F5DE63612AE5CB247BEDF9F6BAD9 /* Lato-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 416EF6ABD24C5B14BDDDADF319BC2942 /* Lato-Bold.ttf */; }; + 98D637C604695D57419F1D6809F263D6 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC336EDAC9FA746257F40BD540DC9A75 /* Security.framework */; }; + 98DA10F38127EB1D4AFF2BDB077F68B7 /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A75A05D48E060BEBF89A6B65009C577 /* ParseModule.m */; }; + 98E9E7DA23152B6ABA2CCE66175BEDA9 /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EFDB080D04D6824C62FACC8278749656 /* AFHTTPSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 98F1DA4E3B5EF713459CCDB878C388A4 /* PFActivityIndicatorCollectionReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F03D75A8EAB99E67ACE53F63B414F22 /* PFActivityIndicatorCollectionReusableView.m */; }; + 993DAD4DC798A7883F3C30AE13359184 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A042B54870F2691CE1141CC51249B831 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 99819454185035CCC28034E61522B9C9 /* PFUIAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C9859B01D21C19A7695D3E4BC335D14 /* PFUIAlertView.m */; }; + 999D42B892A6FFA309196DA2508021E1 /* IQKeyboardManagerConstantsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 015D3940BAC78105EDF03F2BB91A46E6 /* IQKeyboardManagerConstantsInternal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 99D4F3E015F413FE2AC39FABE7E8D931 /* PFInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 60EC5380A05609AFEADD93175936D23A /* PFInstallationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A93633A0CB818C83EC1FC7B7662BB75 /* PFMutableRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 25714ADEA4E375B6832A9DF56A53F64C /* PFMutableRelationState.m */; }; + 9BC741341F7A3E9797DA6EB1C47662E1 /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = C6C75DCA8C9E3639140AC579C4C46296 /* PFInternalUtils.m */; }; + 9CB57B8503F184A68E407640D207ADAC /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CC658527AA6BE88A41923B795916FE0 /* PFPushManager.m */; }; + 9CEF7DD95429E95AAA42B8ED323DDA01 /* PFRESTCommand_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 320F50071C407D10444E25E65E981EAB /* PFRESTCommand_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9DB442303F0400FF942BB74CE5BB31D0 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 765C0EAAC0CBC6AF531C333F05E087B9 /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9E95E582F430EE008AD319FBD4D2F352 /* PFPush.m in Sources */ = {isa = PBXBuildFile; fileRef = 05FE2E6BDD950A5BDE5209E33B3C42DF /* PFPush.m */; }; + 9F17CC9DD4071EB42DA080EF5B2905EC /* PFObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5545F56CBCA1961E8A999F7257C1FA51 /* PFObject.m */; }; + 9FB642D753999CE0D817238756960E9A /* PFImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = EC9278D7F2E8ED952563707F9B4FB0C4 /* PFImageView.m */; }; + 9FCD98AAEE8AD79C20BD6854611C7421 /* PFObjectSubclassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B6815C329F8604653FA7EB39FBF3DC2 /* PFObjectSubclassInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A0345C0C15762A801A8E2CAD19B637F3 /* PFRESTObjectBatchCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA05D6E4244A871551EC80C2CDCCEC1 /* PFRESTObjectBatchCommand.m */; }; + A038878D88F1510B6E0A20E100FAC74C /* UNIHTTPRequest.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = A283BA24B8BC2F745E053B68490B43ED /* UNIHTTPRequest.h */; }; + A0B32A29C37C2FD2C97C80F4F4E9BB2E /* PFObject+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = 390E345239D63E6785408FCCB29AA27C /* PFObject+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A0D8132A74C3DD45A066B66B96872A8D /* PFRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = A1C3EA21F91503CF85866B1DEBB42208 /* PFRelationState.m */; }; + A160951FFCA747F6D3865F68468227C1 /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB558CB27C9B59F1418AA3959C1070B /* PFEventuallyQueue_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A17802ED40EC2AA21BA76147AB4AD71B /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 467740A6E9FE2B669577C05571B6DC7F /* PFPushManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A1C0916A3268ADF687DDA3BA26ECCB4F /* PFGeoPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = BBF6063B6F29BA7E6ACAA2D45B0000D4 /* PFGeoPoint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A1C35F6CD4D45B271A2E74D7A7CC1A86 /* PFTextButton.h in Headers */ = {isa = PBXBuildFile; fileRef = D0687D024DA00AAE7B4F8366D819654C /* PFTextButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A1FC37F2116E19070ECBC786636BD411 /* UNIHTTPBinaryResponse.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = 7A42508E95E64986B0EDAFC9E7C7942A /* UNIHTTPBinaryResponse.h */; }; + A2245AAA5B2933D9DF90599CF9F14F1E /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = DF0826136CA6F04163DCAD76EB0BE45D /* PFUser.m */; }; + A271CE741A0CB0405BBE24DEC09F7ADB /* PFRESTQueryCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = B2E4026B95A28F85E28276E70D07582F /* PFRESTQueryCommand.m */; }; + A2C0656F1C90FA35634A60E17128300D /* PFRESTFileCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C31C458F86FD36FC07384D563ADFBF2 /* PFRESTFileCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A386DD98979FC8C7E89C0C04EAA0FCF7 /* PFMutableQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = FF08CF3F86D480A8166480D6782736FD /* PFMutableQueryState.m */; }; + A41AA45BCD642898558436AF46D198BC /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5896CFB908B877F5C2F4D5066E6E80D3 /* AFNetworkReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A46EEDC8DCA2052DACCF4C8B558ADD01 /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A316237767BF661F1B6AD8F4B030AF7A /* PFURLSession_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A53F8B0DE57890778BFB311DF00E862B /* PFPropertyInfo_Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = D0A63F277F04D487A09199897B91DA43 /* PFPropertyInfo_Runtime.m */; }; + A543D21D249A4C570A3C1F9660FFFE4D /* UNIUrlConnection.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8E279FCCEB7C1AEB25BCE46F878D745B /* UNIUrlConnection.h */; }; + A57280D5D9EF86E700F1B12266FABBC7 /* IQToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB87D6EE15561B81AB4D70AD70B70FB /* IQToolbar.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A5EC9DBA68F789AE7442C6EA6D182285 /* ChameleonFramework-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F18000A5D7CD27A6122BE6E91FD82BC9 /* ChameleonFramework-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A5F3A45286A396D2C6C2756E87A6FEFD /* FUICellBackgroundView.h in Headers */ = {isa = PBXBuildFile; fileRef = CD104B7AD1FBF1F91303950B3BD5DE5A /* FUICellBackgroundView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A677EA486B6C150619DB9868EF9771BD /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */; }; + A6ADA7DB7955937E81F5AC2A9BB71A46 /* PFUserState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A6886AC956A814ACE7382CC7A019CD2 /* PFUserState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A75ECFAB2C512E4E952D146A0B14729E /* PFCurrentInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F4D59B74D186D3A1C07E193A4B8E5BA /* PFCurrentInstallationController.m */; }; + A7FDEA1C1A76CA8E5DF230F4BA31677D /* PFObjectFilePersistenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = AC430D908CF42C14EF7AAFD9B91F4151 /* PFObjectFilePersistenceController.m */; }; + A83FB900F4477F11C2DCD7F8B69209B3 /* PFCurrentUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = EF673633FFA2D7135116862CBD8BE0B9 /* PFCurrentUserController.m */; }; + A87EDB8E2777D3E2D232BCB2A6CFE489 /* PFMutablePushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B9C6B10499E423A5444CE2864F26C4C /* PFMutablePushState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A8F6AAD9D6A648D30F327911D8CE53CE /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = A50114757684801C1DE99C04001D04C4 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AA0FC201A1809E7157E034B695A569F2 /* UISlider+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 8442B999E5775411EEFFBC7781637303 /* UISlider+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AA1026B1D369DE93692B71C618D3A82A /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = A776F03C60540FC847DC8FD81CFFD399 /* BFTask+Private.m */; }; + AA217B621ABD283FBA8020E902BB96AD /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A515ED69EEDB97450E752EA285213DEA /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + AB7A59AE59C71EE96481D322D85D64F8 /* PFAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1479D081320EC36085B8B30288068183 /* PFAlertView.m */; }; + ABB094B942B56188EF4189D1F88D5903 /* PFObjectController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ECC7AE2129119EE9949BB6A2DBA3907 /* PFObjectController_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ACA8475381335DA76ADC114838D0274C /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F97B8CE87B16ACD8D4260933E48F819 /* Bolts.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AD07E8D874E4871FF64FA7BDF298C678 /* UIBarButtonItem+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = C0AD563E6E870F9D52DAD712828C35FB /* UIBarButtonItem+FlatUI.m */; }; + AD1CB3E55033674B9517582A59A1E2AC /* PFObjectFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = BAD731CA6EDC2C97EDBAE9DEF5BEE3A3 /* PFObjectFileCodingLogic.m */; }; + AE6DA539CD6C6FFEFEB1CA40BF9998CE /* UNIHTTPClientHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 38FA89344906DEDDD5D2F77DE3B534B8 /* UNIHTTPClientHelper.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + AE7B412FE2E9E3E2F7CE6FBED6304B96 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; + AEDEB8A43CD152EBE7A2E0C3080CE070 /* BoltsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = FABD3C800CB44450C92F28069681BE92 /* BoltsVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AEF9213E35168A3EB14E0CDA9D7E44E6 /* UNIBodyRequest.h in Copy HttpRequest Public Headers */ = {isa = PBXBuildFile; fileRef = AD75432B2BF6D1FC707CFCCD3527D979 /* UNIBodyRequest.h */; }; + AF12089323AED5E530B41B0F4FCA25E7 /* PFKeyValueCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F31C3824F949AF1259C33FE153A1EA9 /* PFKeyValueCache_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AF3B908A52FDFCC291BABD7DEA6A4C3B /* PFACLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 485733735128D4A7D968200F60AE577F /* PFACLPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AF9A03B5B4E1AFB497391551CFB9EBA4 /* PFPushChannelsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 20BC97E813BBBC1228B843C37193A581 /* PFPushChannelsController.m */; }; + B012C2B3E0D50B9AB1CDFFCB0E76CA7B /* PFThreadsafety.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B2C31800C645ACA08536F0A681E03CF /* PFThreadsafety.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B060B84D7C08761A91B38892D95643E6 /* PFRect.m in Sources */ = {isa = PBXBuildFile; fileRef = FDFED8D0FCA171BCC518F85E9793444E /* PFRect.m */; }; + B0647F5D1F335773BA3C155C2FE34280 /* UIView+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F87229E5105EE0FA00DE0B0D95E67052 /* UIView+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B0B5582F003288C5C96AFA142471D43D /* PFReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 09135BA358F372DFAB44C8FB18692D6C /* PFReachability.m */; }; + B2471816ECEF65C1A92D0AC65357602B /* PFFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = ED9A2647BBFB6D985C23B197AA1B2982 /* PFFileState.m */; }; + B2F619610C5E641B67EDF4E366C0E073 /* PFQueryCollectionViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 32588BB30F6E0F5B2DD13FB47DEBCC27 /* PFQueryCollectionViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B31A56A27408319D70D1547B5FA51EAD /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 11733E9AB23CFF872D2D8C693E69A845 /* CoreText.framework */; }; + B322A3CEE4151E27F3073CBEC0BBA270 /* PFRESTSessionCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B117E2539ED9DDF90DCCD6AC02BA037 /* PFRESTSessionCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B337B1573E6106190658E45630AD4381 /* PFQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = AF6B37C98266FCE557B14E51A8B13011 /* PFQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B38703522CBD2E293FD804AD58121426 /* IQUIView+Hierarchy.h in Headers */ = {isa = PBXBuildFile; fileRef = 9661CC0A310A5FFEF6DAC9066D0D906F /* IQUIView+Hierarchy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B3CCC9CE6FF7374AE8CA9882F02F0425 /* ParseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = EB1E0B109FE60D221F3E42A35EC080BC /* ParseInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B3E81351F8E1BDBF2F584E84B3A49B8E /* PFSubclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = 0982CCB6B201941BA02A2C5BED20003D /* PFSubclassing.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B3F2988C9D5F3C144651BF0A698F6394 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = CE8BDCF7E26F4C56C0ADF6B761072CC2 /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B471B47E09E3665845AC1C686A63D6B0 /* UNISimpleRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E61428FE87E53D9A77A44F2EAFA62DD6 /* UNISimpleRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B4FF3032C86287B3EB198AE9902F83A5 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 47047F8FC46BB309AE276DC772A8E367 /* AFURLRequestSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B535D14A88056AFF1A1B7CB70B9664B2 /* FUIAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B33B936A9A7DB28766EEBFB4899F4ED /* FUIAlertView.m */; }; + B5A306F6D83114B15C2C3A82F443F112 /* PFKeyValueCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 624695D19509BEA6FDB8926119091B30 /* PFKeyValueCache.m */; }; + B5A96ABEBC622D7ADE04769DE77CA8FC /* IQTitleBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EFEAE643868EF55305AEDA7B9B5EF2E /* IQTitleBarButtonItem.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B5E41D5D6349F5F3843295A17A9BDDB2 /* Base64.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 473595C4DE2B48B0D88D8F99E55C5F45 /* Base64.h */; }; + B67A0B1855A78C232CA8CA4193480797 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 51CF4033E47188387317DC9CBC5EBBA3 /* UIProgressView+AFNetworking.m */; }; + B69EFF69C1045685D6C9529BB5D56453 /* FUIButton.m in Sources */ = {isa = PBXBuildFile; fileRef = F4555BF7ABB9786C4B80BF763FE75EA7 /* FUIButton.m */; }; + B6D5E48011E309C95B0D178AF8AA0494 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C9643764C40666FA3BDA5483199A807 /* BFCancellationTokenSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B6DFDA7AEEE3818FB42BF55BB43EA79B /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 74B88130F8B1AC90AC1CA346D577FB27 /* PFInternalUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B7189A5111E54D1C0475383753974988 /* PFProductsRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 52CD825D9A1511054A1A5701A737B96F /* PFProductsRequestHandler.m */; }; + B79B6F2E53077EAEBD1BCDA3DF97E926 /* PFCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = AFA7104945F1D9E5D257AF888DF068F6 /* PFCollectionViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B8184053368C7A9E1DC9520118C1E928 /* UNIBaseRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B46EEECD7599B121204708C32CECD6C /* UNIBaseRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B84EC5076309422B9A2C7A55CDABF5EB /* PFCurrentConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D23B3A862EAC73082D325761E92C03 /* PFCurrentConfigController.m */; }; + B8E17F40332B9A8B4AD153AC08C7C60B /* UILabel+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DAFE2C00F715262F9AF47201AE5B463 /* UILabel+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B93A8E1F2FBE4ECDF4C19B2E1698AD3E /* PFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 497EC4624AF81526C5C1ADB7FE648185 /* PFDateFormatter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B953AB7BAE43C522F0DC429FFD1CBEB8 /* PFAnonymousAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = CBF8069EC1EAD1EEE3C76F86B6CAEAC9 /* PFAnonymousAuthenticationProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B9667C60685EA0031CA019D522B3028F /* PFRESTCloudCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 0670C245E4B747809A451258C962EA4C /* PFRESTCloudCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B97B1932591A9DC33101F6DC39CACFA0 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BEF1B2C844D9D029D40DCE5288DA37E5 /* AFHTTPSessionManager.m */; }; + BA6DFE37B6BBCC3575139A1C0A6989A1 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 044039FB6F0BAE9C54969FBC7A846A8A /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BAFB7DE6902268900B1B195416BE4D04 /* PFOfflineQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A63A0131E42676B37B1723606FB5076 /* PFOfflineQueryController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BB068C0CCE5128CAED93094E6A3164DB /* PFDefaultACLController.h in Headers */ = {isa = PBXBuildFile; fileRef = B088733242F6563E27BF3689B4BCA38E /* PFDefaultACLController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BB37D3123E1BA2AAB5924D33133261F3 /* PFRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 22E7AE4FBF90398DB0FD1B35A9DD34AC /* PFRect.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BB59A06B6A75653CECA76692FBABC24B /* PFSignUpView.h in Headers */ = {isa = PBXBuildFile; fileRef = ED30F858AF7B9CE0A8573C496C34FE29 /* PFSignUpView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BB9E8B6CA1A0F28FE241638A9272ED77 /* PFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B5F387A157BDF133EF4E326D269BDCA9 /* PFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BC5EB4978A6158F54C41E94D40FB3A40 /* PFInstallationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ABE08EED6D9D0788D5D114EB8073400 /* PFInstallationConstants.m */; }; + BC69C3F29FE101D4247B541115AB8848 /* PFRole.m in Sources */ = {isa = PBXBuildFile; fileRef = 44C79E1505808F22B40DEDC10582999E /* PFRole.m */; }; + BC976BE2061D253EDB43A6E3CD2BD60E /* PFProductTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C50F078A36FD9673AD03D42BF7FC663E /* PFProductTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BD0BF44B4A873132D7BEE79DC691F996 /* KeyboardManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F7C53E20D1BF8377618EFF47699E99E0 /* KeyboardManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BD2636AC38047EE877D06873DC7EF988 /* UNIHTTPRequestWithBody.h in Headers */ = {isa = PBXBuildFile; fileRef = 843985569B6BCF4CD645497A32668195 /* UNIHTTPRequestWithBody.h */; }; + BD2D9BCFDCA527EA0CEBA86E82943CE0 /* UIToolbar+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EB12118FD4DE039BC62EF0E15829099 /* UIToolbar+FlatUI.m */; }; + BD4F7DE5F808676F975022B06C963C28 /* PFURLSessionDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 68183AD738E931701FD0AD3DF16E94B9 /* PFURLSessionDataTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BDF6A32A836F3709640D087117D096FE /* PFPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = FC83E11ABE486AAF98952F9D81D4ED34 /* PFPurchase.m */; }; + BE32F7A8ED25F80F8FA9558A89EBEAAF /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C0186D06FBE7DA63E6E3D6BA78C59D81 /* AFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BE7B9DCC1918965D09FCB459C6908AFF /* UNIUrlConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = F9264E1D10476FDE807BE7A3F3324C1F /* UNIUrlConnection.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + BF8D6320B7CD58347D2D83FFD03CF8C7 /* PFRESTQueryCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 26C5CC23FF12B866E1AD73E2DC206622 /* PFRESTQueryCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BFBF76808AF82215541A512281405BE3 /* PFObjectState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 66B92824AD49FBB9390D23A0ECEC41CD /* PFObjectState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C0DC97F79BE2050D4DE691E1D991A391 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3780C220917B4DD9DC02DDD7323405B0 /* SystemConfiguration.framework */; }; + C102035B25414733AA5D99E52A896424 /* PFDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 45505F5B25D4570A45EFBA3FB9E5650D /* PFDevice.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C1514CF8F5DC189265CCE541F189F4BD /* PFCommandRunning.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B4F9159794FFF9BEDDFCBAA5965C056 /* PFCommandRunning.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C1A609EC0AACF147369E9433683D4C1D /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = ACF7C931823A68DDBB4BD5C0A4C40927 /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C1FCB24C1B387306C08722AD05271F71 /* PFApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 24FF581FD822FC0314972728E320502B /* PFApplication.m */; }; + C21257ABEC8456229A8715EE704A7DF1 /* PFObjectSubclassingController.h in Headers */ = {isa = PBXBuildFile; fileRef = B93D67F2A685201833890E4ADFBF1CAE /* PFObjectSubclassingController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C22ECBA602D338BD6C554258C6C80DAB /* PFMultiProcessFileLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D0C6A79B925E5B8DDC09CC0D8F44006 /* PFMultiProcessFileLock.m */; }; + C2678B91068F7931D5742BEB0AE154FF /* PFRESTObjectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = A586A584997D8AAB3C26BC7EA0ABE46C /* PFRESTObjectCommand.m */; }; + C45E267982D6D19F30F6E9E63F3DE81E /* IQKeyboardManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 701A5B85169EB58682F05C75AC13EB3E /* IQKeyboardManager.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C4885489A964BAC5764A68106B49CE84 /* PFAnonymousUtils_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FB95CF7F41F64BD82E62CED5B594292 /* PFAnonymousUtils_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C590E355367085B3F71811AD1D8AE9BC /* PFObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 609DBFC143F8CA52ECA2DC3956D4ADC3 /* PFObjectController.m */; }; + C5BDF2C3F576679C66B34129891D1919 /* PFACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 81509BFE89D1F42DFC217BFFCC77885F /* PFACLState.m */; }; + C7526D6608B593099FEC8D0896359897 /* PFCoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F552E66B16A2615DC0009C21B50D3642 /* PFCoreManager.m */; }; + C7A351D5E8CBD94236D7A7B43E6E228A /* PFDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A0FAD2BC796F0C43E5AD3DFB8BF253 /* PFDataProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C8CCDFB80193D1AC799456689D8B1C55 /* UIColor+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = E2117490959B9550A4868376B6579453 /* UIColor+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C8E3699CC4885FE30DB9B4F6733EBFDA /* PFMutableRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 2641B578F87B9B95E398CE86A132190C /* PFMutableRelationState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C912666A5A195657F1BADD12361FA838 /* IQSegmentedNextPrevious.h in Headers */ = {isa = PBXBuildFile; fileRef = C034B2ACBE6538C3217772E314D8114F /* IQSegmentedNextPrevious.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C9780FA67E5B8C292063A552C855FB90 /* PFObjectLocalIdStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 49C9D42C27DD2AE3AAB32AE24D2EBF53 /* PFObjectLocalIdStore.m */; }; + CA5F23766F60847E0A35969F56BE64E3 /* PFCommandCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 633C5F1F9DDC345F9BDF689B08C71651 /* PFCommandCache_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CA6093691030EB225102EA5B084B9966 /* PFUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 73ACD345C800D725173F90C44EFD0B3A /* PFUserController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CA6BAD1169CA01807573AE331781DCB5 /* PFSessionController.h in Headers */ = {isa = PBXBuildFile; fileRef = CEB2A2A103376D8F9047E4F1E106E16A /* PFSessionController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CC3CACD5E552F8287FF72CCEDB01EDE9 /* Chameleon_.h in Headers */ = {isa = PBXBuildFile; fileRef = E572BEF3BF5FA574EE0EE4E0D2FDB479 /* Chameleon_.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CC4E8765CAC02E51F101B700BDB09598 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */; }; + CC8AEBF8D6620E619F26B670189D49C8 /* PFPropertyInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 898E5A3B286DE966995F5236CA3096FB /* PFPropertyInfo_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CE27939928BB4A1DB0706AC1C8A61541 /* PFTextButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 50CAE388BE03392981EB34F0ED05A9DC /* PFTextButton.m */; }; + CE68EA7C522F468D775F060CAF3E705D /* PFObjectUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = F06ED24D1C39A0CFF4123EB0D9491BFB /* PFObjectUtilities.m */; }; + CE94EBF86870898CC0BDAA6ED65C6BF4 /* BFTask+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 151EC16230A016E1E972D02CF9AFCF34 /* BFTask+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CF023CFF89B2E017CC525D92766B31C5 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FD253470226BBD7EAC24A931D19F7D9 /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + CF17EAE278CDD50904A3B07140E9DFD6 /* PFURLSessionJSONDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DCCBF38FA67936B62300896ABA01E42F /* PFURLSessionJSONDataTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CF20CC7E23BD16017EB85C1F6D100F8A /* UIAlertView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 18507E1294DADA225725E281BEEF80DD /* UIAlertView+AFNetworking.m */; }; + CF4D60758633BAE6D1B122456EC24F75 /* Parse-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 43ED988181D6943C924184E66A36963B /* Parse-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CFC88C3F705FA4DCFC03D3A2B773C54B /* PFDismissButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D44A8F3669FDFCF5D7BBCD8CFCD25AC /* PFDismissButton.m */; }; + D03E2E09CD4A257BF7CF59BC14F39774 /* ChameleonConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = A740D31E8046CDB8D8368E00E9329E79 /* ChameleonConstants.m */; }; + D079F0D0F75347213786652AF578F521 /* PFFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CF4CF703CC1DBD333ED293E64B2816AC /* PFFileManager.m */; }; + D08A4B442A5964C417489F08A81784F5 /* PFSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = B32250A0ACFF1FD6AFA14D88511BAE8F /* PFSQLiteDatabase.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D08EE9C2CF0357A7FD1D76F9B93776C4 /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = FC5523A002FB0121BC9A4F24743AFB0D /* PFObjectSubclassingController.m */; }; + D0CF387D344B15D8630064997043503C /* PFSignUpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EB80548C95ADD762223EC007944AF45 /* PFSignUpViewController.m */; }; + D1816449E827B54FC644A5285C5E79E7 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 92C68D5FDCA38C263C5C9DA67BC52DAB /* PFURLSessionFileDownloadTaskDelegate.m */; }; + D1ABCFFF2DBFE6D749E1C7C772262D39 /* PFACLState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EB2DEB083FAA7954B735F6FAF4BA4FEA /* PFACLState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D1BB40613CBDD8C6DAA7812E7FFFF26C /* PFAnonymousAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = B0994984629F495251BA8A149F317827 /* PFAnonymousAuthenticationProvider.m */; }; + D2305969E531EBA7A255D3C4302E7665 /* Bolts-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FFDAC5862665AC65E3E4CD90C8369020 /* Bolts-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D243F10448E2A25C9E2900BFD359D668 /* UNIHTTPJsonResponse.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = BC984301125702EFEAEC41E5B9293303 /* UNIHTTPJsonResponse.h */; }; + D2641614DC999C027E62514B55A06016 /* PFCommandResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 73A911C862B60EA923C814A7824ED72E /* PFCommandResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D2FE57DEAD266E99D8CDBD42BC46CA3F /* PFAnonymousUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = A6A36422F3C90967B88FE242E00E11EB /* PFAnonymousUtils.m */; }; + D48ADA5A04EC8BD8FFB980445E0DE387 /* PFNetworkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F539BDDEF739BDE923DD4C1FC4B2894 /* PFNetworkCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D4C5AECA4AEB0E17B93EECD0ADD06AEE /* PFMutableACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E80233019F4EE7D4C240660178775ED /* PFMutableACLState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D50C7B2A36FA249BB8504A699EB42614 /* PFObjectPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 45D7D6B01B2B8A0D96A29F97BC24C01A /* PFObjectPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D67DF497D24A2D6049AF0B75A46AE48F /* PFACL.h in Headers */ = {isa = PBXBuildFile; fileRef = 38BB302FD9DECD313D93E13A55C5A724 /* PFACL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D6870DB8F518AC2F91F9FB95CFF384D9 /* PFAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = BEF3548901AFF1442D8A42CE3D5CD1A7 /* PFAlertView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D6A76FC088B728E09BE669238269A3F6 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F19C8953497BC870280615D15B50D758 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D6E746CCAE091711861229C64E08D878 /* IQKeyboardManagerConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D3240C4C5BE274F71D28337454BCF6D /* IQKeyboardManagerConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D75ADB82D221CE073A2385D9BF116313 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 7188A502AE1E58CD7A9DBA3B6C887DF0 /* PFDecoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D7AB05392442CA0F7360E9A0DEFDF10F /* UNIRest.h in Headers */ = {isa = PBXBuildFile; fileRef = 6226CB7D1425E15682AC63FA51921DD7 /* UNIRest.h */; }; + D804E6D1B5A4F1ED130362B6610693FE /* PFCloudCodeController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A5EFD08535330BF7DE6E1D3E60F0FDF /* PFCloudCodeController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D80843081D15837B4B5C8D66D2A8036D /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = FCE06702DA3E947891057A5BB5C23AB1 /* PFCommandCache.m */; }; + D880721F15CF00B4947F68BBDAE3BC19 /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 341193ADAA541B40C6DC994505AA1FD6 /* PFPushUtilities.m */; }; + D8959E35373758B9DF78F533C55FFC08 /* PFProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = 255CEDD6FA71975460137BA3F1A2CC30 /* PFProduct.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D89C08E3CB7C04D6DCC8D18E7149069E /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = F0849AC8F9BFE0E883A47F09527D2117 /* PFInstallationController.m */; }; + D8E2653DA4361CAA33F7832803BD676C /* PFTextField.h in Headers */ = {isa = PBXBuildFile; fileRef = 819412AD0928AF8171877E3BEC3035CA /* PFTextField.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D912EE794EA43F144E2BFDB5E306D3BC /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D6B4E7FA130709BC2B2CD4708AB3B01 /* PFDecoder.m */; }; + D9FA43E9B824136A20E678A3C9CE7507 /* ChameleonEnums.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BBB82019D63DE4FA7F0B92670365270 /* ChameleonEnums.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DA15806CB1F348AB5EDB812656E228F2 /* PFDismissButton.h in Headers */ = {isa = PBXBuildFile; fileRef = C5C549C5C71BC97E1890902EFB8FB31F /* PFDismissButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DA339154E42740D763E1E4E42DDB9A1E /* PFFileState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BB3E23687BDA8DF4EC8C90366A7F21E /* PFFileState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DA468AF6666C79B9CE948EBEC956317A /* PFInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 623E4161A8235BF36BEE1C200D5F8E72 /* PFInstallation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DAAD175EBECAE7AF5296008E30760A93 /* PFSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = E6BA7CC067B235E0FF566A94E1581577 /* PFSQLiteDatabase.m */; }; + DAD63D2B12385137F611785D8087B0C7 /* PFObjectFileCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E0AF3C159D4C8B5EB68C6ADB8FB55A2 /* PFObjectFileCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DAE230257B3B2669C1587D2039114C8F /* IQNSArray+Sort.h in Headers */ = {isa = PBXBuildFile; fileRef = 36EA36B4327C3CAA76DB71E90785D0B4 /* IQNSArray+Sort.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB6AD4AA0A96598835F98152FDD9EAA6 /* PFQueryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = B13866FCDF031E55F0DD3D8829D073F8 /* PFQueryPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DC7016A3F483CE9795D9BC1B478A6FB2 /* PFLogInView.m in Sources */ = {isa = PBXBuildFile; fileRef = 409309719BF6A320534CB7DAFF568B83 /* PFLogInView.m */; }; + DC7BA7D1F02949DCEE942B23DFEEC45E /* UNIHTTPRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 61BDE38ED20108AC210E4C985B982B1B /* UNIHTTPRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + DDCAA9BE250EAD797FB91253079205E5 /* UIColor+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 24DB6CC2B14662F6E9B1E046CD7199F7 /* UIColor+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DDFB747838D1B33306D14FB92112203A /* PFCurrentConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 52EDE9D3C5F9D0F9C4068C669A7F7141 /* PFCurrentConfigController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DE6FF42AA13354302CCE67FBA5AE3056 /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = B2B797BD23176FC43BD0D3B5634BE059 /* BFTaskCompletionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DEEA2648058B3E6F40892B4E254501F9 /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 978F1D1FC858DCFF654EA8F44B32F5DF /* AFHTTPRequestOperationManager.m */; }; + DEF9DDF8C9F9606CCDB79286AE41A95F /* PFQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF6084BF27306D73EE3F7156B4A3EFD /* PFQueryController.m */; }; + DF088B8852C119D2181A3D18888CA8D2 /* PFCachedQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = EA75AE20BB255EFB336F605121156B56 /* PFCachedQueryController.m */; }; + DF3181F400F49532145EAF90931261AB /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F032D7E1283777ACE202494C6F7BCD73 /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + DF5C7E7715762DEE188F738217816938 /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = F7278CD831A6A182FCEB151BD633E223 /* PFMultiProcessFileLockController.m */; }; + DF6BE3AEF2D65C63BB86491AF2D1D74F /* PFMultiProcessFileLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 886E9C8ED5B1B07A35329D7F11A187EC /* PFMultiProcessFileLock.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E0689342829558FC97ECA6AE5B078183 /* PFImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 392D3E8B1EE935766CE3A0E9996B235F /* PFImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E073A9FAA1E4FBFEED33E37680301216 /* FUIButton.h in Headers */ = {isa = PBXBuildFile; fileRef = DBC114B642595675D739DDEDD016E9F1 /* FUIButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E11377D77F494E8D27302892123A6C88 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = D93710ABE14AC931BA5E37E5461EFE9D /* AFURLRequestSerialization.m */; }; + E11481C2A7C5F0D2D2B514972DC3BD75 /* PFQueryTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 49B4F56ABCA4652DC76E6114451571CB /* PFQueryTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E15973B7000BAF44794642F5C614DEB2 /* UIViewController+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = A66795F738318920B0D6E941B13871CF /* UIViewController+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E187E8D8CF825E41E24E4ECF043D165B /* Pods-FoodbLog-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 71E8757C5E655C53AAFA0481265D031B /* Pods-FoodbLog-dummy.m */; }; + E283FC5D5F9002724D4E524E59577F76 /* PFObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = A40CB3A94F942DB16FCA1145446DFA1E /* PFObjectState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E2C42C2EC9B809BA3AEDE05F92643393 /* PFMutableObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = F0F27237E7594BDC013703A579974879 /* PFMutableObjectState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E31DB9FC1B6D203D4C442A4E001AA9F8 /* PFTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 2699550AAFB04BB17916C59A6B1FC51D /* PFTaskQueue.m */; }; + E32B12CDAA8A832881EA08013F74B10A /* UNIRest.m in Sources */ = {isa = PBXBuildFile; fileRef = 91C373870E6D645F6FF004CCD43B21E6 /* UNIRest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + E333D533DE4361D5A3CE2F9D62281084 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; + E3C98A1E8B44CB98C75C72B0153311FA /* PFFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 0480814245A7B51C8119FEB8A9BB24EF /* PFFileState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E3DE284C9F31AEA272123577A8454947 /* PFFieldOperationDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = D853E3A07CB02F8C41AC94B33D18DE6E /* PFFieldOperationDecoder.m */; }; + E422151D5688228672DB1F43821D0AB9 /* UIButton+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C5002465C0FC38F707FE42128EF8087 /* UIButton+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E44F9A7B9A2B8D6F8C679EB26957DCB1 /* UNIHTTPResponse.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = 9F8AB594F361E76ACA20213E0F3D3860 /* UNIHTTPResponse.h */; }; + E57913A90FF880A05C0C1CBA7C10F570 /* PFImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D6CC34BA2E5393D2D3F739F59596E4C /* PFImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E58B15E1388E3893149BE0E2AF7C021D /* PFAnalyticsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D00AA339432926A0C0AD20217302F65 /* PFAnalyticsController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E6074F2DE1234DE003E339251CE655DC /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 1401F53C5562661D42BA72E3554ABA2B /* PFMutableFileState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E67A6D29E52E288E8B60D39C878CF960 /* Chameleon_.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A5FB006DED3350DEBDAA366AA9B3C93 /* Chameleon_.m */; }; + E89DF5C4D859407455A3E294EE9D420A /* UNIHTTPClientHelper.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 242785A2D898F8B3178C5C87B1AD01AC /* UNIHTTPClientHelper.h */; }; + E8D145B6A8F126EE542D4560DA53C04B /* PFEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = DD38371523A69B7D5F80DEF60A1EC8D3 /* PFEventuallyQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E8E206B9EEE20D20F0D9BEFE46B653D1 /* PFPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 83026E30E5879736A329148544ED9B28 /* PFPin.m */; }; + E9157D80838E300F27801069DA1BF917 /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 335A452C51FBD35625AA2BC327ADC7F5 /* Bolts-dummy.m */; }; + E9301E9CC4AAB6DCE8FAEE224E15F583 /* ParseUI.h in Headers */ = {isa = PBXBuildFile; fileRef = A6D188FC37D6AAAB2E2FBE6F57F7EE82 /* ParseUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E93714A40956181311573F34E143DB3C /* IQUIView+Hierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = 989D519E262D75CFB924E7B8A1C4ADDF /* IQUIView+Hierarchy.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + E94EB5FE3AAD983E3DEC7DC48A2A91A7 /* Unirest-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A28B62FB34B8E41CEE484AD8817B831C /* Unirest-dummy.m */; }; + E94EE26A559D916232409D3B78C1330C /* PFOfflineStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CACE40B53562456C7355A1BD4B3BF59 /* PFOfflineStore.m */; }; + E99B3AC70816797E71FD03AD9F6ED794 /* PFUserFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 326B3BC55A45A42DE61D2F9FD6215A24 /* PFUserFileCodingLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EBAD17678C41DA0FC100BAF0C597CF1D /* PFFieldOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E223A483DDF7AE6383953308A7288EC6 /* PFFieldOperation.m */; }; + EC4BF1A648624D63284CED0E9A6992CA /* PFMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 61E8FE17B430924B29695138E0ACFA96 /* PFMulticastDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ED29E4C820CC9842AAD8DC8AD8DE1B7C /* PFInstallationIdentifierStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 21915C1929F889B9A02A6D8BD071D10B /* PFInstallationIdentifierStore.m */; }; + ED7504BB4E39C1BD0DBBC215994E7D77 /* PFURLConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 09FF643952C8AE70189400301DA35699 /* PFURLConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ED9C3556AC3D5037CB6FF529D816FB12 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = B5B9189D6AB1779845E876D0D0424221 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EE3C0F724C90FE75756273DAD768D769 /* IQUITextFieldView+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 383265CA7C2F466092EF3C7F1E49C8DE /* IQUITextFieldView+Additions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + EEBA3FE1C7E10F722123D0898B8A3390 /* Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 59CCCB05A2EBA3189A6BE62B37274EC2 /* Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EF985A767B2C450FA8F0640769D206AD /* UNIBaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = B3DEB5E877C555C69169163E7AE3DCD1 /* UNIBaseRequest.h */; }; + EFC43ED31D5EAC920327974ECFCEEE03 /* PFFile_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A70E011791587979C22032E1FB4F06F9 /* PFFile_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F05460F7ED57F04C670F8CF2A121BFD7 /* UIColor+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B30CADFCD2F0D69405E4D939DC3BFB /* UIColor+Chameleon.m */; }; + F0F92512DD701E369E2EE06A213E11DD /* UINavigationBar+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 788310F842000FA289D2F1CDCD98A85C /* UINavigationBar+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F0FBC0D30A36AD2329B48A43A17C4F73 /* PFFileStagingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 991D633806D370E5A9CCBCE8F7E6CF93 /* PFFileStagingController.m */; }; + F1A626CC96C4F5309BDB955D24C08340 /* FlatUIKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 15797AFCB16424C69558924B2C21A6E3 /* FlatUIKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F257CA05C061D91DBF8FF42DF83ACB48 /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = 24776F7FEE23D85F92F28624333EF3EC /* PFThreadsafety.m */; }; + F31306E41FB51E5765D496D169EA1C87 /* PFRESTCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = A6E6334AF3D4ABDE619C3F9F1575FA7A /* PFRESTCommand.m */; }; + F3208A893E46B96AEB700BA316A28496 /* PFConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 09EA67B03147905558D01B94F40D3B87 /* PFConstants.m */; }; + F33EECCDE7368710D4AB061B4D4EF441 /* Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = D9C88B55C686DDE9636FBFF719E4A77D /* Base64.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + F35BD45463573B117E40D3CAEEF20AC4 /* FUISwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = 48E6A4215AF02A0535DF6FEEA6CF7E97 /* FUISwitch.m */; }; + F3A723074159B52AECB8DB92DCC9068D /* UINavigationController+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 65C5E78DF211DF65F36E36C9FC0D1B01 /* UINavigationController+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F408B67DE22C6E247BE9587685BFD844 /* PFMutableQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 46C0C4F037BDBC97CB84248D3C6354F7 /* PFMutableQueryState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F4259C77CC1398618A0AB193BD065D6D /* UNIBodyRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 27CF6BC1B2E5C52B3244B8D531442D06 /* UNIBodyRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + F4A3C9920EDEA3E824FE7C0843DD52CE /* PFCommandResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D0DB85E2D94B47CB63F50784F0CCD01 /* PFCommandResult.m */; }; + F578343769211EBC6B3F9E68ACCD6A8C /* PFMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A5971EA076048933873A26498305DB /* PFMacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F59673E41BF429818335D4E6BA080037 /* PFBase64Encoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2046774BE36FD33388E4E6602AF763A0 /* PFBase64Encoder.m */; }; + F5A1F5648B57F8EE92271219D9640F86 /* FUIAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = ADCB853B7D560FC831BF87685AD57A9B /* FUIAlertView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F5BA0DBEDD8F1AE74F6BF8E3AF1034EC /* UIStepper+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4436838248BB3C88A53FD7F6F9B1BDBF /* UIStepper+FlatUI.m */; }; + F668EAE6CBB9ADC856DF7885478C3693 /* NSString+Icons.m in Sources */ = {isa = PBXBuildFile; fileRef = 81311E91F15A9ACF24DDCF24A36B0F39 /* NSString+Icons.m */; }; + F66FB96E58063242636624CC93CB1481 /* PFObjectBatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = D34C12E4F952DB5875CBA2FC470CEA4A /* PFObjectBatchController.m */; }; + F6CD1E97BE26915E38C4670CEB95CFAE /* UIColor+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = D0B9EF05BBF29D5217191E4094EB3982 /* UIColor+FlatUI.m */; }; + F738741C0DA60836C6691930B8903F44 /* PFBase64Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = B7D8C5668CD3DD0CB72C11E3C568BEAF /* PFBase64Encoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F73C65E428DB0FF941082D3A5112C901 /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = D9E50F16F11C26B58CB696C26DE57E74 /* PFGeoPointPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F77A9F2C3BA210256751313BC23B8BAA /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 70C2CCBB87CBCB7C3F8AED8C1396EF19 /* BFExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7A4DCF50AE508452A448EA22797EEBB /* PFSessionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 072BA5A6E13B9A44E938BDEC145CD4DD /* PFSessionUtilities.m */; }; + F7F1F58441A29C3E9E037BF03A1E0172 /* PFErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = BF64F8F931BFD24F09DA8796A5AB8716 /* PFErrorUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F83A166A204E7F70BAABFD2E4CA21FC7 /* PFRESTSessionCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = F439F7531646055B955D7668822E655A /* PFRESTSessionCommand.m */; }; + F868175B0C271A19B75F4993EEF107D1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */; }; + F8B195D52D2D7BE80CF4EE6B726204A6 /* PFConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = DC8286821540402840D2F78184926242 /* PFConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F8CAF02F1E612CEFB2AB6C3B731ADA87 /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = F35C83A2CBD33B6D54CB34F091A81847 /* PFPinningEventuallyQueue.m */; }; + F8D55F4F51D08B48B8B0776E9DE8E4D2 /* PFPushState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F6FFE987901F200ABA41215EC6603C5 /* PFPushState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F906BA7712F8F45BF05FD888A25ADB6F /* PFFieldOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2697B93401DB7B2F5E39F3CF9BC4DCB3 /* PFFieldOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F914B72A685B4117F89010C60D49A74D /* PFCurrentUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CC62DFCDBE9FE6C3218D149D055F4E7 /* PFCurrentUserController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F9352FCBA2935DB07B38CDCC3E5D04F5 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 11DA25D5854F43477EA8697C9A8A9677 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F9410635D2A13AC2DC7A9CCB266F8596 /* UIProgressView+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 86363196FAD187D55BE15125F559D10B /* UIProgressView+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F9BF113DAE31AC0FFE2C2DEA50F75891 /* UNIHTTPStringResponse.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = C7F69AB63C5B9D83F940D7C9CA0CE984 /* UNIHTTPStringResponse.h */; }; + FB0309CEBF4E3B4B5E2857A88AD60698 /* PFTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AA2C962E61F10AADB5795A8761860F4 /* PFTextField.m */; }; + FB47B2B3700081A29B32CAB0B8361303 /* UILabel+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 0263C9D12EC81C1962B428D0F0711A32 /* UILabel+Chameleon.m */; }; + FBF3606D5AA052B28AAF18AFA1F6F5E1 /* PFFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 419788502E9D2F50B77877AEE03ECD01 /* PFFile.m */; }; + FC6F96892F863F4088B93B5BC78CF60E /* IQUIViewController+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DCD97868BF52A2DA515BB0660CE3150 /* IQUIViewController+Additions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + FD18EFB419117DE421FCB38ACF9151AF /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = F863D0768304DA4198F0440CDF7AA8C1 /* PFKeychainStore.m */; }; + FDB6E1D811A52AD01DFD1128E8EF8911 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */; }; + FDCA64A498A1F1C61C0DE0342920FDB6 /* UINavigationController+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = F3DEB5E0C029DA28C8320B373AD1B88D /* UINavigationController+Chameleon.m */; }; + FE3FEBF0DEEFD932C5106CA7DCCC1FF3 /* PFCommandURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BF47B8414383C32DD8B7B421B488B543 /* PFCommandURLRequestConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FE7ED99030498028605F37EB2B3518B7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; + FEACB369279A460ECFC54C005A741AE0 /* PFObjectConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = B23FD0394F4B69148299C896E97C2A90 /* PFObjectConstants.m */; }; + FEAF74C28B30197791132CA4C268A2CD /* Pods-FoodbLog-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 47B8D17F18C41D9E28B5AD8E78B23877 /* Pods-FoodbLog-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FED8724CB7E797F857A8B6954F9672F7 /* PFQueryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 345CA40D5F45AD04D24CC17ABE86B911 /* PFQueryUtilities.m */; }; + FEEB54C300BDC23661F4B2D1C4BD939C /* PFUserAuthenticationController.h in Headers */ = {isa = PBXBuildFile; fileRef = A745A3D33907AFBD7D9B85EC9DC35D21 /* PFUserAuthenticationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FF4D68C2DEC5B1C462849F1F5EC83C76 /* PFURLSessionCommandRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E34CEB998FE5525402334C2BB80D5A3 /* PFURLSessionCommandRunner.m */; }; + FF73BEC217D2099177CEFA7DFEA4A4FD /* PFURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 73CC3349EC3533415793CF755807650A /* PFURLSession.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FFDEA159E9BE6B9B53FB5726020990FE /* PFObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 51223661224A51BA99F43A7498640E0A /* PFObjectState.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 1652B26AA96AC191F5F67F69373B8539 /* PBXContainerItemProxy */ = { + 023419A71D4C5BEBC9D817ADC6C3092B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 708E01B006A9F88B3C13711562282B5E; + remoteGlobalIDString = 42465A188431886AB035275F049824D3; remoteInfo = Bolts; }; - 1C29ED665F4B87D9675F955E977BFDBB /* PBXContainerItemProxy */ = { + 0CBD9EA31DDA34BF819A5EA071433D98 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 59A0C52286D680208602EBE33F4979AD; - remoteInfo = ChameleonFramework; + remoteGlobalIDString = 0130B3724283586C0E9D2A112D4F2AA1; + remoteInfo = AFNetworking; }; - 27306CB8A45B49B23CE38DF93A20A0DC /* PBXContainerItemProxy */ = { + 570B15215E9310693D397DC3282CE4B4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = F710EAB41DD6932844C4A82A87A2628F; - remoteInfo = ParseUI; + remoteGlobalIDString = 42465A188431886AB035275F049824D3; + remoteInfo = Bolts; }; - 2B6F0EABE853CEC315E1515ED89B824B /* PBXContainerItemProxy */ = { + 631FEB8D5D54757C74C640EC60514AD8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5855D213D188EE14086C1F827DE7B1FF; - remoteInfo = IQKeyboardManager; + remoteGlobalIDString = 96F971576D7B3914510B0B2FB38F43A2; + remoteInfo = ParseUI; }; - 39C688F1BB92818A0EF5F008838D6530 /* PBXContainerItemProxy */ = { + 70CDEE1F31046DF7D58238DE342DC5CB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 708E01B006A9F88B3C13711562282B5E; - remoteInfo = Bolts; + remoteGlobalIDString = FBA456CB50E371584C11231929A0971E; + remoteInfo = IQKeyboardManager; }; - 3E8D58AC0642DFEF180F93A716AA5767 /* PBXContainerItemProxy */ = { + 97F1B36C623FCCA4AA918D6FC51650CA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = AE2762B37E506C0F5F264DA433F088C3; - remoteInfo = SDWebImage; + remoteGlobalIDString = 7F3FE5658AEC4AF2B296EDA73A218182; + remoteInfo = Parse; }; - 440B4BA00F0AF4B40BF7A49BDC83248C /* PBXContainerItemProxy */ = { + A896BC871784B8F9F89ED5DE758218C4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 708E01B006A9F88B3C13711562282B5E; + remoteGlobalIDString = 42465A188431886AB035275F049824D3; remoteInfo = Bolts; }; - 59871585801A48734FC094EB7FAD6D0C /* PBXContainerItemProxy */ = { + B7D7D2C4956FA3742D5187D428DDE8F8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = B8A759F57254B6094CF99273E5ECEE8B; - remoteInfo = Parse; + remoteGlobalIDString = DD9AC66E330E40497F19A867C63FBAAA; + remoteInfo = Unirest; }; - 7045E81907442F92CA4A8723F1685171 /* PBXContainerItemProxy */ = { + BB8AEE89F14DC93554130618C695B195 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 4878C70B21CA37D7CB8A476BF986741B; - remoteInfo = AFNetworking; + remoteGlobalIDString = 923099EAAC66CBEDD533E3FE43830166; + remoteInfo = FlatUIKit; }; - CD0D91B187268B2D99C0502EB6E5D2D8 /* PBXContainerItemProxy */ = { + C217FDF16F9F1EFC2C5534E7024BB879 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 449BE13505657F8E1C2D26738417B4FD; - remoteInfo = Unirest; + remoteGlobalIDString = 7F3FE5658AEC4AF2B296EDA73A218182; + remoteInfo = Parse; }; - E3472D24478FC589367ECA8C76AA8BC3 /* PBXContainerItemProxy */ = { + C4176BB50DC5E33A6948CCDE5C9DB79C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = B8A759F57254B6094CF99273E5ECEE8B; - remoteInfo = Parse; + remoteGlobalIDString = 28BFDC89BA4363F4F3576DEC70EE10AE; + remoteInfo = ChameleonFramework; }; - FFF40209AC9E59C58E5D29A6CFCDA530 /* PBXContainerItemProxy */ = { + F85AB62DE4BDFE183DF7AC74A4381B9B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = AD0892BE565CA9D5A839B9137561277C; - remoteInfo = FlatUIKit; + remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; + remoteInfo = SDWebImage; }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + 4C463E297FC3B0D0A43041080634DD7C /* Copy HttpResponse Public Headers */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "$(PUBLIC_HEADERS_FOLDER_PATH)/HttpResponse"; + dstSubfolderSpec = 16; + files = ( + A1FC37F2116E19070ECBC786636BD411 /* UNIHTTPBinaryResponse.h in Copy HttpResponse Public Headers */, + D243F10448E2A25C9E2900BFD359D668 /* UNIHTTPJsonResponse.h in Copy HttpResponse Public Headers */, + E44F9A7B9A2B8D6F8C679EB26957DCB1 /* UNIHTTPResponse.h in Copy HttpResponse Public Headers */, + F9BF113DAE31AC0FFE2C2DEA50F75891 /* UNIHTTPStringResponse.h in Copy HttpResponse Public Headers */, + 17826DD59204D4468835FC0C09E9EBA5 /* UNIJsonNode.h in Copy HttpResponse Public Headers */, + ); + name = "Copy HttpResponse Public Headers"; + runOnlyForDeploymentPostprocessing = 0; + }; + 90E8C54D0CE7627A9E9FA12FB6859335 /* Copy . Public Headers */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "$(PUBLIC_HEADERS_FOLDER_PATH)/."; + dstSubfolderSpec = 16; + files = ( + B5E41D5D6349F5F3843295A17A9BDDB2 /* Base64.h in Copy . Public Headers */, + E89DF5C4D859407455A3E294EE9D420A /* UNIHTTPClientHelper.h in Copy . Public Headers */, + A038878D88F1510B6E0A20E100FAC74C /* UNIHTTPRequest.h in Copy . Public Headers */, + 34548E9B4CDB70E6E52F11A181092423 /* UNIHTTPRequestWithBody.h in Copy . Public Headers */, + 4E349CA31573A68A02AD4F89FDFAA05B /* UNIRest.h in Copy . Public Headers */, + A543D21D249A4C570A3C1F9660FFFE4D /* UNIUrlConnection.h in Copy . Public Headers */, + ); + name = "Copy . Public Headers"; + runOnlyForDeploymentPostprocessing = 0; + }; + AC965A15FD8A8C4AF6FC3464500E5A12 /* Copy HttpRequest Public Headers */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "$(PUBLIC_HEADERS_FOLDER_PATH)/HttpRequest"; + dstSubfolderSpec = 16; + files = ( + 312C40EA300F699058F45DE66C7F9C51 /* UNIBaseRequest.h in Copy HttpRequest Public Headers */, + AEF9213E35168A3EB14E0CDA9D7E44E6 /* UNIBodyRequest.h in Copy HttpRequest Public Headers */, + 33DDA524C70EF2A533A82C76BC02D588 /* UNISimpleRequest.h in Copy HttpRequest Public Headers */, + ); + name = "Copy HttpRequest Public Headers"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ - 00485ACEA6057321188E09242DCB45CF /* UNIHTTPRequestWithBody.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPRequestWithBody.m; path = Unirest/UNIHTTPRequestWithBody.m; sourceTree = ""; }; - 0091577C9867D249011C372417312830 /* PFObjectUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectUtilities.m; path = Parse/Internal/Object/Utilities/PFObjectUtilities.m; sourceTree = ""; }; - 00FCD89C9B46262B83E716F2D8EB9F2B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 0113C7DDD735C654297621D228AFDEB3 /* PFOfflineQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryController.h; path = Parse/Internal/Query/Controller/PFOfflineQueryController.h; sourceTree = ""; }; - 017A97106C6887F74558A68F58973669 /* UINavigationBar+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UINavigationBar+FlatUI.m"; path = "Classes/ios/UINavigationBar+FlatUI.m"; sourceTree = ""; }; - 020C493C4366159B060D27D05A4264EE /* PFActivityIndicatorTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActivityIndicatorTableViewCell.m; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m; sourceTree = ""; }; - 0213DC0ECD5BC986C04AF1771A8B8315 /* PFURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h; sourceTree = ""; }; - 02803148C151FFBA5545DBA0D2F6D83D /* PFCommandRunning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunning.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.m; sourceTree = ""; }; - 02BB568F82766393033FEE2267792E4B /* UNIHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPRequest.h; path = Unirest/UNIHTTPRequest.h; sourceTree = ""; }; - 03C910DC3C9EAA286803431D343309B5 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 03FF0651A96F8A339DA7B5F5278250AF /* PFDefaultACLController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDefaultACLController.h; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h; sourceTree = ""; }; - 043864EF7F65C382A51BEA16C5EBB115 /* PFMutableQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableQueryState.h; path = Parse/Internal/Query/State/PFMutableQueryState.h; sourceTree = ""; }; - 04B8709A759AFBF2338CD683415C1896 /* PFObjectFilePersistenceController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFilePersistenceController.h; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h; sourceTree = ""; }; - 050F03BFD82CD0FACBAD65B2D27B5918 /* PFAsyncTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAsyncTaskQueue.m; path = Parse/Internal/PFAsyncTaskQueue.m; sourceTree = ""; }; - 054C63340788AB84052D2C3EFDB3BDDA /* UIStepper+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIStepper+FlatUI.m"; path = "Classes/ios/UIStepper+FlatUI.m"; sourceTree = ""; }; - 05966AE09355F02D4FED4D2118B95475 /* PFObjectLocalIdStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectLocalIdStore.m; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m; sourceTree = ""; }; - 05A161C52BA4C93E0F7C7F443ED3785E /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Bolts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0636531503B8A71FA7D528F8E9D1F2CC /* PFRESTAnalyticsCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTAnalyticsCommand.h; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.h; sourceTree = ""; }; - 06E9A79DE9206B87BE74F471F54F9AD0 /* UIFont+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIFont+FlatUI.m"; path = "Classes/ios/UIFont+FlatUI.m"; sourceTree = ""; }; - 07189350CCFE83C37773559EAE2F1E99 /* IQKeyboardReturnKeyHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardReturnKeyHandler.h; path = IQKeyBoardManager/IQKeyboardReturnKeyHandler.h; sourceTree = ""; }; - 075A9E0DA603A9C6B020AEE7FC5B7A91 /* PFMutableUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableUserState.m; path = Parse/Internal/User/State/PFMutableUserState.m; sourceTree = ""; }; - 077770DAB9A48F6D1B560999F9216C78 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 0796250D30A27D5316D74D277081D040 /* UNISimpleRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNISimpleRequest.m; path = Unirest/HttpRequest/UNISimpleRequest.m; sourceTree = ""; }; - 07A4B336BA9ACE65629272FCD913D35C /* PFUserFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserFileCodingLogic.h; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h; sourceTree = ""; }; - 0852D13FDBDEF928743F6173924EB4AE /* PFPinningObjectStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningObjectStore.m; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.m; sourceTree = ""; }; - 08A2139169368DCEA2B9DDFF8FC52DC0 /* PFPushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState.h; path = Parse/Internal/Push/State/PFPushState.h; sourceTree = ""; }; - 08ECFA9AF8B024A3D543EE06C7273F36 /* UIView+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIView+ChameleonPrivate.h"; sourceTree = ""; }; - 0920CA605C2CB8ABBD20EA56A984167A /* PFGeoPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPoint.h; path = Parse/PFGeoPoint.h; sourceTree = ""; }; - 09E0AD1CB33CE49A06DF396A16EB44A4 /* UITableViewCell+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableViewCell+FlatUI.m"; path = "Classes/ios/UITableViewCell+FlatUI.m"; sourceTree = ""; }; - 09E4578933143185EC9EA7F753E6827D /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; - 0A024773FB8E17B08C96866E88799BAA /* PFInstallationIdentifierStore_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore_Private.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h; sourceTree = ""; }; - 0A861617C3B27410695B312CDD54CC9A /* PFDateFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDateFormatter.h; path = Parse/Internal/PFDateFormatter.h; sourceTree = ""; }; - 0AFC27DF393243493EC5ECBE91DD283C /* PFLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLocationManager.m; path = Parse/Internal/PFLocationManager.m; sourceTree = ""; }; - 0B4A2BAAC5964A649072D028A69828A7 /* Bolts.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.xcconfig; sourceTree = ""; }; - 0C215F34F0C6B81200F3B21B59E574C4 /* Parse-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Parse-dummy.m"; sourceTree = ""; }; - 0C2D23C919350BCE1204859E2D3084E1 /* PFProductsRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductsRequestHandler.h; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h; sourceTree = ""; }; - 0C4443D07955C1B82EAE1FF5ED9802D5 /* PFInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInternalUtils.h; path = Parse/Internal/PFInternalUtils.h; sourceTree = ""; }; - 0C9CC69BD277ACA79976DE7696F7D082 /* PFPurchaseTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseTableViewCell.h; path = ParseUI/Classes/Cells/PFPurchaseTableViewCell.h; sourceTree = ""; }; - 0CB6713546ED5550951A36F155898DA4 /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLConnectionOperation.h; path = AFNetworking/AFURLConnectionOperation.h; sourceTree = ""; }; - 0DAFFF182ED1EBA987995F61A6A223C8 /* PFColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFColor.h; path = ParseUI/Classes/Internal/Extensions/PFColor.h; sourceTree = ""; }; - 0E4384AACFBA3ACDE573EC5B89A33CDB /* PFFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState.h; path = Parse/Internal/File/State/PFFileState.h; sourceTree = ""; }; - 0E680D1B9471E7031E6AE543909FCE25 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; - 0EC1A04BDC009E62BD763037FA2606BC /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue_Private.h; path = Parse/Internal/PFEventuallyQueue_Private.h; sourceTree = ""; }; - 0EFD8CF6CCC0DD60743E813435223F07 /* IQUIWindow+Hierarchy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIWindow+Hierarchy.h"; path = "IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.h"; sourceTree = ""; }; - 0F235F78B07EDEC0A4ABEA5492758AC6 /* PFRESTCloudCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCloudCommand.h; path = Parse/Internal/Commands/PFRESTCloudCommand.h; sourceTree = ""; }; - 0F39661C276400B9DFFCA5E6AC2F5FEA /* FUIPopoverBackgroundView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUIPopoverBackgroundView.m; path = Classes/ios/FUIPopoverBackgroundView.m; sourceTree = ""; }; - 0F5AAAE929C4C74F67C9EDCE3E0EB9FB /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; - 0F65BE61AA1211314E4C269AC92D1057 /* PFLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogging.h; path = Parse/Internal/PFLogging.h; sourceTree = ""; }; - 0F860F4621C29DA310856A566C83712D /* PFURLConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLConstructor.m; path = Parse/Internal/HTTPRequest/PFURLConstructor.m; sourceTree = ""; }; - 0FBA40CFD6FA663EBA96754B663BE570 /* PFCommandCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandCache.m; path = Parse/Internal/PFCommandCache.m; sourceTree = ""; }; - 0FBC35C1E8CA28EDFF045C5C6A6AB64B /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; - 0FF2D1B9FAE8A0A6023A7692CC3C779D /* PFPushController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushController.h; path = Parse/Internal/Push/Controller/PFPushController.h; sourceTree = ""; }; - 1029345A196003C0EE67B1F1B3C6F1CA /* PFLogInViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInViewController.h; path = ParseUI/Classes/LogInViewController/PFLogInViewController.h; sourceTree = ""; }; - 102B0616995BF67CEC55063F3F545963 /* PFFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile.h; path = Parse/PFFile.h; sourceTree = ""; }; - 103FF4C21FC1A058E47E222F14825A8B /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; - 104F56B38E4BE40C5E2BC199D3AF6768 /* ChameleonFramework.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = ChameleonFramework.modulemap; sourceTree = ""; }; - 1058E8056D3FA36C9E8A152F802601F3 /* PFMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMacros.h; path = Parse/Internal/PFMacros.h; sourceTree = ""; }; - 10C40E8D14D8388ECC0708FE0A0E4FDA /* UNISimpleRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNISimpleRequest.h; path = Unirest/HttpRequest/UNISimpleRequest.h; sourceTree = ""; }; - 10C69C37D20A9F965DCCEBE8A59BD1AA /* PFCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCategoryLoader.h; path = Parse/Internal/PFCategoryLoader.h; sourceTree = ""; }; - 1112AB4B9D811AA4D841354E84FBA4A6 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; - 111416E352A374E5572C2A0923719A7D /* PFActionButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActionButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h; sourceTree = ""; }; - 11D918B1DBF342814743C236913D6EEB /* UITableViewCell+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableViewCell+FlatUI.h"; path = "Classes/ios/UITableViewCell+FlatUI.h"; sourceTree = ""; }; - 11F23EFA8DB1918E42FADA63407FBEF6 /* PFCachedQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCachedQueryController.h; path = Parse/Internal/Query/Controller/PFCachedQueryController.h; sourceTree = ""; }; - 12141DC6DC4E3FFE804DFE337A3374C7 /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; - 124E3271A7DC3EF54FAD044CE7F7F652 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; - 12F717FA93D810E6E56AA79E8DA31F49 /* PFRESTUserCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTUserCommand.m; path = Parse/Internal/Commands/PFRESTUserCommand.m; sourceTree = ""; }; - 1378696FD6E88031008A312FFA80F0BE /* PFSignUpViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSignUpViewController.h; path = ParseUI/Classes/SignUpViewController/PFSignUpViewController.h; sourceTree = ""; }; - 142AD357A99708346D62ABE27889D639 /* IQKeyboardManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManager-dummy.m"; sourceTree = ""; }; - 14F57C1395EAAA6BF0969FAF3CEACB04 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 15250DE419E242129E0E575BA94CACC4 /* PFAnalyticsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsController.m; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.m; sourceTree = ""; }; - 1543959E7A6D54C0513BD5007D1E6C06 /* PFAnalytics_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics_Private.h; path = Parse/Internal/Analytics/PFAnalytics_Private.h; sourceTree = ""; }; - 158142C7F929BA4F36A79B3F1266EDF4 /* AFNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 15AD0861C36EAA2BDAE76ABA34F7A71E /* PFACL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACL.m; path = Parse/PFACL.m; sourceTree = ""; }; - 161E3FAF78679E3EDFED60CD40654CFE /* PFURLConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLConstructor.h; path = Parse/Internal/HTTPRequest/PFURLConstructor.h; sourceTree = ""; }; - 165C1917DABAAC14E0BB7825B8C068D6 /* PFUserAuthenticationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserAuthenticationController.m; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m; sourceTree = ""; }; - 166D99DF393A0B52E9B7797AD00151D1 /* PFObjectController_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController_Private.h; path = Parse/Internal/Object/Controller/PFObjectController_Private.h; sourceTree = ""; }; - 16828D6C5E0FE1FF417BD7153C923545 /* ChameleonFramework.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ChameleonFramework.xcconfig; sourceTree = ""; }; - 168335B29B073BD3E6C9DCE33793F3F3 /* UNIHTTPStringResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPStringResponse.h; path = Unirest/HttpResponse/UNIHTTPStringResponse.h; sourceTree = ""; }; - 16B57DFA233CDD41F9CBF2EAC30FEB3D /* FUIButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUIButton.h; path = Classes/ios/FUIButton.h; sourceTree = ""; }; - 1707513017DDDD0D6CC76E94459428E5 /* PFAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAssert.h; path = Parse/Internal/PFAssert.h; sourceTree = ""; }; - 1717B0778A13741CD446D6173A471FBC /* Unirest.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Unirest.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1773A1E245CCEF2E969C3BF79F4F2458 /* IQToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQToolbar.m; path = IQKeyBoardManager/IQToolbar/IQToolbar.m; sourceTree = ""; }; - 181C4E315BFA03A426998EBF9FED2616 /* FUIAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUIAlertView.m; path = Classes/ios/FUIAlertView.m; sourceTree = ""; }; - 184CDD6D4BEC4A05DA974D0905409BB5 /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; - 18BF33071D03951244C7767E1153C152 /* PFQueryState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState_Private.h; path = Parse/Internal/Query/State/PFQueryState_Private.h; sourceTree = ""; }; - 1975C53F78F9228E9C7F23E9F4ABA5FE /* NSString+Icons.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Icons.m"; path = "Classes/ios/NSString+Icons.m"; sourceTree = ""; }; - 1990BFF9E6D313BBE004A6390A0AC1D8 /* PFURLSessionDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m; sourceTree = ""; }; - 1A52C07A61861817130D7B9AECEA563F /* ChameleonFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ChameleonFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1ADEC44E5D6F5925C1A7DB967F2B1183 /* IQKeyboardManagerConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManagerConstants.h; path = IQKeyBoardManager/Constants/IQKeyboardManagerConstants.h; sourceTree = ""; }; - 1B0589FBE7A6803057FC5D6D3FCB639A /* PFCommandURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandURLRequestConstructor.h; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h; sourceTree = ""; }; - 1B637A7F2698FA5CA2C8865433E40C77 /* PFInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInternalUtils.m; path = Parse/Internal/PFInternalUtils.m; sourceTree = ""; }; - 1B8464F07E251683523617CE1C8DCD6E /* UIImage+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIImage+ChameleonPrivate.h"; sourceTree = ""; }; - 1C9ED06688BC1CB99B5D19703F26282D /* PFAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAlertView.m; path = Parse/Internal/PFAlertView.m; sourceTree = ""; }; - 1CA6F9B308027556F4F9377422333BF6 /* PFConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConstants.h; path = Parse/PFConstants.h; sourceTree = ""; }; - 1D4F461316B1B02A7332A20432095322 /* PFRelation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelation.m; path = Parse/PFRelation.m; sourceTree = ""; }; - 1D534F9545A9DA36F94320F0181C5501 /* UIToolbar+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIToolbar+FlatUI.m"; path = "Classes/ios/UIToolbar+FlatUI.m"; sourceTree = ""; }; - 1D63CAF2AF89704D532ED74A5F3B1806 /* Unirest-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Unirest-dummy.m"; sourceTree = ""; }; - 1DB4ED0D15FF25EEA3709DC4DCCE9676 /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1E004D344C095F55232FB0E20CE0039D /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; - 1E627F00F8F898388BF877F78E1353BB /* PFCommandURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandURLRequestConstructor.m; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m; sourceTree = ""; }; - 1EA9750580BAC118BB72E201DDED2160 /* PFCommandRunningConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunningConstants.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h; sourceTree = ""; }; - 1EB0842FFEC81DB8129CA41730BB264D /* UIProgressView+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+FlatUI.m"; path = "Classes/ios/UIProgressView+FlatUI.m"; sourceTree = ""; }; - 1F13645A1FC49585D4052A12F65BAC07 /* PFMutableFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableFileState.m; path = Parse/Internal/File/State/PFMutableFileState.m; sourceTree = ""; }; - 1F4056A3D848C81DD6C4943C0C3DEC17 /* FUISwitch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUISwitch.h; path = Classes/ios/FUISwitch.h; sourceTree = ""; }; - 1F75CC1FF1A14AC8642A5E4C206F7A2B /* PFJSONSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFJSONSerialization.m; path = Parse/Internal/PFJSONSerialization.m; sourceTree = ""; }; - 1FD848862A585F198F6FCAC8B8EFB72E /* PFOfflineObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineObjectController.h; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h; sourceTree = ""; }; - 20AD7A66980A24CEED5FEFF10C43C907 /* PFNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNullability.h; path = Parse/PFNullability.h; sourceTree = ""; }; - 20C725EA9656F619043E7F4C0CCBC219 /* PFSessionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionUtilities.h; path = Parse/Internal/Session/Utilities/PFSessionUtilities.h; sourceTree = ""; }; - 213CBF9D8367A95FC91F9C691871F00D /* IQUITextFieldView+Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUITextFieldView+Additions.h"; path = "IQKeyBoardManager/Categories/IQUITextFieldView+Additions.h"; sourceTree = ""; }; - 214BFEFA3DCA45F9F77B522BE284D059 /* IQBarButtonItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQBarButtonItem.h; path = IQKeyBoardManager/IQToolbar/IQBarButtonItem.h; sourceTree = ""; }; - 215BC1A6142BD130A05E3E3A4C8C12C8 /* PFProductTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductTableViewController.h; path = ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h; sourceTree = ""; }; - 2185FDCDE303483489621D861E875441 /* PFObjectSubclassingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassingController.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m; sourceTree = ""; }; - 21CC19E2C87AFF19ADB03FA733CB1953 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - 21E02715B92BE89482B27815AC036627 /* PFSignUpViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSignUpViewController.m; path = ParseUI/Classes/SignUpViewController/PFSignUpViewController.m; sourceTree = ""; }; - 2210AC0B8E1C36C531569431FED76C6F /* PFMutableRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableRelationState.m; path = Parse/Internal/Relation/State/PFMutableRelationState.m; sourceTree = ""; }; - 22572AC878D5BE990EF6D072798377E8 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; - 229EA31BF1622CEADC763DBE38272F7B /* UNIBaseRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIBaseRequest.h; path = Unirest/HttpRequest/UNIBaseRequest.h; sourceTree = ""; }; - 22A4230F1535BF7EEA26F0B0B6A2FC92 /* Parse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = Parse/Parse.h; sourceTree = ""; }; - 22C9302ABB92E8C64F812A55B64178FE /* FUISegmentedControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUISegmentedControl.h; path = Classes/ios/FUISegmentedControl.h; sourceTree = ""; }; - 2338E18E87793296BA6AF5025AC078AA /* PFFile_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile_Private.h; path = Parse/Internal/File/PFFile_Private.h; sourceTree = ""; }; - 23ACB2B7432184BA453E98ED0E2EDBED /* UNIHTTPResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPResponse.m; path = Unirest/HttpResponse/UNIHTTPResponse.m; sourceTree = ""; }; - 241DE7E720235E1293C880CBB92E6037 /* PFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFNetworkActivityIndicatorManager.m; path = Parse/PFNetworkActivityIndicatorManager.m; sourceTree = ""; }; - 2436CD3523CA72198B0D962C17E46301 /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2463BFBD8A92B6595C4A21F6AB9AE7B4 /* PFInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallation.h; path = Parse/PFInstallation.h; sourceTree = ""; }; - 247240BB32080D2A5B4CFF53D3AB001E /* ChameleonFramework-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ChameleonFramework-dummy.m"; sourceTree = ""; }; - 250859A0E42785F3AA24C0D32F9A6693 /* PFFieldOperationDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperationDecoder.m; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.m; sourceTree = ""; }; - 25815FEB0DE47ED86D8ED80B2A8909AA /* UILabel+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UILabel+Chameleon.m"; path = "Pod/Classes/Objective-C/UILabel+Chameleon.m"; sourceTree = ""; }; - 26D6F7E58C3F63F67253B5D30DACCF6E /* PFKeyValueCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache.h; sourceTree = ""; }; - 26E9373EDD16A74B95926BC6C3C8935A /* PFConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig.h; path = Parse/PFConfig.h; sourceTree = ""; }; - 2749A3FC2730A5F92649D4FA2C5D48EF /* PFPaymentTransactionObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPaymentTransactionObserver.m; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m; sourceTree = ""; }; - 280F5D3DCF3108AF47CF8BB4F3A6E251 /* ParseUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseUI.h; path = ParseUI/Other/ParseUI.h; sourceTree = ""; }; - 2827E635AE454DC870F2874F7615C635 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; - 28EBD86C43DADC2E0614A6FF816D6268 /* PFQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryController.h; path = Parse/Internal/Query/Controller/PFQueryController.h; sourceTree = ""; }; - 2985BFC5C86CBD73F98331A8CBE0AC82 /* PFObjectConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectConstants.h; path = Parse/Internal/Object/Constants/PFObjectConstants.h; sourceTree = ""; }; - 29AC84ACC2284DC7D4A26CD3DE2F5593 /* PFMutableObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableObjectState.h; path = Parse/Internal/Object/State/PFMutableObjectState.h; sourceTree = ""; }; - 29D52266B5750467BA0428D47EE49E5D /* PFImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImage.h; path = ParseUI/Classes/Internal/Extensions/PFImage.h; sourceTree = ""; }; - 2A66FD291F0EA148EAA8C127374B8F95 /* PFCurrentUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentUserController.m; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.m; sourceTree = ""; }; - 2A72A93443D78BFA94C80C7CBAFD5D38 /* PFPrimaryButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPrimaryButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h; sourceTree = ""; }; - 2A7E2B8D9A365D86227F46D0BDDCDD07 /* PFQueryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryPrivate.h; path = Parse/Internal/Query/PFQueryPrivate.h; sourceTree = ""; }; - 2A95E9EA935826FB78AE6D397AE3194A /* PFPropertyInfo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Private.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h; sourceTree = ""; }; - 2AC94B957B5EE460B0672AD2E1CC4E90 /* PFPushUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushUtilities.h; path = Parse/Internal/Push/Utilites/PFPushUtilities.h; sourceTree = ""; }; - 2AD694A9C59B0664BD55D6F67E1D1551 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; - 2B69F1BCFE902317AFA58B0D3736D5FC /* PFAnonymousAuthenticationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousAuthenticationProvider.m; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m; sourceTree = ""; }; - 2BB1C00F959E71B835BF4CBA71F2A4DC /* PFSQLiteDatabaseResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseResult.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h; sourceTree = ""; }; - 2BCC458FDD5F692BBB2BFC64BB5701FC /* Pods-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-umbrella.h"; sourceTree = ""; }; - 2D2543AFDB68E8D9AF03BF013BCC4294 /* ParseUI-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ParseUI-umbrella.h"; sourceTree = ""; }; - 2E7C4C5ACBC2CA96E8A42ABD4A159BBB /* UIColor+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+FlatUI.h"; path = "Classes/ios/UIColor+FlatUI.h"; sourceTree = ""; }; - 2F89FFDAA4292F5FBED5DCC1AD20E60C /* PFPush.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPush.m; path = Parse/PFPush.m; sourceTree = ""; }; - 307342BCC7CF73A49CC184FCE4B81110 /* PFHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHash.m; path = Parse/Internal/PFHash.m; sourceTree = ""; }; - 30FF88F63B1181C7F1D5B463098BD749 /* PFObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObject.m; path = Parse/PFObject.m; sourceTree = ""; }; - 3173C656ABA36E19AFFAE28189BBC6EF /* PFUserConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserConstants.m; path = Parse/Internal/User/Constants/PFUserConstants.m; sourceTree = ""; }; - 320CFC4C5A2917CD08B1E18952FBA50C /* PFTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTableViewCell.m; path = ParseUI/Classes/Cells/PFTableViewCell.m; sourceTree = ""; }; - 32354577455AA4A647CBA8E3512A5B7A /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; - 32C8E3331FFE95E5B0CE1F1F65D7EE57 /* UIFont+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIFont+FlatUI.h"; path = "Classes/ios/UIFont+FlatUI.h"; sourceTree = ""; }; - 33F368B6E02D9CE1920FD6A9A46E7379 /* PFFieldOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperation.h; path = Parse/Internal/FieldOperation/PFFieldOperation.h; sourceTree = ""; }; - 340FDC8139576C7FAFDA34FC6FA32C81 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; - 349C704F429F4C4E216F689070040BB4 /* PFObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectController.m; path = Parse/Internal/Object/Controller/PFObjectController.m; sourceTree = ""; }; - 34E153BBD9AAB5FCAEC5F2C8976F3343 /* UIColor+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIColor+ChameleonPrivate.m"; sourceTree = ""; }; - 3551766882C50016BF54BEF1A2806D87 /* UNIHTTPStringResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPStringResponse.m; path = Unirest/HttpResponse/UNIHTTPStringResponse.m; sourceTree = ""; }; - 3593A73D342B1EFDA86078A912A7AABD /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; - 359A857EBA1F996333DB3D4E97A6C171 /* PFMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMulticastDelegate.h; path = Parse/Internal/PFMulticastDelegate.h; sourceTree = ""; }; - 360F1AB2B9AB436B138BAA4F2FADF706 /* PFFileStagingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileStagingController.m; path = Parse/Internal/File/Controller/PFFileStagingController.m; sourceTree = ""; }; - 367AE0EE476D9C3AD44EFC68E0EC667A /* PFPurchase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchase.h; path = Parse/PFPurchase.h; sourceTree = ""; }; - 36DC9E026ED1115FFFEBA4E7E80205D1 /* PFHTTPURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPURLRequestConstructor.h; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h; sourceTree = ""; }; - 3772DE6021E4CAEBBA3DD14A4CF8ED7D /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; - 3829F70779211216073D6EB001F14DDB /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; - 383772F4F9E375D079487664672483CA /* Parse_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse_Private.h; path = Parse/Internal/Parse_Private.h; sourceTree = ""; }; - 387423F5FDBDCB213C41BCA75B12DF5D /* FUITextField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUITextField.m; path = Classes/ios/FUITextField.m; sourceTree = ""; }; - 38AB88C207BEB56FAA7E8597DF2B4151 /* PFFileState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState_Private.h; path = Parse/Internal/File/State/PFFileState_Private.h; sourceTree = ""; }; - 38B24E4D6538C00EB19CA86398ED5FA7 /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; - 38DB4714E17A08D8DCBCDBBEEC3895F4 /* PFLogInView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogInView.m; path = ParseUI/Classes/LogInViewController/PFLogInView.m; sourceTree = ""; }; - 39943054D23B3B7CB70A494690FC60EA /* ParseUI.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ParseUI.xcconfig; sourceTree = ""; }; - 39965C065F1A6625731B58560E98A306 /* PFReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFReachability.m; path = Parse/Internal/PFReachability.m; sourceTree = ""; }; - 39CBD2387C0A22DE368A7A3D92A3E3FE /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Bolts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 39DCC2C5EF00A91CDD98FA4B087203B3 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; - 3A22E843656CB49C6E68E4BE98036F2C /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; - 3A26B58BB9CF52CB918DB7AFCBD39A82 /* Base64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Base64.h; path = Unirest/Base64.h; sourceTree = ""; }; - 3A60E6832260DEEA85851BDB87E31EFE /* PFRESTConfigCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTConfigCommand.h; path = Parse/Internal/Commands/PFRESTConfigCommand.h; sourceTree = ""; }; - 3ACDA3B548B75B13FC54C1C0A484A047 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; - 3C0356BBA99F327689450897B320B7B3 /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; - 3C153997184ED2FF1E8380B9139AC366 /* PFPushUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushUtilities.m; path = Parse/Internal/Push/Utilites/PFPushUtilities.m; sourceTree = ""; }; - 3C6E13FD355083FC23FDDB87F0B9D918 /* PFHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHash.h; path = Parse/Internal/PFHash.h; sourceTree = ""; }; - 3CCB37AE324FC6748009FBF33A162CF0 /* PFCommandCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache_Private.h; path = Parse/Internal/PFCommandCache_Private.h; sourceTree = ""; }; - 3CF9A31CA35A27E97FBBA6C7F1094DD0 /* PFSignUpView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSignUpView.h; path = ParseUI/Classes/SignUpViewController/PFSignUpView.h; sourceTree = ""; }; - 3D14E15CFDF8111D1EE5A9810542B455 /* PFCommandCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache.h; path = Parse/Internal/PFCommandCache.h; sourceTree = ""; }; - 3D3165725CDF1149D3CCA74613D69C71 /* PFSQLiteStatement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteStatement.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h; sourceTree = ""; }; - 3D3F66F90965E3A12CB64DEAE106CCC4 /* PFMutableRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableRelationState.h; path = Parse/Internal/Relation/State/PFMutableRelationState.h; sourceTree = ""; }; - 3DD67D11257E1D4BDD39573F974F005C /* IQUIWindow+Hierarchy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIWindow+Hierarchy.m"; path = "IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.m"; sourceTree = ""; }; - 3EB4361565435188A9EE00823DB76D92 /* PFInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationController.m; path = Parse/Internal/Installation/Controller/PFInstallationController.m; sourceTree = ""; }; - 3F72FEBD3BFAC399D64BBF2628A4BB5D /* IQTitleBarButtonItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQTitleBarButtonItem.m; path = IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.m; sourceTree = ""; }; - 3F95840228CCB23871D1FDA853144584 /* PFReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFReachability.h; path = Parse/Internal/PFReachability.h; sourceTree = ""; }; - 400DCDC4E9E38584679B4F52E6D0D946 /* PFQueryCollectionViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryCollectionViewController.h; path = ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h; sourceTree = ""; }; - 40A9F64F4334B4832DA1DAE7B7993FD8 /* ChameleonConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ChameleonConstants.m; path = "Pod/Classes/Objective-C/ChameleonConstants.m"; sourceTree = ""; }; - 41094D76ED63E327FE9C849B59884D75 /* PFRESTObjectCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectCommand.h; path = Parse/Internal/Commands/PFRESTObjectCommand.h; sourceTree = ""; }; - 415EFD8319500DD739DEF0680C2937FD /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; - 417CBC7A056859D68354BE8D34EA2955 /* PFAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalytics.m; path = Parse/PFAnalytics.m; sourceTree = ""; }; - 419BCF873CD408CCC0A983F2D2D9FDCA /* KeyboardManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KeyboardManager.h; path = IQKeyBoardManager/KeyboardManager.h; sourceTree = ""; }; - 41B0B19F9EC056DDEB90C861DD253385 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; - 41EDEF6519ED977D63C2247DFD5A1E7F /* UNIBodyRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIBodyRequest.m; path = Unirest/HttpRequest/UNIBodyRequest.m; sourceTree = ""; }; - 41FC81788EC8B32D98571DFB25FFA43F /* FlatUIKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlatUIKit.h; path = Classes/ios/FlatUIKit.h; sourceTree = ""; }; - 42AFF659E9E3F99529B442E5A4B428AE /* Parse-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-umbrella.h"; sourceTree = ""; }; - 430DF1B522DBE43E7FECCD02BD215175 /* PFDismissButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDismissButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h; sourceTree = ""; }; - 435DAA47CFDDF383FBFCBDAD51AA78B2 /* PFObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState.h; path = Parse/Internal/Object/State/PFObjectState.h; sourceTree = ""; }; - 438DDEBF7F22477BF899EFD13A21B646 /* PFObjectLocalIdStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectLocalIdStore.h; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h; sourceTree = ""; }; - 43EF76379A5B47561340CD04EDED49D0 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; - 43F86D7AD4019B993FC793C54A2B9FE2 /* PFGeoPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFGeoPoint.m; path = Parse/PFGeoPoint.m; sourceTree = ""; }; - 445DD7A5A6030BC73417C0194ADF04DA /* PFDismissButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDismissButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m; sourceTree = ""; }; - 448B673FD293D7336F276231DF7DE1FC /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; - 44FBA4EB83A6123C98B57E3CE091D509 /* PFFieldOperationDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperationDecoder.h; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.h; sourceTree = ""; }; - 4504A3BE29DC08F74E6F39B08DD5E10F /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperationManager.m; path = AFNetworking/AFHTTPRequestOperationManager.m; sourceTree = ""; }; - 452F073FE5B24730589F500D722C4CB2 /* PFObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectState.m; path = Parse/Internal/Object/State/PFObjectState.m; sourceTree = ""; }; - 45580BD459DF4A00A74028429FABC4D8 /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; - 458C815BEBC54F8DDE0D496B144D4926 /* IQKeyboardManager.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = IQKeyboardManager.bundle; path = IQKeyBoardManager/Resources/IQKeyboardManager.bundle; sourceTree = ""; }; - 45E05BDE47E9DB32B931EE360B02476B /* PFObjectFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCodingLogic.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m; sourceTree = ""; }; - 465D78482E8BED6A866F750CE0177935 /* IQUIView+Hierarchy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIView+Hierarchy.h"; path = "IQKeyBoardManager/Categories/IQUIView+Hierarchy.h"; sourceTree = ""; }; - 4687602C78AD0F9B7C4EA5B7D151BE8E /* IQSegmentedNextPrevious.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQSegmentedNextPrevious.h; path = IQKeyBoardManager/IQSegmentedNextPrevious/IQSegmentedNextPrevious.h; sourceTree = ""; }; - 46B4B08EA86C057DDF2D5999D4AD5896 /* PFRESTPushCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTPushCommand.h; path = Parse/Internal/Commands/PFRESTPushCommand.h; sourceTree = ""; }; - 479870A54E4C0784E09BABC858FAE81A /* FUISegmentedControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUISegmentedControl.m; path = Classes/ios/FUISegmentedControl.m; sourceTree = ""; }; - 47B29B50130D2C7B7BD5BA3291CE55FA /* ParseUI-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ParseUI-prefix.pch"; sourceTree = ""; }; - 47D632AD5CAB17E28A0843C0107B3A73 /* NSArray+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+Chameleon.m"; path = "Pod/Classes/Objective-C/NSArray+Chameleon.m"; sourceTree = ""; }; - 49078E325B83F07DF6DEDE0A8AF6C0B9 /* PFRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelationState.m; path = Parse/Internal/Relation/State/PFRelationState.m; sourceTree = ""; }; - 49CDC6C1BAFD451541A07318A6666A2F /* UIImage+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+FlatUI.m"; path = "Classes/ios/UIImage+FlatUI.m"; sourceTree = ""; }; - 49E8615A4B8AAD457BEECB6AC39FBC7F /* PFPushState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState_Private.h; path = Parse/Internal/Push/State/PFPushState_Private.h; sourceTree = ""; }; - 4A94CB5EDDD62CD822188CBC63AEB555 /* PFAnalyticsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsController.h; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.h; sourceTree = ""; }; - 4AB74A37510E78D1DBF9E663451E9941 /* PFUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUser.h; path = Parse/PFUser.h; sourceTree = ""; }; - 4B5EF0AD4F734B79EDED699BCB4D4BB0 /* PFRESTFileCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTFileCommand.m; path = Parse/Internal/Commands/PFRESTFileCommand.m; sourceTree = ""; }; - 4BDDA33E16DC66582EF95196C6F77136 /* UIPopoverController+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIPopoverController+FlatUI.m"; path = "Classes/ios/UIPopoverController+FlatUI.m"; sourceTree = ""; }; - 4C254B2D112ACF8B32BBA3B5B47AD3D3 /* PFPurchaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseController.m; path = Parse/Internal/Purchase/Controller/PFPurchaseController.m; sourceTree = ""; }; - 4C9E435584357B992826E680CBFE5DFF /* PFOfflineObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineObjectController.m; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m; sourceTree = ""; }; - 4CD8B7617B4D6002836CBCD695CB70D7 /* IQKeyboardManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManager-prefix.pch"; sourceTree = ""; }; - 4D6B0F03D8DC15123121CC57FD885AC5 /* ParseModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseModule.m; path = Parse/Internal/ParseModule.m; sourceTree = ""; }; - 4E547C2347FABBF6388F1EF5F0718731 /* PFRelation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelation.h; path = Parse/PFRelation.h; sourceTree = ""; }; - 4E8270CB580B17C43E533286D51C2D7C /* UIViewController+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+Chameleon.h"; path = "Pod/Classes/Objective-C/UIViewController+Chameleon.h"; sourceTree = ""; }; - 4F202FA64ADCF9050D08CB944B331392 /* PFURLSessionUploadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionUploadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h; sourceTree = ""; }; - 4FBCBE064AB11059CE4858CF3A0858CF /* PFCurrentInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentInstallationController.h; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h; sourceTree = ""; }; - 5074739FCD9F69FED5FDF7014860BB24 /* PFSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession_Private.h; path = Parse/Internal/Session/PFSession_Private.h; sourceTree = ""; }; - 50BA63747E27C27E4D5B2B8E842C794B /* PFPushPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushPrivate.h; path = Parse/Internal/Push/PFPushPrivate.h; sourceTree = ""; }; - 50C5DCAFBBEE9E4B148EFD23665B1FD2 /* PFUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserState.m; path = Parse/Internal/User/State/PFUserState.m; sourceTree = ""; }; - 50EF6BFB1B51671BA3A588A55B967472 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; - 51019DCF51504FFB0E18650FF8076701 /* IQKeyboardReturnKeyHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQKeyboardReturnKeyHandler.m; path = IQKeyBoardManager/IQKeyboardReturnKeyHandler.m; sourceTree = ""; }; - 512E8FF912FFD36699AEDF3133DB49FC /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; - 5141615EE5D0ACF917C43ABD7872ED3A /* Parse.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Parse.modulemap; sourceTree = ""; }; - 516589740C3BFF83DA4A36876F16A619 /* PFObjectEstimatedData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectEstimatedData.m; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m; sourceTree = ""; }; - 51C2376FD47B67BBB57034D0A5D9F577 /* PFErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFErrorUtilities.h; path = Parse/Internal/PFErrorUtilities.h; sourceTree = ""; }; - 51E1566E07DFF49B458706F904502E3E /* PFSubclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSubclassing.h; path = Parse/PFSubclassing.h; sourceTree = ""; }; - 521412CB4C17B8D388EF9AA530ADF53E /* PFCommandRunning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunning.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.h; sourceTree = ""; }; - 525E18ED456A67A6C083FF690D580D99 /* UISlider+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UISlider+FlatUI.m"; path = "Classes/ios/UISlider+FlatUI.m"; sourceTree = ""; }; - 52781911B0E8FC1A6419C6DB628698D9 /* PFRESTSessionCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTSessionCommand.h; path = Parse/Internal/Commands/PFRESTSessionCommand.h; sourceTree = ""; }; - 531AB65EED2C24DDFCE29F4E32570062 /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionFileDownloadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; - 53C1E24C34781F516F273B45CBD6083A /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 53F486043AD2A7C3EB99E7A23D499924 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 564066383C34EA69FF40575B4F602BD0 /* PFActivityIndicatorCollectionReusableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActivityIndicatorCollectionReusableView.m; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m; sourceTree = ""; }; - 56685CD10639BA9FD0A64000D41D1800 /* PFCloudCodeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloudCodeController.m; path = Parse/Internal/CloudCode/PFCloudCodeController.m; sourceTree = ""; }; - 569E0DFDD549E86512FD99D4120EFAA0 /* IQKeyboardManager.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManager.xcconfig; sourceTree = ""; }; - 5757B6527369A55B6115FA6887EED9AD /* PFCoreManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCoreManager.m; path = Parse/Internal/PFCoreManager.m; sourceTree = ""; }; - 580257472F171E86E013E78B8128D785 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 583A8A566A6323A2BA9A8CDC16265050 /* PFAnonymousUtils_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils_Private.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h; sourceTree = ""; }; - 592E53EF56C0467535E73FA3211C5C7A /* UNIRest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIRest.h; path = Unirest/UNIRest.h; sourceTree = ""; }; - 59670B276943E78259AC1BA4451BC0F6 /* PFPaymentTransactionObserver_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver_Private.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h; sourceTree = ""; }; - 5969F1692114D93014B5D9B9FFC0D2BD /* PFObjectFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCodingLogic.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h; sourceTree = ""; }; - 5A053E5374735D20B3CCEDA790784BC5 /* PFAnonymousAuthenticationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousAuthenticationProvider.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h; sourceTree = ""; }; - 5A3039C23FDAA1C416B9A8B4B571DEF1 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; - 5A46A8CFC11DCD8D2AD372EC17EC957C /* PFProductTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductTableViewController.m; path = ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m; sourceTree = ""; }; - 5A771B06A45185BFBDA4C3A4A04B8B5F /* Parse.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Parse.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5B6C8C1244901A4DC13F98B0BD264307 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; - 5BC665F170641D769B9A99262F203250 /* PFLoadingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLoadingView.h; path = ParseUI/Classes/Internal/Views/PFLoadingView.h; sourceTree = ""; }; - 5CA3956F2F7B9DB4B12A3579F8BED6E6 /* Parse.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Parse.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5D1B41D28557100B7599E736F8BD7E62 /* PFInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallation.m; path = Parse/PFInstallation.m; sourceTree = ""; }; - 5D24992010A1CD9B06DC44C2BDE41893 /* UISlider+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UISlider+FlatUI.h"; path = "Classes/ios/UISlider+FlatUI.h"; sourceTree = ""; }; - 5D38CDF4EBB1D62CCE0EAB280D6C7478 /* FUICellBackgroundView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUICellBackgroundView.m; path = Classes/ios/FUICellBackgroundView.m; sourceTree = ""; }; - 5D84102C012613A8D84A4EBD474FE57B /* PFCommandResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandResult.h; path = Parse/Internal/PFCommandResult.h; sourceTree = ""; }; - 5DB6BC0F44FADD25C922940ACF72E8E2 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 5E14F114F990190EA018F59BFD8A7CA1 /* PFQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryController.m; path = Parse/Internal/Query/Controller/PFQueryController.m; sourceTree = ""; }; - 5F215C518E3FFBEF197136D91C115EE0 /* PFURLSessionDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h; sourceTree = ""; }; - 5F8406F5398993A992C272C81CFDE2BC /* BoltsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BoltsVersion.h; path = Bolts/Common/BoltsVersion.h; sourceTree = ""; }; - 5FA2345F3E38B080C28690468CB56BCE /* PFTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTaskQueue.h; path = Parse/Internal/PFTaskQueue.h; sourceTree = ""; }; - 60500F371C7FC40E17FBBDEB2A5859B0 /* IQUIViewController+Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIViewController+Additions.h"; path = "IQKeyBoardManager/Categories/IQUIViewController+Additions.h"; sourceTree = ""; }; - 618A87BB12362A560B73946CDE741CFD /* Unirest.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Unirest.modulemap; sourceTree = ""; }; - 61A606587D26AA7BF2064492D964C1B1 /* PFConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig_Private.h; path = Parse/Internal/Config/PFConfig_Private.h; sourceTree = ""; }; - 61A6CC3AD49D1EC0236AC77C6C3FDEE2 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; - 6215DA3A77039C50B75AED8FC270F904 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 62A792546F47E6C090C59ECB9CA2104A /* PFFileStagingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileStagingController.h; path = Parse/Internal/File/Controller/PFFileStagingController.h; sourceTree = ""; }; - 62CAFF354F98B00137C57CC547DF0DF1 /* PFObjectFileCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCoder.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.m; sourceTree = ""; }; - 6324BF755ED8BCFC32F3DDEBB21DA098 /* PFAsyncTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAsyncTaskQueue.h; path = Parse/Internal/PFAsyncTaskQueue.h; sourceTree = ""; }; - 63444FBD778C241A425F28E45FB6A4A2 /* Bolts-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-umbrella.h"; sourceTree = ""; }; - 6395957FD69B28F1FBF0315448ACD66F /* PFConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConstants.m; path = Parse/PFConstants.m; sourceTree = ""; }; - 640E6EE31F76BFD4D000EC49F5EC7E9F /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; - 64439EB290B8FA9845544A1DEA783BA4 /* PFImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImageCache.h; path = ParseUI/Classes/Internal/PFImageCache.h; sourceTree = ""; }; - 646363071D33807E74E00D422A069342 /* PFDateFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDateFormatter.m; path = Parse/Internal/PFDateFormatter.m; sourceTree = ""; }; - 6463ABEE30CC6F5D3278EB29F094EA5C /* PFSQLiteDatabaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseController.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m; sourceTree = ""; }; - 64739D6CD551B96EA4F5A2696E757077 /* PFDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDecoder.m; path = Parse/Internal/PFDecoder.m; sourceTree = ""; }; - 659235A87B6E9B8D50AC86824833B4C6 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; - 65FF31D34C22C23F62FBA20D9B7D7C22 /* PFMutableACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableACLState.m; path = Parse/Internal/ACL/State/PFMutableACLState.m; sourceTree = ""; }; - 6698D999B8C3EFC728172EC43B1557FC /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningEventuallyQueue.m; path = Parse/Internal/PFPinningEventuallyQueue.m; sourceTree = ""; }; - 670A877E489DE7EA116B48C111981C8A /* PFURLSessionUploadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionUploadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m; sourceTree = ""; }; - 672624EB4DB14FD16D375F3074B89502 /* IQSegmentedNextPrevious.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQSegmentedNextPrevious.m; path = IQKeyBoardManager/IQSegmentedNextPrevious/IQSegmentedNextPrevious.m; sourceTree = ""; }; - 677A67215E9F5421372FF71C51A9CBEF /* PFLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocationManager.h; path = Parse/Internal/PFLocationManager.h; sourceTree = ""; }; - 679635BCDBAAA84085EA29352E7478C6 /* UIColor+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+Chameleon.h"; path = "Pod/Classes/Objective-C/UIColor+Chameleon.h"; sourceTree = ""; }; - 6868458725E6CC0FF0C6BC77E989CCE3 /* IQKeyboardManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManager-umbrella.h"; sourceTree = ""; }; - 68DFA1C5606B064C64972A0D99D79614 /* BFDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFDefines.h; path = Bolts/Common/BFDefines.h; sourceTree = ""; }; - 6928FC9D915EE8FECB9382A37F4E3446 /* PFPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPin.m; path = Parse/Internal/LocalDataStore/Pin/PFPin.m; sourceTree = ""; }; - 6941B7CE65411420D590479786152661 /* PFInstallationIdentifierStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h; sourceTree = ""; }; - 695743A26F0576E1D0B7E9A2BDACD034 /* PFProduct.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProduct.m; path = Parse/PFProduct.m; sourceTree = ""; }; - 698DBAF223726A3F15202086E20202C6 /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; - 69AB466A89966108035F106401A75D3C /* UIAlertView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertView+AFNetworking.h"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.h"; sourceTree = ""; }; - 69DFF6E4BCAFB2D84CF88A79538591A4 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; - 6A03934E6774452C43AC8C689387D333 /* PFRole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRole.m; path = Parse/PFRole.m; sourceTree = ""; }; - 6B27A3D9E9D60FD7397856DF5BC27CB4 /* IQTitleBarButtonItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQTitleBarButtonItem.h; path = IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.h; sourceTree = ""; }; - 6B953C43F63BC08C42ECA4BEFFCB844D /* PFRect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRect.h; path = ParseUI/Classes/Internal/Extensions/PFRect.h; sourceTree = ""; }; - 6BD7B193C39EC475280660DD0302D6E2 /* PFObjectSubclassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassInfo.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m; sourceTree = ""; }; - 6BFB0430DCAF7342A05C4CD84AA118D2 /* Bolts.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Bolts.modulemap; sourceTree = ""; }; - 6C3E24B4E9AF44DE4EE49241CE0F751D /* PFTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTableViewCell.h; path = ParseUI/Classes/Cells/PFTableViewCell.h; sourceTree = ""; }; - 6C59735CBC2ADCF341B3403FA4E54F31 /* PFRESTSessionCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTSessionCommand.m; path = Parse/Internal/Commands/PFRESTSessionCommand.m; sourceTree = ""; }; - 6C6494683E07D5C70C872F4947A38578 /* PFURLSessionCommandRunner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionCommandRunner.m; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m; sourceTree = ""; }; - 6C796C5611EDAAB47F4E3BF6D9EEA9CC /* PFQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryState.m; path = Parse/Internal/Query/State/PFQueryState.m; sourceTree = ""; }; - 6CCDE24DEF2EF06A2A56C44BB829E19B /* PFApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFApplication.h; path = Parse/Internal/PFApplication.h; sourceTree = ""; }; - 6D90FCBC2346FA86310C29CE608FAAEC /* PFBaseState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBaseState.m; path = Parse/Internal/PFBaseState.m; sourceTree = ""; }; - 6DAF268985E635B91784C5906DAF3927 /* PFUIAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUIAlertView.h; path = ParseUI/Classes/Internal/Extensions/PFUIAlertView.h; sourceTree = ""; }; - 6E4572E64BE534864C8EDDB5AFDCDCCE /* PFRESTCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand.h; path = Parse/Internal/Commands/PFRESTCommand.h; sourceTree = ""; }; - 6F1C54627C59B634F5A8A947CB08EE44 /* UIButton+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+Chameleon.h"; path = "Pod/Classes/Objective-C/UIButton+Chameleon.h"; sourceTree = ""; }; - 701CB3B6C89D2BF5586DA0598F75C795 /* PFRole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRole.h; path = Parse/PFRole.h; sourceTree = ""; }; - 70876A25B7F7788BB693E26322A1C049 /* PFCurrentConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentConfigController.m; path = Parse/Internal/Config/Controller/PFCurrentConfigController.m; sourceTree = ""; }; - 70A011368DB31350D4B8817E5E2854FF /* PFEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyQueue.m; path = Parse/Internal/PFEventuallyQueue.m; sourceTree = ""; }; - 70D415D5D8A179CBA96E760BAA1CEBF6 /* PFPurchase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchase.m; path = Parse/PFPurchase.m; sourceTree = ""; }; - 70E06F8737725A9805CE924BC61F207F /* IQNSArray+Sort.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQNSArray+Sort.m"; path = "IQKeyBoardManager/Categories/IQNSArray+Sort.m"; sourceTree = ""; }; - 7154543FC0EDEF72C9DAA39A933C7F1F /* UIImage+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIImage+ChameleonPrivate.m"; sourceTree = ""; }; - 7158AF2B7D008CB9610944ABC757C3D0 /* PFUserFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserFileCodingLogic.m; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m; sourceTree = ""; }; - 7189FA61279ECB3D508F4CDC70CC531A /* FUITextField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUITextField.h; path = Classes/ios/FUITextField.h; sourceTree = ""; }; - 72A6BD4F8F889172C800D9EEB621ED1F /* PFACLState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState_Private.h; path = Parse/Internal/ACL/State/PFACLState_Private.h; sourceTree = ""; }; - 7329083460ED8B649477E95909F03887 /* PFObjectState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState_Private.h; path = Parse/Internal/Object/State/PFObjectState_Private.h; sourceTree = ""; }; - 73573BBD9C0340CC70CD913FB8E71C04 /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperation.h; path = AFNetworking/AFHTTPRequestOperation.h; sourceTree = ""; }; - 73856CC2B008DC55022AD9FCC2AD19AE /* UNIHTTPClientHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPClientHelper.h; path = Unirest/UNIHTTPClientHelper.h; sourceTree = ""; }; - 73AEBCE7EBCC8AA67FB8C9E277D17E93 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - 73BC51738F3FAAEE3D05B8A6205DFB81 /* FUIAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUIAlertView.h; path = Classes/ios/FUIAlertView.h; sourceTree = ""; }; - 73BF8BE9385A3D1A65CD98FFEE2D3D1C /* PFObjectFileCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCoder.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.h; sourceTree = ""; }; - 74EFE70E0EE45A51F1CF1BBB47BCE616 /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLConnectionOperation.m; path = AFNetworking/AFURLConnectionOperation.m; sourceTree = ""; }; - 75141355D477772C4B5E5DD52B69FD10 /* PFResources.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFResources.h; path = ParseUI/Generated/PFResources.h; sourceTree = ""; }; - 751D3443C2AA75402B1A10DDA758A575 /* NSArray+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+Chameleon.h"; path = "Pod/Classes/Objective-C/NSArray+Chameleon.h"; sourceTree = ""; }; - 7561E1617CDB3676851A461B32BAD227 /* PFNetworkCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkCommand.h; path = Parse/Internal/PFNetworkCommand.h; sourceTree = ""; }; - 7577D0E1E50364D2BC3E96468B5A8B08 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; - 7594F8FEE9A171F78D2E3F6CDE674229 /* PFOfflineStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineStore.h; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h; sourceTree = ""; }; - 7625861250EB678747DBDB0DA87F845C /* SDWebImageDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDecoder.m; path = SDWebImage/SDWebImageDecoder.m; sourceTree = ""; }; - 76D651F3BCB876EB2B8F7F5C4E0062FF /* PFURLSessionCommandRunner_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h; sourceTree = ""; }; - 781AAE433E7B2E65709B75066F0B5B8D /* FlatUIKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FlatUIKit-dummy.m"; sourceTree = ""; }; - 78698C19DFDE818FEDA3F7ADD32F3664 /* UNIHTTPRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPRequest.m; path = Unirest/UNIHTTPRequest.m; sourceTree = ""; }; - 78FD0C91FA78980063D8363E85FF7315 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; - 7910FE4828145D6DFF00FF8C66F08B32 /* ParseModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseModule.h; path = Parse/Internal/ParseModule.h; sourceTree = ""; }; - 79386F7E1DE21CAF81AF526BD30B8A95 /* Lato-Light.ttf */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "Lato-Light.ttf"; path = "Resources/Lato-Light.ttf"; sourceTree = ""; }; - 79A9DEDC89FE8336BF5FEDAAF75BF7FC /* Pods.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Pods.modulemap; sourceTree = ""; }; - 79DB596B5868A1F37939AA5E108ED2AA /* PFTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTaskQueue.m; path = Parse/Internal/PFTaskQueue.m; sourceTree = ""; }; - 7A5FCE7E535A69957FAD0C1B32F14873 /* PFOfflineQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryController.m; path = Parse/Internal/Query/Controller/PFOfflineQueryController.m; sourceTree = ""; }; - 7A78A342E3D58FAB3B9BCF2E2A6640FE /* PFUserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserConstants.h; path = Parse/Internal/User/Constants/PFUserConstants.h; sourceTree = ""; }; - 7BDCA1AAEF4745A195464ACE049E133E /* UNIHTTPBinaryResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPBinaryResponse.m; path = Unirest/HttpResponse/UNIHTTPBinaryResponse.m; sourceTree = ""; }; - 7CA87DD640C394F87E065F2D91959B58 /* UIToolbar+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIToolbar+FlatUI.h"; path = "Classes/ios/UIToolbar+FlatUI.h"; sourceTree = ""; }; - 7D2C8F743E5C2B50ECAA21543B1A6444 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = Parse/Resources/en.lproj; sourceTree = ""; }; - 7D66B6E411C773A4C325070F091A185F /* PFRESTCommand_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand_Private.h; path = Parse/Internal/Commands/PFRESTCommand_Private.h; sourceTree = ""; }; - 7E31393F91A23688342164EE5B397EF6 /* PFErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFErrorUtilities.m; path = Parse/Internal/PFErrorUtilities.m; sourceTree = ""; }; - 7E674A27E491B0E73114499235656BA3 /* ParseUI-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ParseUI-dummy.m"; sourceTree = ""; }; - 7F047216A5E0C25046A45A773B453E53 /* UINavigationController+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationController+Chameleon.h"; path = "Pod/Classes/Objective-C/UINavigationController+Chameleon.h"; sourceTree = ""; }; - 8054A84736C7E30F048F96C56BF8AD15 /* PFActivityIndicatorTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActivityIndicatorTableViewCell.h; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h; sourceTree = ""; }; - 80784BFB290943A33F98473FA5DED611 /* PFCloudCodeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloudCodeController.h; path = Parse/Internal/CloudCode/PFCloudCodeController.h; sourceTree = ""; }; - 80A6747CA95094227C1769E7029F101E /* UIImage+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+FlatUI.h"; path = "Classes/ios/UIImage+FlatUI.h"; sourceTree = ""; }; - 81CD390E4ED30F1847B6E9429A3F13FD /* PFFileDataStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileDataStream.m; path = Parse/Internal/File/FileDataStream/PFFileDataStream.m; sourceTree = ""; }; - 81D83DAA30D8226773AF7A7178B0B6BD /* SDWebImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.xcconfig; sourceTree = ""; }; - 81F9F39F51AD9E314989D743049BCF3F /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperation.m; path = AFNetworking/AFHTTPRequestOperation.m; sourceTree = ""; }; - 8256FA5420925F6CADCB4C5AC7CE573B /* PFObjectFilePersistenceController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFilePersistenceController.m; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m; sourceTree = ""; }; - 82C9F7010D830A1139C299899A83B9C2 /* PFPushManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushManager.h; path = Parse/Internal/Push/Manager/PFPushManager.h; sourceTree = ""; }; - 83D09D1579320C595EAB76A27A66A393 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; - 8414D497D5AF83A586CE597084435FAE /* PFMultiProcessFileLockController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLockController.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h; sourceTree = ""; }; - 84513CB26B8A0050F9E684391FC1BC5D /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; - 854280D62BE01F6E5C7DA21C6D62CBD7 /* ParseUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ParseUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8583B03CF719746652269BBF2917F4CE /* UNIRest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIRest.m; path = Unirest/UNIRest.m; sourceTree = ""; }; - 86CCF8CA09C85DC9F7A1996054A59F84 /* UIAlertView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertView+AFNetworking.m"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.m"; sourceTree = ""; }; - 86F1AD27F1609FA38C3E2584530BD685 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; - 8733C8CDCF74E51CD4066CA88EF3DEC7 /* PFBase64Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBase64Encoder.h; path = Parse/Internal/PFBase64Encoder.h; sourceTree = ""; }; - 87620DD218BABB98B36BCE28B5DD8AF4 /* PFApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFApplication.m; path = Parse/Internal/PFApplication.m; sourceTree = ""; }; - 87A95FA6B2DDA6FF87424D908CC257B8 /* PFSQLiteDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase_Private.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h; sourceTree = ""; }; - 87B213035BAC5F75386F62D3C75D2342 /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; - 87C3814F3B0BD8F178C11CCFC60DA422 /* PFRESTConfigCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTConfigCommand.m; path = Parse/Internal/Commands/PFRESTConfigCommand.m; sourceTree = ""; }; - 87E5BE149B74031F7D503DEA017BAAF4 /* PFActivityIndicatorCollectionReusableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActivityIndicatorCollectionReusableView.h; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h; sourceTree = ""; }; - 884235E504353D70ED1552FA3C950881 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 894E5DA93A9F359521A89826BE6DA777 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; - 895783DFE891E3A117F5B9AE9A04C4CB /* FUIPopoverBackgroundView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUIPopoverBackgroundView.h; path = Classes/ios/FUIPopoverBackgroundView.h; sourceTree = ""; }; - 89B0FEF6909A74F2C8A2B4851AC77B72 /* PFRESTPushCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTPushCommand.m; path = Parse/Internal/Commands/PFRESTPushCommand.m; sourceTree = ""; }; - 89F3E8D0730EE9469B8344ADE5D70D9D /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; - 8A17DD478515E42D5BDFA0E3904D1BE8 /* FlatUIKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = FlatUIKit.modulemap; sourceTree = ""; }; - 8A1A3BAE08183E61A9D99E03845A1950 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; - 8A7A6EC76B67BFE97D72C327BEE579A7 /* PFActionButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActionButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m; sourceTree = ""; }; - 8AECC8BC20B105122A1E79F9C7E14A1C /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; - 8B0290200A3CD16A2526FF77F159042C /* UITabBar+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITabBar+FlatUI.h"; path = "Classes/ios/UITabBar+FlatUI.h"; sourceTree = ""; }; - 8B5A65FF9D6CFC8EBF9BD2B2B541A345 /* IQKeyboardManagerConstantsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManagerConstantsInternal.h; path = IQKeyBoardManager/Constants/IQKeyboardManagerConstantsInternal.h; sourceTree = ""; }; - 8B84B94BA546CAD368DB53A7DFB7D87B /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; - 8C9EA3E96E8F608083FF2042FAC5C1E5 /* ParseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseManager.m; path = Parse/Internal/ParseManager.m; sourceTree = ""; }; - 8CAE70A224DB0AFCFC0EE841D4C56CD6 /* PFMultiProcessFileLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLock.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h; sourceTree = ""; }; - 8CC75AB1002F3294731EA254B7F3D7FC /* IQUITextFieldView+Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUITextFieldView+Additions.m"; path = "IQKeyBoardManager/Categories/IQUITextFieldView+Additions.m"; sourceTree = ""; }; - 8D20CBAAD1BA598F1D6247B41E4566FF /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningEventuallyQueue.h; path = Parse/Internal/PFPinningEventuallyQueue.h; sourceTree = ""; }; - 8E3CBE479BC045A20A860642A628208D /* IQUIView+IQKeyboardToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIView+IQKeyboardToolbar.h"; path = "IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h"; sourceTree = ""; }; - 8E954F15444F31FCD63CBBDEC836EFD0 /* PFInstallationIdentifierStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationIdentifierStore.m; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m; sourceTree = ""; }; - 8F9A09A43164225380B1BDCE467353C7 /* PFPushController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushController.m; path = Parse/Internal/Push/Controller/PFPushController.m; sourceTree = ""; }; - 910165D4217068C24C287CE5AF13D6BD /* PFURLSessionJSONDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionJSONDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m; sourceTree = ""; }; - 91D3B95A12116CBA1AE9ABED59FCEEB0 /* PFOfflineQueryLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryLogic.h; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h; sourceTree = ""; }; - 9291AF9D8AB933D3FFB984F58175FA99 /* PFKeyValueCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache_Private.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h; sourceTree = ""; }; - 92A90342C0F0E20145742435B920F2FF /* PFPushManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushManager.m; path = Parse/Internal/Push/Manager/PFPushManager.m; sourceTree = ""; }; - 930C5DC459F360648A3E300EB979867D /* IQUIView+Hierarchy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIView+Hierarchy.m"; path = "IQKeyBoardManager/Categories/IQUIView+Hierarchy.m"; sourceTree = ""; }; - 93F0280896C56576AC9033B1015CC54A /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 945B8EB1B5E9F204BDA638C028956715 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; - 94B22E37D02A86293A063773ACD7E464 /* UNIHTTPJsonResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPJsonResponse.m; path = Unirest/HttpResponse/UNIHTTPJsonResponse.m; sourceTree = ""; }; - 94C75B08294E8CBDFC8C121C04DFD0BB /* PFHTTPURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHTTPURLRequestConstructor.m; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m; sourceTree = ""; }; - 952CDBE90871479F4265EF2DFD8AE480 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; - 95783CA02ACC8DE896F47A0F4FAD5845 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; - 95DE36BCC0193B52A414C8C4089114E9 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; - 95E1D1F624E0E8D6C0FAD45089D5480D /* PFURLSessionCommandRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h; sourceTree = ""; }; - 96445D7015BFE014D85E10B2485BED3F /* PFProduct+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFProduct+Private.h"; path = "Parse/Internal/Product/PFProduct+Private.h"; sourceTree = ""; }; - 9650EED2F75B573BEE08F1336DE9E234 /* PFCurrentConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentConfigController.h; path = Parse/Internal/Config/Controller/PFCurrentConfigController.h; sourceTree = ""; }; - 9690030D094375D9A87123004BEEEB3A /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; - 96DB0E56E2231F314D87A2254DC2DB82 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 96F4CF51DCA1800B1216B335A1065B20 /* PFCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCollectionViewCell.m; path = ParseUI/Classes/Cells/PFCollectionViewCell.m; sourceTree = ""; }; - 970EFE29AFD068B739491AD36219AB30 /* PFAnalyticsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsUtilities.h; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h; sourceTree = ""; }; - 973ECCD84B38F38AD2373E6B314D30A7 /* FUISwitch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUISwitch.m; path = Classes/ios/FUISwitch.m; sourceTree = ""; }; - 977577C045EDA9D9D1F46E2598D19FC7 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; - 97B9289CF2E13853E6653DB6AA968E35 /* PFAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAlertView.h; path = Parse/Internal/PFAlertView.h; sourceTree = ""; }; - 981AD73BD30C2A11D8AA68A9DE64E0C5 /* PFRESTQueryCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTQueryCommand.h; path = Parse/Internal/Commands/PFRESTQueryCommand.h; sourceTree = ""; }; - 989BA274614EE585E049BE41CB1B0E3D /* IQTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQTextView.h; path = IQKeyBoardManager/IQTextView/IQTextView.h; sourceTree = ""; }; - 98ED373FF4FD8124A98CF4CE145E1AC1 /* PFCurrentUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentUserController.h; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.h; sourceTree = ""; }; - 9921F60FE1CC3C791C3B38E4C7BC3840 /* PFSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession.h; path = Parse/PFSession.h; sourceTree = ""; }; - 992C8C2C65196C7C84875BE02C16F5BF /* PFProductsRequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductsRequestHandler.m; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m; sourceTree = ""; }; - 9959A698F7854FAC8C6FA6CAD244E42E /* PFObjectSubclassingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassingController.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h; sourceTree = ""; }; - 9985A4AA550A3D19099C7D6296D77938 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = SDWebImage.modulemap; sourceTree = ""; }; - 99A99B181BD884F5B8D26ACFDE5446C2 /* PFACLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLPrivate.h; path = Parse/Internal/ACL/PFACLPrivate.h; sourceTree = ""; }; - 99C896B7ED249DADC8B48DB72D9370D9 /* PFImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImageView.h; path = ParseUI/Classes/Views/PFImageView.h; sourceTree = ""; }; - 99E82BD8E277629EAEF26AA8860F2772 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; - 9A198263993B0BD6D29BF39EAB72DAFA /* PFRESTObjectBatchCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectBatchCommand.h; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.h; sourceTree = ""; }; - 9A6B265414CAC10A84A1B1D3A8C1DFF8 /* PFLogInView_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInView_Private.h; path = ParseUI/Classes/LogInViewController/PFLogInView_Private.h; sourceTree = ""; }; - 9AC40A69DAFB3828DE1563F57092BA09 /* PFObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectControlling.h; path = Parse/Internal/Object/Controller/PFObjectControlling.h; sourceTree = ""; }; - 9ADD777B2E527B0D2F8A8AC96C48FE6E /* PFPushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushState.m; path = Parse/Internal/Push/State/PFPushState.m; sourceTree = ""; }; - 9BC2DD4C7D08C328C3E76B833B15CE35 /* PFFieldOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperation.m; path = Parse/Internal/FieldOperation/PFFieldOperation.m; sourceTree = ""; }; - 9BEC61C2360A2BB5FF68CFC83A8712DD /* PFEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEncoder.m; path = Parse/Internal/PFEncoder.m; sourceTree = ""; }; - 9D3AD8A69DC720901BD1A037490C5F03 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = en.lproj; path = ParseUI/Resources/Localization/en.lproj; sourceTree = ""; }; - 9D74B8A82D1C235550B3CFCBEB08229D /* PFPropertyInfo_Runtime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo_Runtime.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m; sourceTree = ""; }; - 9E7B7161635919425AA5D7D3A5558804 /* PFObjectSubclassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassInfo.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h; sourceTree = ""; }; - 9E971BE0DEBFF48B45DEB3916FCECACA /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; - 9E9ECAB2E005E92FF1711C904032D845 /* PFMultiProcessFileLock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLock.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m; sourceTree = ""; }; - 9EA3E4C86DB2F16D57983EE7A65D5B49 /* PFUserPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserPrivate.h; path = Parse/Internal/User/PFUserPrivate.h; sourceTree = ""; }; - 9F0E9294301984DC28389681C02CAE9B /* PFMutablePushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutablePushState.h; path = Parse/Internal/Push/State/PFMutablePushState.h; sourceTree = ""; }; - 9F422A1C8B0F6527F123CE3D95BC2051 /* UIColor+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+Chameleon.m"; path = "Pod/Classes/Objective-C/UIColor+Chameleon.m"; sourceTree = ""; }; - 9F7534EE7BD51C1E47D6B3FB6990034C /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; - 9FEFC9A58974A874BB87FF5345A6245F /* PFLogInViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogInViewController.m; path = ParseUI/Classes/LogInViewController/PFLogInViewController.m; sourceTree = ""; }; - A0418A853E7240E53037AA831D5D0A57 /* ParseUIConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseUIConstants.h; path = ParseUI/Other/ParseUIConstants.h; sourceTree = ""; }; - A09A8B330777A976623A127D00A31688 /* PFMutableObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableObjectState.m; path = Parse/Internal/Object/State/PFMutableObjectState.m; sourceTree = ""; }; - A0A2EC5C748A58FEB0FE76B1573EA9BF /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; - A11BE6F0EF47FDB22B242D1F0C0D6575 /* PFEventuallyPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyPin.m; path = Parse/Internal/PFEventuallyPin.m; sourceTree = ""; }; - A26E4702F966BF133A51C178E3F12663 /* PFQueryTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryTableViewController.m; path = ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m; sourceTree = ""; }; - A280C3E99D716C42901CD456018C0E66 /* UITabBar+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITabBar+FlatUI.m"; path = "Classes/ios/UITabBar+FlatUI.m"; sourceTree = ""; }; - A2A54E97FABF661517A1762333B79AB6 /* UIStepper+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIStepper+FlatUI.h"; path = "Classes/ios/UIStepper+FlatUI.h"; sourceTree = ""; }; - A33AF9AA1A3171F8C88DDE6C178C64B1 /* PFKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeychainStore.m; path = Parse/Internal/PFKeychainStore.m; sourceTree = ""; }; - A33D64DFDE960845EFBE18C004B51247 /* flat-ui-icons-regular.ttf */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "flat-ui-icons-regular.ttf"; path = "Resources/flat-ui-icons-regular.ttf"; sourceTree = ""; }; - A3DC79169AA38109A4D516CEFB2B3089 /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; - A3E723872EB18F77CB30EE5A350765C6 /* PFPinningObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningObjectStore.h; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.h; sourceTree = ""; }; - A51395ED2E252C6A88DABEFDBDDB8EE2 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; - A528111D7A936F28A8552C9982E93715 /* PFMutableQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableQueryState.m; path = Parse/Internal/Query/State/PFMutableQueryState.m; sourceTree = ""; }; - A54FA38C63D857F9723CD97B1EEC26DE /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; - A5B144F5DE20F0C9141DDA95DB67AA39 /* UNIHTTPRequestWithBody.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPRequestWithBody.h; path = Unirest/UNIHTTPRequestWithBody.h; sourceTree = ""; }; - A60C0A0DD9BA6E60D184841F050BD285 /* PFObjectBatchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectBatchController.h; path = Parse/Internal/Object/BatchController/PFObjectBatchController.h; sourceTree = ""; }; - A6F89455E34EE7028968AEDF82F78CDF /* PFQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQuery.m; path = Parse/PFQuery.m; sourceTree = ""; }; - A72EA68DFEA7E21C47FD42437F8897F9 /* PFQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState.h; path = Parse/Internal/Query/State/PFQueryState.h; sourceTree = ""; }; - A7C521FC2EC885334AB4AE8A70A34975 /* PFUserState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState_Private.h; path = Parse/Internal/User/State/PFUserState_Private.h; sourceTree = ""; }; - A82C0A5B3CB5F1436C7E2A5F0543ABC5 /* Lato-Bold.ttf */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "Lato-Bold.ttf"; path = "Resources/Lato-Bold.ttf"; sourceTree = ""; }; - A83BE4181E146B3BD3F668BB14864CE0 /* PFURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSession.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m; sourceTree = ""; }; - A83EEAE0B09A222BC1C9AA21E68D0205 /* PFHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPRequest.h; path = Parse/Internal/HTTPRequest/PFHTTPRequest.h; sourceTree = ""; }; - A8790641E8E896F7C5FE93C04AF0C64B /* Base64.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Base64.m; path = Unirest/Base64.m; sourceTree = ""; }; - A9981EDA58981856A99D4405188D1658 /* PFFileController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileController.m; path = Parse/Internal/File/Controller/PFFileController.m; sourceTree = ""; }; - A9B77D002118589E53B6B4E8E232CFB9 /* UINavigationBar+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationBar+FlatUI.h"; path = "Classes/ios/UINavigationBar+FlatUI.h"; sourceTree = ""; }; - AA23AC7E45B8B079E7D327730D22F393 /* IQKeyboardManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManager.h; path = IQKeyBoardManager/IQKeyboardManager.h; sourceTree = ""; }; - AB39A28463C679EBC0BE2339E85EBFB0 /* Unirest-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Unirest-prefix.pch"; sourceTree = ""; }; - AB62F77C89A99FF36884B62A8A2030FB /* IQToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQToolbar.h; path = IQKeyBoardManager/IQToolbar/IQToolbar.h; sourceTree = ""; }; - AB7234A3F4D28A8A54D6B0BE9E88B0B8 /* PFCurrentObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentObjectControlling.h; path = Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h; sourceTree = ""; }; - ABA91E0D9EFC2B073550E47FAD4B6D5C /* PFAnalyticsUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsUtilities.m; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m; sourceTree = ""; }; - AC266D051A2E16F08229630682665D45 /* UNIBodyRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIBodyRequest.h; path = Unirest/HttpRequest/UNIBodyRequest.h; sourceTree = ""; }; - AC61BEB041A14C32EEC908BD93EC3D53 /* Lato-Italic.ttf */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "Lato-Italic.ttf"; path = "Resources/Lato-Italic.ttf"; sourceTree = ""; }; - AC6C812E0EFAAEEA409ED82F6D29F891 /* ParseInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseInternal.h; path = Parse/Internal/ParseInternal.h; sourceTree = ""; }; - AD7301C3D83C67C2134BCAEE708C819C /* ParseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseManager.h; path = Parse/Internal/ParseManager.h; sourceTree = ""; }; - ADB7018CBCF8438824B821ED70CA23BC /* PFPaymentTransactionObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h; sourceTree = ""; }; - AE7C306D0EC5E02AF1AC9D97F419ABE4 /* PFUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUser.m; path = Parse/PFUser.m; sourceTree = ""; }; - AED0C7F4991EEDAD40B929FE5954A58A /* PFThreadsafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFThreadsafety.h; path = Parse/Internal/ThreadSafety/PFThreadsafety.h; sourceTree = ""; }; - AF13FF764B0AD249E4820CA29F05FF1D /* UNIHTTPJsonResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPJsonResponse.h; path = Unirest/HttpResponse/UNIHTTPJsonResponse.h; sourceTree = ""; }; - AF63697BC3DC8455B0CDF64447936DEC /* Lato-Regular.ttf */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "Lato-Regular.ttf"; path = "Resources/Lato-Regular.ttf"; sourceTree = ""; }; - AF65D7903D16F1336FA4C292618EE4D1 /* PFTextField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTextField.m; path = ParseUI/Classes/Views/PFTextField.m; sourceTree = ""; }; - AF76D767432F274AD4283482532FDBCC /* PFFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFile.m; path = Parse/PFFile.m; sourceTree = ""; }; - AF77BCE7F4E600FB0FF25AD70D5860A0 /* ChameleonMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonMacros.h; path = "Pod/Classes/Objective-C/ChameleonMacros.h"; sourceTree = ""; }; - AF7EB139234D7591A9BBBFE257CBEDC2 /* AFNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.xcconfig; sourceTree = ""; }; - AF9162235873B70447F51065419627E0 /* IQNSArray+Sort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQNSArray+Sort.h"; path = "IQKeyBoardManager/Categories/IQNSArray+Sort.h"; sourceTree = ""; }; - AFA589B0E7364B47DD39581ED7F8997F /* PFURLSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h; sourceTree = ""; }; - B042F300D303CA764C76ADF2750F904C /* PFAnonymousUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousUtils.m; path = Parse/PFAnonymousUtils.m; sourceTree = ""; }; - B063D943B310E78B3D5CB17AB9252598 /* PFImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImageView.m; path = ParseUI/Classes/Views/PFImageView.m; sourceTree = ""; }; - B0716E42F47F257A3770B7DD8081EDC1 /* PFOfflineQueryLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryLogic.m; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m; sourceTree = ""; }; - B149C76BFE429BA3CEFD6436D38D06A5 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; - B16B2C84C57EBD6CFFAE8942DF8C1910 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; - B1DBD3176E91CA20504EA02C798F6093 /* IQKeyboardManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = IQKeyboardManager.modulemap; sourceTree = ""; }; - B20A4C5260282598EE2A9122AE28C581 /* PFFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileState.m; path = Parse/Internal/File/State/PFFileState.m; sourceTree = ""; }; - B2DCBEE27C7147DD02409495780E224F /* PFWeakValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFWeakValue.m; path = Parse/Internal/PFWeakValue.m; sourceTree = ""; }; - B408965C776EA83368E1BA4B52F57587 /* PFUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserController.m; path = Parse/Internal/User/Controller/PFUserController.m; sourceTree = ""; }; - B420E3B76BA771BB141A4869B8EB491C /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; - B466BAD6E30106D96C85707E09AA357B /* PFSQLiteDatabaseResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseResult.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m; sourceTree = ""; }; - B546148DC567CB2FA17FC9BA413889E4 /* PFAnonymousUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils.h; path = Parse/PFAnonymousUtils.h; sourceTree = ""; }; - B581DD1ACB958FFDB072BAA4F2237507 /* PFOperationSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOperationSet.m; path = Parse/Internal/Object/OperationSet/PFOperationSet.m; sourceTree = ""; }; - B65B209398DEEE0639810752FA7A18D7 /* PFRESTCloudCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCloudCommand.m; path = Parse/Internal/Commands/PFRESTCloudCommand.m; sourceTree = ""; }; - B736120F3CE5A59BD18E4D01F84A0B2D /* PFOfflineStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineStore.m; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m; sourceTree = ""; }; - B7882188B6F860973D29C8A074FF8023 /* PFQueryTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryTableViewController.h; path = ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h; sourceTree = ""; }; - B7A94758BEFF018FDE24D7113BEAF994 /* Parse.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.xcconfig; sourceTree = ""; }; - B7F2C88E55C448F571A16FF3A03467C6 /* BFTask+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Private.m"; path = "Parse/Internal/BFTask+Private.m"; sourceTree = ""; }; - B84E240F3DC71E49D016279DA276FC95 /* PFCommandResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandResult.m; path = Parse/Internal/PFCommandResult.m; sourceTree = ""; }; - B85BAD594BAF8219C7223ABC66A87291 /* Parse-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-prefix.pch"; sourceTree = ""; }; - B8D6AA9709B0A2DA0AF6FD356C37A4FC /* PFACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACLState.m; path = Parse/Internal/ACL/State/PFACLState.m; sourceTree = ""; }; - B8E23EF1AC15E1DBC62546834E3CC9EC /* PFDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDecoder.h; path = Parse/Internal/PFDecoder.h; sourceTree = ""; }; - B9AC06D85D58069D13A34C1333509EEE /* PFFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileManager.m; path = Parse/Internal/PFFileManager.m; sourceTree = ""; }; - BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - BB49BEF95C912EB1E9E2500A8EDD423D /* PFConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfig.m; path = Parse/PFConfig.m; sourceTree = ""; }; - BB6655C00D3CD2E63257C48537A65FAF /* PFInstallationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationPrivate.h; path = Parse/Internal/Installation/PFInstallationPrivate.h; sourceTree = ""; }; - BBA6FA187736BA1C3D8A168CFFD3ED7C /* PFImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImageCache.m; path = ParseUI/Classes/Internal/PFImageCache.m; sourceTree = ""; }; - BBB27FEB94C2B7FE3B0DD9AB84BCD1EC /* ChameleonFramework-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChameleonFramework-umbrella.h"; sourceTree = ""; }; - BC23D8D1583323AEC4319A567379AE0F /* PFMultiProcessFileLockController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLockController.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m; sourceTree = ""; }; - BC4DB7A7953625E3259CE8EFBF4B48A0 /* PFSessionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionController.h; path = Parse/Internal/Session/Controller/PFSessionController.h; sourceTree = ""; }; - BC6D7AFFA36EDC2F1A1F3F5AE103D40D /* BFTask+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Private.h"; path = "Parse/Internal/BFTask+Private.h"; sourceTree = ""; }; - BD1854542CC0D92ACF2AB3F821DADBD9 /* UNIBaseRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIBaseRequest.m; path = Unirest/HttpRequest/UNIBaseRequest.m; sourceTree = ""; }; - BD7F6400C626D55400820230D04C5F7F /* PFSQLiteDatabaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseController.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h; sourceTree = ""; }; - BDAFD7316C60383055E23BC9BF253BC5 /* ChameleonEnums.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonEnums.h; path = "Pod/Classes/Objective-C/ChameleonEnums.h"; sourceTree = ""; }; - BDE1EF913DC938935CD74F59A32BBBC6 /* PFRect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRect.m; path = ParseUI/Classes/Internal/Extensions/PFRect.m; sourceTree = ""; }; - BFDE86646969B14B9DDE0FB0504D891A /* PFInstallationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationConstants.h; path = Parse/Internal/Installation/Constants/PFInstallationConstants.h; sourceTree = ""; }; - C014A0946EFDB150DF88EA618EF6A35A /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; - C0418242E51162B39D697CC698FE6B37 /* PFFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileManager.h; path = Parse/Internal/PFFileManager.h; sourceTree = ""; }; - C059DE90663E3A5B3FAB03899B3EE981 /* PFRelationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationPrivate.h; path = Parse/Internal/Relation/PFRelationPrivate.h; sourceTree = ""; }; - C0BE03A6E7E183FC699EBB426F345255 /* PFTextField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTextField.h; path = ParseUI/Classes/Views/PFTextField.h; sourceTree = ""; }; - C0FB09BF7F073967C701AC4CBD6E943B /* PFPushChannelsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushChannelsController.m; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.m; sourceTree = ""; }; - C120EB784B7384DEC6CC34FCC8B9EA6E /* PFAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics.h; path = Parse/PFAnalytics.h; sourceTree = ""; }; - C1EF55F530A54A7FA4E2A1F21B9C2A6C /* PFUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState.h; path = Parse/Internal/User/State/PFUserState.h; sourceTree = ""; }; - C2D09C30034987C004CAC0DD30E50EF3 /* PFSessionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionUtilities.m; path = Parse/Internal/Session/Utilities/PFSessionUtilities.m; sourceTree = ""; }; - C2D1C4E98593EC75192FB9A4BA3ECB4A /* ChameleonConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonConstants.h; path = "Pod/Classes/Objective-C/ChameleonConstants.h"; sourceTree = ""; }; - C37215148F69DC2DE5BCDF103D9EBCD3 /* PFQueryCollectionViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryCollectionViewController.m; path = ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m; sourceTree = ""; }; - C3F6F352E4DEB45514F7E02EEBDB016E /* Unirest.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Unirest.xcconfig; sourceTree = ""; }; - C47EA5E0FE2EDE215EF920002C45CABC /* UIButton+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+Chameleon.m"; path = "Pod/Classes/Objective-C/UIButton+Chameleon.m"; sourceTree = ""; }; - C592047BF5023A3B9425932EEB2645D8 /* PFCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCategoryLoader.m; path = Parse/Internal/PFCategoryLoader.m; sourceTree = ""; }; - C5C0949E4094DAB10E007D58354FFE6C /* PFLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogger.h; path = Parse/Internal/PFLogger.h; sourceTree = ""; }; - C617F4B4A1CE53AEAC7582E501F4DB3C /* SDWebImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDecoder.h; path = SDWebImage/SDWebImageDecoder.h; sourceTree = ""; }; - C67B9105DBF2A4806B810D4C91492A7A /* PFObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController.h; path = Parse/Internal/Object/Controller/PFObjectController.h; sourceTree = ""; }; - C6A7E92CB10858CD3FABB85A6FD99B84 /* IQTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQTextView.m; path = IQKeyBoardManager/IQTextView/IQTextView.m; sourceTree = ""; }; - C7D9D7B4B9B8F3BF20EB1371E8568DEF /* PFColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFColor.m; path = ParseUI/Classes/Internal/Extensions/PFColor.m; sourceTree = ""; }; - C873579765BF8F01D37429D453D6BBD6 /* FlatUIKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FlatUIKit-prefix.pch"; sourceTree = ""; }; - C8869D548301C534BEC8788DACFA7BCB /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; - C8A145036FC8B98160AAF10120A5EEF9 /* UNIHTTPClientHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPClientHelper.m; path = Unirest/UNIHTTPClientHelper.m; sourceTree = ""; }; - C9BB2BB3ABD697F1A0B2EA61302872BA /* PFCommandRunningConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunningConstants.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m; sourceTree = ""; }; - CA16BCCFE65EA3B9355F70FC4E81B1D5 /* PFSessionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionController.m; path = Parse/Internal/Session/Controller/PFSessionController.m; sourceTree = ""; }; - CA680C5B2F2FE889E39264C907BCD1EF /* PFDefaultACLController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDefaultACLController.m; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m; sourceTree = ""; }; - CA92D4296853F6D1AF511A3E56D26B0E /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; - CAA631FA9A2B83D46BA332E8F8821786 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; - CB1797C033036090B451088C89260E49 /* UIColor+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIColor+ChameleonPrivate.h"; sourceTree = ""; }; - CB7BC0721D61927E1CA5E5A15874B94C /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionFileDownloadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; - CB99750FE622958635551E3E8BB18757 /* PFBase64Encoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBase64Encoder.m; path = Parse/Internal/PFBase64Encoder.m; sourceTree = ""; }; - CBC0F7C552B739C909B650A0F42F7F38 /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; - CCA31BD912D907C4293A1D90827CB1B4 /* PFDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDevice.h; path = Parse/Internal/PFDevice.h; sourceTree = ""; }; - CCAD3E3BBFF0D6A1F1CBE0F58445B6C8 /* PFUserAuthenticationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationController.h; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h; sourceTree = ""; }; - CCBCC644097EC37BCE679EE3F3E76534 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; - CCBECCDD0315E3F03B8C7115AEF53966 /* PFPropertyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo.h; sourceTree = ""; }; - CCC3A88CE615BBD76C105F8042FB8D4A /* UNIUrlConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIUrlConnection.m; path = Unirest/UNIUrlConnection.m; sourceTree = ""; }; - CCD35CE7907E6242CDB7C52C7FF9CB0E /* PFOperationSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOperationSet.h; path = Parse/Internal/Object/OperationSet/PFOperationSet.h; sourceTree = ""; }; - CD3BE94284E25134F4C852DF25C2BB81 /* PFThreadsafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFThreadsafety.m; path = Parse/Internal/ThreadSafety/PFThreadsafety.m; sourceTree = ""; }; - CD61F185287A802EF797C04EFAD3593B /* PFTextButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTextButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m; sourceTree = ""; }; - CD86AF14E6AC36C77A150AE85409AE37 /* PFQueryUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryUtilities.m; path = Parse/Internal/Query/Utilities/PFQueryUtilities.m; sourceTree = ""; }; - CDF6842F6121DBA0831C14D0E8F65015 /* IQUIViewController+Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIViewController+Additions.m"; path = "IQKeyBoardManager/Categories/IQUIViewController+Additions.m"; sourceTree = ""; }; - CE518703881DE5CA423A20499ECDC6AD /* PFMutableFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableFileState.h; path = Parse/Internal/File/State/PFMutableFileState.h; sourceTree = ""; }; - CE7968EFEFA2E9B8164D4F55D4EBB331 /* PFCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloud.m; path = Parse/PFCloud.m; sourceTree = ""; }; - CE7CAE3094180B95240126C2822042E2 /* PFPurchaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseController.h; path = Parse/Internal/Purchase/Controller/PFPurchaseController.h; sourceTree = ""; }; - CE94DB6C100CE51E45FAF3164C75AE11 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; - D037863CFD3CE4061E8C22D77EE6DD5A /* UILabel+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UILabel+Chameleon.h"; path = "Pod/Classes/Objective-C/UILabel+Chameleon.h"; sourceTree = ""; }; - D0405803033A2A777B8E4DFA0C1800ED /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; }; - D04EDCD4786B77A896200D1559245584 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; - D05CFABD73D1FB90C529520B0DC77F20 /* PFRESTFileCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTFileCommand.h; path = Parse/Internal/Commands/PFRESTFileCommand.h; sourceTree = ""; }; - D0B71153D34E562ACF68F48FB7FDADAB /* PFObjectEstimatedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectEstimatedData.h; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h; sourceTree = ""; }; - D0F85BD16C75AA3CE44524754ECC9372 /* PFRESTQueryCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTQueryCommand.m; path = Parse/Internal/Commands/PFRESTQueryCommand.m; sourceTree = ""; }; - D16736489B2F33CEE9D10BB1901E56F4 /* PFPropertyInfo_Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Runtime.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h; sourceTree = ""; }; - D218E6E9217CF6B09EE11F316F2BDC2D /* UNIJsonNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIJsonNode.h; path = Unirest/HttpResponse/UNIJsonNode.h; sourceTree = ""; }; - D21B7F4B6E163639A4CF504445B8B112 /* PFBaseState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBaseState.h; path = Parse/Internal/PFBaseState.h; sourceTree = ""; }; - D21DDC280E179412F2B736E809065821 /* PFTextButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTextButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h; sourceTree = ""; }; - D39C18F1087363DA78B7AF8228B31041 /* UIBarButtonItem+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIBarButtonItem+FlatUI.h"; path = "Classes/ios/UIBarButtonItem+FlatUI.h"; sourceTree = ""; }; - D46C7BBB9E7029D26FF7C191FB0F27E2 /* UIColor+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+FlatUI.m"; path = "Classes/ios/UIColor+FlatUI.m"; sourceTree = ""; }; - D47E2B50535BEBB984A44A5E380A1899 /* PFMutableUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableUserState.h; path = Parse/Internal/User/State/PFMutableUserState.h; sourceTree = ""; }; - D53D3A6402C17CB2FB58232563BF2DFC /* PFResources.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFResources.m; path = ParseUI/Generated/PFResources.m; sourceTree = ""; }; - D6802ADB6DBFB9D15784481AA9178A00 /* PFCachedQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCachedQueryController.m; path = Parse/Internal/Query/Controller/PFCachedQueryController.m; sourceTree = ""; }; - D6939221D085E5F1308A2B09EC84A8FB /* FlatUIKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FlatUIKit.xcconfig; sourceTree = ""; }; - D82B1A59C6D060B31454EE1BA1AFEA58 /* PFInstallationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationConstants.m; path = Parse/Internal/Installation/Constants/PFInstallationConstants.m; sourceTree = ""; }; - D88644925B762799165B07723831F61A /* PFSignUpView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSignUpView.m; path = ParseUI/Classes/SignUpViewController/PFSignUpView.m; sourceTree = ""; }; - D8A9951D90F820CABE4AF9DC10B30028 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; - D8B2ACC39357BAAB14306E00BA3E428B /* PFObjectUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectUtilities.h; path = Parse/Internal/Object/Utilities/PFObjectUtilities.h; sourceTree = ""; }; - D8B69E7AD96CC6404E9A378A007761C3 /* PFMutablePushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutablePushState.m; path = Parse/Internal/Push/State/PFMutablePushState.m; sourceTree = ""; }; - D9207DF0F12014BFB1CFDCE5A3B13FB7 /* PFRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState.h; path = Parse/Internal/Relation/State/PFRelationState.h; sourceTree = ""; }; - D9DC10C5D58CA654587C102A2D9AB0F7 /* FlatUIKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FlatUIKit-umbrella.h"; sourceTree = ""; }; - DA312349A49333542E6F4B36B329960E /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; - DAC816672E32BF119EB78DE481DF82C4 /* PFSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabase.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m; sourceTree = ""; }; - DB18C85E52D0CCCDFB9117C741639AD0 /* PFKeyValueCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeyValueCache.m; path = Parse/Internal/KeyValueCache/PFKeyValueCache.m; sourceTree = ""; }; - DBA35F1F048CEE8DCF4BEC592328E5CF /* UNIJsonNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIJsonNode.m; path = Unirest/HttpResponse/UNIJsonNode.m; sourceTree = ""; }; - DBCC900D32AFEFDA4E083D025D1CDCAC /* UINavigationController+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UINavigationController+Chameleon.m"; path = "Pod/Classes/Objective-C/UINavigationController+Chameleon.m"; sourceTree = ""; }; - DBFDB98CF3C5203ED1947FB7978F111E /* PFLoadingView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLoadingView.m; path = ParseUI/Classes/Internal/Views/PFLoadingView.m; sourceTree = ""; }; - DCD0D941688A6475E88FA24B8EE6E272 /* UIProgressView+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+FlatUI.h"; path = "Classes/ios/UIProgressView+FlatUI.h"; sourceTree = ""; }; - DD5095A8F8D31FD6548CA972007FE2F2 /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; - DD5966B7E55EF3B77EE33556D7F3B042 /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperationManager.h; path = AFNetworking/AFHTTPRequestOperationManager.h; sourceTree = ""; }; - DD9685C6D6B07C68DC58D461BAABD9EC /* PFFileDataStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileDataStream.h; path = Parse/Internal/File/FileDataStream/PFFileDataStream.h; sourceTree = ""; }; - DDF8F676322E06A458A9455290D831AD /* PFQueryUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryUtilities.h; path = Parse/Internal/Query/Utilities/PFQueryUtilities.h; sourceTree = ""; }; - DE54DB6796C0FB12AC1B5FA18EAC0D36 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - DE5ED9EEE5E7116BA5F8E1D471BFF3C8 /* ParseUI.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = ParseUI.modulemap; sourceTree = ""; }; - DEC3E90FB8D9ABC8A00A31F38C7B82DA /* PFKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeychainStore.h; path = Parse/Internal/PFKeychainStore.h; sourceTree = ""; }; - DEDFD5BE658CAEB920A1275B5C15F769 /* PFCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloud.h; path = Parse/PFCloud.h; sourceTree = ""; }; - DEF456870840E66AE413DE98C5013DA4 /* PFObjectBatchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectBatchController.m; path = Parse/Internal/Object/BatchController/PFObjectBatchController.m; sourceTree = ""; }; - DF86B1471532F9FDDE0E21010BC35454 /* PFDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDataProvider.h; path = Parse/Internal/PFDataProvider.h; sourceTree = ""; }; - DFB8E151B324B332BF30802F7BFE111B /* PFCurrentInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentInstallationController.m; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m; sourceTree = ""; }; - DFD4D5F1EA65A4AFBD41C94594DC0926 /* UIView+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIView+ChameleonPrivate.m"; sourceTree = ""; }; - DFF3FDB3E1DBB2B57D6B105B337F26B5 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; - E00CA5AD72C3FB68BA10ADBC27D808C3 /* PFLogInView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInView.h; path = ParseUI/Classes/LogInViewController/PFLogInView.h; sourceTree = ""; }; - E07AD1BDC7C8535E1A0A1B7958025A92 /* PFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkActivityIndicatorManager.h; path = Parse/PFNetworkActivityIndicatorManager.h; sourceTree = ""; }; - E10977BA6FFA295F2AD61B795B2C7FD7 /* PFWeakValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFWeakValue.h; path = Parse/Internal/PFWeakValue.h; sourceTree = ""; }; - E1BB6ED375FB84D2A9EC26785EE0AF1B /* NSString+Icons.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Icons.h"; path = "Classes/ios/NSString+Icons.h"; sourceTree = ""; }; - E1F2965F8C307884A46B1AAE4D8ECD98 /* PFObjectPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectPrivate.h; path = Parse/Internal/Object/PFObjectPrivate.h; sourceTree = ""; }; - E375C6AED0190D9C67BBE0F21356C911 /* PFLocalization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocalization.h; path = ParseUI/Classes/Internal/PFLocalization.h; sourceTree = ""; }; - E44CE59217F10B74270250DB12ABCBC5 /* PFCoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreManager.h; path = Parse/Internal/PFCoreManager.h; sourceTree = ""; }; - E47461E98082A9CA98BD79A9B64FB02B /* PFRESTCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCommand.m; path = Parse/Internal/Commands/PFRESTCommand.m; sourceTree = ""; }; - E48CF71243F5A2BBFC8F7F74E80A2E81 /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; - E49698D71E7A652987CD66FB55CF759D /* FlatUIKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FlatUIKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E4BF8807282EB99DD8B3198775CCD440 /* PFMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMulticastDelegate.m; path = Parse/Internal/PFMulticastDelegate.m; sourceTree = ""; }; - E58F8383E7BEF7B6D7E8497170CCA20D /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; - E59D99D003850337B845D727F83D8F81 /* PFRESTObjectCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectCommand.m; path = Parse/Internal/Commands/PFRESTObjectCommand.m; sourceTree = ""; }; - E5A60EC03BFE539C5A45F114B579D083 /* AFNetworking.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = AFNetworking.modulemap; sourceTree = ""; }; - E5C14A4D20250982D60F0E6603D66AD5 /* AFNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-umbrella.h"; sourceTree = ""; }; - E75AAA342D86F0B426498D2AE5DA6DCC /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E7777D9C8AEF9BE8A47A082328045E3C /* Chameleon_.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Chameleon_.h; path = "Pod/Classes/Objective-C/Chameleon_.h"; sourceTree = ""; }; - E7F21354943D9F42A70697D5A5EF72E9 /* Pods-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-frameworks.sh"; sourceTree = ""; }; - E829FC20C3C5109FE89CB86523FDB840 /* IQBarButtonItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQBarButtonItem.m; path = IQKeyBoardManager/IQToolbar/IQBarButtonItem.m; sourceTree = ""; }; - E8446514FBAD26C0E18F24A5715AEF67 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E85BC94017DD51217EED919EF5604C8B /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; - E89FDC075819C960003126B2E4A6CD5C /* PFMutableACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableACLState.h; path = Parse/Internal/ACL/State/PFMutableACLState.h; sourceTree = ""; }; - E8F3C1717348891BC57725A0810D7DF6 /* PFSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h; sourceTree = ""; }; - E95B033A6FF1B30BFDD04AE4D596F2EA /* Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Chameleon.h; path = "Pod/Classes/Objective-C/Chameleon.h"; sourceTree = ""; }; - E9FB1635B38CC6137103F129D89F7308 /* Parse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Parse.m; path = Parse/Parse.m; sourceTree = ""; }; - E9FBCA63748E8FB4F92A5E4B87A13C84 /* IQKeyboardManager.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IQKeyboardManager.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EA3DD2288239EFA0AA3CB9B39F38F54F /* PFQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQuery.h; path = Parse/PFQuery.h; sourceTree = ""; }; - EA5C374819AEBD53E0D5F1D734155695 /* PFImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImage.m; path = ParseUI/Classes/Internal/Extensions/PFImage.m; sourceTree = ""; }; - EA7C8A67AD890502B88C38EC734BDD54 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; - EB1C14F4C3EB11646EDE6682C4237038 /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; - EBFA7A7850EC4610EEB3C6261E1F2785 /* IQUIView+IQKeyboardToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIView+IQKeyboardToolbar.m"; path = "IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m"; sourceTree = ""; }; - EC2DB9D26240C2630858BA37A5591DE2 /* PFURLSessionDataTaskDelegate_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h; sourceTree = ""; }; - EC56529C7E683E2B46B011FAB4F87A2E /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; - ECFD68C941FF94329F1908F60C5A00A6 /* PFACL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACL.h; path = Parse/PFACL.h; sourceTree = ""; }; - EE6C59A2AB9D0F99FD7D3E3AA0512736 /* UIBarButtonItem+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIBarButtonItem+FlatUI.m"; path = "Classes/ios/UIBarButtonItem+FlatUI.m"; sourceTree = ""; }; - EF61CFA03E984B1560E98203F1CF9D40 /* PFUserAuthenticationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationDelegate.h; path = Parse/PFUserAuthenticationDelegate.h; sourceTree = ""; }; - EFA3E7B0A7046719D611EF8F8C9A7939 /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; - F05383268A125B0EE32BE793F2940942 /* PFObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObject.h; path = Parse/PFObject.h; sourceTree = ""; }; - F101F813C282DB4B68E1395D8B435B3A /* PFPropertyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo.m; sourceTree = ""; }; - F1832873F525EA20EA9754E692770264 /* PFGeoPointPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPointPrivate.h; path = Parse/Internal/PFGeoPointPrivate.h; sourceTree = ""; }; - F20F9C68EDBCD177CACC721BD11D0002 /* FUICellBackgroundView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUICellBackgroundView.h; path = Classes/ios/FUICellBackgroundView.h; sourceTree = ""; }; - F26F2A46EFE8B567CF8E9058C95C550C /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; - F2BEB596D4234E666A47493046F22D9D /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; - F2E43F17F2C4AFCBD7C41B354CFD4110 /* PFPrimaryButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPrimaryButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m; sourceTree = ""; }; - F33B071C96E8C452B416F92718E4459D /* PFInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationController.h; path = Parse/Internal/Installation/Controller/PFInstallationController.h; sourceTree = ""; }; - F38F459BB20A409D6BB725DC07CAF532 /* PFEventuallyPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyPin.h; path = Parse/Internal/PFEventuallyPin.h; sourceTree = ""; }; - F3B6ACDE18741CD97E959576C1D39CDD /* PFURLSessionJSONDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionJSONDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h; sourceTree = ""; }; - F3C1A3ABFDF15B4DA28FAE55E6A8F9B8 /* Unirest-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Unirest-umbrella.h"; sourceTree = ""; }; - F3D49D3F596E2FF8547A010509605767 /* UIViewController+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+Chameleon.m"; path = "Pod/Classes/Objective-C/UIViewController+Chameleon.m"; sourceTree = ""; }; - F4013A55E87016979FBEC0CC2D707560 /* PFRESTAnalyticsCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTAnalyticsCommand.m; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.m; sourceTree = ""; }; - F51B64596F4498733BDF1F586BBD2219 /* PFCoreDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreDataProvider.h; path = Parse/Internal/PFCoreDataProvider.h; sourceTree = ""; }; - F5895DDF80CD5C0F172240E8EF6ADB6F /* UNIHTTPResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPResponse.h; path = Unirest/HttpResponse/UNIHTTPResponse.h; sourceTree = ""; }; - F5981C852078B840ABABABDEC5CF1BC0 /* PFJSONSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFJSONSerialization.h; path = Parse/Internal/PFJSONSerialization.h; sourceTree = ""; }; - F6313567F626FD94ED9D75F8A5528B0D /* PFConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfigController.h; path = Parse/Internal/Config/Controller/PFConfigController.h; sourceTree = ""; }; - F65D1CCFE6679492E73D2B496A3538B0 /* PFPushChannelsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushChannelsController.h; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.h; sourceTree = ""; }; - F6ADB903F627F6C71373F05CDF219611 /* PFSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSession.m; path = Parse/PFSession.m; sourceTree = ""; }; - F737C85949702755570FD4507BF9272E /* IQKeyboardManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQKeyboardManager.m; path = IQKeyBoardManager/IQKeyboardManager.m; sourceTree = ""; }; - F7A1836D57286EA1DC6B4FB15B3D9ADF /* UNIUrlConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIUrlConnection.h; path = Unirest/UNIUrlConnection.h; sourceTree = ""; }; - F7B69ECB48E71EF166AA0B4EEEAF886B /* PFPush.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPush.h; path = Parse/PFPush.h; sourceTree = ""; }; - F82E6BDCE885882BB80C8E02C363DC27 /* PFEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue.h; path = Parse/Internal/PFEventuallyQueue.h; sourceTree = ""; }; - F83E541BE3033DDFE40F96410A3E848B /* PFACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState.h; path = Parse/Internal/ACL/State/PFACLState.h; sourceTree = ""; }; - F86B02F5EDF93DEFA5042328F03D7376 /* PFFileController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileController.h; path = Parse/Internal/File/Controller/PFFileController.h; sourceTree = ""; }; - F8B83F8A69CB0F2EDD6F5FC0A0F1ACF3 /* PFDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDevice.m; path = Parse/Internal/PFDevice.m; sourceTree = ""; }; - F8EDD29F24657A06C6E7F595BEB0FE2F /* Chameleon_.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Chameleon_.m; path = "Pod/Classes/Objective-C/Chameleon_.m"; sourceTree = ""; }; - F9476414FFBA4A18C4113640F84A51D9 /* PFCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCollectionViewCell.h; path = ParseUI/Classes/Cells/PFCollectionViewCell.h; sourceTree = ""; }; - F9B353920B0C8860AD30FFA8FB0E7C84 /* PFUIAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUIAlertView.m; path = ParseUI/Classes/Internal/Extensions/PFUIAlertView.m; sourceTree = ""; }; - F9EF953ADCADA1A251E9323131F70F15 /* UNIHTTPBinaryResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPBinaryResponse.h; path = Unirest/HttpResponse/UNIHTTPBinaryResponse.h; sourceTree = ""; }; - FA0A405D111BD368A804BC5E6B23F3DC /* PFSQLiteStatement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteStatement.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m; sourceTree = ""; }; - FA4332E41276A275F1F34711E78CBC39 /* ChameleonFramework-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChameleonFramework-prefix.pch"; sourceTree = ""; }; - FA4B4072C875B54C90E5CC56115DA2BF /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; - FA772C990873A5D9CEA1C1147D5F3999 /* PFRESTUserCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTUserCommand.h; path = Parse/Internal/Commands/PFRESTUserCommand.h; sourceTree = ""; }; - FA8BCD13675B9DB1665D76BA15065FFB /* PFRelationState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState_Private.h; path = Parse/Internal/Relation/State/PFRelationState_Private.h; sourceTree = ""; }; - FAADD666632F8A5050BF932913958DC4 /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; - FB320B22C54E1E2869AD39B77A7BD653 /* PFUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserController.h; path = Parse/Internal/User/Controller/PFUserController.h; sourceTree = ""; }; - FB58DA014582A87D188CB8089758DF86 /* FUIButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUIButton.m; path = Classes/ios/FUIButton.m; sourceTree = ""; }; - FB83ED9CED7C0E54F55F8D79DEF90CCE /* PFObjectConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectConstants.m; path = Parse/Internal/Object/Constants/PFObjectConstants.m; sourceTree = ""; }; - FBAFB0E07236F9DACE08B20299F82F99 /* UIPopoverController+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIPopoverController+FlatUI.h"; path = "Classes/ios/UIPopoverController+FlatUI.h"; sourceTree = ""; }; - FCDAC6140870D371ECB57D0F2C306D25 /* PFConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfigController.m; path = Parse/Internal/Config/Controller/PFConfigController.m; sourceTree = ""; }; - FD3ADD8CA3E681E4082BE70B65F75C59 /* PFObject+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = ""; }; - FED305E7E186A0EDC106E74204F4C4DD /* PFPurchaseTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseTableViewCell.m; path = ParseUI/Classes/Cells/PFPurchaseTableViewCell.m; sourceTree = ""; }; - FEF707A6B74089D8250C9AEEDB522B65 /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; - FF1B02B31B87AF83F0B2E1C043B37586 /* PFLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogger.m; path = Parse/Internal/PFLogger.m; sourceTree = ""; }; - FF33B85D0ECE3439AEBAC37BDAA6C3C1 /* PFRESTObjectBatchCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectBatchCommand.m; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.m; sourceTree = ""; }; - FF372967FCF6DDE5A2CFFED0A29DF613 /* PFPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPin.h; path = Parse/Internal/LocalDataStore/Pin/PFPin.h; sourceTree = ""; }; - FF61D452E7B69C442EFEC72A2A7580FE /* PFProduct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProduct.h; path = Parse/PFProduct.h; sourceTree = ""; }; - FF8FF2DDCD099016EB3DFD7FA99B73ED /* PFEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEncoder.h; path = Parse/Internal/PFEncoder.h; sourceTree = ""; }; + 0071EAC09DA0FFDA8FB3410D2936CA80 /* UIImage+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+FlatUI.h"; path = "Classes/ios/UIImage+FlatUI.h"; sourceTree = ""; }; + 00D07CDF153D8265CAE511A266EBBD92 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; + 015D3940BAC78105EDF03F2BB91A46E6 /* IQKeyboardManagerConstantsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManagerConstantsInternal.h; path = IQKeyBoardManager/Constants/IQKeyboardManagerConstantsInternal.h; sourceTree = ""; }; + 01682B06EC1A9F5115B2823C70E94CA9 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; + 021C106DF227E61ECA4E5555FF2F7CD6 /* ParseUI.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ParseUI.modulemap; sourceTree = ""; }; + 0225577578F0F538D3E335508E84D451 /* PFUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserController.m; path = Parse/Internal/User/Controller/PFUserController.m; sourceTree = ""; }; + 0263C9D12EC81C1962B428D0F0711A32 /* UILabel+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UILabel+Chameleon.m"; path = "Pod/Classes/Objective-C/UILabel+Chameleon.m"; sourceTree = ""; }; + 02CAE2970238AAA1CC6CCF79D78A95D9 /* PFMutableUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableUserState.h; path = Parse/Internal/User/State/PFMutableUserState.h; sourceTree = ""; }; + 0383903D05EDD5C442C682C1F7A1752D /* ChameleonFramework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ChameleonFramework; path = ChameleonFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 044039FB6F0BAE9C54969FBC7A846A8A /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; + 0480814245A7B51C8119FEB8A9BB24EF /* PFFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState.h; path = Parse/Internal/File/State/PFFileState.h; sourceTree = ""; }; + 04E51A30E638BD5F2089972DC7339D76 /* UITabBar+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITabBar+FlatUI.m"; path = "Classes/ios/UITabBar+FlatUI.m"; sourceTree = ""; }; + 05FE2E6BDD950A5BDE5209E33B3C42DF /* PFPush.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPush.m; path = Parse/PFPush.m; sourceTree = ""; }; + 062054FC97AAAB3D2F4AB253A7CDE385 /* ParseUI */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ParseUI; path = ParseUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0652F2476C7C87C6C0F6CB68072EA25F /* Parse */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Parse; path = Parse.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 065E4ABAE71F00350CBF5E154707399C /* PFObjectLocalIdStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectLocalIdStore.h; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h; sourceTree = ""; }; + 065EC0B26F5FCC313BF0CC772F0AAFCD /* ParseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseManager.h; path = Parse/Internal/ParseManager.h; sourceTree = ""; }; + 0670C245E4B747809A451258C962EA4C /* PFRESTCloudCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCloudCommand.h; path = Parse/Internal/Commands/PFRESTCloudCommand.h; sourceTree = ""; }; + 0725DB534BB32F744586EC0F2357B78B /* PFPropertyInfo_Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Runtime.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h; sourceTree = ""; }; + 072BA5A6E13B9A44E938BDEC145CD4DD /* PFSessionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionUtilities.m; path = Parse/Internal/Session/Utilities/PFSessionUtilities.m; sourceTree = ""; }; + 0766F2D21D2ED224A3E82F26E0B5CD52 /* PFQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryState.m; path = Parse/Internal/Query/State/PFQueryState.m; sourceTree = ""; }; + 077B7B33826673C09B30B8671D0097CF /* PFProductTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductTableViewController.m; path = ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m; sourceTree = ""; }; + 08FAD9262BEE1666BF4D27626214085C /* PFObjectUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectUtilities.h; path = Parse/Internal/Object/Utilities/PFObjectUtilities.h; sourceTree = ""; }; + 09135BA358F372DFAB44C8FB18692D6C /* PFReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFReachability.m; path = Parse/Internal/PFReachability.m; sourceTree = ""; }; + 0982CCB6B201941BA02A2C5BED20003D /* PFSubclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSubclassing.h; path = Parse/PFSubclassing.h; sourceTree = ""; }; + 09EA67B03147905558D01B94F40D3B87 /* PFConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConstants.m; path = Parse/PFConstants.m; sourceTree = ""; }; + 09FF643952C8AE70189400301DA35699 /* PFURLConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLConstructor.h; path = Parse/Internal/HTTPRequest/PFURLConstructor.h; sourceTree = ""; }; + 0A509D3953B659E7181EC82469B94A9A /* Bolts-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Bolts-Info.plist"; sourceTree = ""; }; + 0BE58929E3D2856E2FF1200233D5AEB2 /* PFEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEncoder.h; path = Parse/Internal/PFEncoder.h; sourceTree = ""; }; + 0C58B900BAB52BE6C1A6AC9401D85688 /* Parse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = Parse/Parse.h; sourceTree = ""; }; + 0CC62DFCDBE9FE6C3218D149D055F4E7 /* PFCurrentUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentUserController.h; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.h; sourceTree = ""; }; + 0D716BF50FFA96153B62E0AE932F3E47 /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningEventuallyQueue.h; path = Parse/Internal/PFPinningEventuallyQueue.h; sourceTree = ""; }; + 0E00B62CEE59E199D07EB3F3B4F2710F /* PFPurchaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseController.m; path = Parse/Internal/Purchase/Controller/PFPurchaseController.m; sourceTree = ""; }; + 0E151F5F8DCE58DAE5D1BA2B8EF1ABE8 /* PFLoadingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLoadingView.h; path = ParseUI/Classes/Internal/Views/PFLoadingView.h; sourceTree = ""; }; + 0F03D75A8EAB99E67ACE53F63B414F22 /* PFActivityIndicatorCollectionReusableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActivityIndicatorCollectionReusableView.m; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m; sourceTree = ""; }; + 0F31C3824F949AF1259C33FE153A1EA9 /* PFKeyValueCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache_Private.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h; sourceTree = ""; }; + 0F396B4049BADC218F3C27A0FB8AF963 /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; + 0FF78B4C18BD5E661C223DA05F706583 /* PFUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState.h; path = Parse/Internal/User/State/PFUserState.h; sourceTree = ""; }; + 0FFE8C5EB6588366F5E38E8025B4CAD0 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; + 10047E16CC827DC41FA3CA3C588A92AA /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; + 113A9AE0365FCE4FF2F8C95725E6A010 /* PFFileController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileController.h; path = Parse/Internal/File/Controller/PFFileController.h; sourceTree = ""; }; + 11733E9AB23CFF872D2D8C693E69A845 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; + 11779F8DF80724C9D85DA16EE6D8F4EB /* UIPopoverController+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIPopoverController+FlatUI.h"; path = "Classes/ios/UIPopoverController+FlatUI.h"; sourceTree = ""; }; + 11CBBD39FFE4DF992FED341E869D5277 /* Pods-FoodbLog-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-FoodbLog-frameworks.sh"; sourceTree = ""; }; + 11DA25D5854F43477EA8697C9A8A9677 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; + 12EE481EE7117C1AC26F8C373608E91D /* Parse-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Parse-dummy.m"; sourceTree = ""; }; + 139DF95532D69618F5A132FBD855F503 /* PFAnonymousUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils.h; path = Parse/PFAnonymousUtils.h; sourceTree = ""; }; + 13D51BF48F5AB0EACFEFDE67304AE0AE /* UIAlertView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertView+AFNetworking.h"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.h"; sourceTree = ""; }; + 13F31358F978DB7AE6B1DDF2572DD630 /* PFObjectFileCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCoder.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.m; sourceTree = ""; }; + 1401F53C5562661D42BA72E3554ABA2B /* PFMutableFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableFileState.h; path = Parse/Internal/File/State/PFMutableFileState.h; sourceTree = ""; }; + 1479D081320EC36085B8B30288068183 /* PFAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAlertView.m; path = Parse/Internal/PFAlertView.m; sourceTree = ""; }; + 150C19C70C597D439FA96FCB3A6B68AC /* PFSQLiteDatabaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseController.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m; sourceTree = ""; }; + 151EC16230A016E1E972D02CF9AFCF34 /* BFTask+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Private.h"; path = "Parse/Internal/BFTask+Private.h"; sourceTree = ""; }; + 15797AFCB16424C69558924B2C21A6E3 /* FlatUIKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FlatUIKit-umbrella.h"; sourceTree = ""; }; + 1579F2982C42C23D86C4671BEFC5BC9E /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; + 15E60AC5AE5D9C7E54C124BD0AF98894 /* PFTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTableViewCell.h; path = ParseUI/Classes/Cells/PFTableViewCell.h; sourceTree = ""; }; + 170B12DAFF7BA65AF6617BDB082A0351 /* FlatUIKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FlatUIKit.modulemap; sourceTree = ""; }; + 171D6E3ADAA1BB99E7913D83084A2274 /* PFColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFColor.m; path = ParseUI/Classes/Internal/Extensions/PFColor.m; sourceTree = ""; }; + 1760FE20743A856B0B1A742482064BC4 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; + 18507E1294DADA225725E281BEEF80DD /* UIAlertView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertView+AFNetworking.m"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.m"; sourceTree = ""; }; + 19176755A633092BD34527BD97CC9A2D /* PFUserConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserConstants.m; path = Parse/Internal/User/Constants/PFUserConstants.m; sourceTree = ""; }; + 1950AD1FE382802A49D281B1441BD20A /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; + 1A5FB006DED3350DEBDAA366AA9B3C93 /* Chameleon_.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Chameleon_.m; path = "Pod/Classes/Objective-C/Chameleon_.m"; sourceTree = ""; }; + 1AA2C962E61F10AADB5795A8761860F4 /* PFTextField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTextField.m; path = ParseUI/Classes/Views/PFTextField.m; sourceTree = ""; }; + 1ABE08EED6D9D0788D5D114EB8073400 /* PFInstallationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationConstants.m; path = Parse/Internal/Installation/Constants/PFInstallationConstants.m; sourceTree = ""; }; + 1B4159A9FBBE236E3AC1B55F41CC8C84 /* PFRESTAnalyticsCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTAnalyticsCommand.h; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.h; sourceTree = ""; }; + 1BBB82019D63DE4FA7F0B92670365270 /* ChameleonEnums.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonEnums.h; path = "Pod/Classes/Objective-C/ChameleonEnums.h"; sourceTree = ""; }; + 1C002313FB340FD9903A219A795BD6EE /* Bolts.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.release.xcconfig; sourceTree = ""; }; + 1C31C458F86FD36FC07384D563ADFBF2 /* PFRESTFileCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTFileCommand.h; path = Parse/Internal/Commands/PFRESTFileCommand.h; sourceTree = ""; }; + 1C38C5BECC83269A118226CDCB9D7F23 /* PFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFNetworkActivityIndicatorManager.m; path = Parse/PFNetworkActivityIndicatorManager.m; sourceTree = ""; }; + 1C796738B070BC90BE32479A8A3AF602 /* PFActionButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActionButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h; sourceTree = ""; }; + 1C7B8B94263BB8F789B6BD083776BBFC /* PFLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogger.h; path = Parse/Internal/PFLogger.h; sourceTree = ""; }; + 1CFB142945D82B4D948325BA5F017A04 /* PFHTTPURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPURLRequestConstructor.h; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h; sourceTree = ""; }; + 1D206417FCB7E126D2076A47DEDF1A1C /* IQBarButtonItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQBarButtonItem.h; path = IQKeyBoardManager/IQToolbar/IQBarButtonItem.h; sourceTree = ""; }; + 1D3240C4C5BE274F71D28337454BCF6D /* IQKeyboardManagerConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManagerConstants.h; path = IQKeyBoardManager/Constants/IQKeyboardManagerConstants.h; sourceTree = ""; }; + 1D3EC67DF2778EB45CB9E74820D228B3 /* IQTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQTextView.m; path = IQKeyBoardManager/IQTextView/IQTextView.m; sourceTree = ""; }; + 1DEB4FC3937D0DC7EB7B1CE6AE0C79D6 /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; + 1DF2C8BE2B249F69FCE01059E5C2E34E /* PFSQLiteDatabaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseController.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h; sourceTree = ""; }; + 1EC3FC2DD569F8D2763648C4F041C266 /* IQKeyboardReturnKeyHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardReturnKeyHandler.h; path = IQKeyBoardManager/IQKeyboardReturnKeyHandler.h; sourceTree = ""; }; + 1FC94E4C9D7446F799F1571C5E5D24B3 /* PFFileController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileController.m; path = Parse/Internal/File/Controller/PFFileController.m; sourceTree = ""; }; + 2028AA6088F4575DAF17E2F06D2DC064 /* PFAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalytics.m; path = Parse/PFAnalytics.m; sourceTree = ""; }; + 2046774BE36FD33388E4E6602AF763A0 /* PFBase64Encoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBase64Encoder.m; path = Parse/Internal/PFBase64Encoder.m; sourceTree = ""; }; + 20B6097286CC2E4C80A144D823873289 /* UIToolbar+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIToolbar+FlatUI.h"; path = "Classes/ios/UIToolbar+FlatUI.h"; sourceTree = ""; }; + 20BC97E813BBBC1228B843C37193A581 /* PFPushChannelsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushChannelsController.m; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.m; sourceTree = ""; }; + 20D75D05C3716B1B1FCE88C6C2E9312D /* FlatUIKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FlatUIKit-dummy.m"; sourceTree = ""; }; + 21915C1929F889B9A02A6D8BD071D10B /* PFInstallationIdentifierStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationIdentifierStore.m; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m; sourceTree = ""; }; + 220FC34DE425735D70DB9D8C4D741695 /* FlatUIKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FlatUIKit-prefix.pch"; sourceTree = ""; }; + 2247D4BD60404A85E31A8014A3D24BB5 /* PFObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObject.h; path = Parse/PFObject.h; sourceTree = ""; }; + 22B70DF0AA41BAA3C080197E5CC5D07B /* PFAnalytics_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics_Private.h; path = Parse/Internal/Analytics/PFAnalytics_Private.h; sourceTree = ""; }; + 22E7AE4FBF90398DB0FD1B35A9DD34AC /* PFRect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRect.h; path = ParseUI/Classes/Internal/Extensions/PFRect.h; sourceTree = ""; }; + 22F5A1329C6658B77CE9B997619A6610 /* NSString+Icons.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Icons.h"; path = "Classes/ios/NSString+Icons.h"; sourceTree = ""; }; + 23412283DC2CC20C08F72706EB4BF409 /* Unirest-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Unirest-prefix.pch"; sourceTree = ""; }; + 23D27BEF28A85F709CBDB0B8CB65DE48 /* FUIPopoverBackgroundView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUIPopoverBackgroundView.h; path = Classes/ios/FUIPopoverBackgroundView.h; sourceTree = ""; }; + 241D90B262CD5D9CA1CE4E85B2753446 /* PFCurrentInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentInstallationController.h; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h; sourceTree = ""; }; + 242785A2D898F8B3178C5C87B1AD01AC /* UNIHTTPClientHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPClientHelper.h; path = Unirest/UNIHTTPClientHelper.h; sourceTree = ""; }; + 246514DFF438978008D8FA6C3DB62A87 /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; + 24776F7FEE23D85F92F28624333EF3EC /* PFThreadsafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFThreadsafety.m; path = Parse/Internal/ThreadSafety/PFThreadsafety.m; sourceTree = ""; }; + 24DB6CC2B14662F6E9B1E046CD7199F7 /* UIColor+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIColor+ChameleonPrivate.h"; sourceTree = ""; }; + 24FF581FD822FC0314972728E320502B /* PFApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFApplication.m; path = Parse/Internal/PFApplication.m; sourceTree = ""; }; + 25397001B9BF4C1125DCF8D75A89971C /* IQUIWindow+Hierarchy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIWindow+Hierarchy.m"; path = "IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.m"; sourceTree = ""; }; + 255CEDD6FA71975460137BA3F1A2CC30 /* PFProduct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProduct.h; path = Parse/PFProduct.h; sourceTree = ""; }; + 255D9757582A2D903E70F23C181DF04B /* PFLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocationManager.h; path = Parse/Internal/PFLocationManager.h; sourceTree = ""; }; + 25714ADEA4E375B6832A9DF56A53F64C /* PFMutableRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableRelationState.m; path = Parse/Internal/Relation/State/PFMutableRelationState.m; sourceTree = ""; }; + 2641B578F87B9B95E398CE86A132190C /* PFMutableRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableRelationState.h; path = Parse/Internal/Relation/State/PFMutableRelationState.h; sourceTree = ""; }; + 265A36A163461FAFE8B22F91E5FF5839 /* AFNetworking.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AFNetworking.modulemap; sourceTree = ""; }; + 2697B93401DB7B2F5E39F3CF9BC4DCB3 /* PFFieldOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperation.h; path = Parse/Internal/FieldOperation/PFFieldOperation.h; sourceTree = ""; }; + 2699550AAFB04BB17916C59A6B1FC51D /* PFTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTaskQueue.m; path = Parse/Internal/PFTaskQueue.m; sourceTree = ""; }; + 26C5CC23FF12B866E1AD73E2DC206622 /* PFRESTQueryCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTQueryCommand.h; path = Parse/Internal/Commands/PFRESTQueryCommand.h; sourceTree = ""; }; + 27CF6BC1B2E5C52B3244B8D531442D06 /* UNIBodyRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIBodyRequest.m; path = Unirest/HttpRequest/UNIBodyRequest.m; sourceTree = ""; }; + 27E94F52DD7FEA4FD150E6DFECA07CF1 /* UIColor+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIColor+ChameleonPrivate.m"; sourceTree = ""; }; + 28965A0B0DA8E71614774B97CBEF38BB /* PFTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTaskQueue.h; path = Parse/Internal/PFTaskQueue.h; sourceTree = ""; }; + 2A04E1624A7D22B26C4108F5511DBA59 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = en.lproj; path = ParseUI/Resources/Localization/en.lproj; sourceTree = ""; }; + 2A30756FBB458B3FFBE25E41C6A39E07 /* ParseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseManager.m; path = Parse/Internal/ParseManager.m; sourceTree = ""; }; + 2A5EFD08535330BF7DE6E1D3E60F0FDF /* PFCloudCodeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloudCodeController.h; path = Parse/Internal/CloudCode/PFCloudCodeController.h; sourceTree = ""; }; + 2A6C012A4F3D5A672788A760562623DA /* FUISegmentedControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUISegmentedControl.m; path = Classes/ios/FUISegmentedControl.m; sourceTree = ""; }; + 2B3157DA60A76070C8C1BC098218AB51 /* UIFont+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIFont+FlatUI.h"; path = "Classes/ios/UIFont+FlatUI.h"; sourceTree = ""; }; + 2B4F6F85D50E4CA8F5E785A0C0E8F842 /* UNIHTTPJsonResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPJsonResponse.m; path = Unirest/HttpResponse/UNIHTTPJsonResponse.m; sourceTree = ""; }; + 2C225A32BD5AB6FEB97D66740F1E0931 /* PFHTTPURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHTTPURLRequestConstructor.m; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m; sourceTree = ""; }; + 2C5CF7AB604577F8094BB7A4D0B1EA38 /* IQSegmentedNextPrevious.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQSegmentedNextPrevious.m; path = IQKeyBoardManager/IQSegmentedNextPrevious/IQSegmentedNextPrevious.m; sourceTree = ""; }; + 2D3DED295E0CF4409F8BC8976A09F184 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; + 2D44A8F3669FDFCF5D7BBCD8CFCD25AC /* PFDismissButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDismissButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m; sourceTree = ""; }; + 2DB558CB27C9B59F1418AA3959C1070B /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue_Private.h; path = Parse/Internal/PFEventuallyQueue_Private.h; sourceTree = ""; }; + 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + 2F0311DC1C98B85666BEDBEE32749F74 /* PFUIAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUIAlertView.h; path = ParseUI/Classes/Internal/Extensions/PFUIAlertView.h; sourceTree = ""; }; + 2FD643ED6BE8B1DFB4B3D62C42982411 /* PFSignUpViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSignUpViewController.h; path = ParseUI/Classes/SignUpViewController/PFSignUpViewController.h; sourceTree = ""; }; + 305805548D87E2C5165C0A0FED697B4F /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; + 30897A1EF233A016A554F6A64222767E /* PFURLSessionUploadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionUploadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h; sourceTree = ""; }; + 311DAB5AE58D986B329A83CDA6086370 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDecoder.m; path = SDWebImage/SDWebImageDecoder.m; sourceTree = ""; }; + 318C56533FDD447102932A6E5A233A7E /* PFPaymentTransactionObserver_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver_Private.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h; sourceTree = ""; }; + 320F50071C407D10444E25E65E981EAB /* PFRESTCommand_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand_Private.h; path = Parse/Internal/Commands/PFRESTCommand_Private.h; sourceTree = ""; }; + 32588BB30F6E0F5B2DD13FB47DEBCC27 /* PFQueryCollectionViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryCollectionViewController.h; path = ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h; sourceTree = ""; }; + 326B3BC55A45A42DE61D2F9FD6215A24 /* PFUserFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserFileCodingLogic.h; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h; sourceTree = ""; }; + 335A452C51FBD35625AA2BC327ADC7F5 /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; + 341193ADAA541B40C6DC994505AA1FD6 /* PFPushUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushUtilities.m; path = Parse/Internal/Push/Utilites/PFPushUtilities.m; sourceTree = ""; }; + 3448DBBDFED1AD82ECE8A1B07DD53EB0 /* PFSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSession.m; path = Parse/PFSession.m; sourceTree = ""; }; + 345CA40D5F45AD04D24CC17ABE86B911 /* PFQueryUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryUtilities.m; path = Parse/Internal/Query/Utilities/PFQueryUtilities.m; sourceTree = ""; }; + 34D23B3A862EAC73082D325761E92C03 /* PFCurrentConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentConfigController.m; path = Parse/Internal/Config/Controller/PFCurrentConfigController.m; sourceTree = ""; }; + 352A7DFC0FAD78D5F39DDCF907D02C5F /* PFMutableObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableObjectState.m; path = Parse/Internal/Object/State/PFMutableObjectState.m; sourceTree = ""; }; + 35AB26F5A3AAAB62DB4FDBFA45B6AE7B /* PFFieldOperationDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperationDecoder.h; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.h; sourceTree = ""; }; + 3613B45ABCFAEBD5BADAE64A82A4746B /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; + 3661E7338F270E4C60D4CB7618DACD33 /* PFLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLocationManager.m; path = Parse/Internal/PFLocationManager.m; sourceTree = ""; }; + 3667C7F789954F098ADC741D622D52B7 /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; + 3691CA8C96F3BE2D408B9E1E7FCDD5A3 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; + 36EA36B4327C3CAA76DB71E90785D0B4 /* IQNSArray+Sort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQNSArray+Sort.h"; path = "IQKeyBoardManager/Categories/IQNSArray+Sort.h"; sourceTree = ""; }; + 3780C220917B4DD9DC02DDD7323405B0 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + 37FA8F56A1FA6A8339B3BF6A946BAEE1 /* PFCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCategoryLoader.m; path = Parse/Internal/PFCategoryLoader.m; sourceTree = ""; }; + 383265CA7C2F466092EF3C7F1E49C8DE /* IQUITextFieldView+Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUITextFieldView+Additions.m"; path = "IQKeyBoardManager/Categories/IQUITextFieldView+Additions.m"; sourceTree = ""; }; + 385261552CFAF1B884CE31C0FDFAC71A /* PFRESTCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand.h; path = Parse/Internal/Commands/PFRESTCommand.h; sourceTree = ""; }; + 389E8A9F78577F9DC088BC37445C2F27 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; + 38BB302FD9DECD313D93E13A55C5A724 /* PFACL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACL.h; path = Parse/PFACL.h; sourceTree = ""; }; + 38D7F1933A49B1054CE8669A45108CF3 /* PFPushController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushController.h; path = Parse/Internal/Push/Controller/PFPushController.h; sourceTree = ""; }; + 38F8E3AFD6049401797C7A47018A213A /* Parse.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.debug.xcconfig; sourceTree = ""; }; + 38FA89344906DEDDD5D2F77DE3B534B8 /* UNIHTTPClientHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPClientHelper.m; path = Unirest/UNIHTTPClientHelper.m; sourceTree = ""; }; + 390E345239D63E6785408FCCB29AA27C /* PFObject+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = ""; }; + 392D3E8B1EE935766CE3A0E9996B235F /* PFImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImageCache.h; path = ParseUI/Classes/Internal/PFImageCache.h; sourceTree = ""; }; + 3AE452759C3419530F9948A6E7852434 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = ""; }; + 3B28432D4AB483D9A86C6817FB52BF45 /* FUISwitch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUISwitch.h; path = Classes/ios/FUISwitch.h; sourceTree = ""; }; + 3B46EEECD7599B121204708C32CECD6C /* UNIBaseRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIBaseRequest.m; path = Unirest/HttpRequest/UNIBaseRequest.m; sourceTree = ""; }; + 3C1AC1660363A329A284E332A3E5298C /* ParseUI.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ParseUI.release.xcconfig; sourceTree = ""; }; + 3C1BEBF049C3CF3B9440DB6E9743072A /* ChameleonConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonConstants.h; path = "Pod/Classes/Objective-C/ChameleonConstants.h"; sourceTree = ""; }; + 3C3F57E6B4F1FB2E1F1904A1F180B1D6 /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; + 3D6B4E7FA130709BC2B2CD4708AB3B01 /* PFDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDecoder.m; path = Parse/Internal/PFDecoder.m; sourceTree = ""; }; + 3DE1802829062F013D376CB812C19065 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 3E4C754AF717C0F9578078037DD972B7 /* PFEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyQueue.m; path = Parse/Internal/PFEventuallyQueue.m; sourceTree = ""; }; + 3EBF18A4C5D5CB1C2B68379E0F011BC7 /* PFEventuallyPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyPin.m; path = Parse/Internal/PFEventuallyPin.m; sourceTree = ""; }; + 3ECA32B49BAEAD29BCA93D40EE9CC6B7 /* PFLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogger.m; path = Parse/Internal/PFLogger.m; sourceTree = ""; }; + 3EDBAED551FD57F89EBFB1F16C24A8BC /* PFLogInView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInView.h; path = ParseUI/Classes/LogInViewController/PFLogInView.h; sourceTree = ""; }; + 3EFEAE643868EF55305AEDA7B9B5EF2E /* IQTitleBarButtonItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQTitleBarButtonItem.m; path = IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.m; sourceTree = ""; }; + 3F4D59B74D186D3A1C07E193A4B8E5BA /* PFCurrentInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentInstallationController.m; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m; sourceTree = ""; }; + 3F9F93F92926388C8FFB4EC13EA0DEBD /* PFObjectFilePersistenceController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFilePersistenceController.h; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h; sourceTree = ""; }; + 40284536A49434B0DD0358F33A4F8172 /* PFSQLiteStatement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteStatement.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m; sourceTree = ""; }; + 40668A53B58A0048FA222C4AB7E2189E /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; + 4075748CA8F21BAC0F4620D185E8FD8E /* PFSQLiteDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase_Private.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h; sourceTree = ""; }; + 409309719BF6A320534CB7DAFF568B83 /* PFLogInView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogInView.m; path = ParseUI/Classes/LogInViewController/PFLogInView.m; sourceTree = ""; }; + 412765A1C5B6953A288C3BAEBC8E6B37 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; + 416EF6ABD24C5B14BDDDADF319BC2942 /* Lato-Bold.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "Lato-Bold.ttf"; path = "Resources/Lato-Bold.ttf"; sourceTree = ""; }; + 41729ECC74ACE0C2F2268BD56ABD77D5 /* PFPushPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushPrivate.h; path = Parse/Internal/Push/PFPushPrivate.h; sourceTree = ""; }; + 419788502E9D2F50B77877AEE03ECD01 /* PFFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFile.m; path = Parse/PFFile.m; sourceTree = ""; }; + 41A0FAD2BC796F0C43E5AD3DFB8BF253 /* PFDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDataProvider.h; path = Parse/Internal/PFDataProvider.h; sourceTree = ""; }; + 41C24ABA60DD2C0A252F655A688A17C6 /* PFACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState.h; path = Parse/Internal/ACL/State/PFACLState.h; sourceTree = ""; }; + 4313FC1E27E9B9A96CC0E86A9963B5EE /* Lato-Light.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "Lato-Light.ttf"; path = "Resources/Lato-Light.ttf"; sourceTree = ""; }; + 43ED988181D6943C924184E66A36963B /* Parse-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-umbrella.h"; sourceTree = ""; }; + 4436838248BB3C88A53FD7F6F9B1BDBF /* UIStepper+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIStepper+FlatUI.m"; path = "Classes/ios/UIStepper+FlatUI.m"; sourceTree = ""; }; + 44C38AD5632D2AB0489B5A84DAE0E5C3 /* FlatUIKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlatUIKit.h; path = Classes/ios/FlatUIKit.h; sourceTree = ""; }; + 44C79E1505808F22B40DEDC10582999E /* PFRole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRole.m; path = Parse/PFRole.m; sourceTree = ""; }; + 44E08AAB6C070B945737B41031CFCAC4 /* UIImage+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIImage+ChameleonPrivate.m"; sourceTree = ""; }; + 44E593737C598C091CC7B69331EE8F5A /* PFResources.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFResources.m; path = ParseUI/Generated/PFResources.m; sourceTree = ""; }; + 45505F5B25D4570A45EFBA3FB9E5650D /* PFDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDevice.h; path = Parse/Internal/PFDevice.h; sourceTree = ""; }; + 45802840BA5072DF962ED54D09FE8843 /* Bolts.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Bolts.modulemap; sourceTree = ""; }; + 45CDE5CE83E5FA7A91A9F1B5B0BA5342 /* UNISimpleRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNISimpleRequest.h; path = Unirest/HttpRequest/UNISimpleRequest.h; sourceTree = ""; }; + 45D7D6B01B2B8A0D96A29F97BC24C01A /* PFObjectPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectPrivate.h; path = Parse/Internal/Object/PFObjectPrivate.h; sourceTree = ""; }; + 464C0397F3E6DFAFEB38909A49A88023 /* UIView+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIView+ChameleonPrivate.m"; sourceTree = ""; }; + 467740A6E9FE2B669577C05571B6DC7F /* PFPushManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushManager.h; path = Parse/Internal/Push/Manager/PFPushManager.h; sourceTree = ""; }; + 46AA5FBD23466BC2877613E9ED755E8F /* PFURLSessionDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m; sourceTree = ""; }; + 46C0C4F037BDBC97CB84248D3C6354F7 /* PFMutableQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableQueryState.h; path = Parse/Internal/Query/State/PFMutableQueryState.h; sourceTree = ""; }; + 47047F8FC46BB309AE276DC772A8E367 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; + 473595C4DE2B48B0D88D8F99E55C5F45 /* Base64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Base64.h; path = Unirest/Base64.h; sourceTree = ""; }; + 47B8D17F18C41D9E28B5AD8E78B23877 /* Pods-FoodbLog-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-FoodbLog-umbrella.h"; sourceTree = ""; }; + 48347C3BCE6F2F0E9F400C6727FC975A /* PFRESTFileCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTFileCommand.m; path = Parse/Internal/Commands/PFRESTFileCommand.m; sourceTree = ""; }; + 485733735128D4A7D968200F60AE577F /* PFACLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLPrivate.h; path = Parse/Internal/ACL/PFACLPrivate.h; sourceTree = ""; }; + 48E6A4215AF02A0535DF6FEEA6CF7E97 /* FUISwitch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUISwitch.m; path = Classes/ios/FUISwitch.m; sourceTree = ""; }; + 497EC4624AF81526C5C1ADB7FE648185 /* PFDateFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDateFormatter.h; path = Parse/Internal/PFDateFormatter.h; sourceTree = ""; }; + 49B4F56ABCA4652DC76E6114451571CB /* PFQueryTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryTableViewController.h; path = ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h; sourceTree = ""; }; + 49C9D42C27DD2AE3AAB32AE24D2EBF53 /* PFObjectLocalIdStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectLocalIdStore.m; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m; sourceTree = ""; }; + 4A670E98EA122B6C249D0794F87C5973 /* PFJSONSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFJSONSerialization.m; path = Parse/Internal/PFJSONSerialization.m; sourceTree = ""; }; + 4A6886AC956A814ACE7382CC7A019CD2 /* PFUserState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState_Private.h; path = Parse/Internal/User/State/PFUserState_Private.h; sourceTree = ""; }; + 4A7D177985593F94AB3C85D6D51C42C6 /* PFUserAuthenticationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserAuthenticationController.m; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m; sourceTree = ""; }; + 4AB3B84C7DF66F47815CEE5E52615C7A /* PFOfflineQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryController.m; path = Parse/Internal/Query/Controller/PFOfflineQueryController.m; sourceTree = ""; }; + 4AB7F6659411A2066C581E0CA1DB5C65 /* AFNetworking.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.release.xcconfig; sourceTree = ""; }; + 4AE1A480AE466808EAF88E6FA440AA1F /* PFQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryController.h; path = Parse/Internal/Query/Controller/PFQueryController.h; sourceTree = ""; }; + 4B071309D9B499D128868D443A721FC7 /* PFActivityIndicatorCollectionReusableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActivityIndicatorCollectionReusableView.h; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h; sourceTree = ""; }; + 4B6815C329F8604653FA7EB39FBF3DC2 /* PFObjectSubclassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassInfo.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h; sourceTree = ""; }; + 4B9C6B10499E423A5444CE2864F26C4C /* PFMutablePushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutablePushState.h; path = Parse/Internal/Push/State/PFMutablePushState.h; sourceTree = ""; }; + 4BD4DB7C36686D11738734B18DF72463 /* IQKeyboardManager.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManager.release.xcconfig; sourceTree = ""; }; + 4BE6842882A4FB9F520482896F6AB111 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; + 4C575A54BA05AD27990EABB75C2F2926 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; + 4CA05D6E4244A871551EC80C2CDCCEC1 /* PFRESTObjectBatchCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectBatchCommand.m; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.m; sourceTree = ""; }; + 4CACE40B53562456C7355A1BD4B3BF59 /* PFOfflineStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineStore.m; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m; sourceTree = ""; }; + 4D0DB85E2D94B47CB63F50784F0CCD01 /* PFCommandResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandResult.m; path = Parse/Internal/PFCommandResult.m; sourceTree = ""; }; + 4D4160C37DEDD4C39102E2A7D159A51F /* FUITextField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUITextField.h; path = Classes/ios/FUITextField.h; sourceTree = ""; }; + 4DAB5D2AB74AB4E6E40BC4E2BA5EC42C /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; + 4DCD97868BF52A2DA515BB0660CE3150 /* IQUIViewController+Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIViewController+Additions.m"; path = "IQKeyBoardManager/Categories/IQUIViewController+Additions.m"; sourceTree = ""; }; + 4ECC7AE2129119EE9949BB6A2DBA3907 /* PFObjectController_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController_Private.h; path = Parse/Internal/Object/Controller/PFObjectController_Private.h; sourceTree = ""; }; + 4F3997BE1E4CB1C34C279A257963F192 /* PFDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDevice.m; path = Parse/Internal/PFDevice.m; sourceTree = ""; }; + 50662E86832F5B9AA451BDE684D8D13D /* PFUserPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserPrivate.h; path = Parse/Internal/User/PFUserPrivate.h; sourceTree = ""; }; + 50CAE388BE03392981EB34F0ED05A9DC /* PFTextButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTextButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m; sourceTree = ""; }; + 51223661224A51BA99F43A7498640E0A /* PFObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectState.m; path = Parse/Internal/Object/State/PFObjectState.m; sourceTree = ""; }; + 51CF4033E47188387317DC9CBC5EBBA3 /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; + 5272189E4887F0A7478864335C376F72 /* UNIHTTPResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPResponse.m; path = Unirest/HttpResponse/UNIHTTPResponse.m; sourceTree = ""; }; + 52CD825D9A1511054A1A5701A737B96F /* PFProductsRequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductsRequestHandler.m; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m; sourceTree = ""; }; + 52EDE9D3C5F9D0F9C4068C669A7F7141 /* PFCurrentConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentConfigController.h; path = Parse/Internal/Config/Controller/PFCurrentConfigController.h; sourceTree = ""; }; + 532AAB9D359ECDC94F8B03BB863AC81E /* Unirest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Unirest.release.xcconfig; sourceTree = ""; }; + 53523337F4B830F83880CFDC298F2BC8 /* PFCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCollectionViewCell.m; path = ParseUI/Classes/Cells/PFCollectionViewCell.m; sourceTree = ""; }; + 5358009CFED1962F15A2280446DB04A7 /* PFURLSessionCommandRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h; sourceTree = ""; }; + 53977B705B1F2FD103C89A12B9885AA3 /* PFMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMulticastDelegate.m; path = Parse/Internal/PFMulticastDelegate.m; sourceTree = ""; }; + 5407D6309498466D3BD9EEE5DC9171F2 /* PFColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFColor.h; path = ParseUI/Classes/Internal/Extensions/PFColor.h; sourceTree = ""; }; + 54A49B5066DC5E2D106E4AB7EC84E310 /* ParseModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseModule.h; path = Parse/Internal/ParseModule.h; sourceTree = ""; }; + 54B90D0232ABF1B3E61A9DC3EEAA226A /* IQKeyboardReturnKeyHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQKeyboardReturnKeyHandler.m; path = IQKeyBoardManager/IQKeyboardReturnKeyHandler.m; sourceTree = ""; }; + 5545F56CBCA1961E8A999F7257C1FA51 /* PFObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObject.m; path = Parse/PFObject.m; sourceTree = ""; }; + 566D307A23F6EE2FF9B47E6A1C68C59E /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; + 586F2194798AE4805A6F8FE5E6F506DE /* ParseUI-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ParseUI-dummy.m"; sourceTree = ""; }; + 5896CFB908B877F5C2F4D5066E6E80D3 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; + 59CCCB05A2EBA3189A6BE62B37274EC2 /* Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Chameleon.h; path = "Pod/Classes/Objective-C/Chameleon.h"; sourceTree = ""; }; + 5A5D2EBF57F51AF57F8C4C497E5D6AEA /* PFCommandRunning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunning.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.m; sourceTree = ""; }; + 5A930BF850559AE082DDFACF6887C72E /* PFHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHash.h; path = Parse/Internal/PFHash.h; sourceTree = ""; }; + 5BAFC8795A0D106AB97B4408C85D0A49 /* PFRESTPushCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTPushCommand.h; path = Parse/Internal/Commands/PFRESTPushCommand.h; sourceTree = ""; }; + 5BB3E23687BDA8DF4EC8C90366A7F21E /* PFFileState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState_Private.h; path = Parse/Internal/File/State/PFFileState_Private.h; sourceTree = ""; }; + 5D0E7ECA8260E9EE58E2D1D581456EE6 /* PFObjectFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCodingLogic.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h; sourceTree = ""; }; + 5D2AE97133B1C7AD99D02E0CBDFB4DE9 /* PFConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfigController.h; path = Parse/Internal/Config/Controller/PFConfigController.h; sourceTree = ""; }; + 5E3AAE5A1E6096A049F4DA5D191CBADC /* PFNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNullability.h; path = Parse/PFNullability.h; sourceTree = ""; }; + 5E69CBD775346A00D22D02F01FAEEE59 /* PFOperationSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOperationSet.h; path = Parse/Internal/Object/OperationSet/PFOperationSet.h; sourceTree = ""; }; + 5E6A437EBB862966A809668856F8E247 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; + 5E8A133C5B52375ED7ED0B08ADBD8537 /* Pods-FoodbLog.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FoodbLog.release.xcconfig"; sourceTree = ""; }; + 5EB12118FD4DE039BC62EF0E15829099 /* UIToolbar+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIToolbar+FlatUI.m"; path = "Classes/ios/UIToolbar+FlatUI.m"; sourceTree = ""; }; + 5EDC42BD069E7A8A5E8A432640A1F523 /* PFPushUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushUtilities.h; path = Parse/Internal/Push/Utilites/PFPushUtilities.h; sourceTree = ""; }; + 5F6C72DA72BB9A832890E4D4C02C794A /* PFBaseState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBaseState.m; path = Parse/Internal/PFBaseState.m; sourceTree = ""; }; + 5F6FFE987901F200ABA41215EC6603C5 /* PFPushState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState_Private.h; path = Parse/Internal/Push/State/PFPushState_Private.h; sourceTree = ""; }; + 5FE07D72A0D452DFEAACC04F124006CF /* UNIJsonNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIJsonNode.m; path = Unirest/HttpResponse/UNIJsonNode.m; sourceTree = ""; }; + 609DBFC143F8CA52ECA2DC3956D4ADC3 /* PFObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectController.m; path = Parse/Internal/Object/Controller/PFObjectController.m; sourceTree = ""; }; + 60EC5380A05609AFEADD93175936D23A /* PFInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationController.h; path = Parse/Internal/Installation/Controller/PFInstallationController.h; sourceTree = ""; }; + 6133AB3618602C2A8838511FEC730F13 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; + 614FAF041CF57C25CF92549363DC2B35 /* PFFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile.h; path = Parse/PFFile.h; sourceTree = ""; }; + 61BDE38ED20108AC210E4C985B982B1B /* UNIHTTPRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPRequest.m; path = Unirest/UNIHTTPRequest.m; sourceTree = ""; }; + 61E8FE17B430924B29695138E0ACFA96 /* PFMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMulticastDelegate.h; path = Parse/Internal/PFMulticastDelegate.h; sourceTree = ""; }; + 61FF4D40E535915FF2A5E6013656D65F /* PFQueryUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryUtilities.h; path = Parse/Internal/Query/Utilities/PFQueryUtilities.h; sourceTree = ""; }; + 6226CB7D1425E15682AC63FA51921DD7 /* UNIRest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIRest.h; path = Unirest/UNIRest.h; sourceTree = ""; }; + 62333A4D0E9AF8700874F1F22E9827D6 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; + 623E4161A8235BF36BEE1C200D5F8E72 /* PFInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallation.h; path = Parse/PFInstallation.h; sourceTree = ""; }; + 624695D19509BEA6FDB8926119091B30 /* PFKeyValueCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeyValueCache.m; path = Parse/Internal/KeyValueCache/PFKeyValueCache.m; sourceTree = ""; }; + 62FADD9376E95D055AF0A96D39FD267C /* PFSessionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionUtilities.h; path = Parse/Internal/Session/Utilities/PFSessionUtilities.h; sourceTree = ""; }; + 633C5F1F9DDC345F9BDF689B08C71651 /* PFCommandCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache_Private.h; path = Parse/Internal/PFCommandCache_Private.h; sourceTree = ""; }; + 636B22993762DB16840604D7D3A30F70 /* PFHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHash.m; path = Parse/Internal/PFHash.m; sourceTree = ""; }; + 63E672189DC0628FEE2AF3B6EF6CE5F6 /* PFAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics.h; path = Parse/PFAnalytics.h; sourceTree = ""; }; + 641771E5ACE52EEBF054DF88C734432B /* PFFileStagingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileStagingController.h; path = Parse/Internal/File/Controller/PFFileStagingController.h; sourceTree = ""; }; + 64999537AFDE8F90807B5B5991781283 /* Lato-Italic.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "Lato-Italic.ttf"; path = "Resources/Lato-Italic.ttf"; sourceTree = ""; }; + 656E2AE30EB08EBE4FFC367B7AE4DEAE /* UIViewController+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+Chameleon.m"; path = "Pod/Classes/Objective-C/UIViewController+Chameleon.m"; sourceTree = ""; }; + 65C5E78DF211DF65F36E36C9FC0D1B01 /* UINavigationController+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationController+Chameleon.h"; path = "Pod/Classes/Objective-C/UINavigationController+Chameleon.h"; sourceTree = ""; }; + 666458A8556D81D46682CDDE3C99CFBD /* PFPinningObjectStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningObjectStore.m; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.m; sourceTree = ""; }; + 66B92824AD49FBB9390D23A0ECEC41CD /* PFObjectState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState_Private.h; path = Parse/Internal/Object/State/PFObjectState_Private.h; sourceTree = ""; }; + 67CE6D4D9A7B520EA991DDC9419C137E /* PFRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState.h; path = Parse/Internal/Relation/State/PFRelationState.h; sourceTree = ""; }; + 68183AD738E931701FD0AD3DF16E94B9 /* PFURLSessionDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h; sourceTree = ""; }; + 68664BFE50321FF5CE50A110AAE7E2E5 /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; + 687B09B7B61E7AD8BBFAD05917EA3836 /* PFPaymentTransactionObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPaymentTransactionObserver.m; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m; sourceTree = ""; }; + 69460567E8D0F3A25083496C96A69461 /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; + 69A510A1BF3A452173802E1908C71DB3 /* PFCloudCodeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloudCodeController.m; path = Parse/Internal/CloudCode/PFCloudCodeController.m; sourceTree = ""; }; + 6A63A0131E42676B37B1723606FB5076 /* PFOfflineQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryController.h; path = Parse/Internal/Query/Controller/PFOfflineQueryController.h; sourceTree = ""; }; + 6AC19EA4CDEEFAFF25CAB498F92DE3C8 /* PFSQLiteStatement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteStatement.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h; sourceTree = ""; }; + 6B117E2539ED9DDF90DCCD6AC02BA037 /* PFRESTSessionCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTSessionCommand.h; path = Parse/Internal/Commands/PFRESTSessionCommand.h; sourceTree = ""; }; + 6BF3E9A8E7DEEA28BC70D87AF3DBEC43 /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; + 6C1F692004740EFBE7FF1FF61AB5529B /* PFProductsRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductsRequestHandler.h; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h; sourceTree = ""; }; + 6CB133094501625DCA52F72F4C4E2B46 /* SDWebImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDecoder.h; path = SDWebImage/SDWebImageDecoder.h; sourceTree = ""; }; + 6CDDE8A709E5616D62A31C917FE40D76 /* PFInstallationIdentifierStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h; sourceTree = ""; }; + 6CFB2DE553F71F9BD4D38BFE889EE5A1 /* PFPurchaseTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseTableViewCell.m; path = ParseUI/Classes/Cells/PFPurchaseTableViewCell.m; sourceTree = ""; }; + 6D30F5219BDECE4875E21C7C337CAB52 /* IQNSArray+Sort.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQNSArray+Sort.m"; path = "IQKeyBoardManager/Categories/IQNSArray+Sort.m"; sourceTree = ""; }; + 6D76EBB2E083B394F15EA609C72DA53F /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; + 6E0AF3C159D4C8B5EB68C6ADB8FB55A2 /* PFObjectFileCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCoder.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.h; sourceTree = ""; }; + 6E80233019F4EE7D4C240660178775ED /* PFMutableACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableACLState.h; path = Parse/Internal/ACL/State/PFMutableACLState.h; sourceTree = ""; }; + 6EFCD2984A81FFD36BD6341ECAD197B3 /* IQUIViewController+Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIViewController+Additions.h"; path = "IQKeyBoardManager/Categories/IQUIViewController+Additions.h"; sourceTree = ""; }; + 701A5B85169EB58682F05C75AC13EB3E /* IQKeyboardManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQKeyboardManager.m; path = IQKeyBoardManager/IQKeyboardManager.m; sourceTree = ""; }; + 70A3394AFCD610A0CB8D77E3345EDC43 /* PFMutableFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableFileState.m; path = Parse/Internal/File/State/PFMutableFileState.m; sourceTree = ""; }; + 70C2CCBB87CBCB7C3F8AED8C1396EF19 /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; + 70D40D77353891DBFC1CDF8EFFB36FC5 /* Unirest-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Unirest-Info.plist"; sourceTree = ""; }; + 7142851694FCB943E670DC3C15E92EBF /* ChameleonFramework.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ChameleonFramework.release.xcconfig; sourceTree = ""; }; + 7188A502AE1E58CD7A9DBA3B6C887DF0 /* PFDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDecoder.h; path = Parse/Internal/PFDecoder.h; sourceTree = ""; }; + 71906898F9D4CCF17CBD5FC16B0E40FB /* PFURLSessionDataTaskDelegate_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h; sourceTree = ""; }; + 71E8757C5E655C53AAFA0481265D031B /* Pods-FoodbLog-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-FoodbLog-dummy.m"; sourceTree = ""; }; + 71F87070D4783A8D6F354D8BCAB875C3 /* UITabBar+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITabBar+FlatUI.h"; path = "Classes/ios/UITabBar+FlatUI.h"; sourceTree = ""; }; + 7389E3A97A4248463F61AE93C1902809 /* flat-ui-icons-regular.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "flat-ui-icons-regular.ttf"; path = "Resources/flat-ui-icons-regular.ttf"; sourceTree = ""; }; + 73A911C862B60EA923C814A7824ED72E /* PFCommandResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandResult.h; path = Parse/Internal/PFCommandResult.h; sourceTree = ""; }; + 73ACD345C800D725173F90C44EFD0B3A /* PFUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserController.h; path = Parse/Internal/User/Controller/PFUserController.h; sourceTree = ""; }; + 73B12CABD664167D981D0544B9928022 /* UIColor+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+FlatUI.h"; path = "Classes/ios/UIColor+FlatUI.h"; sourceTree = ""; }; + 73CC3349EC3533415793CF755807650A /* PFURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h; sourceTree = ""; }; + 748B0CC576A8F49BAB1FF66E84471822 /* IQKeyboardManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManager-dummy.m"; sourceTree = ""; }; + 74B88130F8B1AC90AC1CA346D577FB27 /* PFInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInternalUtils.h; path = Parse/Internal/PFInternalUtils.h; sourceTree = ""; }; + 765C0EAAC0CBC6AF531C333F05E087B9 /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; + 76CB784D54B055F86031B44399CB67A2 /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; + 780D44B2A921C4D352FA9A6D9693F79A /* PFPurchaseTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseTableViewCell.h; path = ParseUI/Classes/Cells/PFPurchaseTableViewCell.h; sourceTree = ""; }; + 7861C0328B9B37380137F55D5B766F21 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; + 7870F841A362ED1E4FFA8F36CA9D297E /* PFEventuallyPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyPin.h; path = Parse/Internal/PFEventuallyPin.h; sourceTree = ""; }; + 788310F842000FA289D2F1CDCD98A85C /* UINavigationBar+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationBar+FlatUI.h"; path = "Classes/ios/UINavigationBar+FlatUI.h"; sourceTree = ""; }; + 799A25ED12D346D0E10745AF43D345D4 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; + 7A28FD3FB992F202D240D12E7F2B7FD5 /* PFRESTUserCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTUserCommand.h; path = Parse/Internal/Commands/PFRESTUserCommand.h; sourceTree = ""; }; + 7A42508E95E64986B0EDAFC9E7C7942A /* UNIHTTPBinaryResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPBinaryResponse.h; path = Unirest/HttpResponse/UNIHTTPBinaryResponse.h; sourceTree = ""; }; + 7A7759BCCF26709D483AEAA4CA39B1AC /* PFQueryTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryTableViewController.m; path = ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m; sourceTree = ""; }; + 7A8E2C8071F308F79E8DC8D5E1A0A736 /* PFQueryCollectionViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryCollectionViewController.m; path = ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m; sourceTree = ""; }; + 7AB05A9755C75CB37B4B278883D9ECBE /* AFNetworking.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.debug.xcconfig; sourceTree = ""; }; + 7B09852DB9FD0FD28F70ECC80DCF2091 /* UNIHTTPStringResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPStringResponse.m; path = Unirest/HttpResponse/UNIHTTPStringResponse.m; sourceTree = ""; }; + 7B2C31800C645ACA08536F0A681E03CF /* PFThreadsafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFThreadsafety.h; path = Parse/Internal/ThreadSafety/PFThreadsafety.h; sourceTree = ""; }; + 7B4F9159794FFF9BEDDFCBAA5965C056 /* PFCommandRunning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunning.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.h; sourceTree = ""; }; + 7BE179E9C8B4046FCC237E5DA15BB57D /* Bolts.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.debug.xcconfig; sourceTree = ""; }; + 7C5002465C0FC38F707FE42128EF8087 /* UIButton+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+Chameleon.h"; path = "Pod/Classes/Objective-C/UIButton+Chameleon.h"; sourceTree = ""; }; + 7C823BA36B3996A5B127FB928AAFB071 /* PFCoreDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreDataProvider.h; path = Parse/Internal/PFCoreDataProvider.h; sourceTree = ""; }; + 7D6CC34BA2E5393D2D3F739F59596E4C /* PFImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImageView.h; path = ParseUI/Classes/Views/PFImageView.h; sourceTree = ""; }; + 7D75D7FA476F50BC5FB3F3B0641D2926 /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; + 7DAFE2C00F715262F9AF47201AE5B463 /* UILabel+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UILabel+Chameleon.h"; path = "Pod/Classes/Objective-C/UILabel+Chameleon.h"; sourceTree = ""; }; + 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 7DDF020AF63A140F55102296DFDB9C66 /* PFInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallation.m; path = Parse/PFInstallation.m; sourceTree = ""; }; + 7DE2D5472532E535898481C5442AAA5B /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; + 7E737BD38A79BE130905DB568587BBC4 /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; + 7F2689D7BF9856AA54533AE6210302B0 /* PFUserAuthenticationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationDelegate.h; path = Parse/PFUserAuthenticationDelegate.h; sourceTree = ""; }; + 80331DEE2BF41B2AD40413E3C5DB2B28 /* ParseUI.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ParseUI.debug.xcconfig; sourceTree = ""; }; + 80684463B172C7670EDABBAB1D1D3482 /* PFSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession.h; path = Parse/PFSession.h; sourceTree = ""; }; + 80865A22558AC6423CFCE3A112073FD6 /* PFObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController.h; path = Parse/Internal/Object/Controller/PFObjectController.h; sourceTree = ""; }; + 809F219DA65FEDD9A6F8E2DF586F7D62 /* PFCommandURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandURLRequestConstructor.m; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m; sourceTree = ""; }; + 81311E91F15A9ACF24DDCF24A36B0F39 /* NSString+Icons.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Icons.m"; path = "Classes/ios/NSString+Icons.m"; sourceTree = ""; }; + 81509BFE89D1F42DFC217BFFCC77885F /* PFACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACLState.m; path = Parse/Internal/ACL/State/PFACLState.m; sourceTree = ""; }; + 818DBD3B6CFCFF9DC445CD8574113BAA /* PFRESTConfigCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTConfigCommand.m; path = Parse/Internal/Commands/PFRESTConfigCommand.m; sourceTree = ""; }; + 819412AD0928AF8171877E3BEC3035CA /* PFTextField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTextField.h; path = ParseUI/Classes/Views/PFTextField.h; sourceTree = ""; }; + 83026E30E5879736A329148544ED9B28 /* PFPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPin.m; path = Parse/Internal/LocalDataStore/Pin/PFPin.m; sourceTree = ""; }; + 830900A05A897F050CC8C0CCDE4C4FD8 /* ParseUIConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseUIConstants.h; path = ParseUI/Other/ParseUIConstants.h; sourceTree = ""; }; + 83B8FAAF482B78AC548BDC44BA540C3A /* PFImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImage.m; path = ParseUI/Classes/Internal/Extensions/PFImage.m; sourceTree = ""; }; + 83F94635DF5FD3CB6C04F66A51892F22 /* PFObjectSubclassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassInfo.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m; sourceTree = ""; }; + 843985569B6BCF4CD645497A32668195 /* UNIHTTPRequestWithBody.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPRequestWithBody.h; path = Unirest/UNIHTTPRequestWithBody.h; sourceTree = ""; }; + 8442B999E5775411EEFFBC7781637303 /* UISlider+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UISlider+FlatUI.h"; path = "Classes/ios/UISlider+FlatUI.h"; sourceTree = ""; }; + 849E5A8317B6998E948A27507E902A90 /* Pods-FoodbLog.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FoodbLog.debug.xcconfig"; sourceTree = ""; }; + 852A83DBE22D8BF63D1F7D4F20EB25EF /* PFWeakValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFWeakValue.h; path = Parse/Internal/PFWeakValue.h; sourceTree = ""; }; + 8536E7EDEE9BFAF06216BADC69B65005 /* PFActionButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActionButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m; sourceTree = ""; }; + 857F0BA6F21ED8BE24BBE09EC4796DD0 /* IQKeyboardManager.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManager.debug.xcconfig; sourceTree = ""; }; + 85DE173836F20C196CF9443BA77C76A2 /* PFPushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState.h; path = Parse/Internal/Push/State/PFPushState.h; sourceTree = ""; }; + 86017ED93042A0624A5FBBFEDCDEE976 /* PFQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState.h; path = Parse/Internal/Query/State/PFQueryState.h; sourceTree = ""; }; + 86363196FAD187D55BE15125F559D10B /* UIProgressView+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+FlatUI.h"; path = "Classes/ios/UIProgressView+FlatUI.h"; sourceTree = ""; }; + 866C32999AC6688E43E9E3A792BC2D34 /* NSArray+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+Chameleon.h"; path = "Pod/Classes/Objective-C/NSArray+Chameleon.h"; sourceTree = ""; }; + 86BD4117D04BA8012C142C487374653B /* PFActivityIndicatorTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActivityIndicatorTableViewCell.m; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m; sourceTree = ""; }; + 87D7C7463212CB7E7A2C6DDE9D75FFF5 /* PFObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectControlling.h; path = Parse/Internal/Object/Controller/PFObjectControlling.h; sourceTree = ""; }; + 8852424B3CD79FB522C7DBB741B3A915 /* AFNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-umbrella.h"; sourceTree = ""; }; + 886E9C8ED5B1B07A35329D7F11A187EC /* PFMultiProcessFileLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLock.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h; sourceTree = ""; }; + 88DBADE931198B937A907C0F4A844AB0 /* PFProduct.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProduct.m; path = Parse/PFProduct.m; sourceTree = ""; }; + 898E5A3B286DE966995F5236CA3096FB /* PFPropertyInfo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Private.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h; sourceTree = ""; }; + 8B33B936A9A7DB28766EEBFB4899F4ED /* FUIAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUIAlertView.m; path = Classes/ios/FUIAlertView.m; sourceTree = ""; }; + 8B4598F68BAD6898D603B376A1FB1A8B /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; + 8B4DD551A4377B715FBEA24BD68F23F7 /* PFGeoPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFGeoPoint.m; path = Parse/PFGeoPoint.m; sourceTree = ""; }; + 8B7DC16C982ED9197D1D5205693D4D1E /* PFInstallationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationConstants.h; path = Parse/Internal/Installation/Constants/PFInstallationConstants.h; sourceTree = ""; }; + 8B8FAEB0939BC673396EF39DB43C5723 /* FlatUIKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FlatUIKit.release.xcconfig; sourceTree = ""; }; + 8BC6A55FA3CDF0EF58B5D4BDD6F6CAD8 /* UIFont+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIFont+FlatUI.m"; path = "Classes/ios/UIFont+FlatUI.m"; sourceTree = ""; }; + 8C9643764C40666FA3BDA5483199A807 /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; + 8C9859B01D21C19A7695D3E4BC335D14 /* PFUIAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUIAlertView.m; path = ParseUI/Classes/Internal/Extensions/PFUIAlertView.m; sourceTree = ""; }; + 8D00AA339432926A0C0AD20217302F65 /* PFAnalyticsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsController.h; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.h; sourceTree = ""; }; + 8D0C6A79B925E5B8DDC09CC0D8F44006 /* PFMultiProcessFileLock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLock.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m; sourceTree = ""; }; + 8D7825E186E2129768F652FA322E5FD2 /* PFQueryState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState_Private.h; path = Parse/Internal/Query/State/PFQueryState_Private.h; sourceTree = ""; }; + 8DF6084BF27306D73EE3F7156B4A3EFD /* PFQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryController.m; path = Parse/Internal/Query/Controller/PFQueryController.m; sourceTree = ""; }; + 8E279FCCEB7C1AEB25BCE46F878D745B /* UNIUrlConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIUrlConnection.h; path = Unirest/UNIUrlConnection.h; sourceTree = ""; }; + 8E34CEB998FE5525402334C2BB80D5A3 /* PFURLSessionCommandRunner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionCommandRunner.m; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m; sourceTree = ""; }; + 8E9D2D880354EC317D86A4349D035200 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; + 8EFB510E35A2E19894B0116FF11AF2F8 /* IQUIView+IQKeyboardToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIView+IQKeyboardToolbar.h"; path = "IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h"; sourceTree = ""; }; + 8F44CE6BEBD6122876882DCE9A46EBF2 /* PFDateFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDateFormatter.m; path = Parse/Internal/PFDateFormatter.m; sourceTree = ""; }; + 8F452750888B246772EB8A6877EBAF3F /* IQUITextFieldView+Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUITextFieldView+Additions.h"; path = "IQKeyBoardManager/Categories/IQUITextFieldView+Additions.h"; sourceTree = ""; }; + 8F4B1D49F33B5E34B800900D19CA98E3 /* SDWebImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.release.xcconfig; sourceTree = ""; }; + 8F7F9F74CC5A4F15ADE6F15432160734 /* Pods-FoodbLog-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-FoodbLog-acknowledgements.markdown"; sourceTree = ""; }; + 8FB95CF7F41F64BD82E62CED5B594292 /* PFAnonymousUtils_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils_Private.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h; sourceTree = ""; }; + 8FBADA788C844BC035F839991DA33BC7 /* PFPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPin.h; path = Parse/Internal/LocalDataStore/Pin/PFPin.h; sourceTree = ""; }; + 8FD253470226BBD7EAC24A931D19F7D9 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; + 8FFE49908079C5362E67099F8C05E1B8 /* PFLocalization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocalization.h; path = ParseUI/Classes/Internal/PFLocalization.h; sourceTree = ""; }; + 91C373870E6D645F6FF004CCD43B21E6 /* UNIRest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIRest.m; path = Unirest/UNIRest.m; sourceTree = ""; }; + 91F6CE6961CE84A5E762D863216E0997 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; + 927DBA16CBE9B29D79E1EE774EE19F59 /* ChameleonFramework.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ChameleonFramework.modulemap; sourceTree = ""; }; + 9295942D69DE1369ECE1A9BCC87CA017 /* Pods-FoodbLog-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FoodbLog-Info.plist"; sourceTree = ""; }; + 92C68D5FDCA38C263C5C9DA67BC52DAB /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionFileDownloadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; + 92D60EA1BE94F7CC68B03B328E9DA910 /* PFUserFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserFileCodingLogic.m; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m; sourceTree = ""; }; + 937BA62AFDBF0A1259E42BCF5763391E /* Unirest-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Unirest-umbrella.h"; sourceTree = ""; }; + 94D6AC2286C9B645008316B81D8156C7 /* UITableViewCell+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableViewCell+FlatUI.h"; path = "Classes/ios/UITableViewCell+FlatUI.h"; sourceTree = ""; }; + 9661CC0A310A5FFEF6DAC9066D0D906F /* IQUIView+Hierarchy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIView+Hierarchy.h"; path = "IQKeyBoardManager/Categories/IQUIView+Hierarchy.h"; sourceTree = ""; }; + 96B0AB09E758FB641EEAB8FB2C91C6C9 /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperation.h; path = AFNetworking/AFHTTPRequestOperation.h; sourceTree = ""; }; + 96BBE1D7671D60064CCF9BFFA76E8E28 /* PFAnalyticsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsController.m; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.m; sourceTree = ""; }; + 96E2E224B40477F06DF3B453832889DE /* PFRESTAnalyticsCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTAnalyticsCommand.m; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.m; sourceTree = ""; }; + 96FC24F36F6A0E253A147A902D4D87B3 /* PFWeakValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFWeakValue.m; path = Parse/Internal/PFWeakValue.m; sourceTree = ""; }; + 978F1D1FC858DCFF654EA8F44B32F5DF /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperationManager.m; path = AFNetworking/AFHTTPRequestOperationManager.m; sourceTree = ""; }; + 97FB31513AE2FE8E761A9C0EEB5EC31F /* PFCommandCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache.h; path = Parse/Internal/PFCommandCache.h; sourceTree = ""; }; + 98527D7196957AAB07B79E2E2AFDE23E /* IQKeyboardManager */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardManager; path = IQKeyboardManager.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 989D519E262D75CFB924E7B8A1C4ADDF /* IQUIView+Hierarchy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIView+Hierarchy.m"; path = "IQKeyBoardManager/Categories/IQUIView+Hierarchy.m"; sourceTree = ""; }; + 98B7E2A8BF0A20332398DEB41B1BB68E /* PFActivityIndicatorTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActivityIndicatorTableViewCell.h; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h; sourceTree = ""; }; + 98CE93C5090192A08CBA7E7C5BF3D0EC /* PFInstallationIdentifierStore_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore_Private.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h; sourceTree = ""; }; + 98EC7EC190408FB4A48D91C9C6E633EC /* PFProduct+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFProduct+Private.h"; path = "Parse/Internal/Product/PFProduct+Private.h"; sourceTree = ""; }; + 98FC30222B791FD6C8D1E6F1BC6F7687 /* PFKeyValueCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache.h; sourceTree = ""; }; + 991D633806D370E5A9CCBCE8F7E6CF93 /* PFFileStagingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileStagingController.m; path = Parse/Internal/File/Controller/PFFileStagingController.m; sourceTree = ""; }; + 998337F9EFB691B95AC04D0DEDFA76DF /* PFCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloud.h; path = Parse/PFCloud.h; sourceTree = ""; }; + 99FBB19FAFA339DAE8A2130BCBCD5A90 /* PFCurrentObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentObjectControlling.h; path = Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h; sourceTree = ""; }; + 9A75A05D48E060BEBF89A6B65009C577 /* ParseModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseModule.m; path = Parse/Internal/ParseModule.m; sourceTree = ""; }; + 9B994E9D8D38725EB2DBDFA907134A7C /* Parse.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.release.xcconfig; sourceTree = ""; }; + 9BC33545EC4D27DD8FBAA13A736EB786 /* UIBarButtonItem+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIBarButtonItem+FlatUI.h"; path = "Classes/ios/UIBarButtonItem+FlatUI.h"; sourceTree = ""; }; + 9CAC2D7C9A799C8A55D219041965A2B1 /* PFObjectEstimatedData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectEstimatedData.m; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m; sourceTree = ""; }; + 9CC6108EC34A6AB9D07BF82118825BE6 /* PFOfflineObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineObjectController.h; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h; sourceTree = ""; }; + 9CC658527AA6BE88A41923B795916FE0 /* PFPushManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushManager.m; path = Parse/Internal/Push/Manager/PFPushManager.m; sourceTree = ""; }; + 9CF52AD6C105BF59D3D2E0B1453E545F /* Parse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Parse.m; path = Parse/Parse.m; sourceTree = ""; }; + 9CF59640D2C379A8552A7FE126379C1A /* PFLogInViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogInViewController.m; path = ParseUI/Classes/LogInViewController/PFLogInViewController.m; sourceTree = ""; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9DA741B4EC0DCED29063435717645FC3 /* FlatUIKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FlatUIKit.debug.xcconfig; sourceTree = ""; }; + 9EB80548C95ADD762223EC007944AF45 /* PFSignUpViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSignUpViewController.m; path = ParseUI/Classes/SignUpViewController/PFSignUpViewController.m; sourceTree = ""; }; + 9EE7C503197A62ADD66AD452FCFEFAB7 /* PFURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSession.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m; sourceTree = ""; }; + 9F1D3010E400E70C042940F75036BF3D /* PFSessionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionController.m; path = Parse/Internal/Session/Controller/PFSessionController.m; sourceTree = ""; }; + 9F539BDDEF739BDE923DD4C1FC4B2894 /* PFNetworkCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkCommand.h; path = Parse/Internal/PFNetworkCommand.h; sourceTree = ""; }; + 9F62BD8D055CECF254F18875CD46DFA2 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; + 9F8AB594F361E76ACA20213E0F3D3860 /* UNIHTTPResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPResponse.h; path = Unirest/HttpResponse/UNIHTTPResponse.h; sourceTree = ""; }; + 9F97B8CE87B16ACD8D4260933E48F819 /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; + A042B54870F2691CE1141CC51249B831 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; + A0C767F598567EAD6A78E56703F0BF49 /* PFMutablePushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutablePushState.m; path = Parse/Internal/Push/State/PFMutablePushState.m; sourceTree = ""; }; + A1C3EA21F91503CF85866B1DEBB42208 /* PFRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelationState.m; path = Parse/Internal/Relation/State/PFRelationState.m; sourceTree = ""; }; + A24E7517836476C9939D680AAF9AAF11 /* PFAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAssert.h; path = Parse/Internal/PFAssert.h; sourceTree = ""; }; + A283BA24B8BC2F745E053B68490B43ED /* UNIHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPRequest.h; path = Unirest/UNIHTTPRequest.h; sourceTree = ""; }; + A28B62FB34B8E41CEE484AD8817B831C /* Unirest-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Unirest-dummy.m"; sourceTree = ""; }; + A29FD65C70682683A3D7D37BD9F78E53 /* PFCommandRunningConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunningConstants.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h; sourceTree = ""; }; + A2C468F7EBC72EDE2DDF8B4ADEF3EFF1 /* PFRelationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationPrivate.h; path = Parse/Internal/Relation/PFRelationPrivate.h; sourceTree = ""; }; + A316237767BF661F1B6AD8F4B030AF7A /* PFURLSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h; sourceTree = ""; }; + A356B9DFCE0F6FA18DF48B6098125F04 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; + A408C24FBC30C794341C29AD9ECA2CD1 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; + A40CB3A94F942DB16FCA1145446DFA1E /* PFObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState.h; path = Parse/Internal/Object/State/PFObjectState.h; sourceTree = ""; }; + A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AFNetworking; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A4FDC68F75815A014551F0B6B572D2AF /* IQKeyboardManager.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = IQKeyboardManager.bundle; path = IQKeyBoardManager/Resources/IQKeyboardManager.bundle; sourceTree = ""; }; + A50114757684801C1DE99C04001D04C4 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; + A505892A83F06969DC7D47BC6FC72B07 /* ParseUI-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ParseUI-umbrella.h"; sourceTree = ""; }; + A515ED69EEDB97450E752EA285213DEA /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; + A586A584997D8AAB3C26BC7EA0ABE46C /* PFRESTObjectCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectCommand.m; path = Parse/Internal/Commands/PFRESTObjectCommand.m; sourceTree = ""; }; + A62DEB07190D9A48B19931ABEF8231C7 /* Pods-FoodbLog.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-FoodbLog.modulemap"; sourceTree = ""; }; + A66795F738318920B0D6E941B13871CF /* UIViewController+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+Chameleon.h"; path = "Pod/Classes/Objective-C/UIViewController+Chameleon.h"; sourceTree = ""; }; + A6A36422F3C90967B88FE242E00E11EB /* PFAnonymousUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousUtils.m; path = Parse/PFAnonymousUtils.m; sourceTree = ""; }; + A6AFE5A0BB8F671D756405659A7280C4 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; + A6D188FC37D6AAAB2E2FBE6F57F7EE82 /* ParseUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseUI.h; path = ParseUI/Other/ParseUI.h; sourceTree = ""; }; + A6E6334AF3D4ABDE619C3F9F1575FA7A /* PFRESTCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCommand.m; path = Parse/Internal/Commands/PFRESTCommand.m; sourceTree = ""; }; + A70E011791587979C22032E1FB4F06F9 /* PFFile_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile_Private.h; path = Parse/Internal/File/PFFile_Private.h; sourceTree = ""; }; + A740D31E8046CDB8D8368E00E9329E79 /* ChameleonConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ChameleonConstants.m; path = "Pod/Classes/Objective-C/ChameleonConstants.m"; sourceTree = ""; }; + A745A3D33907AFBD7D9B85EC9DC35D21 /* PFUserAuthenticationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationController.h; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h; sourceTree = ""; }; + A776F03C60540FC847DC8FD81CFFD399 /* BFTask+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Private.m"; path = "Parse/Internal/BFTask+Private.m"; sourceTree = ""; }; + A78827F2D79D32394CB2A7F8AC054D28 /* PFCoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreManager.h; path = Parse/Internal/PFCoreManager.h; sourceTree = ""; }; + A7C121EE4B1DE511B784FCD1F75C3CAF /* SDWebImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.debug.xcconfig; sourceTree = ""; }; + A869D04D94D174D538E8EEC8AD639A3F /* PFPush.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPush.h; path = Parse/PFPush.h; sourceTree = ""; }; + A89D66CA82F4BB4ED27F23A368117AD8 /* UNIHTTPBinaryResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPBinaryResponse.m; path = Unirest/HttpResponse/UNIHTTPBinaryResponse.m; sourceTree = ""; }; + A9681B204C96458D2D417C45571AB098 /* FlatUIKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FlatUIKit-Info.plist"; sourceTree = ""; }; + A97F7D38BC76709C3A8940B642F9736F /* UIPopoverController+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIPopoverController+FlatUI.m"; path = "Classes/ios/UIPopoverController+FlatUI.m"; sourceTree = ""; }; + A9ACE875C5C88F2FC048BA2052E6739F /* SDWebImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SDWebImage-Info.plist"; sourceTree = ""; }; + AA2E139C45664A8F35F7CC0FC4652D64 /* PFAsyncTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAsyncTaskQueue.h; path = Parse/Internal/PFAsyncTaskQueue.h; sourceTree = ""; }; + ABFBC5AE1B18C02508CD09769DD4415A /* PFSQLiteDatabaseResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseResult.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h; sourceTree = ""; }; + AC430D908CF42C14EF7AAFD9B91F4151 /* PFObjectFilePersistenceController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFilePersistenceController.m; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m; sourceTree = ""; }; + AC8E66BCE1B2B67DA2045E7EB6549471 /* PFPaymentTransactionObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h; sourceTree = ""; }; + ACB7449F5C2B0CE0404EEF1294771367 /* PFURLSessionCommandRunner_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h; sourceTree = ""; }; + ACF7C931823A68DDBB4BD5C0A4C40927 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; + AD75432B2BF6D1FC707CFCCD3527D979 /* UNIBodyRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIBodyRequest.h; path = Unirest/HttpRequest/UNIBodyRequest.h; sourceTree = ""; }; + ADCB853B7D560FC831BF87685AD57A9B /* FUIAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUIAlertView.h; path = Classes/ios/FUIAlertView.h; sourceTree = ""; }; + AF48650F07B7D424D0C0F148D2C63F3B /* Parse.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Parse.modulemap; sourceTree = ""; }; + AF6B37C98266FCE557B14E51A8B13011 /* PFQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQuery.h; path = Parse/PFQuery.h; sourceTree = ""; }; + AFA7104945F1D9E5D257AF888DF068F6 /* PFCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCollectionViewCell.h; path = ParseUI/Classes/Cells/PFCollectionViewCell.h; sourceTree = ""; }; + AFA966371146146D7F2018130EFE0F66 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; + B088733242F6563E27BF3689B4BCA38E /* PFDefaultACLController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDefaultACLController.h; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h; sourceTree = ""; }; + B0994984629F495251BA8A149F317827 /* PFAnonymousAuthenticationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousAuthenticationProvider.m; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m; sourceTree = ""; }; + B0B214D775196BA7CA8E17E53048A493 /* SDWebImage */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B13866FCDF031E55F0DD3D8829D073F8 /* PFQueryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryPrivate.h; path = Parse/Internal/Query/PFQueryPrivate.h; sourceTree = ""; }; + B1A39241452F7C9E16CF2D824F7364DC /* PFRelation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelation.h; path = Parse/PFRelation.h; sourceTree = ""; }; + B1DAEDA8CCCACC84601EECDB3E6D1FF6 /* PFLogInView_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInView_Private.h; path = ParseUI/Classes/LogInViewController/PFLogInView_Private.h; sourceTree = ""; }; + B23FD0394F4B69148299C896E97C2A90 /* PFObjectConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectConstants.m; path = Parse/Internal/Object/Constants/PFObjectConstants.m; sourceTree = ""; }; + B252B37D2D546870C8A826AB65BC2B95 /* Parse-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-prefix.pch"; sourceTree = ""; }; + B2B797BD23176FC43BD0D3B5634BE059 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; + B2D681EF9EF4F360FEE47AF2D4784401 /* ParseUI-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ParseUI-Info.plist"; sourceTree = ""; }; + B2E4026B95A28F85E28276E70D07582F /* PFRESTQueryCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTQueryCommand.m; path = Parse/Internal/Commands/PFRESTQueryCommand.m; sourceTree = ""; }; + B32250A0ACFF1FD6AFA14D88511BAE8F /* PFSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h; sourceTree = ""; }; + B37DB5C5090B2B2D7BED7A2071CCDA07 /* PFPrimaryButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPrimaryButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m; sourceTree = ""; }; + B3DEB5E877C555C69169163E7AE3DCD1 /* UNIBaseRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIBaseRequest.h; path = Unirest/HttpRequest/UNIBaseRequest.h; sourceTree = ""; }; + B4B9DA35E6B073D79C38529A56AD6105 /* Lato-Regular.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "Lato-Regular.ttf"; path = "Resources/Lato-Regular.ttf"; sourceTree = ""; }; + B4E5AC1FC469AA6601F3D23C8271F2CA /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLConnectionOperation.m; path = AFNetworking/AFURLConnectionOperation.m; sourceTree = ""; }; + B517C85F24F47CE2FEA872AFC6676C80 /* AFNetworking-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "AFNetworking-Info.plist"; sourceTree = ""; }; + B5B9189D6AB1779845E876D0D0424221 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; + B5F387A157BDF133EF4E326D269BDCA9 /* PFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkActivityIndicatorManager.h; path = Parse/PFNetworkActivityIndicatorManager.h; sourceTree = ""; }; + B658BAA68F8498FD1647DDC21EFA343D /* PFObjectBatchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectBatchController.h; path = Parse/Internal/Object/BatchController/PFObjectBatchController.h; sourceTree = ""; }; + B6DC6273BB88E3B2428C06836FF537E5 /* Parse_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse_Private.h; path = Parse/Internal/Parse_Private.h; sourceTree = ""; }; + B719C90D607E7C93D3CABC47049790CB /* PFApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFApplication.h; path = Parse/Internal/PFApplication.h; sourceTree = ""; }; + B72FD366845653BD01ECF1385B7EA338 /* IQBarButtonItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQBarButtonItem.m; path = IQKeyBoardManager/IQToolbar/IQBarButtonItem.m; sourceTree = ""; }; + B76589E19EEC53370B66781B36DA63ED /* PFImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImage.h; path = ParseUI/Classes/Internal/Extensions/PFImage.h; sourceTree = ""; }; + B7D8C5668CD3DD0CB72C11E3C568BEAF /* PFBase64Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBase64Encoder.h; path = Parse/Internal/PFBase64Encoder.h; sourceTree = ""; }; + B8F7790A71F9CD28C39B9D26DA94ED71 /* PFSignUpView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSignUpView.m; path = ParseUI/Classes/SignUpViewController/PFSignUpView.m; sourceTree = ""; }; + B93D67F2A685201833890E4ADFBF1CAE /* PFObjectSubclassingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassingController.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h; sourceTree = ""; }; + B9BC37C36EDC5E7749DCC7CEC01B8E91 /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperation.m; path = AFNetworking/AFHTTPRequestOperation.m; sourceTree = ""; }; + B9DD11F8C4BB31A6C209F4164F43F64F /* PFEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEncoder.m; path = Parse/Internal/PFEncoder.m; sourceTree = ""; }; + BA5631014AC595496E91221859D20693 /* IQTitleBarButtonItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQTitleBarButtonItem.h; path = IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.h; sourceTree = ""; }; + BAD731CA6EDC2C97EDBAE9DEF5BEE3A3 /* PFObjectFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCodingLogic.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m; sourceTree = ""; }; + BB33008CB3C2594164293FDA78B53616 /* IQTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQTextView.h; path = IQKeyBoardManager/IQTextView/IQTextView.h; sourceTree = ""; }; + BBEB6900A59681CD6E50CF6B6C2D6F9A /* UIStepper+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIStepper+FlatUI.h"; path = "Classes/ios/UIStepper+FlatUI.h"; sourceTree = ""; }; + BBF5C97238A5D929CC8B153AEF2E9179 /* FUITextField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUITextField.m; path = Classes/ios/FUITextField.m; sourceTree = ""; }; + BBF6063B6F29BA7E6ACAA2D45B0000D4 /* PFGeoPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPoint.h; path = Parse/PFGeoPoint.h; sourceTree = ""; }; + BC12683ED13AF4741D430BB224279C59 /* PFMutableUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableUserState.m; path = Parse/Internal/User/State/PFMutableUserState.m; sourceTree = ""; }; + BC79A8ADF356BE7E0C97159A9173BD3E /* BFDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFDefines.h; path = Bolts/Common/BFDefines.h; sourceTree = ""; }; + BC984301125702EFEAEC41E5B9293303 /* UNIHTTPJsonResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPJsonResponse.h; path = Unirest/HttpResponse/UNIHTTPJsonResponse.h; sourceTree = ""; }; + BCF2FF91155574F810AA6ADB7F19CC31 /* FlatUIKit */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FlatUIKit; path = FlatUIKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BD99F6ACFEC1E975F0FE0DF810A977A0 /* PFUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserState.m; path = Parse/Internal/User/State/PFUserState.m; sourceTree = ""; }; + BDB6A8639913CC9852F97AECC7B36C74 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = en.lproj; path = Parse/Resources/en.lproj; sourceTree = ""; }; + BEE6E33A4974E21DDA04F659E990E8D5 /* PFRelation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelation.m; path = Parse/PFRelation.m; sourceTree = ""; }; + BEF1B2C844D9D029D40DCE5288DA37E5 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; + BEF3548901AFF1442D8A42CE3D5CD1A7 /* PFAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAlertView.h; path = Parse/Internal/PFAlertView.h; sourceTree = ""; }; + BF319A176D7C5D07103C1757D1C4A6FC /* PFConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfig.m; path = Parse/PFConfig.m; sourceTree = ""; }; + BF4323EB4A4B780935FB44201186AA89 /* IQKeyboardManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManager-prefix.pch"; sourceTree = ""; }; + BF47B8414383C32DD8B7B421B488B543 /* PFCommandURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandURLRequestConstructor.h; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h; sourceTree = ""; }; + BF4961A65C147D1F0F5A6BC47121CBCF /* PFOfflineStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineStore.h; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h; sourceTree = ""; }; + BF64F8F931BFD24F09DA8796A5AB8716 /* PFErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFErrorUtilities.h; path = Parse/Internal/PFErrorUtilities.h; sourceTree = ""; }; + C0186D06FBE7DA63E6E3D6BA78C59D81 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; + C034B2ACBE6538C3217772E314D8114F /* IQSegmentedNextPrevious.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQSegmentedNextPrevious.h; path = IQKeyBoardManager/IQSegmentedNextPrevious/IQSegmentedNextPrevious.h; sourceTree = ""; }; + C0AD563E6E870F9D52DAD712828C35FB /* UIBarButtonItem+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIBarButtonItem+FlatUI.m"; path = "Classes/ios/UIBarButtonItem+FlatUI.m"; sourceTree = ""; }; + C0C70DBBC50F5AFE36A69BF965DF34C8 /* IQKeyboardManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManager.modulemap; sourceTree = ""; }; + C0F69EF677BEDD5C5FA799A9275E6EAC /* PFOperationSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOperationSet.m; path = Parse/Internal/Object/OperationSet/PFOperationSet.m; sourceTree = ""; }; + C10C515D0450CC29CCEF68EA816542D5 /* PFRESTPushCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTPushCommand.m; path = Parse/Internal/Commands/PFRESTPushCommand.m; sourceTree = ""; }; + C137855C14937C945753B86B2CDA79D9 /* FUISegmentedControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUISegmentedControl.h; path = Classes/ios/FUISegmentedControl.h; sourceTree = ""; }; + C1648D08CE8E716C210353B82071411F /* PFFileDataStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileDataStream.m; path = Parse/Internal/File/FileDataStream/PFFileDataStream.m; sourceTree = ""; }; + C1A50FE4924602AEF1988B628C5A61F6 /* PFBaseState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBaseState.h; path = Parse/Internal/PFBaseState.h; sourceTree = ""; }; + C1E8E202F03E9DFA6AFB0F098ABD3A06 /* IQUIWindow+Hierarchy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIWindow+Hierarchy.h"; path = "IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.h"; sourceTree = ""; }; + C26F1D9455881336DF278C24466FBC70 /* PFCommandRunningConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunningConstants.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m; sourceTree = ""; }; + C2ACCA2ADD065408B661FC354F02DBD2 /* ChameleonFramework-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ChameleonFramework-Info.plist"; sourceTree = ""; }; + C2B65C31D9152869F1CCD359EF540969 /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionFileDownloadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; + C2CA7B1027D42D64DAA67C1E2011479E /* PFACL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACL.m; path = Parse/PFACL.m; sourceTree = ""; }; + C3E9C164B6FC7D790B44FC7EB8462572 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; + C4ECEB822EE787E43E4B3D81D192BD08 /* PFRESTCloudCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCloudCommand.m; path = Parse/Internal/Commands/PFRESTCloudCommand.m; sourceTree = ""; }; + C50F078A36FD9673AD03D42BF7FC663E /* PFProductTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductTableViewController.h; path = ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h; sourceTree = ""; }; + C571323D266A5975685DD2191C775A9A /* PFDefaultACLController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDefaultACLController.m; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m; sourceTree = ""; }; + C582F437DEEFC2DC78C169737D7E9D53 /* PFPurchase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchase.h; path = Parse/PFPurchase.h; sourceTree = ""; }; + C5C549C5C71BC97E1890902EFB8FB31F /* PFDismissButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDismissButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h; sourceTree = ""; }; + C64ACA14342A9ECCF8A0C727A2193004 /* PFRESTUserCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTUserCommand.m; path = Parse/Internal/Commands/PFRESTUserCommand.m; sourceTree = ""; }; + C6620BB5952ABF0E4296A0D2DB7BE02F /* PFKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeychainStore.h; path = Parse/Internal/PFKeychainStore.h; sourceTree = ""; }; + C6725615AB0EB3D222E0B93D2EC3C6B7 /* PFRESTObjectBatchCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectBatchCommand.h; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.h; sourceTree = ""; }; + C6C75DCA8C9E3639140AC579C4C46296 /* PFInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInternalUtils.m; path = Parse/Internal/PFInternalUtils.m; sourceTree = ""; }; + C7F69AB63C5B9D83F940D7C9CA0CE984 /* UNIHTTPStringResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPStringResponse.h; path = Unirest/HttpResponse/UNIHTTPStringResponse.h; sourceTree = ""; }; + C8CC6659A6C2F9156DD09335364D0A48 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; + C9045272DB5D24BA18512C635B70BF34 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; + CA65A1A27CD00A01A317F904467FD513 /* PFMutableACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableACLState.m; path = Parse/Internal/ACL/State/PFMutableACLState.m; sourceTree = ""; }; + CB714FA67888C5CA046827C36660588D /* PFConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConstants.h; path = Parse/PFConstants.h; sourceTree = ""; }; + CBF8069EC1EAD1EEE3C76F86B6CAEAC9 /* PFAnonymousAuthenticationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousAuthenticationProvider.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h; sourceTree = ""; }; + CC336EDAC9FA746257F40BD540DC9A75 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + CCE21169E91B4F413E70BB27F172E902 /* PFAnalyticsUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsUtilities.m; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m; sourceTree = ""; }; + CD104B7AD1FBF1F91303950B3BD5DE5A /* FUICellBackgroundView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUICellBackgroundView.h; path = Classes/ios/FUICellBackgroundView.h; sourceTree = ""; }; + CD3794F214603143EF12BBD7D35183B1 /* PFAsyncTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAsyncTaskQueue.m; path = Parse/Internal/PFAsyncTaskQueue.m; sourceTree = ""; }; + CD6556ADFAD1BE0857B3369A52050CC6 /* PFHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPRequest.h; path = Parse/Internal/HTTPRequest/PFHTTPRequest.h; sourceTree = ""; }; + CE8BDCF7E26F4C56C0ADF6B761072CC2 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; + CEB2A2A103376D8F9047E4F1E106E16A /* PFSessionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionController.h; path = Parse/Internal/Session/Controller/PFSessionController.h; sourceTree = ""; }; + CEB87D6EE15561B81AB4D70AD70B70FB /* IQToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQToolbar.m; path = IQKeyBoardManager/IQToolbar/IQToolbar.m; sourceTree = ""; }; + CEE21A440006EE2C4B423EFAE0DC86AB /* Unirest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Unirest.debug.xcconfig; sourceTree = ""; }; + CEE4FFACD555D625ACE047DB1EE70750 /* FUIPopoverBackgroundView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUIPopoverBackgroundView.m; path = Classes/ios/FUIPopoverBackgroundView.m; sourceTree = ""; }; + CF3F287B1CCA362FEB1A80FCD3146513 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; + CF4CF703CC1DBD333ED293E64B2816AC /* PFFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileManager.m; path = Parse/Internal/PFFileManager.m; sourceTree = ""; }; + CFFDDC90032F16F94B5EC26EFEF453DF /* PFUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUser.h; path = Parse/PFUser.h; sourceTree = ""; }; + D0687D024DA00AAE7B4F8366D819654C /* PFTextButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTextButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h; sourceTree = ""; }; + D0874E998F9E9F408D294DF2386879A8 /* PFObjectConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectConstants.h; path = Parse/Internal/Object/Constants/PFObjectConstants.h; sourceTree = ""; }; + D0A63F277F04D487A09199897B91DA43 /* PFPropertyInfo_Runtime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo_Runtime.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m; sourceTree = ""; }; + D0B9EF05BBF29D5217191E4094EB3982 /* UIColor+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+FlatUI.m"; path = "Classes/ios/UIColor+FlatUI.m"; sourceTree = ""; }; + D10834D8E017BD682BEB53FD751CEB75 /* PFMultiProcessFileLockController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLockController.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h; sourceTree = ""; }; + D1E1BEDB5A8BC95C80FA17589D69210B /* FUICellBackgroundView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUICellBackgroundView.m; path = Classes/ios/FUICellBackgroundView.m; sourceTree = ""; }; + D1EFF61D9013A9997596EE7F75AEDE3F /* ParseUI-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ParseUI-prefix.pch"; sourceTree = ""; }; + D253FAF99DE0E9661935D36E6600717C /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; + D26D67D3B6418EC0A3EC02DFD678C696 /* PFPushController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushController.m; path = Parse/Internal/Push/Controller/PFPushController.m; sourceTree = ""; }; + D3308E5C88DF7BD7EB9571B8F71861E2 /* PFRESTObjectCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectCommand.h; path = Parse/Internal/Commands/PFRESTObjectCommand.h; sourceTree = ""; }; + D34C12E4F952DB5875CBA2FC470CEA4A /* PFObjectBatchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectBatchController.m; path = Parse/Internal/Object/BatchController/PFObjectBatchController.m; sourceTree = ""; }; + D3E3071B72FB3D58BE54787E6BDFB30E /* PFTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTableViewCell.m; path = ParseUI/Classes/Cells/PFTableViewCell.m; sourceTree = ""; }; + D4481075C8CA2C7CF0F9239E68853BE6 /* IQKeyboardManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardManager-Info.plist"; sourceTree = ""; }; + D464E14984EAF6352F7E733E899C8F4A /* PFRESTConfigCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTConfigCommand.h; path = Parse/Internal/Commands/PFRESTConfigCommand.h; sourceTree = ""; }; + D49A2F201D1F072E9F700F36FB9F6B9A /* PFLogInViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInViewController.h; path = ParseUI/Classes/LogInViewController/PFLogInViewController.h; sourceTree = ""; }; + D5BCBF924ED06727AAC5736473727FB8 /* PFPrimaryButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPrimaryButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h; sourceTree = ""; }; + D6A3F777F9D72A576946C81634647411 /* PFCachedQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCachedQueryController.h; path = Parse/Internal/Query/Controller/PFCachedQueryController.h; sourceTree = ""; }; + D6CC7CC57AD4796048E05E9C30825826 /* Unirest */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Unirest; path = Unirest.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + D76E57E96B10ED8D71DC4BE92815D2B3 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; + D79C12A61A4543E416CBB738D3FF37C3 /* ChameleonFramework-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ChameleonFramework-dummy.m"; sourceTree = ""; }; + D840D2F9AFF823F94F3AB0131703459B /* PFURLSessionUploadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionUploadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m; sourceTree = ""; }; + D853E3A07CB02F8C41AC94B33D18DE6E /* PFFieldOperationDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperationDecoder.m; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.m; sourceTree = ""; }; + D918045D3E6E8340A10A1948E5BB7798 /* PFConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfigController.m; path = Parse/Internal/Config/Controller/PFConfigController.m; sourceTree = ""; }; + D93710ABE14AC931BA5E37E5461EFE9D /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; + D9C88B55C686DDE9636FBFF719E4A77D /* Base64.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Base64.m; path = Unirest/Base64.m; sourceTree = ""; }; + D9E50F16F11C26B58CB696C26DE57E74 /* PFGeoPointPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPointPrivate.h; path = Parse/Internal/PFGeoPointPrivate.h; sourceTree = ""; }; + DA0DF40D1E6DB2A9A53542C123149969 /* ChameleonFramework.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ChameleonFramework.debug.xcconfig; sourceTree = ""; }; + DAE893D8A79BCE927BD34935557FC189 /* PFInstallationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationPrivate.h; path = Parse/Internal/Installation/PFInstallationPrivate.h; sourceTree = ""; }; + DB9AB176562A9D6550C05D4A4094FF0F /* UIImage+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIImage+ChameleonPrivate.h"; sourceTree = ""; }; + DBC114B642595675D739DDEDD016E9F1 /* FUIButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUIButton.h; path = Classes/ios/FUIButton.h; sourceTree = ""; }; + DC3331AEC86B8C52429A342C01652D63 /* PFQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQuery.m; path = Parse/PFQuery.m; sourceTree = ""; }; + DC8286821540402840D2F78184926242 /* PFConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig.h; path = Parse/PFConfig.h; sourceTree = ""; }; + DC82E912A46E0D98C54FA4D7AA8638BA /* Pods-FoodbLog */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-FoodbLog"; path = Pods_FoodbLog.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DCCBF38FA67936B62300896ABA01E42F /* PFURLSessionJSONDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionJSONDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h; sourceTree = ""; }; + DD00DBDBA4AB7937FF095E5352F14E53 /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperationManager.h; path = AFNetworking/AFHTTPRequestOperationManager.h; sourceTree = ""; }; + DD38371523A69B7D5F80DEF60A1EC8D3 /* PFEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue.h; path = Parse/Internal/PFEventuallyQueue.h; sourceTree = ""; }; + DE9F993B8C26D2CD762FFC2EB4E32734 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; + DF0826136CA6F04163DCAD76EB0BE45D /* PFUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUser.m; path = Parse/PFUser.m; sourceTree = ""; }; + DF725FD55935B6C23669417D4E1B2668 /* PFReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFReachability.h; path = Parse/Internal/PFReachability.h; sourceTree = ""; }; + DFD47DBE4E7606BA4FA86C0F5919CDD5 /* PFSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession_Private.h; path = Parse/Internal/Session/PFSession_Private.h; sourceTree = ""; }; + E15E68480948E1C08CA894190BF3AF27 /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; + E2117490959B9550A4868376B6579453 /* UIColor+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+Chameleon.h"; path = "Pod/Classes/Objective-C/UIColor+Chameleon.h"; sourceTree = ""; }; + E223A483DDF7AE6383953308A7288EC6 /* PFFieldOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperation.m; path = Parse/Internal/FieldOperation/PFFieldOperation.m; sourceTree = ""; }; + E291C26D7FB8D9A151C45977AB616E47 /* UNIJsonNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIJsonNode.h; path = Unirest/HttpResponse/UNIJsonNode.h; sourceTree = ""; }; + E2D1FC6E559818FF5E899D86DFDAE1F0 /* UITableViewCell+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableViewCell+FlatUI.m"; path = "Classes/ios/UITableViewCell+FlatUI.m"; sourceTree = ""; }; + E3523BF1D55FC301141D3E8EA5BD9A1F /* UNIHTTPRequestWithBody.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPRequestWithBody.m; path = Unirest/UNIHTTPRequestWithBody.m; sourceTree = ""; }; + E36DC6F0E757E7535DDD2E9C1B846AED /* PFPinningObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningObjectStore.h; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.h; sourceTree = ""; }; + E3A5971EA076048933873A26498305DB /* PFMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMacros.h; path = Parse/Internal/PFMacros.h; sourceTree = ""; }; + E474D6AB963D4ABAFB608C01EC10CCE0 /* PFPushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushState.m; path = Parse/Internal/Push/State/PFPushState.m; sourceTree = ""; }; + E572BEF3BF5FA574EE0EE4E0D2FDB479 /* Chameleon_.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Chameleon_.h; path = "Pod/Classes/Objective-C/Chameleon_.h"; sourceTree = ""; }; + E5855B0E065B8C1A0EADD0781BD28D00 /* UIProgressView+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+FlatUI.m"; path = "Classes/ios/UIProgressView+FlatUI.m"; sourceTree = ""; }; + E594ABB625D8E0146B3BC5AF5C3BD580 /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; + E61330560D82210F3152034DA8D29E3E /* IQKeyboardManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManager-umbrella.h"; sourceTree = ""; }; + E61428FE87E53D9A77A44F2EAFA62DD6 /* UNISimpleRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNISimpleRequest.m; path = Unirest/HttpRequest/UNISimpleRequest.m; sourceTree = ""; }; + E6BA7CC067B235E0FF566A94E1581577 /* PFSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabase.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m; sourceTree = ""; }; + E715B6385F222A65C0AEDD033DAC27BF /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; + E725EA90CDD636F75AA6136536B4106E /* PFURLSessionJSONDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionJSONDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m; sourceTree = ""; }; + E743DD9EBFBFF918EF56FABFE4C5AC4D /* PFSQLiteDatabaseResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseResult.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m; sourceTree = ""; }; + E7F24C0BF2AC1D3A0AB451BCE534C2D0 /* PFUserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserConstants.h; path = Parse/Internal/User/Constants/PFUserConstants.h; sourceTree = ""; }; + E936219EC6142DBDD297B11DCA11AC0A /* PFRelationState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState_Private.h; path = Parse/Internal/Relation/State/PFRelationState_Private.h; sourceTree = ""; }; + E99932D8C34D4E771914E628104B89C5 /* ChameleonMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonMacros.h; path = "Pod/Classes/Objective-C/ChameleonMacros.h"; sourceTree = ""; }; + EA4EB23C725FCF4754FDC1ECC1A03D47 /* UINavigationBar+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UINavigationBar+FlatUI.m"; path = "Classes/ios/UINavigationBar+FlatUI.m"; sourceTree = ""; }; + EA6600846C35A33A9E0A0436C4B4BC26 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; + EA75AE20BB255EFB336F605121156B56 /* PFCachedQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCachedQueryController.m; path = Parse/Internal/Query/Controller/PFCachedQueryController.m; sourceTree = ""; }; + EADC0A4005E0A455E24E378AAEACAC44 /* PFFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileManager.h; path = Parse/Internal/PFFileManager.h; sourceTree = ""; }; + EB082ABFA0DCDEA7C961D1A1D072C3B9 /* IQUIView+IQKeyboardToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIView+IQKeyboardToolbar.m"; path = "IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m"; sourceTree = ""; }; + EB1E0B109FE60D221F3E42A35EC080BC /* ParseInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseInternal.h; path = Parse/Internal/ParseInternal.h; sourceTree = ""; }; + EB2DEB083FAA7954B735F6FAF4BA4FEA /* PFACLState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState_Private.h; path = Parse/Internal/ACL/State/PFACLState_Private.h; sourceTree = ""; }; + EC3F8E5AAA0D556290B7B5552E7891B8 /* UIButton+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+Chameleon.m"; path = "Pod/Classes/Objective-C/UIButton+Chameleon.m"; sourceTree = ""; }; + EC9278D7F2E8ED952563707F9B4FB0C4 /* PFImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImageView.m; path = ParseUI/Classes/Views/PFImageView.m; sourceTree = ""; }; + ECE1874B575E1E5185B44168861EBBA9 /* PFOfflineQueryLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryLogic.m; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m; sourceTree = ""; }; + ED30F858AF7B9CE0A8573C496C34FE29 /* PFSignUpView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSignUpView.h; path = ParseUI/Classes/SignUpViewController/PFSignUpView.h; sourceTree = ""; }; + ED929F9AD4980BC36464DF3BE248120C /* IQKeyboardManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManager.h; path = IQKeyBoardManager/IQKeyboardManager.h; sourceTree = ""; }; + ED9A2647BBFB6D985C23B197AA1B2982 /* PFFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileState.m; path = Parse/Internal/File/State/PFFileState.m; sourceTree = ""; }; + EDF1B2BF95B7B8E40AF9358E2CAC9C93 /* NSArray+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+Chameleon.m"; path = "Pod/Classes/Objective-C/NSArray+Chameleon.m"; sourceTree = ""; }; + EE18541D7EEA1DE57DE7976E3835CA79 /* PFPropertyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo.m; sourceTree = ""; }; + EE1F78ECB62A69EB240E2BFAAD710CDB /* PFCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCategoryLoader.h; path = Parse/Internal/PFCategoryLoader.h; sourceTree = ""; }; + EE5ED387F92B10AA08591F932C87D0DF /* Unirest.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Unirest.modulemap; sourceTree = ""; }; + EE978A828BDE18C9C31167600F655876 /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; + EEFC9ED15A9741CB66AA57CF2B4D69FB /* PFPurchaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseController.h; path = Parse/Internal/Purchase/Controller/PFPurchaseController.h; sourceTree = ""; }; + EF607DC0E28A9F3234F18C9B3BA88690 /* PFRole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRole.h; path = Parse/PFRole.h; sourceTree = ""; }; + EF673633FFA2D7135116862CBD8BE0B9 /* PFCurrentUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentUserController.m; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.m; sourceTree = ""; }; + EFDB080D04D6824C62FACC8278749656 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; + F017C36C635B636A8A9720DF93844C2F /* PFConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig_Private.h; path = Parse/Internal/Config/PFConfig_Private.h; sourceTree = ""; }; + F01AF6F27447ED96CC1D67478AE5944A /* Parse-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Parse-Info.plist"; sourceTree = ""; }; + F032D7E1283777ACE202494C6F7BCD73 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; + F06AE122820D7A69B28B8EE2E62E85F1 /* UISlider+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UISlider+FlatUI.m"; path = "Classes/ios/UISlider+FlatUI.m"; sourceTree = ""; }; + F06ED24D1C39A0CFF4123EB0D9491BFB /* PFObjectUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectUtilities.m; path = Parse/Internal/Object/Utilities/PFObjectUtilities.m; sourceTree = ""; }; + F0849AC8F9BFE0E883A47F09527D2117 /* PFInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationController.m; path = Parse/Internal/Installation/Controller/PFInstallationController.m; sourceTree = ""; }; + F0F27237E7594BDC013703A579974879 /* PFMutableObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableObjectState.h; path = Parse/Internal/Object/State/PFMutableObjectState.h; sourceTree = ""; }; + F18000A5D7CD27A6122BE6E91FD82BC9 /* ChameleonFramework-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChameleonFramework-umbrella.h"; sourceTree = ""; }; + F19C8953497BC870280615D15B50D758 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; + F214F248D919BBE5E1846DA84E7EC571 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; + F24E7092B94D3B25D84A505A530066AE /* PFLoadingView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLoadingView.m; path = ParseUI/Classes/Internal/Views/PFLoadingView.m; sourceTree = ""; }; + F2BA222B9F01795A4208422B79E054CA /* PFAnalyticsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsUtilities.h; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h; sourceTree = ""; }; + F35C83A2CBD33B6D54CB34F091A81847 /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningEventuallyQueue.m; path = Parse/Internal/PFPinningEventuallyQueue.m; sourceTree = ""; }; + F364E09FEB64FC9E1C8B7224CDCE8E01 /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; + F38FDD5066166323AEDEE66D20C6F9C2 /* PFPushChannelsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushChannelsController.h; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.h; sourceTree = ""; }; + F3DEB5E0C029DA28C8320B373AD1B88D /* UINavigationController+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UINavigationController+Chameleon.m"; path = "Pod/Classes/Objective-C/UINavigationController+Chameleon.m"; sourceTree = ""; }; + F439F7531646055B955D7668822E655A /* PFRESTSessionCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTSessionCommand.m; path = Parse/Internal/Commands/PFRESTSessionCommand.m; sourceTree = ""; }; + F449C107CBE098205F80BDB0D60F2E22 /* PFOfflineObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineObjectController.m; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m; sourceTree = ""; }; + F44A3C87BEE43E3E45E5CF3D64032D69 /* UIImage+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+FlatUI.m"; path = "Classes/ios/UIImage+FlatUI.m"; sourceTree = ""; }; + F4555BF7ABB9786C4B80BF763FE75EA7 /* FUIButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUIButton.m; path = Classes/ios/FUIButton.m; sourceTree = ""; }; + F47F6AD14A34D9AF4DC5B0EC8FF52D24 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + F494433C963318EF0C17653A4A373201 /* IQToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQToolbar.h; path = IQKeyBoardManager/IQToolbar/IQToolbar.h; sourceTree = ""; }; + F552E66B16A2615DC0009C21B50D3642 /* PFCoreManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCoreManager.m; path = Parse/Internal/PFCoreManager.m; sourceTree = ""; }; + F5B5CF62D6DD8EC2B0ABA7B384CFB873 /* PFPropertyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo.h; sourceTree = ""; }; + F6895F2BAF98D8298BFB0A2C2E84DF25 /* PFResources.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFResources.h; path = ParseUI/Generated/PFResources.h; sourceTree = ""; }; + F6B30CADFCD2F0D69405E4D939DC3BFB /* UIColor+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+Chameleon.m"; path = "Pod/Classes/Objective-C/UIColor+Chameleon.m"; sourceTree = ""; }; + F7278CD831A6A182FCEB151BD633E223 /* PFMultiProcessFileLockController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLockController.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m; sourceTree = ""; }; + F7C53E20D1BF8377618EFF47699E99E0 /* KeyboardManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KeyboardManager.h; path = IQKeyBoardManager/KeyboardManager.h; sourceTree = ""; }; + F84B331B5D6AAF1548DD1BB004AE5C2A /* Bolts */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Bolts; path = Bolts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F863D0768304DA4198F0440CDF7AA8C1 /* PFKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeychainStore.m; path = Parse/Internal/PFKeychainStore.m; sourceTree = ""; }; + F87229E5105EE0FA00DE0B0D95E67052 /* UIView+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIView+ChameleonPrivate.h"; sourceTree = ""; }; + F8778205B24E6652290E0F5E7CA361EC /* PFJSONSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFJSONSerialization.h; path = Parse/Internal/PFJSONSerialization.h; sourceTree = ""; }; + F8C8EB38499DF1B91AD5834F3D8238B6 /* PFCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloud.m; path = Parse/PFCloud.m; sourceTree = ""; }; + F9264E1D10476FDE807BE7A3F3324C1F /* UNIUrlConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIUrlConnection.m; path = Unirest/UNIUrlConnection.m; sourceTree = ""; }; + F9A8AE9C1EA56C8732FF0143F957D513 /* PFImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImageCache.m; path = ParseUI/Classes/Internal/PFImageCache.m; sourceTree = ""; }; + FABD26BF571BCC663379AABBAAE7B44B /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLConnectionOperation.h; path = AFNetworking/AFURLConnectionOperation.h; sourceTree = ""; }; + FABD3C800CB44450C92F28069681BE92 /* BoltsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BoltsVersion.h; path = Bolts/Common/BoltsVersion.h; sourceTree = ""; }; + FB8B3149AFFBFA7C33EB94E521126BBF /* PFLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogging.h; path = Parse/Internal/PFLogging.h; sourceTree = ""; }; + FC5523A002FB0121BC9A4F24743AFB0D /* PFObjectSubclassingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassingController.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m; sourceTree = ""; }; + FC83E11ABE486AAF98952F9D81D4ED34 /* PFPurchase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchase.m; path = Parse/PFPurchase.m; sourceTree = ""; }; + FCE06702DA3E947891057A5BB5C23AB1 /* PFCommandCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandCache.m; path = Parse/Internal/PFCommandCache.m; sourceTree = ""; }; + FD4E574985753AA8FBFCD4DF93047E2C /* PFErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFErrorUtilities.m; path = Parse/Internal/PFErrorUtilities.m; sourceTree = ""; }; + FD99F6C0C8D35C9AECD61CAC8D4951B4 /* Pods-FoodbLog-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FoodbLog-acknowledgements.plist"; sourceTree = ""; }; + FDB1BAB3B8D54F4259C686820194F1B4 /* PFFileDataStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileDataStream.h; path = Parse/Internal/File/FileDataStream/PFFileDataStream.h; sourceTree = ""; }; + FDBF6836162C2F1E62D2A5B6917F4F50 /* PFOfflineQueryLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryLogic.h; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h; sourceTree = ""; }; + FDFED8D0FCA171BCC518F85E9793444E /* PFRect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRect.m; path = ParseUI/Classes/Internal/Extensions/PFRect.m; sourceTree = ""; }; + FF08CF3F86D480A8166480D6782736FD /* PFMutableQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableQueryState.m; path = Parse/Internal/Query/State/PFMutableQueryState.m; sourceTree = ""; }; + FF246D759D5911D6B15A849D032F9E71 /* PFObjectEstimatedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectEstimatedData.h; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h; sourceTree = ""; }; + FF48AB657BBC095D80AA753EDFA8198E /* PFURLConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLConstructor.m; path = Parse/Internal/HTTPRequest/PFURLConstructor.m; sourceTree = ""; }; + FF6E60AD4F8CE395B8997C363B38E9FD /* ChameleonFramework-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChameleonFramework-prefix.pch"; sourceTree = ""; }; + FFDAC5862665AC65E3E4CD90C8369020 /* Bolts-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-umbrella.h"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 072B266F6265B6D13FA98A3F6FC2B0B7 /* Frameworks */ = { + 05A298B14480994CEB5F25490E57D1CD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EC0114D4481435148BC84A2EDBBC7AC4 /* Foundation.framework in Frameworks */, - 4083C11735406B070C50A3F0EE869D82 /* ImageIO.framework in Frameworks */, + 2C9ABA75D5226F81794858C2526DCC7C /* CoreGraphics.framework in Frameworks */, + 7C57153FEFBA930A0F3DE7E6A5DDFD98 /* Foundation.framework in Frameworks */, + F868175B0C271A19B75F4993EEF107D1 /* QuartzCore.framework in Frameworks */, + 7ECD6A8CE8FF5825DDD32C63DD6F2B43 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 07C7C4672DEF49F8FB21993A7F583397 /* Frameworks */ = { + 0AF9CF3C76DBE562539FE47E28672C5A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 220645DE2CEE49F8337B8CEE9B24DA82 /* Foundation.framework in Frameworks */, + FDB6E1D811A52AD01DFD1128E8EF8911 /* CoreGraphics.framework in Frameworks */, + E333D533DE4361D5A3CE2F9D62281084 /* Foundation.framework in Frameworks */, + 5114F8D6A5939B847DDDC41E2B75D419 /* QuartzCore.framework in Frameworks */, + 237A599B046B4F3EB709E88AC0C2F107 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 375A26ACEC7AD247B13F80B8B136A4E3 /* Frameworks */ = { + 535965DE03A38610A3DF44D409F1BDF8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 88EADA4973AE1FEE667184FFFF8D2AF6 /* Foundation.framework in Frameworks */, + FE7ED99030498028605F37EB2B3518B7 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 431F2351CC13B7BD033ECDBC279A83FC /* Frameworks */ = { + 5C1186D4F3AA17F08B0E5E18291421B4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 89A77C3D22986C2A698E695CAEFE0700 /* AudioToolbox.framework in Frameworks */, - B34971AA2F492262DC290548D036FB9E /* Bolts.framework in Frameworks */, - 3C64DD057709EE6FBC1C3ECA57190668 /* CFNetwork.framework in Frameworks */, - 244B1AEF00568E1C2DF604812D37F68A /* CoreGraphics.framework in Frameworks */, - 27807F377EF9514FD15B400CF601DE4C /* CoreLocation.framework in Frameworks */, - 045B4AF365765B9288107C388AC7CDC1 /* Foundation.framework in Frameworks */, - 73AFC60BBDB9F55916E851790E95BF7A /* QuartzCore.framework in Frameworks */, - 1BFBBAED468A71E741B9B1EA8DDCD84D /* Security.framework in Frameworks */, - DBD729AF645DD5F138040B2AE18ECBEF /* StoreKit.framework in Frameworks */, - 4EADE6F30CCDB0CB4E7DD0F9CE2138DD /* SystemConfiguration.framework in Frameworks */, + B31A56A27408319D70D1547B5FA51EAD /* CoreText.framework in Frameworks */, + 5E1CA14AAE9164EA9144A2D66C7ABCED /* Foundation.framework in Frameworks */, + 5D0F6EB9FF087444D8C35C94F587FA90 /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 60C3D26E2C8843CA90222B621C57A0DA /* Frameworks */ = { + 6F507917EE997E5E24E07D04329502F4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9C6E0E56B52CA1D3B3A0B703770CAE28 /* CoreGraphics.framework in Frameworks */, - C92FFCE3C06282C2D08A98524079060D /* Foundation.framework in Frameworks */, - E13B595DBD5150D4B49772197400C99F /* MobileCoreServices.framework in Frameworks */, - D1CD80193235F94027F4182A056190A6 /* Security.framework in Frameworks */, - 3A7FE81FF3C97DDFA9F5D7B692369683 /* SystemConfiguration.framework in Frameworks */, + 1DBDEF199D3AEF9310F2935DBBBF1F89 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6FF4BEFF7B03474CA9992F70F986EBD3 /* Frameworks */ = { + 70B9087E2E161834B897DE5A668DCA45 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BFFE9519EE8562F0475D608948DBBF44 /* Bolts.framework in Frameworks */, - FB78E1EED116341AD5EF7C599173ABCD /* CoreGraphics.framework in Frameworks */, - 4806A50F7A4DAA174839EFBD769CEC28 /* Foundation.framework in Frameworks */, - 52690608022C3FC67334E1B4CEFD2075 /* Parse.framework in Frameworks */, - E1761D6F516823FBFD10DD72C4656A02 /* QuartzCore.framework in Frameworks */, - 33EA698C418DC89924743F66BEBD4BB1 /* UIKit.framework in Frameworks */, + 53363111800D0961A419E660FABB61E8 /* AudioToolbox.framework in Frameworks */, + 287FFE08BB132472B7CE5BB3F47506B6 /* CFNetwork.framework in Frameworks */, + 24F2BC96841F8A37EC52957AB59F2B70 /* CoreGraphics.framework in Frameworks */, + 1D1597CB5319D82AB03C4656A4FFC3E2 /* CoreLocation.framework in Frameworks */, + 055F10145C443934BB202FE4BE8E3DB2 /* Foundation.framework in Frameworks */, + A677EA486B6C150619DB9868EF9771BD /* QuartzCore.framework in Frameworks */, + 509F838C90BD33FB102E30FA553546A5 /* Security.framework in Frameworks */, + 4258F7777937094D7BE116408C78DC46 /* StoreKit.framework in Frameworks */, + C0DC97F79BE2050D4DE691E1D991A391 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 80E6DD3820978CAACD4A2E3F5EB2B3F8 /* Frameworks */ = { + A7595237C8CA923B81E67B2998909D90 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 305A3C67521F65A1F3748A841816DC0B /* Foundation.framework in Frameworks */, + CC4E8765CAC02E51F101B700BDB09598 /* CoreGraphics.framework in Frameworks */, + 6ED02164B5E06B799C50961364EEC1DC /* Foundation.framework in Frameworks */, + 7CBF2011432C597B6BC5A384EE6454B3 /* MobileCoreServices.framework in Frameworks */, + 98D637C604695D57419F1D6809F263D6 /* Security.framework in Frameworks */, + 22BAE8994ADCD5A6A4D71352BA0D0954 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8DF0F522B67FD65AE6A2212D2CDBEB8B /* Frameworks */ = { + C76329B6D29A067AF194CAACFB3A8B2D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2E8B5131B7D8788D688EF2ED7C654406 /* CoreText.framework in Frameworks */, - 2A91F18E93B99740BB80D48C536DD0B2 /* Foundation.framework in Frameworks */, - 097E6D2C2111CC0AC7461AF45F1D8755 /* QuartzCore.framework in Frameworks */, + 3F9F253CF143CE15C66E99719E1296F6 /* Foundation.framework in Frameworks */, + 808B6A1291FF164B160C5ED8A99652A5 /* ImageIO.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9693F40C1D537760F25B5604FE9C3B9A /* Frameworks */ = { + E5E0181A204601DE496DB5E7D4ABE0B1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - ACBC76600923025F280CB9B8B7AB4F0A /* CoreGraphics.framework in Frameworks */, - A5945AF79FE4C3CC8A97251440C3F4E3 /* Foundation.framework in Frameworks */, - 583A8B552243810FD5CAB2C252EA246D /* QuartzCore.framework in Frameworks */, - 924358D61DABAE0D987FCD59C876641F /* UIKit.framework in Frameworks */, + AE7B412FE2E9E3E2F7CE6FBED6304B96 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - E1208EB7D50F9D15A29F953A7FE1248B /* Frameworks */ = { + FF5E3D2C3355425B1E11123AF7B4DBC2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 52C42A3F8ECB3F273A0FD4F686914C47 /* Foundation.framework in Frameworks */, + 36D51FC3C4F0F93BF917316E39608365 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1B854270002C00C4A0B7BB8566691130 /* Support Files */ = { + 0527DDC257CC042E913C840E55B79F4B /* Core */ = { isa = PBXGroup; children = ( - 580257472F171E86E013E78B8128D785 /* Info.plist */, - B1DBD3176E91CA20504EA02C798F6093 /* IQKeyboardManager.modulemap */, - 569E0DFDD549E86512FD99D4120EFAA0 /* IQKeyboardManager.xcconfig */, - 142AD357A99708346D62ABE27889D639 /* IQKeyboardManager-dummy.m */, - 4CD8B7617B4D6002836CBCD695CB70D7 /* IQKeyboardManager-prefix.pch */, - 6868458725E6CC0FF0C6BC77E989CCE3 /* IQKeyboardManager-umbrella.h */, + D76E57E96B10ED8D71DC4BE92815D2B3 /* NSData+ImageContentType.h */, + CE8BDCF7E26F4C56C0ADF6B761072CC2 /* NSData+ImageContentType.m */, + 765C0EAAC0CBC6AF531C333F05E087B9 /* SDImageCache.h */, + 3613B45ABCFAEBD5BADAE64A82A4746B /* SDImageCache.m */, + A50114757684801C1DE99C04001D04C4 /* SDWebImageCompat.h */, + A356B9DFCE0F6FA18DF48B6098125F04 /* SDWebImageCompat.m */, + 6CB133094501625DCA52F72F4C4E2B46 /* SDWebImageDecoder.h */, + 311DAB5AE58D986B329A83CDA6086370 /* SDWebImageDecoder.m */, + 7861C0328B9B37380137F55D5B766F21 /* SDWebImageDownloader.h */, + 5E6A437EBB862966A809668856F8E247 /* SDWebImageDownloader.m */, + 412765A1C5B6953A288C3BAEBC8E6B37 /* SDWebImageDownloaderOperation.h */, + 4BE6842882A4FB9F520482896F6AB111 /* SDWebImageDownloaderOperation.m */, + 305805548D87E2C5165C0A0FED697B4F /* SDWebImageManager.h */, + C9045272DB5D24BA18512C635B70BF34 /* SDWebImageManager.m */, + A042B54870F2691CE1141CC51249B831 /* SDWebImageOperation.h */, + 4DAB5D2AB74AB4E6E40BC4E2BA5EC42C /* SDWebImagePrefetcher.h */, + E715B6385F222A65C0AEDD033DAC27BF /* SDWebImagePrefetcher.m */, + 01682B06EC1A9F5115B2823C70E94CA9 /* UIButton+WebCache.h */, + 566D307A23F6EE2FF9B47E6A1C68C59E /* UIButton+WebCache.m */, + B5B9189D6AB1779845E876D0D0424221 /* UIImage+GIF.h */, + ACF7C931823A68DDBB4BD5C0A4C40927 /* UIImage+GIF.m */, + 6133AB3618602C2A8838511FEC730F13 /* UIImage+MultiFormat.h */, + 8FD253470226BBD7EAC24A931D19F7D9 /* UIImage+MultiFormat.m */, + 11DA25D5854F43477EA8697C9A8A9677 /* UIImageView+HighlightedWebCache.h */, + F032D7E1283777ACE202494C6F7BCD73 /* UIImageView+HighlightedWebCache.m */, + F19C8953497BC870280615D15B50D758 /* UIImageView+WebCache.h */, + CF3F287B1CCA362FEB1A80FCD3146513 /* UIImageView+WebCache.m */, + 1579F2982C42C23D86C4671BEFC5BC9E /* UIView+WebCacheOperation.h */, + A515ED69EEDB97450E752EA285213DEA /* UIView+WebCacheOperation.m */, ); - name = "Support Files"; - path = "../Target Support Files/IQKeyboardManager"; + name = Core; sourceTree = ""; }; - 1DB28A3FE565ACCB915B049516698D18 /* ChameleonFramework */ = { + 172C6AB29CA1720C0D85F380DD22AFB9 /* Targets Support Files */ = { isa = PBXGroup; children = ( - E19D72437AA8F886F4D86F8F81B58A9D /* Default */, - 948ABF74FAE5CA89C3C32AC00E949B0F /* Support Files */, + CC67B748D6D89E34B3EBA3591D5D4298 /* Pods-FoodbLog */, ); - path = ChameleonFramework; + name = "Targets Support Files"; sourceTree = ""; }; - 2237AC2C7BA48C187AEAAE1297C94C2A /* iOS */ = { + 184BEF9B5CABA24D9A779A2C07AD0583 /* Support Files */ = { isa = PBXGroup; children = ( - 50EF6BFB1B51671BA3A588A55B967472 /* AudioToolbox.framework */, - 21CC19E2C87AFF19ADB03FA733CB1953 /* CFNetwork.framework */, - 73AEBCE7EBCC8AA67FB8C9E277D17E93 /* CoreGraphics.framework */, - 32354577455AA4A647CBA8E3512A5B7A /* CoreLocation.framework */, - 22572AC878D5BE990EF6D072798377E8 /* CoreText.framework */, - 5DB6BC0F44FADD25C922940ACF72E8E2 /* Foundation.framework */, - A51395ED2E252C6A88DABEFDBDDB8EE2 /* ImageIO.framework */, - CAA631FA9A2B83D46BA332E8F8821786 /* MobileCoreServices.framework */, - 93F0280896C56576AC9033B1015CC54A /* QuartzCore.framework */, - DE54DB6796C0FB12AC1B5FA18EAC0D36 /* Security.framework */, - A54FA38C63D857F9723CD97B1EEC26DE /* StoreKit.framework */, - 14F57C1395EAAA6BF0969FAF3CEACB04 /* SystemConfiguration.framework */, - 884235E504353D70ED1552FA3C950881 /* UIKit.framework */, + 45802840BA5072DF962ED54D09FE8843 /* Bolts.modulemap */, + 335A452C51FBD35625AA2BC327ADC7F5 /* Bolts-dummy.m */, + 0A509D3953B659E7181EC82469B94A9A /* Bolts-Info.plist */, + 1950AD1FE382802A49D281B1441BD20A /* Bolts-prefix.pch */, + FFDAC5862665AC65E3E4CD90C8369020 /* Bolts-umbrella.h */, + 7BE179E9C8B4046FCC237E5DA15BB57D /* Bolts.debug.xcconfig */, + 1C002313FB340FD9903A219A795BD6EE /* Bolts.release.xcconfig */, ); - name = iOS; + name = "Support Files"; + path = "../Target Support Files/Bolts"; sourceTree = ""; }; - 27852652E6D436A1318FC916EF0344F8 /* FlatUIKit */ = { + 1DAB1DDDDEABBA4EEA6A022495946264 /* NSURLConnection */ = { isa = PBXGroup; children = ( - 41FC81788EC8B32D98571DFB25FFA43F /* FlatUIKit.h */, - 73BC51738F3FAAEE3D05B8A6205DFB81 /* FUIAlertView.h */, - 181C4E315BFA03A426998EBF9FED2616 /* FUIAlertView.m */, - 16B57DFA233CDD41F9CBF2EAC30FEB3D /* FUIButton.h */, - FB58DA014582A87D188CB8089758DF86 /* FUIButton.m */, - F20F9C68EDBCD177CACC721BD11D0002 /* FUICellBackgroundView.h */, - 5D38CDF4EBB1D62CCE0EAB280D6C7478 /* FUICellBackgroundView.m */, - 895783DFE891E3A117F5B9AE9A04C4CB /* FUIPopoverBackgroundView.h */, - 0F39661C276400B9DFFCA5E6AC2F5FEA /* FUIPopoverBackgroundView.m */, - 22C9302ABB92E8C64F812A55B64178FE /* FUISegmentedControl.h */, - 479870A54E4C0784E09BABC858FAE81A /* FUISegmentedControl.m */, - 1F4056A3D848C81DD6C4943C0C3DEC17 /* FUISwitch.h */, - 973ECCD84B38F38AD2373E6B314D30A7 /* FUISwitch.m */, - 7189FA61279ECB3D508F4CDC70CC531A /* FUITextField.h */, - 387423F5FDBDCB213C41BCA75B12DF5D /* FUITextField.m */, - E1BB6ED375FB84D2A9EC26785EE0AF1B /* NSString+Icons.h */, - 1975C53F78F9228E9C7F23E9F4ABA5FE /* NSString+Icons.m */, - D39C18F1087363DA78B7AF8228B31041 /* UIBarButtonItem+FlatUI.h */, - EE6C59A2AB9D0F99FD7D3E3AA0512736 /* UIBarButtonItem+FlatUI.m */, - 2E7C4C5ACBC2CA96E8A42ABD4A159BBB /* UIColor+FlatUI.h */, - D46C7BBB9E7029D26FF7C191FB0F27E2 /* UIColor+FlatUI.m */, - 32C8E3331FFE95E5B0CE1F1F65D7EE57 /* UIFont+FlatUI.h */, - 06E9A79DE9206B87BE74F471F54F9AD0 /* UIFont+FlatUI.m */, - 80A6747CA95094227C1769E7029F101E /* UIImage+FlatUI.h */, - 49CDC6C1BAFD451541A07318A6666A2F /* UIImage+FlatUI.m */, - A9B77D002118589E53B6B4E8E232CFB9 /* UINavigationBar+FlatUI.h */, - 017A97106C6887F74558A68F58973669 /* UINavigationBar+FlatUI.m */, - FBAFB0E07236F9DACE08B20299F82F99 /* UIPopoverController+FlatUI.h */, - 4BDDA33E16DC66582EF95196C6F77136 /* UIPopoverController+FlatUI.m */, - DCD0D941688A6475E88FA24B8EE6E272 /* UIProgressView+FlatUI.h */, - 1EB0842FFEC81DB8129CA41730BB264D /* UIProgressView+FlatUI.m */, - 5D24992010A1CD9B06DC44C2BDE41893 /* UISlider+FlatUI.h */, - 525E18ED456A67A6C083FF690D580D99 /* UISlider+FlatUI.m */, - A2A54E97FABF661517A1762333B79AB6 /* UIStepper+FlatUI.h */, - 054C63340788AB84052D2C3EFDB3BDDA /* UIStepper+FlatUI.m */, - 8B0290200A3CD16A2526FF77F159042C /* UITabBar+FlatUI.h */, - A280C3E99D716C42901CD456018C0E66 /* UITabBar+FlatUI.m */, - 11D918B1DBF342814743C236913D6EEB /* UITableViewCell+FlatUI.h */, - 09E0AD1CB33CE49A06DF396A16EB44A4 /* UITableViewCell+FlatUI.m */, - 7CA87DD640C394F87E065F2D91959B58 /* UIToolbar+FlatUI.h */, - 1D534F9545A9DA36F94320F0181C5501 /* UIToolbar+FlatUI.m */, - A81D2C53497304243D5CB5A6019A879C /* Resources */, - 8690ED39642F0B3BD761301742F33E1B /* Support Files */, + 96B0AB09E758FB641EEAB8FB2C91C6C9 /* AFHTTPRequestOperation.h */, + B9BC37C36EDC5E7749DCC7CEC01B8E91 /* AFHTTPRequestOperation.m */, + DD00DBDBA4AB7937FF095E5352F14E53 /* AFHTTPRequestOperationManager.h */, + 978F1D1FC858DCFF654EA8F44B32F5DF /* AFHTTPRequestOperationManager.m */, + FABD26BF571BCC663379AABBAAE7B44B /* AFURLConnectionOperation.h */, + B4E5AC1FC469AA6601F3D23C8271F2CA /* AFURLConnectionOperation.m */, ); - path = FlatUIKit; + name = NSURLConnection; sourceTree = ""; }; - 2AE80E91E6B2522ACB678E6F78847F71 /* NSURLSession */ = { + 25EEC3565A27693E64AB8F08DCF47B36 /* iOS */ = { isa = PBXGroup; children = ( - CCBCC644097EC37BCE679EE3F3E76534 /* AFHTTPSessionManager.h */, - B16B2C84C57EBD6CFFAE8942DF8C1910 /* AFHTTPSessionManager.m */, - CA92D4296853F6D1AF511A3E56D26B0E /* AFURLSessionManager.h */, - C014A0946EFDB150DF88EA618EF6A35A /* AFURLSessionManager.m */, + 62333A4D0E9AF8700874F1F22E9827D6 /* AudioToolbox.framework */, + F47F6AD14A34D9AF4DC5B0EC8FF52D24 /* CFNetwork.framework */, + D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */, + 9F62BD8D055CECF254F18875CD46DFA2 /* CoreLocation.framework */, + 11733E9AB23CFF872D2D8C693E69A845 /* CoreText.framework */, + 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */, + 3691CA8C96F3BE2D408B9E1E7FCDD5A3 /* ImageIO.framework */, + 799A25ED12D346D0E10745AF43D345D4 /* MobileCoreServices.framework */, + 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */, + CC336EDAC9FA746257F40BD540DC9A75 /* Security.framework */, + EA6600846C35A33A9E0A0436C4B4BC26 /* StoreKit.framework */, + 3780C220917B4DD9DC02DDD7323405B0 /* SystemConfiguration.framework */, + 3DE1802829062F013D376CB812C19065 /* UIKit.framework */, ); - name = NSURLSession; + name = iOS; sourceTree = ""; }; - 30F2496C2BAF593BA4E8CC87D35FACB6 /* Resources */ = { + 2BC3E698BB02D8A2D272C4933EA4F72B /* Reachability */ = { isa = PBXGroup; children = ( - 458C815BEBC54F8DDE0D496B144D4926 /* IQKeyboardManager.bundle */, + 5896CFB908B877F5C2F4D5066E6E80D3 /* AFNetworkReachabilityManager.h */, + F214F248D919BBE5E1846DA84E7EC571 /* AFNetworkReachabilityManager.m */, ); - name = Resources; + name = Reachability; sourceTree = ""; }; - 51DAD19568FF44278C6F600366A03986 /* ParseUI */ = { + 2FF61124D8A80D2D8DE9D6F350DE5041 /* Tasks */ = { isa = PBXGroup; children = ( - 280F5D3DCF3108AF47CF8BB4F3A6E251 /* ParseUI.h */, - A0418A853E7240E53037AA831D5D0A57 /* ParseUIConstants.h */, - 111416E352A374E5572C2A0923719A7D /* PFActionButton.h */, - 8A7A6EC76B67BFE97D72C327BEE579A7 /* PFActionButton.m */, - 87E5BE149B74031F7D503DEA017BAAF4 /* PFActivityIndicatorCollectionReusableView.h */, - 564066383C34EA69FF40575B4F602BD0 /* PFActivityIndicatorCollectionReusableView.m */, - 8054A84736C7E30F048F96C56BF8AD15 /* PFActivityIndicatorTableViewCell.h */, - 020C493C4366159B060D27D05A4264EE /* PFActivityIndicatorTableViewCell.m */, - F9476414FFBA4A18C4113640F84A51D9 /* PFCollectionViewCell.h */, - 96F4CF51DCA1800B1216B335A1065B20 /* PFCollectionViewCell.m */, - 0DAFFF182ED1EBA987995F61A6A223C8 /* PFColor.h */, - C7D9D7B4B9B8F3BF20EB1371E8568DEF /* PFColor.m */, - 430DF1B522DBE43E7FECCD02BD215175 /* PFDismissButton.h */, - 445DD7A5A6030BC73417C0194ADF04DA /* PFDismissButton.m */, - 29D52266B5750467BA0428D47EE49E5D /* PFImage.h */, - EA5C374819AEBD53E0D5F1D734155695 /* PFImage.m */, - 64439EB290B8FA9845544A1DEA783BA4 /* PFImageCache.h */, - BBA6FA187736BA1C3D8A168CFFD3ED7C /* PFImageCache.m */, - 99C896B7ED249DADC8B48DB72D9370D9 /* PFImageView.h */, - B063D943B310E78B3D5CB17AB9252598 /* PFImageView.m */, - 5BC665F170641D769B9A99262F203250 /* PFLoadingView.h */, - DBFDB98CF3C5203ED1947FB7978F111E /* PFLoadingView.m */, - E375C6AED0190D9C67BBE0F21356C911 /* PFLocalization.h */, - E00CA5AD72C3FB68BA10ADBC27D808C3 /* PFLogInView.h */, - 38DB4714E17A08D8DCBCDBBEEC3895F4 /* PFLogInView.m */, - 9A6B265414CAC10A84A1B1D3A8C1DFF8 /* PFLogInView_Private.h */, - 1029345A196003C0EE67B1F1B3C6F1CA /* PFLogInViewController.h */, - 9FEFC9A58974A874BB87FF5345A6245F /* PFLogInViewController.m */, - 2A72A93443D78BFA94C80C7CBAFD5D38 /* PFPrimaryButton.h */, - F2E43F17F2C4AFCBD7C41B354CFD4110 /* PFPrimaryButton.m */, - 215BC1A6142BD130A05E3E3A4C8C12C8 /* PFProductTableViewController.h */, - 5A46A8CFC11DCD8D2AD372EC17EC957C /* PFProductTableViewController.m */, - 0C9CC69BD277ACA79976DE7696F7D082 /* PFPurchaseTableViewCell.h */, - FED305E7E186A0EDC106E74204F4C4DD /* PFPurchaseTableViewCell.m */, - 400DCDC4E9E38584679B4F52E6D0D946 /* PFQueryCollectionViewController.h */, - C37215148F69DC2DE5BCDF103D9EBCD3 /* PFQueryCollectionViewController.m */, - B7882188B6F860973D29C8A074FF8023 /* PFQueryTableViewController.h */, - A26E4702F966BF133A51C178E3F12663 /* PFQueryTableViewController.m */, - 6B953C43F63BC08C42ECA4BEFFCB844D /* PFRect.h */, - BDE1EF913DC938935CD74F59A32BBBC6 /* PFRect.m */, - 75141355D477772C4B5E5DD52B69FD10 /* PFResources.h */, - D53D3A6402C17CB2FB58232563BF2DFC /* PFResources.m */, - 3CF9A31CA35A27E97FBBA6C7F1094DD0 /* PFSignUpView.h */, - D88644925B762799165B07723831F61A /* PFSignUpView.m */, - 1378696FD6E88031008A312FFA80F0BE /* PFSignUpViewController.h */, - 21E02715B92BE89482B27815AC036627 /* PFSignUpViewController.m */, - 6C3E24B4E9AF44DE4EE49241CE0F751D /* PFTableViewCell.h */, - 320CFC4C5A2917CD08B1E18952FBA50C /* PFTableViewCell.m */, - D21DDC280E179412F2B736E809065821 /* PFTextButton.h */, - CD61F185287A802EF797C04EFAD3593B /* PFTextButton.m */, - C0BE03A6E7E183FC699EBB426F345255 /* PFTextField.h */, - AF65D7903D16F1336FA4C292618EE4D1 /* PFTextField.m */, - 6DAF268985E635B91784C5906DAF3927 /* PFUIAlertView.h */, - F9B353920B0C8860AD30FFA8FB0E7C84 /* PFUIAlertView.m */, - AC540949A783BEE9AD05BB89C7D97784 /* Resources */, - B238741968349943BABE935AC41D4670 /* Support Files */, + 4C575A54BA05AD27990EABB75C2F2926 /* BFCancellationToken.h */, + 1DEB4FC3937D0DC7EB7B1CE6AE0C79D6 /* BFCancellationToken.m */, + 6BF3E9A8E7DEEA28BC70D87AF3DBEC43 /* BFCancellationTokenRegistration.h */, + 69460567E8D0F3A25083496C96A69461 /* BFCancellationTokenRegistration.m */, + 6D76EBB2E083B394F15EA609C72DA53F /* BFCancellationTokenSource.h */, + 8C9643764C40666FA3BDA5483199A807 /* BFCancellationTokenSource.m */, + BC79A8ADF356BE7E0C97159A9173BD3E /* BFDefines.h */, + 70C2CCBB87CBCB7C3F8AED8C1396EF19 /* BFExecutor.h */, + 0FFE8C5EB6588366F5E38E8025B4CAD0 /* BFExecutor.m */, + E594ABB625D8E0146B3BC5AF5C3BD580 /* BFTask.h */, + D253FAF99DE0E9661935D36E6600717C /* BFTask.m */, + B2B797BD23176FC43BD0D3B5634BE059 /* BFTaskCompletionSource.h */, + 3C3F57E6B4F1FB2E1F1904A1F180B1D6 /* BFTaskCompletionSource.m */, + 9F97B8CE87B16ACD8D4260933E48F819 /* Bolts.h */, + E15E68480948E1C08CA894190BF3AF27 /* Bolts.m */, + FABD3C800CB44450C92F28069681BE92 /* BoltsVersion.h */, ); - path = ParseUI; + name = Tasks; sourceTree = ""; }; - 5A90F11C5D44D3B75A04499BE4B2CF8E /* IQKeyboardManager */ = { + 35E526B6E4CA6A7E89FE8C5A5B1F2259 /* Frameworks */ = { isa = PBXGroup; children = ( - 214BFEFA3DCA45F9F77B522BE284D059 /* IQBarButtonItem.h */, - E829FC20C3C5109FE89CB86523FDB840 /* IQBarButtonItem.m */, - AA23AC7E45B8B079E7D327730D22F393 /* IQKeyboardManager.h */, - F737C85949702755570FD4507BF9272E /* IQKeyboardManager.m */, - 1ADEC44E5D6F5925C1A7DB967F2B1183 /* IQKeyboardManagerConstants.h */, - 8B5A65FF9D6CFC8EBF9BD2B2B541A345 /* IQKeyboardManagerConstantsInternal.h */, - 07189350CCFE83C37773559EAE2F1E99 /* IQKeyboardReturnKeyHandler.h */, - 51019DCF51504FFB0E18650FF8076701 /* IQKeyboardReturnKeyHandler.m */, - AF9162235873B70447F51065419627E0 /* IQNSArray+Sort.h */, - 70E06F8737725A9805CE924BC61F207F /* IQNSArray+Sort.m */, - 4687602C78AD0F9B7C4EA5B7D151BE8E /* IQSegmentedNextPrevious.h */, - 672624EB4DB14FD16D375F3074B89502 /* IQSegmentedNextPrevious.m */, - 989BA274614EE585E049BE41CB1B0E3D /* IQTextView.h */, - C6A7E92CB10858CD3FABB85A6FD99B84 /* IQTextView.m */, - 6B27A3D9E9D60FD7397856DF5BC27CB4 /* IQTitleBarButtonItem.h */, - 3F72FEBD3BFAC399D64BBF2628A4BB5D /* IQTitleBarButtonItem.m */, - AB62F77C89A99FF36884B62A8A2030FB /* IQToolbar.h */, - 1773A1E245CCEF2E969C3BF79F4F2458 /* IQToolbar.m */, - 213CBF9D8367A95FC91F9C691871F00D /* IQUITextFieldView+Additions.h */, - 8CC75AB1002F3294731EA254B7F3D7FC /* IQUITextFieldView+Additions.m */, - 465D78482E8BED6A866F750CE0177935 /* IQUIView+Hierarchy.h */, - 930C5DC459F360648A3E300EB979867D /* IQUIView+Hierarchy.m */, - 8E3CBE479BC045A20A860642A628208D /* IQUIView+IQKeyboardToolbar.h */, - EBFA7A7850EC4610EEB3C6261E1F2785 /* IQUIView+IQKeyboardToolbar.m */, - 60500F371C7FC40E17FBBDEB2A5859B0 /* IQUIViewController+Additions.h */, - CDF6842F6121DBA0831C14D0E8F65015 /* IQUIViewController+Additions.m */, - 0EFD8CF6CCC0DD60743E813435223F07 /* IQUIWindow+Hierarchy.h */, - 3DD67D11257E1D4BDD39573F974F005C /* IQUIWindow+Hierarchy.m */, - 419BCF873CD408CCC0A983F2D2D9FDCA /* KeyboardManager.h */, - 30F2496C2BAF593BA4E8CC87D35FACB6 /* Resources */, - 1B854270002C00C4A0B7BB8566691130 /* Support Files */, + 25EEC3565A27693E64AB8F08DCF47B36 /* iOS */, ); - path = IQKeyboardManager; + name = Frameworks; sourceTree = ""; }; - 5F5C2EAD295CDE23974596D488EC3E5C /* SDWebImage */ = { + 3D9B326F58695BF3E80F4219F6DF0F72 /* Support Files */ = { isa = PBXGroup; children = ( - DB0B77C9F7E83271AAB0B4F0A63CA39C /* Core */, - A3EAA870947D0DCF059ADC98670510E3 /* Support Files */, + 3AE452759C3419530F9948A6E7852434 /* SDWebImage.modulemap */, + 2D3DED295E0CF4409F8BC8976A09F184 /* SDWebImage-dummy.m */, + A9ACE875C5C88F2FC048BA2052E6739F /* SDWebImage-Info.plist */, + C3E9C164B6FC7D790B44FC7EB8462572 /* SDWebImage-prefix.pch */, + 044039FB6F0BAE9C54969FBC7A846A8A /* SDWebImage-umbrella.h */, + A7C121EE4B1DE511B784FCD1F75C3CAF /* SDWebImage.debug.xcconfig */, + 8F4B1D49F33B5E34B800900D19CA98E3 /* SDWebImage.release.xcconfig */, ); - path = SDWebImage; + name = "Support Files"; + path = "../Target Support Files/SDWebImage"; sourceTree = ""; }; - 6B4D97A7DECEAD97EC9367AD0A5011D0 /* AFNetworking */ = { + 40907AAAD10D7320EC60B42B0F11BB6C /* Unirest */ = { isa = PBXGroup; children = ( - 698DBAF223726A3F15202086E20202C6 /* AFNetworking.h */, - D66720A349B8003B2ABE787ED39F477E /* NSURLConnection */, - 2AE80E91E6B2522ACB678E6F78847F71 /* NSURLSession */, - 818F1E2BB8736D4B0EC755D90222B1D2 /* Reachability */, - D778D4A1C5F941925427D8ADDAB863DC /* Security */, - AC49AE2AC9D2B214EFB382BEBD04CFFD /* Serialization */, - F4CA14B78B1E949E3661F2EBD324B854 /* Support Files */, - F34C45A99F042208B242BC97FB92A88E /* UIKit */, + 473595C4DE2B48B0D88D8F99E55C5F45 /* Base64.h */, + D9C88B55C686DDE9636FBFF719E4A77D /* Base64.m */, + B3DEB5E877C555C69169163E7AE3DCD1 /* UNIBaseRequest.h */, + 3B46EEECD7599B121204708C32CECD6C /* UNIBaseRequest.m */, + AD75432B2BF6D1FC707CFCCD3527D979 /* UNIBodyRequest.h */, + 27CF6BC1B2E5C52B3244B8D531442D06 /* UNIBodyRequest.m */, + 7A42508E95E64986B0EDAFC9E7C7942A /* UNIHTTPBinaryResponse.h */, + A89D66CA82F4BB4ED27F23A368117AD8 /* UNIHTTPBinaryResponse.m */, + 242785A2D898F8B3178C5C87B1AD01AC /* UNIHTTPClientHelper.h */, + 38FA89344906DEDDD5D2F77DE3B534B8 /* UNIHTTPClientHelper.m */, + BC984301125702EFEAEC41E5B9293303 /* UNIHTTPJsonResponse.h */, + 2B4F6F85D50E4CA8F5E785A0C0E8F842 /* UNIHTTPJsonResponse.m */, + A283BA24B8BC2F745E053B68490B43ED /* UNIHTTPRequest.h */, + 61BDE38ED20108AC210E4C985B982B1B /* UNIHTTPRequest.m */, + 843985569B6BCF4CD645497A32668195 /* UNIHTTPRequestWithBody.h */, + E3523BF1D55FC301141D3E8EA5BD9A1F /* UNIHTTPRequestWithBody.m */, + 9F8AB594F361E76ACA20213E0F3D3860 /* UNIHTTPResponse.h */, + 5272189E4887F0A7478864335C376F72 /* UNIHTTPResponse.m */, + C7F69AB63C5B9D83F940D7C9CA0CE984 /* UNIHTTPStringResponse.h */, + 7B09852DB9FD0FD28F70ECC80DCF2091 /* UNIHTTPStringResponse.m */, + E291C26D7FB8D9A151C45977AB616E47 /* UNIJsonNode.h */, + 5FE07D72A0D452DFEAACC04F124006CF /* UNIJsonNode.m */, + 6226CB7D1425E15682AC63FA51921DD7 /* UNIRest.h */, + 91C373870E6D645F6FF004CCD43B21E6 /* UNIRest.m */, + 45CDE5CE83E5FA7A91A9F1B5B0BA5342 /* UNISimpleRequest.h */, + E61428FE87E53D9A77A44F2EAFA62DD6 /* UNISimpleRequest.m */, + 8E279FCCEB7C1AEB25BCE46F878D745B /* UNIUrlConnection.h */, + F9264E1D10476FDE807BE7A3F3324C1F /* UNIUrlConnection.m */, + 6C8212FADE4F1FA885795CEDA81FBD14 /* Support Files */, ); - path = AFNetworking; + name = Unirest; + path = Unirest; sourceTree = ""; }; - 75D98FF52E597A11900E131B6C4E1ADA /* Pods */ = { + 42F219A198EDEA28867E3B8A76FF6399 /* IQKeyboardManager */ = { isa = PBXGroup; children = ( - E8446514FBAD26C0E18F24A5715AEF67 /* Info.plist */, - 79A9DEDC89FE8336BF5FEDAAF75BF7FC /* Pods.modulemap */, - D0405803033A2A777B8E4DFA0C1800ED /* Pods-acknowledgements.markdown */, - 87B213035BAC5F75386F62D3C75D2342 /* Pods-acknowledgements.plist */, - 894E5DA93A9F359521A89826BE6DA777 /* Pods-dummy.m */, - E7F21354943D9F42A70697D5A5EF72E9 /* Pods-frameworks.sh */, - CBC0F7C552B739C909B650A0F42F7F38 /* Pods-resources.sh */, - 2BCC458FDD5F692BBB2BFC64BB5701FC /* Pods-umbrella.h */, - 977577C045EDA9D9D1F46E2598D19FC7 /* Pods.debug.xcconfig */, - DA312349A49333542E6F4B36B329960E /* Pods.release.xcconfig */, + 1D206417FCB7E126D2076A47DEDF1A1C /* IQBarButtonItem.h */, + B72FD366845653BD01ECF1385B7EA338 /* IQBarButtonItem.m */, + ED929F9AD4980BC36464DF3BE248120C /* IQKeyboardManager.h */, + 701A5B85169EB58682F05C75AC13EB3E /* IQKeyboardManager.m */, + 1D3240C4C5BE274F71D28337454BCF6D /* IQKeyboardManagerConstants.h */, + 015D3940BAC78105EDF03F2BB91A46E6 /* IQKeyboardManagerConstantsInternal.h */, + 1EC3FC2DD569F8D2763648C4F041C266 /* IQKeyboardReturnKeyHandler.h */, + 54B90D0232ABF1B3E61A9DC3EEAA226A /* IQKeyboardReturnKeyHandler.m */, + 36EA36B4327C3CAA76DB71E90785D0B4 /* IQNSArray+Sort.h */, + 6D30F5219BDECE4875E21C7C337CAB52 /* IQNSArray+Sort.m */, + C034B2ACBE6538C3217772E314D8114F /* IQSegmentedNextPrevious.h */, + 2C5CF7AB604577F8094BB7A4D0B1EA38 /* IQSegmentedNextPrevious.m */, + BB33008CB3C2594164293FDA78B53616 /* IQTextView.h */, + 1D3EC67DF2778EB45CB9E74820D228B3 /* IQTextView.m */, + BA5631014AC595496E91221859D20693 /* IQTitleBarButtonItem.h */, + 3EFEAE643868EF55305AEDA7B9B5EF2E /* IQTitleBarButtonItem.m */, + F494433C963318EF0C17653A4A373201 /* IQToolbar.h */, + CEB87D6EE15561B81AB4D70AD70B70FB /* IQToolbar.m */, + 8F452750888B246772EB8A6877EBAF3F /* IQUITextFieldView+Additions.h */, + 383265CA7C2F466092EF3C7F1E49C8DE /* IQUITextFieldView+Additions.m */, + 9661CC0A310A5FFEF6DAC9066D0D906F /* IQUIView+Hierarchy.h */, + 989D519E262D75CFB924E7B8A1C4ADDF /* IQUIView+Hierarchy.m */, + 8EFB510E35A2E19894B0116FF11AF2F8 /* IQUIView+IQKeyboardToolbar.h */, + EB082ABFA0DCDEA7C961D1A1D072C3B9 /* IQUIView+IQKeyboardToolbar.m */, + 6EFCD2984A81FFD36BD6341ECAD197B3 /* IQUIViewController+Additions.h */, + 4DCD97868BF52A2DA515BB0660CE3150 /* IQUIViewController+Additions.m */, + C1E8E202F03E9DFA6AFB0F098ABD3A06 /* IQUIWindow+Hierarchy.h */, + 25397001B9BF4C1125DCF8D75A89971C /* IQUIWindow+Hierarchy.m */, + F7C53E20D1BF8377618EFF47699E99E0 /* KeyboardManager.h */, + BA5F913FE40214681746B9F1CB36AD8F /* Resources */, + 4D02E934B6CF23422178CD868DB92236 /* Support Files */, ); - name = Pods; - path = "Target Support Files/Pods"; + name = IQKeyboardManager; + path = IQKeyboardManager; sourceTree = ""; }; - 7A382C9B678F7FF369C0C21776504180 /* Frameworks */ = { + 4C6F811A370BAC7085002387B6FB5163 /* AFNetworking */ = { isa = PBXGroup; children = ( - 05A161C52BA4C93E0F7C7F443ED3785E /* Bolts.framework */, - 5CA3956F2F7B9DB4B12A3579F8BED6E6 /* Parse.framework */, - 2237AC2C7BA48C187AEAAE1297C94C2A /* iOS */, + 68664BFE50321FF5CE50A110AAE7E2E5 /* AFNetworking.h */, + 1DAB1DDDDEABBA4EEA6A022495946264 /* NSURLConnection */, + 5B3F5C7632AEB22DD4907D271307F426 /* NSURLSession */, + 2BC3E698BB02D8A2D272C4933EA4F72B /* Reachability */, + A5DCF58F985CE9C88DBDDE05CF1FE71E /* Security */, + 74971D8533C6DBDC443C05EE2E7469A5 /* Serialization */, + BC7D3B67D42FFD3E1347CBCA43F97813 /* Support Files */, + D198DD0422CB3811CCB34AA14A138785 /* UIKit */, ); - name = Frameworks; + name = AFNetworking; + path = AFNetworking; sourceTree = ""; }; - 7D92BBC08692ADEF38D6E159EE5963AD /* Support Files */ = { + 4D02E934B6CF23422178CD868DB92236 /* Support Files */ = { isa = PBXGroup; children = ( - 6BFB0430DCAF7342A05C4CD84AA118D2 /* Bolts.modulemap */, - 0B4A2BAAC5964A649072D028A69828A7 /* Bolts.xcconfig */, - FA4B4072C875B54C90E5CC56115DA2BF /* Bolts-dummy.m */, - FAADD666632F8A5050BF932913958DC4 /* Bolts-prefix.pch */, - 63444FBD778C241A425F28E45FB6A4A2 /* Bolts-umbrella.h */, - 03C910DC3C9EAA286803431D343309B5 /* Info.plist */, + C0C70DBBC50F5AFE36A69BF965DF34C8 /* IQKeyboardManager.modulemap */, + 748B0CC576A8F49BAB1FF66E84471822 /* IQKeyboardManager-dummy.m */, + D4481075C8CA2C7CF0F9239E68853BE6 /* IQKeyboardManager-Info.plist */, + BF4323EB4A4B780935FB44201186AA89 /* IQKeyboardManager-prefix.pch */, + E61330560D82210F3152034DA8D29E3E /* IQKeyboardManager-umbrella.h */, + 857F0BA6F21ED8BE24BBE09EC4796DD0 /* IQKeyboardManager.debug.xcconfig */, + 4BD4DB7C36686D11738734B18DF72463 /* IQKeyboardManager.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/Bolts"; + path = "../Target Support Files/IQKeyboardManager"; sourceTree = ""; }; - 7DB346D0F39D3F0E887471402A8071AB = { + 57BC7D63782B2A635093374BF42CC3A9 /* Support Files */ = { isa = PBXGroup; children = ( - BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, - 7A382C9B678F7FF369C0C21776504180 /* Frameworks */, - CE3572A90DFE380FDCBEC537AE9CF8DF /* Pods */, - EE62598D14C185E64BC5D5758D9EBE48 /* Products */, - B7B80995527643776607AFFA75B91E24 /* Targets Support Files */, + 170B12DAFF7BA65AF6617BDB082A0351 /* FlatUIKit.modulemap */, + 20D75D05C3716B1B1FCE88C6C2E9312D /* FlatUIKit-dummy.m */, + A9681B204C96458D2D417C45571AB098 /* FlatUIKit-Info.plist */, + 220FC34DE425735D70DB9D8C4D741695 /* FlatUIKit-prefix.pch */, + 15797AFCB16424C69558924B2C21A6E3 /* FlatUIKit-umbrella.h */, + 9DA741B4EC0DCED29063435717645FC3 /* FlatUIKit.debug.xcconfig */, + 8B8FAEB0939BC673396EF39DB43C5723 /* FlatUIKit.release.xcconfig */, ); + name = "Support Files"; + path = "../Target Support Files/FlatUIKit"; sourceTree = ""; }; - 818F1E2BB8736D4B0EC755D90222B1D2 /* Reachability */ = { + 595CD60B097830EF6B8B59E1F985D800 /* Pods */ = { isa = PBXGroup; children = ( - 340FDC8139576C7FAFDA34FC6FA32C81 /* AFNetworkReachabilityManager.h */, - 78FD0C91FA78980063D8363E85FF7315 /* AFNetworkReachabilityManager.m */, + 4C6F811A370BAC7085002387B6FB5163 /* AFNetworking */, + E8942D476A67018116BB908E43FDA24B /* Bolts */, + 8EE67F52563142B064FA2D7D3BFF110C /* ChameleonFramework */, + A457854110B31D2FF17880780BF3CC9C /* FlatUIKit */, + 42F219A198EDEA28867E3B8A76FF6399 /* IQKeyboardManager */, + B3DE231F1E249B215E83E5CF5E9AD9F4 /* Parse */, + 715038D97A8E539C9D2A3F9A8C9A1176 /* ParseUI */, + 5AC431BFEE005CF60CA52C30AF6ACCF8 /* SDWebImage */, + 40907AAAD10D7320EC60B42B0F11BB6C /* Unirest */, ); - name = Reachability; + name = Pods; sourceTree = ""; }; - 8690ED39642F0B3BD761301742F33E1B /* Support Files */ = { + 5AC431BFEE005CF60CA52C30AF6ACCF8 /* SDWebImage */ = { isa = PBXGroup; children = ( - 8A17DD478515E42D5BDFA0E3904D1BE8 /* FlatUIKit.modulemap */, - D6939221D085E5F1308A2B09EC84A8FB /* FlatUIKit.xcconfig */, - 781AAE433E7B2E65709B75066F0B5B8D /* FlatUIKit-dummy.m */, - C873579765BF8F01D37429D453D6BBD6 /* FlatUIKit-prefix.pch */, - D9DC10C5D58CA654587C102A2D9AB0F7 /* FlatUIKit-umbrella.h */, - 6215DA3A77039C50B75AED8FC270F904 /* Info.plist */, + 0527DDC257CC042E913C840E55B79F4B /* Core */, + 3D9B326F58695BF3E80F4219F6DF0F72 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/FlatUIKit"; + name = SDWebImage; + path = SDWebImage; sourceTree = ""; }; - 86FCB8691800FB0B78269CE26D3CED9B /* Unirest */ = { + 5B3F5C7632AEB22DD4907D271307F426 /* NSURLSession */ = { isa = PBXGroup; children = ( - 3A26B58BB9CF52CB918DB7AFCBD39A82 /* Base64.h */, - A8790641E8E896F7C5FE93C04AF0C64B /* Base64.m */, - 229EA31BF1622CEADC763DBE38272F7B /* UNIBaseRequest.h */, - BD1854542CC0D92ACF2AB3F821DADBD9 /* UNIBaseRequest.m */, - AC266D051A2E16F08229630682665D45 /* UNIBodyRequest.h */, - 41EDEF6519ED977D63C2247DFD5A1E7F /* UNIBodyRequest.m */, - F9EF953ADCADA1A251E9323131F70F15 /* UNIHTTPBinaryResponse.h */, - 7BDCA1AAEF4745A195464ACE049E133E /* UNIHTTPBinaryResponse.m */, - 73856CC2B008DC55022AD9FCC2AD19AE /* UNIHTTPClientHelper.h */, - C8A145036FC8B98160AAF10120A5EEF9 /* UNIHTTPClientHelper.m */, - AF13FF764B0AD249E4820CA29F05FF1D /* UNIHTTPJsonResponse.h */, - 94B22E37D02A86293A063773ACD7E464 /* UNIHTTPJsonResponse.m */, - 02BB568F82766393033FEE2267792E4B /* UNIHTTPRequest.h */, - 78698C19DFDE818FEDA3F7ADD32F3664 /* UNIHTTPRequest.m */, - A5B144F5DE20F0C9141DDA95DB67AA39 /* UNIHTTPRequestWithBody.h */, - 00485ACEA6057321188E09242DCB45CF /* UNIHTTPRequestWithBody.m */, - F5895DDF80CD5C0F172240E8EF6ADB6F /* UNIHTTPResponse.h */, - 23ACB2B7432184BA453E98ED0E2EDBED /* UNIHTTPResponse.m */, - 168335B29B073BD3E6C9DCE33793F3F3 /* UNIHTTPStringResponse.h */, - 3551766882C50016BF54BEF1A2806D87 /* UNIHTTPStringResponse.m */, - D218E6E9217CF6B09EE11F316F2BDC2D /* UNIJsonNode.h */, - DBA35F1F048CEE8DCF4BEC592328E5CF /* UNIJsonNode.m */, - 592E53EF56C0467535E73FA3211C5C7A /* UNIRest.h */, - 8583B03CF719746652269BBF2917F4CE /* UNIRest.m */, - 10C40E8D14D8388ECC0708FE0A0E4FDA /* UNISimpleRequest.h */, - 0796250D30A27D5316D74D277081D040 /* UNISimpleRequest.m */, - F7A1836D57286EA1DC6B4FB15B3D9ADF /* UNIUrlConnection.h */, - CCC3A88CE615BBD76C105F8042FB8D4A /* UNIUrlConnection.m */, - E3AE315F07920E1FAB247D7A4F1B3972 /* Support Files */, + EFDB080D04D6824C62FACC8278749656 /* AFHTTPSessionManager.h */, + BEF1B2C844D9D029D40DCE5288DA37E5 /* AFHTTPSessionManager.m */, + 3667C7F789954F098ADC741D622D52B7 /* AFURLSessionManager.h */, + 7D75D7FA476F50BC5FB3F3B0641D2926 /* AFURLSessionManager.m */, ); - path = Unirest; + name = NSURLSession; sourceTree = ""; }; - 948ABF74FAE5CA89C3C32AC00E949B0F /* Support Files */ = { + 6C8212FADE4F1FA885795CEDA81FBD14 /* Support Files */ = { isa = PBXGroup; children = ( - 104F56B38E4BE40C5E2BC199D3AF6768 /* ChameleonFramework.modulemap */, - 16828D6C5E0FE1FF417BD7153C923545 /* ChameleonFramework.xcconfig */, - 247240BB32080D2A5B4CFF53D3AB001E /* ChameleonFramework-dummy.m */, - FA4332E41276A275F1F34711E78CBC39 /* ChameleonFramework-prefix.pch */, - BBB27FEB94C2B7FE3B0DD9AB84BCD1EC /* ChameleonFramework-umbrella.h */, - E75AAA342D86F0B426498D2AE5DA6DCC /* Info.plist */, + EE5ED387F92B10AA08591F932C87D0DF /* Unirest.modulemap */, + A28B62FB34B8E41CEE484AD8817B831C /* Unirest-dummy.m */, + 70D40D77353891DBFC1CDF8EFFB36FC5 /* Unirest-Info.plist */, + 23412283DC2CC20C08F72706EB4BF409 /* Unirest-prefix.pch */, + 937BA62AFDBF0A1259E42BCF5763391E /* Unirest-umbrella.h */, + CEE21A440006EE2C4B423EFAE0DC86AB /* Unirest.debug.xcconfig */, + 532AAB9D359ECDC94F8B03BB863AC81E /* Unirest.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/ChameleonFramework"; + path = "../Target Support Files/Unirest"; sourceTree = ""; }; - A3EAA870947D0DCF059ADC98670510E3 /* Support Files */ = { + 715038D97A8E539C9D2A3F9A8C9A1176 /* ParseUI */ = { isa = PBXGroup; children = ( - 53F486043AD2A7C3EB99E7A23D499924 /* Info.plist */, - 9985A4AA550A3D19099C7D6296D77938 /* SDWebImage.modulemap */, - 81D83DAA30D8226773AF7A7178B0B6BD /* SDWebImage.xcconfig */, - 7577D0E1E50364D2BC3E96468B5A8B08 /* SDWebImage-dummy.m */, - 89F3E8D0730EE9469B8344ADE5D70D9D /* SDWebImage-prefix.pch */, - EFA3E7B0A7046719D611EF8F8C9A7939 /* SDWebImage-umbrella.h */, + A6D188FC37D6AAAB2E2FBE6F57F7EE82 /* ParseUI.h */, + 830900A05A897F050CC8C0CCDE4C4FD8 /* ParseUIConstants.h */, + 1C796738B070BC90BE32479A8A3AF602 /* PFActionButton.h */, + 8536E7EDEE9BFAF06216BADC69B65005 /* PFActionButton.m */, + 4B071309D9B499D128868D443A721FC7 /* PFActivityIndicatorCollectionReusableView.h */, + 0F03D75A8EAB99E67ACE53F63B414F22 /* PFActivityIndicatorCollectionReusableView.m */, + 98B7E2A8BF0A20332398DEB41B1BB68E /* PFActivityIndicatorTableViewCell.h */, + 86BD4117D04BA8012C142C487374653B /* PFActivityIndicatorTableViewCell.m */, + AFA7104945F1D9E5D257AF888DF068F6 /* PFCollectionViewCell.h */, + 53523337F4B830F83880CFDC298F2BC8 /* PFCollectionViewCell.m */, + 5407D6309498466D3BD9EEE5DC9171F2 /* PFColor.h */, + 171D6E3ADAA1BB99E7913D83084A2274 /* PFColor.m */, + C5C549C5C71BC97E1890902EFB8FB31F /* PFDismissButton.h */, + 2D44A8F3669FDFCF5D7BBCD8CFCD25AC /* PFDismissButton.m */, + B76589E19EEC53370B66781B36DA63ED /* PFImage.h */, + 83B8FAAF482B78AC548BDC44BA540C3A /* PFImage.m */, + 392D3E8B1EE935766CE3A0E9996B235F /* PFImageCache.h */, + F9A8AE9C1EA56C8732FF0143F957D513 /* PFImageCache.m */, + 7D6CC34BA2E5393D2D3F739F59596E4C /* PFImageView.h */, + EC9278D7F2E8ED952563707F9B4FB0C4 /* PFImageView.m */, + 0E151F5F8DCE58DAE5D1BA2B8EF1ABE8 /* PFLoadingView.h */, + F24E7092B94D3B25D84A505A530066AE /* PFLoadingView.m */, + 8FFE49908079C5362E67099F8C05E1B8 /* PFLocalization.h */, + 3EDBAED551FD57F89EBFB1F16C24A8BC /* PFLogInView.h */, + 409309719BF6A320534CB7DAFF568B83 /* PFLogInView.m */, + B1DAEDA8CCCACC84601EECDB3E6D1FF6 /* PFLogInView_Private.h */, + D49A2F201D1F072E9F700F36FB9F6B9A /* PFLogInViewController.h */, + 9CF59640D2C379A8552A7FE126379C1A /* PFLogInViewController.m */, + D5BCBF924ED06727AAC5736473727FB8 /* PFPrimaryButton.h */, + B37DB5C5090B2B2D7BED7A2071CCDA07 /* PFPrimaryButton.m */, + C50F078A36FD9673AD03D42BF7FC663E /* PFProductTableViewController.h */, + 077B7B33826673C09B30B8671D0097CF /* PFProductTableViewController.m */, + 780D44B2A921C4D352FA9A6D9693F79A /* PFPurchaseTableViewCell.h */, + 6CFB2DE553F71F9BD4D38BFE889EE5A1 /* PFPurchaseTableViewCell.m */, + 32588BB30F6E0F5B2DD13FB47DEBCC27 /* PFQueryCollectionViewController.h */, + 7A8E2C8071F308F79E8DC8D5E1A0A736 /* PFQueryCollectionViewController.m */, + 49B4F56ABCA4652DC76E6114451571CB /* PFQueryTableViewController.h */, + 7A7759BCCF26709D483AEAA4CA39B1AC /* PFQueryTableViewController.m */, + 22E7AE4FBF90398DB0FD1B35A9DD34AC /* PFRect.h */, + FDFED8D0FCA171BCC518F85E9793444E /* PFRect.m */, + F6895F2BAF98D8298BFB0A2C2E84DF25 /* PFResources.h */, + 44E593737C598C091CC7B69331EE8F5A /* PFResources.m */, + ED30F858AF7B9CE0A8573C496C34FE29 /* PFSignUpView.h */, + B8F7790A71F9CD28C39B9D26DA94ED71 /* PFSignUpView.m */, + 2FD643ED6BE8B1DFB4B3D62C42982411 /* PFSignUpViewController.h */, + 9EB80548C95ADD762223EC007944AF45 /* PFSignUpViewController.m */, + 15E60AC5AE5D9C7E54C124BD0AF98894 /* PFTableViewCell.h */, + D3E3071B72FB3D58BE54787E6BDFB30E /* PFTableViewCell.m */, + D0687D024DA00AAE7B4F8366D819654C /* PFTextButton.h */, + 50CAE388BE03392981EB34F0ED05A9DC /* PFTextButton.m */, + 819412AD0928AF8171877E3BEC3035CA /* PFTextField.h */, + 1AA2C962E61F10AADB5795A8761860F4 /* PFTextField.m */, + 2F0311DC1C98B85666BEDBEE32749F74 /* PFUIAlertView.h */, + 8C9859B01D21C19A7695D3E4BC335D14 /* PFUIAlertView.m */, + C9E21EB76BAE08F39E47EEBAA84FD02F /* Resources */, + 9F70FF0C1705B6B3A8BFD6EE508FD3A2 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/SDWebImage"; + name = ParseUI; + path = ParseUI; sourceTree = ""; }; - A81D2C53497304243D5CB5A6019A879C /* Resources */ = { + 74971D8533C6DBDC443C05EE2E7469A5 /* Serialization */ = { isa = PBXGroup; children = ( - A33D64DFDE960845EFBE18C004B51247 /* flat-ui-icons-regular.ttf */, - A82C0A5B3CB5F1436C7E2A5F0543ABC5 /* Lato-Bold.ttf */, - AC61BEB041A14C32EEC908BD93EC3D53 /* Lato-Italic.ttf */, - 79386F7E1DE21CAF81AF526BD30B8A95 /* Lato-Light.ttf */, - AF63697BC3DC8455B0CDF64447936DEC /* Lato-Regular.ttf */, + 47047F8FC46BB309AE276DC772A8E367 /* AFURLRequestSerialization.h */, + D93710ABE14AC931BA5E37E5461EFE9D /* AFURLRequestSerialization.m */, + 389E8A9F78577F9DC088BC37445C2F27 /* AFURLResponseSerialization.h */, + 1760FE20743A856B0B1A742482064BC4 /* AFURLResponseSerialization.m */, ); - name = Resources; + name = Serialization; sourceTree = ""; }; - AC49AE2AC9D2B214EFB382BEBD04CFFD /* Serialization */ = { + 878B5CB6B5EAE6A1BDF0FFBC6AAB6C5E /* Resources */ = { isa = PBXGroup; children = ( - 415EFD8319500DD739DEF0680C2937FD /* AFURLRequestSerialization.h */, - 0E680D1B9471E7031E6AE543909FCE25 /* AFURLRequestSerialization.m */, - 3593A73D342B1EFDA86078A912A7AABD /* AFURLResponseSerialization.h */, - D8A9951D90F820CABE4AF9DC10B30028 /* AFURLResponseSerialization.m */, + BDB6A8639913CC9852F97AECC7B36C74 /* en.lproj */, ); - name = Serialization; + name = Resources; sourceTree = ""; }; - AC540949A783BEE9AD05BB89C7D97784 /* Resources */ = { + 8EE67F52563142B064FA2D7D3BFF110C /* ChameleonFramework */ = { isa = PBXGroup; children = ( - 9D3AD8A69DC720901BD1A037490C5F03 /* en.lproj */, + 92040C15E58C872F516680892A06F6FA /* Default */, + F387619E937BAFBEDDAF6DD4559FAC1B /* Support Files */, ); - name = Resources; + name = ChameleonFramework; + path = ChameleonFramework; sourceTree = ""; }; - B238741968349943BABE935AC41D4670 /* Support Files */ = { + 92040C15E58C872F516680892A06F6FA /* Default */ = { isa = PBXGroup; children = ( - 077770DAB9A48F6D1B560999F9216C78 /* Info.plist */, - DE5ED9EEE5E7116BA5F8E1D471BFF3C8 /* ParseUI.modulemap */, - 39943054D23B3B7CB70A494690FC60EA /* ParseUI.xcconfig */, - 7E674A27E491B0E73114499235656BA3 /* ParseUI-dummy.m */, - 47B29B50130D2C7B7BD5BA3291CE55FA /* ParseUI-prefix.pch */, - 2D2543AFDB68E8D9AF03BF013BCC4294 /* ParseUI-umbrella.h */, + 59CCCB05A2EBA3189A6BE62B37274EC2 /* Chameleon.h */, + E572BEF3BF5FA574EE0EE4E0D2FDB479 /* Chameleon_.h */, + 1A5FB006DED3350DEBDAA366AA9B3C93 /* Chameleon_.m */, + 3C1BEBF049C3CF3B9440DB6E9743072A /* ChameleonConstants.h */, + A740D31E8046CDB8D8368E00E9329E79 /* ChameleonConstants.m */, + 1BBB82019D63DE4FA7F0B92670365270 /* ChameleonEnums.h */, + E99932D8C34D4E771914E628104B89C5 /* ChameleonMacros.h */, + 866C32999AC6688E43E9E3A792BC2D34 /* NSArray+Chameleon.h */, + EDF1B2BF95B7B8E40AF9358E2CAC9C93 /* NSArray+Chameleon.m */, + 7C5002465C0FC38F707FE42128EF8087 /* UIButton+Chameleon.h */, + EC3F8E5AAA0D556290B7B5552E7891B8 /* UIButton+Chameleon.m */, + E2117490959B9550A4868376B6579453 /* UIColor+Chameleon.h */, + F6B30CADFCD2F0D69405E4D939DC3BFB /* UIColor+Chameleon.m */, + 24DB6CC2B14662F6E9B1E046CD7199F7 /* UIColor+ChameleonPrivate.h */, + 27E94F52DD7FEA4FD150E6DFECA07CF1 /* UIColor+ChameleonPrivate.m */, + DB9AB176562A9D6550C05D4A4094FF0F /* UIImage+ChameleonPrivate.h */, + 44E08AAB6C070B945737B41031CFCAC4 /* UIImage+ChameleonPrivate.m */, + 7DAFE2C00F715262F9AF47201AE5B463 /* UILabel+Chameleon.h */, + 0263C9D12EC81C1962B428D0F0711A32 /* UILabel+Chameleon.m */, + 65C5E78DF211DF65F36E36C9FC0D1B01 /* UINavigationController+Chameleon.h */, + F3DEB5E0C029DA28C8320B373AD1B88D /* UINavigationController+Chameleon.m */, + F87229E5105EE0FA00DE0B0D95E67052 /* UIView+ChameleonPrivate.h */, + 464C0397F3E6DFAFEB38909A49A88023 /* UIView+ChameleonPrivate.m */, + A66795F738318920B0D6E941B13871CF /* UIViewController+Chameleon.h */, + 656E2AE30EB08EBE4FFC367B7AE4DEAE /* UIViewController+Chameleon.m */, ); - name = "Support Files"; - path = "../Target Support Files/ParseUI"; + name = Default; sourceTree = ""; }; - B7B80995527643776607AFFA75B91E24 /* Targets Support Files */ = { + 9F70FF0C1705B6B3A8BFD6EE508FD3A2 /* Support Files */ = { isa = PBXGroup; children = ( - 75D98FF52E597A11900E131B6C4E1ADA /* Pods */, + 021C106DF227E61ECA4E5555FF2F7CD6 /* ParseUI.modulemap */, + 586F2194798AE4805A6F8FE5E6F506DE /* ParseUI-dummy.m */, + B2D681EF9EF4F360FEE47AF2D4784401 /* ParseUI-Info.plist */, + D1EFF61D9013A9997596EE7F75AEDE3F /* ParseUI-prefix.pch */, + A505892A83F06969DC7D47BC6FC72B07 /* ParseUI-umbrella.h */, + 80331DEE2BF41B2AD40413E3C5DB2B28 /* ParseUI.debug.xcconfig */, + 3C1AC1660363A329A284E332A3E5298C /* ParseUI.release.xcconfig */, ); - name = "Targets Support Files"; + name = "Support Files"; + path = "../Target Support Files/ParseUI"; sourceTree = ""; }; - B9847B3742D0A294C228288B8E4D4092 /* Resources */ = { + A457854110B31D2FF17880780BF3CC9C /* FlatUIKit */ = { isa = PBXGroup; children = ( - 7D2C8F743E5C2B50ECAA21543B1A6444 /* en.lproj */, + 44C38AD5632D2AB0489B5A84DAE0E5C3 /* FlatUIKit.h */, + ADCB853B7D560FC831BF87685AD57A9B /* FUIAlertView.h */, + 8B33B936A9A7DB28766EEBFB4899F4ED /* FUIAlertView.m */, + DBC114B642595675D739DDEDD016E9F1 /* FUIButton.h */, + F4555BF7ABB9786C4B80BF763FE75EA7 /* FUIButton.m */, + CD104B7AD1FBF1F91303950B3BD5DE5A /* FUICellBackgroundView.h */, + D1E1BEDB5A8BC95C80FA17589D69210B /* FUICellBackgroundView.m */, + 23D27BEF28A85F709CBDB0B8CB65DE48 /* FUIPopoverBackgroundView.h */, + CEE4FFACD555D625ACE047DB1EE70750 /* FUIPopoverBackgroundView.m */, + C137855C14937C945753B86B2CDA79D9 /* FUISegmentedControl.h */, + 2A6C012A4F3D5A672788A760562623DA /* FUISegmentedControl.m */, + 3B28432D4AB483D9A86C6817FB52BF45 /* FUISwitch.h */, + 48E6A4215AF02A0535DF6FEEA6CF7E97 /* FUISwitch.m */, + 4D4160C37DEDD4C39102E2A7D159A51F /* FUITextField.h */, + BBF5C97238A5D929CC8B153AEF2E9179 /* FUITextField.m */, + 22F5A1329C6658B77CE9B997619A6610 /* NSString+Icons.h */, + 81311E91F15A9ACF24DDCF24A36B0F39 /* NSString+Icons.m */, + 9BC33545EC4D27DD8FBAA13A736EB786 /* UIBarButtonItem+FlatUI.h */, + C0AD563E6E870F9D52DAD712828C35FB /* UIBarButtonItem+FlatUI.m */, + 73B12CABD664167D981D0544B9928022 /* UIColor+FlatUI.h */, + D0B9EF05BBF29D5217191E4094EB3982 /* UIColor+FlatUI.m */, + 2B3157DA60A76070C8C1BC098218AB51 /* UIFont+FlatUI.h */, + 8BC6A55FA3CDF0EF58B5D4BDD6F6CAD8 /* UIFont+FlatUI.m */, + 0071EAC09DA0FFDA8FB3410D2936CA80 /* UIImage+FlatUI.h */, + F44A3C87BEE43E3E45E5CF3D64032D69 /* UIImage+FlatUI.m */, + 788310F842000FA289D2F1CDCD98A85C /* UINavigationBar+FlatUI.h */, + EA4EB23C725FCF4754FDC1ECC1A03D47 /* UINavigationBar+FlatUI.m */, + 11779F8DF80724C9D85DA16EE6D8F4EB /* UIPopoverController+FlatUI.h */, + A97F7D38BC76709C3A8940B642F9736F /* UIPopoverController+FlatUI.m */, + 86363196FAD187D55BE15125F559D10B /* UIProgressView+FlatUI.h */, + E5855B0E065B8C1A0EADD0781BD28D00 /* UIProgressView+FlatUI.m */, + 8442B999E5775411EEFFBC7781637303 /* UISlider+FlatUI.h */, + F06AE122820D7A69B28B8EE2E62E85F1 /* UISlider+FlatUI.m */, + BBEB6900A59681CD6E50CF6B6C2D6F9A /* UIStepper+FlatUI.h */, + 4436838248BB3C88A53FD7F6F9B1BDBF /* UIStepper+FlatUI.m */, + 71F87070D4783A8D6F354D8BCAB875C3 /* UITabBar+FlatUI.h */, + 04E51A30E638BD5F2089972DC7339D76 /* UITabBar+FlatUI.m */, + 94D6AC2286C9B645008316B81D8156C7 /* UITableViewCell+FlatUI.h */, + E2D1FC6E559818FF5E899D86DFDAE1F0 /* UITableViewCell+FlatUI.m */, + 20B6097286CC2E4C80A144D823873289 /* UIToolbar+FlatUI.h */, + 5EB12118FD4DE039BC62EF0E15829099 /* UIToolbar+FlatUI.m */, + FCCC03A49F4A917E53DF929ED3AE9864 /* Resources */, + 57BC7D63782B2A635093374BF42CC3A9 /* Support Files */, ); - name = Resources; + name = FlatUIKit; + path = FlatUIKit; sourceTree = ""; }; - CE3572A90DFE380FDCBEC537AE9CF8DF /* Pods */ = { + A5DCF58F985CE9C88DBDDE05CF1FE71E /* Security */ = { isa = PBXGroup; children = ( - 6B4D97A7DECEAD97EC9367AD0A5011D0 /* AFNetworking */, - DCD2569488C2DE61703CF16819F46F38 /* Bolts */, - 1DB28A3FE565ACCB915B049516698D18 /* ChameleonFramework */, - 27852652E6D436A1318FC916EF0344F8 /* FlatUIKit */, - 5A90F11C5D44D3B75A04499BE4B2CF8E /* IQKeyboardManager */, - DA274191EB774C1F146353177C5AC656 /* Parse */, - 51DAD19568FF44278C6F600366A03986 /* ParseUI */, - 5F5C2EAD295CDE23974596D488EC3E5C /* SDWebImage */, - 86FCB8691800FB0B78269CE26D3CED9B /* Unirest */, + 10047E16CC827DC41FA3CA3C588A92AA /* AFSecurityPolicy.h */, + 00D07CDF153D8265CAE511A266EBBD92 /* AFSecurityPolicy.m */, ); - name = Pods; + name = Security; sourceTree = ""; }; - D66720A349B8003B2ABE787ED39F477E /* NSURLConnection */ = { + ACE7852A20DA825AE217649C3D71EFB7 /* Products */ = { isa = PBXGroup; children = ( - 73573BBD9C0340CC70CD913FB8E71C04 /* AFHTTPRequestOperation.h */, - 81F9F39F51AD9E314989D743049BCF3F /* AFHTTPRequestOperation.m */, - DD5966B7E55EF3B77EE33556D7F3B042 /* AFHTTPRequestOperationManager.h */, - 4504A3BE29DC08F74E6F39B08DD5E10F /* AFHTTPRequestOperationManager.m */, - 0CB6713546ED5550951A36F155898DA4 /* AFURLConnectionOperation.h */, - 74EFE70E0EE45A51F1CF1BBB47BCE616 /* AFURLConnectionOperation.m */, + A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking */, + F84B331B5D6AAF1548DD1BB004AE5C2A /* Bolts */, + 0383903D05EDD5C442C682C1F7A1752D /* ChameleonFramework */, + BCF2FF91155574F810AA6ADB7F19CC31 /* FlatUIKit */, + 98527D7196957AAB07B79E2E2AFDE23E /* IQKeyboardManager */, + 0652F2476C7C87C6C0F6CB68072EA25F /* Parse */, + 062054FC97AAAB3D2F4AB253A7CDE385 /* ParseUI */, + DC82E912A46E0D98C54FA4D7AA8638BA /* Pods-FoodbLog */, + B0B214D775196BA7CA8E17E53048A493 /* SDWebImage */, + D6CC7CC57AD4796048E05E9C30825826 /* Unirest */, ); - name = NSURLConnection; + name = Products; sourceTree = ""; }; - D778D4A1C5F941925427D8ADDAB863DC /* Security */ = { + B3DE231F1E249B215E83E5CF5E9AD9F4 /* Parse */ = { isa = PBXGroup; children = ( - 09E4578933143185EC9EA7F753E6827D /* AFSecurityPolicy.h */, - 9690030D094375D9A87123004BEEEB3A /* AFSecurityPolicy.m */, + 151EC16230A016E1E972D02CF9AFCF34 /* BFTask+Private.h */, + A776F03C60540FC847DC8FD81CFFD399 /* BFTask+Private.m */, + 0C58B900BAB52BE6C1A6AC9401D85688 /* Parse.h */, + 9CF52AD6C105BF59D3D2E0B1453E545F /* Parse.m */, + B6DC6273BB88E3B2428C06836FF537E5 /* Parse_Private.h */, + EB1E0B109FE60D221F3E42A35EC080BC /* ParseInternal.h */, + 065EC0B26F5FCC313BF0CC772F0AAFCD /* ParseManager.h */, + 2A30756FBB458B3FFBE25E41C6A39E07 /* ParseManager.m */, + 54A49B5066DC5E2D106E4AB7EC84E310 /* ParseModule.h */, + 9A75A05D48E060BEBF89A6B65009C577 /* ParseModule.m */, + 38BB302FD9DECD313D93E13A55C5A724 /* PFACL.h */, + C2CA7B1027D42D64DAA67C1E2011479E /* PFACL.m */, + 485733735128D4A7D968200F60AE577F /* PFACLPrivate.h */, + 41C24ABA60DD2C0A252F655A688A17C6 /* PFACLState.h */, + 81509BFE89D1F42DFC217BFFCC77885F /* PFACLState.m */, + EB2DEB083FAA7954B735F6FAF4BA4FEA /* PFACLState_Private.h */, + BEF3548901AFF1442D8A42CE3D5CD1A7 /* PFAlertView.h */, + 1479D081320EC36085B8B30288068183 /* PFAlertView.m */, + 63E672189DC0628FEE2AF3B6EF6CE5F6 /* PFAnalytics.h */, + 2028AA6088F4575DAF17E2F06D2DC064 /* PFAnalytics.m */, + 22B70DF0AA41BAA3C080197E5CC5D07B /* PFAnalytics_Private.h */, + 8D00AA339432926A0C0AD20217302F65 /* PFAnalyticsController.h */, + 96BBE1D7671D60064CCF9BFFA76E8E28 /* PFAnalyticsController.m */, + F2BA222B9F01795A4208422B79E054CA /* PFAnalyticsUtilities.h */, + CCE21169E91B4F413E70BB27F172E902 /* PFAnalyticsUtilities.m */, + CBF8069EC1EAD1EEE3C76F86B6CAEAC9 /* PFAnonymousAuthenticationProvider.h */, + B0994984629F495251BA8A149F317827 /* PFAnonymousAuthenticationProvider.m */, + 139DF95532D69618F5A132FBD855F503 /* PFAnonymousUtils.h */, + A6A36422F3C90967B88FE242E00E11EB /* PFAnonymousUtils.m */, + 8FB95CF7F41F64BD82E62CED5B594292 /* PFAnonymousUtils_Private.h */, + B719C90D607E7C93D3CABC47049790CB /* PFApplication.h */, + 24FF581FD822FC0314972728E320502B /* PFApplication.m */, + A24E7517836476C9939D680AAF9AAF11 /* PFAssert.h */, + AA2E139C45664A8F35F7CC0FC4652D64 /* PFAsyncTaskQueue.h */, + CD3794F214603143EF12BBD7D35183B1 /* PFAsyncTaskQueue.m */, + B7D8C5668CD3DD0CB72C11E3C568BEAF /* PFBase64Encoder.h */, + 2046774BE36FD33388E4E6602AF763A0 /* PFBase64Encoder.m */, + C1A50FE4924602AEF1988B628C5A61F6 /* PFBaseState.h */, + 5F6C72DA72BB9A832890E4D4C02C794A /* PFBaseState.m */, + D6A3F777F9D72A576946C81634647411 /* PFCachedQueryController.h */, + EA75AE20BB255EFB336F605121156B56 /* PFCachedQueryController.m */, + EE1F78ECB62A69EB240E2BFAAD710CDB /* PFCategoryLoader.h */, + 37FA8F56A1FA6A8339B3BF6A946BAEE1 /* PFCategoryLoader.m */, + 998337F9EFB691B95AC04D0DEDFA76DF /* PFCloud.h */, + F8C8EB38499DF1B91AD5834F3D8238B6 /* PFCloud.m */, + 2A5EFD08535330BF7DE6E1D3E60F0FDF /* PFCloudCodeController.h */, + 69A510A1BF3A452173802E1908C71DB3 /* PFCloudCodeController.m */, + 97FB31513AE2FE8E761A9C0EEB5EC31F /* PFCommandCache.h */, + FCE06702DA3E947891057A5BB5C23AB1 /* PFCommandCache.m */, + 633C5F1F9DDC345F9BDF689B08C71651 /* PFCommandCache_Private.h */, + 73A911C862B60EA923C814A7824ED72E /* PFCommandResult.h */, + 4D0DB85E2D94B47CB63F50784F0CCD01 /* PFCommandResult.m */, + 7B4F9159794FFF9BEDDFCBAA5965C056 /* PFCommandRunning.h */, + 5A5D2EBF57F51AF57F8C4C497E5D6AEA /* PFCommandRunning.m */, + A29FD65C70682683A3D7D37BD9F78E53 /* PFCommandRunningConstants.h */, + C26F1D9455881336DF278C24466FBC70 /* PFCommandRunningConstants.m */, + BF47B8414383C32DD8B7B421B488B543 /* PFCommandURLRequestConstructor.h */, + 809F219DA65FEDD9A6F8E2DF586F7D62 /* PFCommandURLRequestConstructor.m */, + DC8286821540402840D2F78184926242 /* PFConfig.h */, + BF319A176D7C5D07103C1757D1C4A6FC /* PFConfig.m */, + F017C36C635B636A8A9720DF93844C2F /* PFConfig_Private.h */, + 5D2AE97133B1C7AD99D02E0CBDFB4DE9 /* PFConfigController.h */, + D918045D3E6E8340A10A1948E5BB7798 /* PFConfigController.m */, + CB714FA67888C5CA046827C36660588D /* PFConstants.h */, + 09EA67B03147905558D01B94F40D3B87 /* PFConstants.m */, + 7C823BA36B3996A5B127FB928AAFB071 /* PFCoreDataProvider.h */, + A78827F2D79D32394CB2A7F8AC054D28 /* PFCoreManager.h */, + F552E66B16A2615DC0009C21B50D3642 /* PFCoreManager.m */, + 52EDE9D3C5F9D0F9C4068C669A7F7141 /* PFCurrentConfigController.h */, + 34D23B3A862EAC73082D325761E92C03 /* PFCurrentConfigController.m */, + 241D90B262CD5D9CA1CE4E85B2753446 /* PFCurrentInstallationController.h */, + 3F4D59B74D186D3A1C07E193A4B8E5BA /* PFCurrentInstallationController.m */, + 99FBB19FAFA339DAE8A2130BCBCD5A90 /* PFCurrentObjectControlling.h */, + 0CC62DFCDBE9FE6C3218D149D055F4E7 /* PFCurrentUserController.h */, + EF673633FFA2D7135116862CBD8BE0B9 /* PFCurrentUserController.m */, + 41A0FAD2BC796F0C43E5AD3DFB8BF253 /* PFDataProvider.h */, + 497EC4624AF81526C5C1ADB7FE648185 /* PFDateFormatter.h */, + 8F44CE6BEBD6122876882DCE9A46EBF2 /* PFDateFormatter.m */, + 7188A502AE1E58CD7A9DBA3B6C887DF0 /* PFDecoder.h */, + 3D6B4E7FA130709BC2B2CD4708AB3B01 /* PFDecoder.m */, + B088733242F6563E27BF3689B4BCA38E /* PFDefaultACLController.h */, + C571323D266A5975685DD2191C775A9A /* PFDefaultACLController.m */, + 45505F5B25D4570A45EFBA3FB9E5650D /* PFDevice.h */, + 4F3997BE1E4CB1C34C279A257963F192 /* PFDevice.m */, + 0BE58929E3D2856E2FF1200233D5AEB2 /* PFEncoder.h */, + B9DD11F8C4BB31A6C209F4164F43F64F /* PFEncoder.m */, + BF64F8F931BFD24F09DA8796A5AB8716 /* PFErrorUtilities.h */, + FD4E574985753AA8FBFCD4DF93047E2C /* PFErrorUtilities.m */, + 7870F841A362ED1E4FFA8F36CA9D297E /* PFEventuallyPin.h */, + 3EBF18A4C5D5CB1C2B68379E0F011BC7 /* PFEventuallyPin.m */, + DD38371523A69B7D5F80DEF60A1EC8D3 /* PFEventuallyQueue.h */, + 3E4C754AF717C0F9578078037DD972B7 /* PFEventuallyQueue.m */, + 2DB558CB27C9B59F1418AA3959C1070B /* PFEventuallyQueue_Private.h */, + 2697B93401DB7B2F5E39F3CF9BC4DCB3 /* PFFieldOperation.h */, + E223A483DDF7AE6383953308A7288EC6 /* PFFieldOperation.m */, + 35AB26F5A3AAAB62DB4FDBFA45B6AE7B /* PFFieldOperationDecoder.h */, + D853E3A07CB02F8C41AC94B33D18DE6E /* PFFieldOperationDecoder.m */, + 614FAF041CF57C25CF92549363DC2B35 /* PFFile.h */, + 419788502E9D2F50B77877AEE03ECD01 /* PFFile.m */, + A70E011791587979C22032E1FB4F06F9 /* PFFile_Private.h */, + 113A9AE0365FCE4FF2F8C95725E6A010 /* PFFileController.h */, + 1FC94E4C9D7446F799F1571C5E5D24B3 /* PFFileController.m */, + FDB1BAB3B8D54F4259C686820194F1B4 /* PFFileDataStream.h */, + C1648D08CE8E716C210353B82071411F /* PFFileDataStream.m */, + EADC0A4005E0A455E24E378AAEACAC44 /* PFFileManager.h */, + CF4CF703CC1DBD333ED293E64B2816AC /* PFFileManager.m */, + 641771E5ACE52EEBF054DF88C734432B /* PFFileStagingController.h */, + 991D633806D370E5A9CCBCE8F7E6CF93 /* PFFileStagingController.m */, + 0480814245A7B51C8119FEB8A9BB24EF /* PFFileState.h */, + ED9A2647BBFB6D985C23B197AA1B2982 /* PFFileState.m */, + 5BB3E23687BDA8DF4EC8C90366A7F21E /* PFFileState_Private.h */, + BBF6063B6F29BA7E6ACAA2D45B0000D4 /* PFGeoPoint.h */, + 8B4DD551A4377B715FBEA24BD68F23F7 /* PFGeoPoint.m */, + D9E50F16F11C26B58CB696C26DE57E74 /* PFGeoPointPrivate.h */, + 5A930BF850559AE082DDFACF6887C72E /* PFHash.h */, + 636B22993762DB16840604D7D3A30F70 /* PFHash.m */, + CD6556ADFAD1BE0857B3369A52050CC6 /* PFHTTPRequest.h */, + 1CFB142945D82B4D948325BA5F017A04 /* PFHTTPURLRequestConstructor.h */, + 2C225A32BD5AB6FEB97D66740F1E0931 /* PFHTTPURLRequestConstructor.m */, + 623E4161A8235BF36BEE1C200D5F8E72 /* PFInstallation.h */, + 7DDF020AF63A140F55102296DFDB9C66 /* PFInstallation.m */, + 8B7DC16C982ED9197D1D5205693D4D1E /* PFInstallationConstants.h */, + 1ABE08EED6D9D0788D5D114EB8073400 /* PFInstallationConstants.m */, + 60EC5380A05609AFEADD93175936D23A /* PFInstallationController.h */, + F0849AC8F9BFE0E883A47F09527D2117 /* PFInstallationController.m */, + 6CDDE8A709E5616D62A31C917FE40D76 /* PFInstallationIdentifierStore.h */, + 21915C1929F889B9A02A6D8BD071D10B /* PFInstallationIdentifierStore.m */, + 98CE93C5090192A08CBA7E7C5BF3D0EC /* PFInstallationIdentifierStore_Private.h */, + DAE893D8A79BCE927BD34935557FC189 /* PFInstallationPrivate.h */, + 74B88130F8B1AC90AC1CA346D577FB27 /* PFInternalUtils.h */, + C6C75DCA8C9E3639140AC579C4C46296 /* PFInternalUtils.m */, + F8778205B24E6652290E0F5E7CA361EC /* PFJSONSerialization.h */, + 4A670E98EA122B6C249D0794F87C5973 /* PFJSONSerialization.m */, + C6620BB5952ABF0E4296A0D2DB7BE02F /* PFKeychainStore.h */, + F863D0768304DA4198F0440CDF7AA8C1 /* PFKeychainStore.m */, + 98FC30222B791FD6C8D1E6F1BC6F7687 /* PFKeyValueCache.h */, + 624695D19509BEA6FDB8926119091B30 /* PFKeyValueCache.m */, + 0F31C3824F949AF1259C33FE153A1EA9 /* PFKeyValueCache_Private.h */, + 255D9757582A2D903E70F23C181DF04B /* PFLocationManager.h */, + 3661E7338F270E4C60D4CB7618DACD33 /* PFLocationManager.m */, + 1C7B8B94263BB8F789B6BD083776BBFC /* PFLogger.h */, + 3ECA32B49BAEAD29BCA93D40EE9CC6B7 /* PFLogger.m */, + FB8B3149AFFBFA7C33EB94E521126BBF /* PFLogging.h */, + E3A5971EA076048933873A26498305DB /* PFMacros.h */, + 61E8FE17B430924B29695138E0ACFA96 /* PFMulticastDelegate.h */, + 53977B705B1F2FD103C89A12B9885AA3 /* PFMulticastDelegate.m */, + 886E9C8ED5B1B07A35329D7F11A187EC /* PFMultiProcessFileLock.h */, + 8D0C6A79B925E5B8DDC09CC0D8F44006 /* PFMultiProcessFileLock.m */, + D10834D8E017BD682BEB53FD751CEB75 /* PFMultiProcessFileLockController.h */, + F7278CD831A6A182FCEB151BD633E223 /* PFMultiProcessFileLockController.m */, + 6E80233019F4EE7D4C240660178775ED /* PFMutableACLState.h */, + CA65A1A27CD00A01A317F904467FD513 /* PFMutableACLState.m */, + 1401F53C5562661D42BA72E3554ABA2B /* PFMutableFileState.h */, + 70A3394AFCD610A0CB8D77E3345EDC43 /* PFMutableFileState.m */, + F0F27237E7594BDC013703A579974879 /* PFMutableObjectState.h */, + 352A7DFC0FAD78D5F39DDCF907D02C5F /* PFMutableObjectState.m */, + 4B9C6B10499E423A5444CE2864F26C4C /* PFMutablePushState.h */, + A0C767F598567EAD6A78E56703F0BF49 /* PFMutablePushState.m */, + 46C0C4F037BDBC97CB84248D3C6354F7 /* PFMutableQueryState.h */, + FF08CF3F86D480A8166480D6782736FD /* PFMutableQueryState.m */, + 2641B578F87B9B95E398CE86A132190C /* PFMutableRelationState.h */, + 25714ADEA4E375B6832A9DF56A53F64C /* PFMutableRelationState.m */, + 02CAE2970238AAA1CC6CCF79D78A95D9 /* PFMutableUserState.h */, + BC12683ED13AF4741D430BB224279C59 /* PFMutableUserState.m */, + B5F387A157BDF133EF4E326D269BDCA9 /* PFNetworkActivityIndicatorManager.h */, + 1C38C5BECC83269A118226CDCB9D7F23 /* PFNetworkActivityIndicatorManager.m */, + 9F539BDDEF739BDE923DD4C1FC4B2894 /* PFNetworkCommand.h */, + 5E3AAE5A1E6096A049F4DA5D191CBADC /* PFNullability.h */, + 2247D4BD60404A85E31A8014A3D24BB5 /* PFObject.h */, + 5545F56CBCA1961E8A999F7257C1FA51 /* PFObject.m */, + 390E345239D63E6785408FCCB29AA27C /* PFObject+Subclass.h */, + B658BAA68F8498FD1647DDC21EFA343D /* PFObjectBatchController.h */, + D34C12E4F952DB5875CBA2FC470CEA4A /* PFObjectBatchController.m */, + D0874E998F9E9F408D294DF2386879A8 /* PFObjectConstants.h */, + B23FD0394F4B69148299C896E97C2A90 /* PFObjectConstants.m */, + 80865A22558AC6423CFCE3A112073FD6 /* PFObjectController.h */, + 609DBFC143F8CA52ECA2DC3956D4ADC3 /* PFObjectController.m */, + 4ECC7AE2129119EE9949BB6A2DBA3907 /* PFObjectController_Private.h */, + 87D7C7463212CB7E7A2C6DDE9D75FFF5 /* PFObjectControlling.h */, + FF246D759D5911D6B15A849D032F9E71 /* PFObjectEstimatedData.h */, + 9CAC2D7C9A799C8A55D219041965A2B1 /* PFObjectEstimatedData.m */, + 6E0AF3C159D4C8B5EB68C6ADB8FB55A2 /* PFObjectFileCoder.h */, + 13F31358F978DB7AE6B1DDF2572DD630 /* PFObjectFileCoder.m */, + 5D0E7ECA8260E9EE58E2D1D581456EE6 /* PFObjectFileCodingLogic.h */, + BAD731CA6EDC2C97EDBAE9DEF5BEE3A3 /* PFObjectFileCodingLogic.m */, + 3F9F93F92926388C8FFB4EC13EA0DEBD /* PFObjectFilePersistenceController.h */, + AC430D908CF42C14EF7AAFD9B91F4151 /* PFObjectFilePersistenceController.m */, + 065E4ABAE71F00350CBF5E154707399C /* PFObjectLocalIdStore.h */, + 49C9D42C27DD2AE3AAB32AE24D2EBF53 /* PFObjectLocalIdStore.m */, + 45D7D6B01B2B8A0D96A29F97BC24C01A /* PFObjectPrivate.h */, + A40CB3A94F942DB16FCA1145446DFA1E /* PFObjectState.h */, + 51223661224A51BA99F43A7498640E0A /* PFObjectState.m */, + 66B92824AD49FBB9390D23A0ECEC41CD /* PFObjectState_Private.h */, + 4B6815C329F8604653FA7EB39FBF3DC2 /* PFObjectSubclassInfo.h */, + 83F94635DF5FD3CB6C04F66A51892F22 /* PFObjectSubclassInfo.m */, + B93D67F2A685201833890E4ADFBF1CAE /* PFObjectSubclassingController.h */, + FC5523A002FB0121BC9A4F24743AFB0D /* PFObjectSubclassingController.m */, + 08FAD9262BEE1666BF4D27626214085C /* PFObjectUtilities.h */, + F06ED24D1C39A0CFF4123EB0D9491BFB /* PFObjectUtilities.m */, + 9CC6108EC34A6AB9D07BF82118825BE6 /* PFOfflineObjectController.h */, + F449C107CBE098205F80BDB0D60F2E22 /* PFOfflineObjectController.m */, + 6A63A0131E42676B37B1723606FB5076 /* PFOfflineQueryController.h */, + 4AB3B84C7DF66F47815CEE5E52615C7A /* PFOfflineQueryController.m */, + FDBF6836162C2F1E62D2A5B6917F4F50 /* PFOfflineQueryLogic.h */, + ECE1874B575E1E5185B44168861EBBA9 /* PFOfflineQueryLogic.m */, + BF4961A65C147D1F0F5A6BC47121CBCF /* PFOfflineStore.h */, + 4CACE40B53562456C7355A1BD4B3BF59 /* PFOfflineStore.m */, + 5E69CBD775346A00D22D02F01FAEEE59 /* PFOperationSet.h */, + C0F69EF677BEDD5C5FA799A9275E6EAC /* PFOperationSet.m */, + AC8E66BCE1B2B67DA2045E7EB6549471 /* PFPaymentTransactionObserver.h */, + 687B09B7B61E7AD8BBFAD05917EA3836 /* PFPaymentTransactionObserver.m */, + 318C56533FDD447102932A6E5A233A7E /* PFPaymentTransactionObserver_Private.h */, + 8FBADA788C844BC035F839991DA33BC7 /* PFPin.h */, + 83026E30E5879736A329148544ED9B28 /* PFPin.m */, + 0D716BF50FFA96153B62E0AE932F3E47 /* PFPinningEventuallyQueue.h */, + F35C83A2CBD33B6D54CB34F091A81847 /* PFPinningEventuallyQueue.m */, + E36DC6F0E757E7535DDD2E9C1B846AED /* PFPinningObjectStore.h */, + 666458A8556D81D46682CDDE3C99CFBD /* PFPinningObjectStore.m */, + 255CEDD6FA71975460137BA3F1A2CC30 /* PFProduct.h */, + 88DBADE931198B937A907C0F4A844AB0 /* PFProduct.m */, + 98EC7EC190408FB4A48D91C9C6E633EC /* PFProduct+Private.h */, + 6C1F692004740EFBE7FF1FF61AB5529B /* PFProductsRequestHandler.h */, + 52CD825D9A1511054A1A5701A737B96F /* PFProductsRequestHandler.m */, + F5B5CF62D6DD8EC2B0ABA7B384CFB873 /* PFPropertyInfo.h */, + EE18541D7EEA1DE57DE7976E3835CA79 /* PFPropertyInfo.m */, + 898E5A3B286DE966995F5236CA3096FB /* PFPropertyInfo_Private.h */, + 0725DB534BB32F744586EC0F2357B78B /* PFPropertyInfo_Runtime.h */, + D0A63F277F04D487A09199897B91DA43 /* PFPropertyInfo_Runtime.m */, + C582F437DEEFC2DC78C169737D7E9D53 /* PFPurchase.h */, + FC83E11ABE486AAF98952F9D81D4ED34 /* PFPurchase.m */, + EEFC9ED15A9741CB66AA57CF2B4D69FB /* PFPurchaseController.h */, + 0E00B62CEE59E199D07EB3F3B4F2710F /* PFPurchaseController.m */, + A869D04D94D174D538E8EEC8AD639A3F /* PFPush.h */, + 05FE2E6BDD950A5BDE5209E33B3C42DF /* PFPush.m */, + F38FDD5066166323AEDEE66D20C6F9C2 /* PFPushChannelsController.h */, + 20BC97E813BBBC1228B843C37193A581 /* PFPushChannelsController.m */, + 38D7F1933A49B1054CE8669A45108CF3 /* PFPushController.h */, + D26D67D3B6418EC0A3EC02DFD678C696 /* PFPushController.m */, + 467740A6E9FE2B669577C05571B6DC7F /* PFPushManager.h */, + 9CC658527AA6BE88A41923B795916FE0 /* PFPushManager.m */, + 41729ECC74ACE0C2F2268BD56ABD77D5 /* PFPushPrivate.h */, + 85DE173836F20C196CF9443BA77C76A2 /* PFPushState.h */, + E474D6AB963D4ABAFB608C01EC10CCE0 /* PFPushState.m */, + 5F6FFE987901F200ABA41215EC6603C5 /* PFPushState_Private.h */, + 5EDC42BD069E7A8A5E8A432640A1F523 /* PFPushUtilities.h */, + 341193ADAA541B40C6DC994505AA1FD6 /* PFPushUtilities.m */, + AF6B37C98266FCE557B14E51A8B13011 /* PFQuery.h */, + DC3331AEC86B8C52429A342C01652D63 /* PFQuery.m */, + 4AE1A480AE466808EAF88E6FA440AA1F /* PFQueryController.h */, + 8DF6084BF27306D73EE3F7156B4A3EFD /* PFQueryController.m */, + B13866FCDF031E55F0DD3D8829D073F8 /* PFQueryPrivate.h */, + 86017ED93042A0624A5FBBFEDCDEE976 /* PFQueryState.h */, + 0766F2D21D2ED224A3E82F26E0B5CD52 /* PFQueryState.m */, + 8D7825E186E2129768F652FA322E5FD2 /* PFQueryState_Private.h */, + 61FF4D40E535915FF2A5E6013656D65F /* PFQueryUtilities.h */, + 345CA40D5F45AD04D24CC17ABE86B911 /* PFQueryUtilities.m */, + DF725FD55935B6C23669417D4E1B2668 /* PFReachability.h */, + 09135BA358F372DFAB44C8FB18692D6C /* PFReachability.m */, + B1A39241452F7C9E16CF2D824F7364DC /* PFRelation.h */, + BEE6E33A4974E21DDA04F659E990E8D5 /* PFRelation.m */, + A2C468F7EBC72EDE2DDF8B4ADEF3EFF1 /* PFRelationPrivate.h */, + 67CE6D4D9A7B520EA991DDC9419C137E /* PFRelationState.h */, + A1C3EA21F91503CF85866B1DEBB42208 /* PFRelationState.m */, + E936219EC6142DBDD297B11DCA11AC0A /* PFRelationState_Private.h */, + 1B4159A9FBBE236E3AC1B55F41CC8C84 /* PFRESTAnalyticsCommand.h */, + 96E2E224B40477F06DF3B453832889DE /* PFRESTAnalyticsCommand.m */, + 0670C245E4B747809A451258C962EA4C /* PFRESTCloudCommand.h */, + C4ECEB822EE787E43E4B3D81D192BD08 /* PFRESTCloudCommand.m */, + 385261552CFAF1B884CE31C0FDFAC71A /* PFRESTCommand.h */, + A6E6334AF3D4ABDE619C3F9F1575FA7A /* PFRESTCommand.m */, + 320F50071C407D10444E25E65E981EAB /* PFRESTCommand_Private.h */, + D464E14984EAF6352F7E733E899C8F4A /* PFRESTConfigCommand.h */, + 818DBD3B6CFCFF9DC445CD8574113BAA /* PFRESTConfigCommand.m */, + 1C31C458F86FD36FC07384D563ADFBF2 /* PFRESTFileCommand.h */, + 48347C3BCE6F2F0E9F400C6727FC975A /* PFRESTFileCommand.m */, + C6725615AB0EB3D222E0B93D2EC3C6B7 /* PFRESTObjectBatchCommand.h */, + 4CA05D6E4244A871551EC80C2CDCCEC1 /* PFRESTObjectBatchCommand.m */, + D3308E5C88DF7BD7EB9571B8F71861E2 /* PFRESTObjectCommand.h */, + A586A584997D8AAB3C26BC7EA0ABE46C /* PFRESTObjectCommand.m */, + 5BAFC8795A0D106AB97B4408C85D0A49 /* PFRESTPushCommand.h */, + C10C515D0450CC29CCEF68EA816542D5 /* PFRESTPushCommand.m */, + 26C5CC23FF12B866E1AD73E2DC206622 /* PFRESTQueryCommand.h */, + B2E4026B95A28F85E28276E70D07582F /* PFRESTQueryCommand.m */, + 6B117E2539ED9DDF90DCCD6AC02BA037 /* PFRESTSessionCommand.h */, + F439F7531646055B955D7668822E655A /* PFRESTSessionCommand.m */, + 7A28FD3FB992F202D240D12E7F2B7FD5 /* PFRESTUserCommand.h */, + C64ACA14342A9ECCF8A0C727A2193004 /* PFRESTUserCommand.m */, + EF607DC0E28A9F3234F18C9B3BA88690 /* PFRole.h */, + 44C79E1505808F22B40DEDC10582999E /* PFRole.m */, + 80684463B172C7670EDABBAB1D1D3482 /* PFSession.h */, + 3448DBBDFED1AD82ECE8A1B07DD53EB0 /* PFSession.m */, + DFD47DBE4E7606BA4FA86C0F5919CDD5 /* PFSession_Private.h */, + CEB2A2A103376D8F9047E4F1E106E16A /* PFSessionController.h */, + 9F1D3010E400E70C042940F75036BF3D /* PFSessionController.m */, + 62FADD9376E95D055AF0A96D39FD267C /* PFSessionUtilities.h */, + 072BA5A6E13B9A44E938BDEC145CD4DD /* PFSessionUtilities.m */, + B32250A0ACFF1FD6AFA14D88511BAE8F /* PFSQLiteDatabase.h */, + E6BA7CC067B235E0FF566A94E1581577 /* PFSQLiteDatabase.m */, + 4075748CA8F21BAC0F4620D185E8FD8E /* PFSQLiteDatabase_Private.h */, + 1DF2C8BE2B249F69FCE01059E5C2E34E /* PFSQLiteDatabaseController.h */, + 150C19C70C597D439FA96FCB3A6B68AC /* PFSQLiteDatabaseController.m */, + ABFBC5AE1B18C02508CD09769DD4415A /* PFSQLiteDatabaseResult.h */, + E743DD9EBFBFF918EF56FABFE4C5AC4D /* PFSQLiteDatabaseResult.m */, + 6AC19EA4CDEEFAFF25CAB498F92DE3C8 /* PFSQLiteStatement.h */, + 40284536A49434B0DD0358F33A4F8172 /* PFSQLiteStatement.m */, + 0982CCB6B201941BA02A2C5BED20003D /* PFSubclassing.h */, + 28965A0B0DA8E71614774B97CBEF38BB /* PFTaskQueue.h */, + 2699550AAFB04BB17916C59A6B1FC51D /* PFTaskQueue.m */, + 7B2C31800C645ACA08536F0A681E03CF /* PFThreadsafety.h */, + 24776F7FEE23D85F92F28624333EF3EC /* PFThreadsafety.m */, + 09FF643952C8AE70189400301DA35699 /* PFURLConstructor.h */, + FF48AB657BBC095D80AA753EDFA8198E /* PFURLConstructor.m */, + 73CC3349EC3533415793CF755807650A /* PFURLSession.h */, + 9EE7C503197A62ADD66AD452FCFEFAB7 /* PFURLSession.m */, + A316237767BF661F1B6AD8F4B030AF7A /* PFURLSession_Private.h */, + 5358009CFED1962F15A2280446DB04A7 /* PFURLSessionCommandRunner.h */, + 8E34CEB998FE5525402334C2BB80D5A3 /* PFURLSessionCommandRunner.m */, + ACB7449F5C2B0CE0404EEF1294771367 /* PFURLSessionCommandRunner_Private.h */, + 68183AD738E931701FD0AD3DF16E94B9 /* PFURLSessionDataTaskDelegate.h */, + 46AA5FBD23466BC2877613E9ED755E8F /* PFURLSessionDataTaskDelegate.m */, + 71906898F9D4CCF17CBD5FC16B0E40FB /* PFURLSessionDataTaskDelegate_Private.h */, + C2B65C31D9152869F1CCD359EF540969 /* PFURLSessionFileDownloadTaskDelegate.h */, + 92C68D5FDCA38C263C5C9DA67BC52DAB /* PFURLSessionFileDownloadTaskDelegate.m */, + DCCBF38FA67936B62300896ABA01E42F /* PFURLSessionJSONDataTaskDelegate.h */, + E725EA90CDD636F75AA6136536B4106E /* PFURLSessionJSONDataTaskDelegate.m */, + 30897A1EF233A016A554F6A64222767E /* PFURLSessionUploadTaskDelegate.h */, + D840D2F9AFF823F94F3AB0131703459B /* PFURLSessionUploadTaskDelegate.m */, + CFFDDC90032F16F94B5EC26EFEF453DF /* PFUser.h */, + DF0826136CA6F04163DCAD76EB0BE45D /* PFUser.m */, + A745A3D33907AFBD7D9B85EC9DC35D21 /* PFUserAuthenticationController.h */, + 4A7D177985593F94AB3C85D6D51C42C6 /* PFUserAuthenticationController.m */, + 7F2689D7BF9856AA54533AE6210302B0 /* PFUserAuthenticationDelegate.h */, + E7F24C0BF2AC1D3A0AB451BCE534C2D0 /* PFUserConstants.h */, + 19176755A633092BD34527BD97CC9A2D /* PFUserConstants.m */, + 73ACD345C800D725173F90C44EFD0B3A /* PFUserController.h */, + 0225577578F0F538D3E335508E84D451 /* PFUserController.m */, + 326B3BC55A45A42DE61D2F9FD6215A24 /* PFUserFileCodingLogic.h */, + 92D60EA1BE94F7CC68B03B328E9DA910 /* PFUserFileCodingLogic.m */, + 50662E86832F5B9AA451BDE684D8D13D /* PFUserPrivate.h */, + 0FF78B4C18BD5E661C223DA05F706583 /* PFUserState.h */, + BD99F6ACFEC1E975F0FE0DF810A977A0 /* PFUserState.m */, + 4A6886AC956A814ACE7382CC7A019CD2 /* PFUserState_Private.h */, + 852A83DBE22D8BF63D1F7D4F20EB25EF /* PFWeakValue.h */, + 96FC24F36F6A0E253A147A902D4D87B3 /* PFWeakValue.m */, + 878B5CB6B5EAE6A1BDF0FFBC6AAB6C5E /* Resources */, + CE24BD2F839421EACDDDAC644746E6D9 /* Support Files */, ); - name = Security; + name = Parse; + path = Parse; sourceTree = ""; }; - DA274191EB774C1F146353177C5AC656 /* Parse */ = { + BA5F913FE40214681746B9F1CB36AD8F /* Resources */ = { isa = PBXGroup; children = ( - BC6D7AFFA36EDC2F1A1F3F5AE103D40D /* BFTask+Private.h */, - B7F2C88E55C448F571A16FF3A03467C6 /* BFTask+Private.m */, - 22A4230F1535BF7EEA26F0B0B6A2FC92 /* Parse.h */, - E9FB1635B38CC6137103F129D89F7308 /* Parse.m */, - 383772F4F9E375D079487664672483CA /* Parse_Private.h */, - AC6C812E0EFAAEEA409ED82F6D29F891 /* ParseInternal.h */, - AD7301C3D83C67C2134BCAEE708C819C /* ParseManager.h */, - 8C9EA3E96E8F608083FF2042FAC5C1E5 /* ParseManager.m */, - 7910FE4828145D6DFF00FF8C66F08B32 /* ParseModule.h */, - 4D6B0F03D8DC15123121CC57FD885AC5 /* ParseModule.m */, - ECFD68C941FF94329F1908F60C5A00A6 /* PFACL.h */, - 15AD0861C36EAA2BDAE76ABA34F7A71E /* PFACL.m */, - 99A99B181BD884F5B8D26ACFDE5446C2 /* PFACLPrivate.h */, - F83E541BE3033DDFE40F96410A3E848B /* PFACLState.h */, - B8D6AA9709B0A2DA0AF6FD356C37A4FC /* PFACLState.m */, - 72A6BD4F8F889172C800D9EEB621ED1F /* PFACLState_Private.h */, - 97B9289CF2E13853E6653DB6AA968E35 /* PFAlertView.h */, - 1C9ED06688BC1CB99B5D19703F26282D /* PFAlertView.m */, - C120EB784B7384DEC6CC34FCC8B9EA6E /* PFAnalytics.h */, - 417CBC7A056859D68354BE8D34EA2955 /* PFAnalytics.m */, - 1543959E7A6D54C0513BD5007D1E6C06 /* PFAnalytics_Private.h */, - 4A94CB5EDDD62CD822188CBC63AEB555 /* PFAnalyticsController.h */, - 15250DE419E242129E0E575BA94CACC4 /* PFAnalyticsController.m */, - 970EFE29AFD068B739491AD36219AB30 /* PFAnalyticsUtilities.h */, - ABA91E0D9EFC2B073550E47FAD4B6D5C /* PFAnalyticsUtilities.m */, - 5A053E5374735D20B3CCEDA790784BC5 /* PFAnonymousAuthenticationProvider.h */, - 2B69F1BCFE902317AFA58B0D3736D5FC /* PFAnonymousAuthenticationProvider.m */, - B546148DC567CB2FA17FC9BA413889E4 /* PFAnonymousUtils.h */, - B042F300D303CA764C76ADF2750F904C /* PFAnonymousUtils.m */, - 583A8A566A6323A2BA9A8CDC16265050 /* PFAnonymousUtils_Private.h */, - 6CCDE24DEF2EF06A2A56C44BB829E19B /* PFApplication.h */, - 87620DD218BABB98B36BCE28B5DD8AF4 /* PFApplication.m */, - 1707513017DDDD0D6CC76E94459428E5 /* PFAssert.h */, - 6324BF755ED8BCFC32F3DDEBB21DA098 /* PFAsyncTaskQueue.h */, - 050F03BFD82CD0FACBAD65B2D27B5918 /* PFAsyncTaskQueue.m */, - 8733C8CDCF74E51CD4066CA88EF3DEC7 /* PFBase64Encoder.h */, - CB99750FE622958635551E3E8BB18757 /* PFBase64Encoder.m */, - D21B7F4B6E163639A4CF504445B8B112 /* PFBaseState.h */, - 6D90FCBC2346FA86310C29CE608FAAEC /* PFBaseState.m */, - 11F23EFA8DB1918E42FADA63407FBEF6 /* PFCachedQueryController.h */, - D6802ADB6DBFB9D15784481AA9178A00 /* PFCachedQueryController.m */, - 10C69C37D20A9F965DCCEBE8A59BD1AA /* PFCategoryLoader.h */, - C592047BF5023A3B9425932EEB2645D8 /* PFCategoryLoader.m */, - DEDFD5BE658CAEB920A1275B5C15F769 /* PFCloud.h */, - CE7968EFEFA2E9B8164D4F55D4EBB331 /* PFCloud.m */, - 80784BFB290943A33F98473FA5DED611 /* PFCloudCodeController.h */, - 56685CD10639BA9FD0A64000D41D1800 /* PFCloudCodeController.m */, - 3D14E15CFDF8111D1EE5A9810542B455 /* PFCommandCache.h */, - 0FBA40CFD6FA663EBA96754B663BE570 /* PFCommandCache.m */, - 3CCB37AE324FC6748009FBF33A162CF0 /* PFCommandCache_Private.h */, - 5D84102C012613A8D84A4EBD474FE57B /* PFCommandResult.h */, - B84E240F3DC71E49D016279DA276FC95 /* PFCommandResult.m */, - 521412CB4C17B8D388EF9AA530ADF53E /* PFCommandRunning.h */, - 02803148C151FFBA5545DBA0D2F6D83D /* PFCommandRunning.m */, - 1EA9750580BAC118BB72E201DDED2160 /* PFCommandRunningConstants.h */, - C9BB2BB3ABD697F1A0B2EA61302872BA /* PFCommandRunningConstants.m */, - 1B0589FBE7A6803057FC5D6D3FCB639A /* PFCommandURLRequestConstructor.h */, - 1E627F00F8F898388BF877F78E1353BB /* PFCommandURLRequestConstructor.m */, - 26E9373EDD16A74B95926BC6C3C8935A /* PFConfig.h */, - BB49BEF95C912EB1E9E2500A8EDD423D /* PFConfig.m */, - 61A606587D26AA7BF2064492D964C1B1 /* PFConfig_Private.h */, - F6313567F626FD94ED9D75F8A5528B0D /* PFConfigController.h */, - FCDAC6140870D371ECB57D0F2C306D25 /* PFConfigController.m */, - 1CA6F9B308027556F4F9377422333BF6 /* PFConstants.h */, - 6395957FD69B28F1FBF0315448ACD66F /* PFConstants.m */, - F51B64596F4498733BDF1F586BBD2219 /* PFCoreDataProvider.h */, - E44CE59217F10B74270250DB12ABCBC5 /* PFCoreManager.h */, - 5757B6527369A55B6115FA6887EED9AD /* PFCoreManager.m */, - 9650EED2F75B573BEE08F1336DE9E234 /* PFCurrentConfigController.h */, - 70876A25B7F7788BB693E26322A1C049 /* PFCurrentConfigController.m */, - 4FBCBE064AB11059CE4858CF3A0858CF /* PFCurrentInstallationController.h */, - DFB8E151B324B332BF30802F7BFE111B /* PFCurrentInstallationController.m */, - AB7234A3F4D28A8A54D6B0BE9E88B0B8 /* PFCurrentObjectControlling.h */, - 98ED373FF4FD8124A98CF4CE145E1AC1 /* PFCurrentUserController.h */, - 2A66FD291F0EA148EAA8C127374B8F95 /* PFCurrentUserController.m */, - DF86B1471532F9FDDE0E21010BC35454 /* PFDataProvider.h */, - 0A861617C3B27410695B312CDD54CC9A /* PFDateFormatter.h */, - 646363071D33807E74E00D422A069342 /* PFDateFormatter.m */, - B8E23EF1AC15E1DBC62546834E3CC9EC /* PFDecoder.h */, - 64739D6CD551B96EA4F5A2696E757077 /* PFDecoder.m */, - 03FF0651A96F8A339DA7B5F5278250AF /* PFDefaultACLController.h */, - CA680C5B2F2FE889E39264C907BCD1EF /* PFDefaultACLController.m */, - CCA31BD912D907C4293A1D90827CB1B4 /* PFDevice.h */, - F8B83F8A69CB0F2EDD6F5FC0A0F1ACF3 /* PFDevice.m */, - FF8FF2DDCD099016EB3DFD7FA99B73ED /* PFEncoder.h */, - 9BEC61C2360A2BB5FF68CFC83A8712DD /* PFEncoder.m */, - 51C2376FD47B67BBB57034D0A5D9F577 /* PFErrorUtilities.h */, - 7E31393F91A23688342164EE5B397EF6 /* PFErrorUtilities.m */, - F38F459BB20A409D6BB725DC07CAF532 /* PFEventuallyPin.h */, - A11BE6F0EF47FDB22B242D1F0C0D6575 /* PFEventuallyPin.m */, - F82E6BDCE885882BB80C8E02C363DC27 /* PFEventuallyQueue.h */, - 70A011368DB31350D4B8817E5E2854FF /* PFEventuallyQueue.m */, - 0EC1A04BDC009E62BD763037FA2606BC /* PFEventuallyQueue_Private.h */, - 33F368B6E02D9CE1920FD6A9A46E7379 /* PFFieldOperation.h */, - 9BC2DD4C7D08C328C3E76B833B15CE35 /* PFFieldOperation.m */, - 44FBA4EB83A6123C98B57E3CE091D509 /* PFFieldOperationDecoder.h */, - 250859A0E42785F3AA24C0D32F9A6693 /* PFFieldOperationDecoder.m */, - 102B0616995BF67CEC55063F3F545963 /* PFFile.h */, - AF76D767432F274AD4283482532FDBCC /* PFFile.m */, - 2338E18E87793296BA6AF5025AC078AA /* PFFile_Private.h */, - F86B02F5EDF93DEFA5042328F03D7376 /* PFFileController.h */, - A9981EDA58981856A99D4405188D1658 /* PFFileController.m */, - DD9685C6D6B07C68DC58D461BAABD9EC /* PFFileDataStream.h */, - 81CD390E4ED30F1847B6E9429A3F13FD /* PFFileDataStream.m */, - C0418242E51162B39D697CC698FE6B37 /* PFFileManager.h */, - B9AC06D85D58069D13A34C1333509EEE /* PFFileManager.m */, - 62A792546F47E6C090C59ECB9CA2104A /* PFFileStagingController.h */, - 360F1AB2B9AB436B138BAA4F2FADF706 /* PFFileStagingController.m */, - 0E4384AACFBA3ACDE573EC5B89A33CDB /* PFFileState.h */, - B20A4C5260282598EE2A9122AE28C581 /* PFFileState.m */, - 38AB88C207BEB56FAA7E8597DF2B4151 /* PFFileState_Private.h */, - 0920CA605C2CB8ABBD20EA56A984167A /* PFGeoPoint.h */, - 43F86D7AD4019B993FC793C54A2B9FE2 /* PFGeoPoint.m */, - F1832873F525EA20EA9754E692770264 /* PFGeoPointPrivate.h */, - 3C6E13FD355083FC23FDDB87F0B9D918 /* PFHash.h */, - 307342BCC7CF73A49CC184FCE4B81110 /* PFHash.m */, - A83EEAE0B09A222BC1C9AA21E68D0205 /* PFHTTPRequest.h */, - 36DC9E026ED1115FFFEBA4E7E80205D1 /* PFHTTPURLRequestConstructor.h */, - 94C75B08294E8CBDFC8C121C04DFD0BB /* PFHTTPURLRequestConstructor.m */, - 2463BFBD8A92B6595C4A21F6AB9AE7B4 /* PFInstallation.h */, - 5D1B41D28557100B7599E736F8BD7E62 /* PFInstallation.m */, - BFDE86646969B14B9DDE0FB0504D891A /* PFInstallationConstants.h */, - D82B1A59C6D060B31454EE1BA1AFEA58 /* PFInstallationConstants.m */, - F33B071C96E8C452B416F92718E4459D /* PFInstallationController.h */, - 3EB4361565435188A9EE00823DB76D92 /* PFInstallationController.m */, - 6941B7CE65411420D590479786152661 /* PFInstallationIdentifierStore.h */, - 8E954F15444F31FCD63CBBDEC836EFD0 /* PFInstallationIdentifierStore.m */, - 0A024773FB8E17B08C96866E88799BAA /* PFInstallationIdentifierStore_Private.h */, - BB6655C00D3CD2E63257C48537A65FAF /* PFInstallationPrivate.h */, - 0C4443D07955C1B82EAE1FF5ED9802D5 /* PFInternalUtils.h */, - 1B637A7F2698FA5CA2C8865433E40C77 /* PFInternalUtils.m */, - F5981C852078B840ABABABDEC5CF1BC0 /* PFJSONSerialization.h */, - 1F75CC1FF1A14AC8642A5E4C206F7A2B /* PFJSONSerialization.m */, - DEC3E90FB8D9ABC8A00A31F38C7B82DA /* PFKeychainStore.h */, - A33AF9AA1A3171F8C88DDE6C178C64B1 /* PFKeychainStore.m */, - 26D6F7E58C3F63F67253B5D30DACCF6E /* PFKeyValueCache.h */, - DB18C85E52D0CCCDFB9117C741639AD0 /* PFKeyValueCache.m */, - 9291AF9D8AB933D3FFB984F58175FA99 /* PFKeyValueCache_Private.h */, - 677A67215E9F5421372FF71C51A9CBEF /* PFLocationManager.h */, - 0AFC27DF393243493EC5ECBE91DD283C /* PFLocationManager.m */, - C5C0949E4094DAB10E007D58354FFE6C /* PFLogger.h */, - FF1B02B31B87AF83F0B2E1C043B37586 /* PFLogger.m */, - 0F65BE61AA1211314E4C269AC92D1057 /* PFLogging.h */, - 1058E8056D3FA36C9E8A152F802601F3 /* PFMacros.h */, - 359A857EBA1F996333DB3D4E97A6C171 /* PFMulticastDelegate.h */, - E4BF8807282EB99DD8B3198775CCD440 /* PFMulticastDelegate.m */, - 8CAE70A224DB0AFCFC0EE841D4C56CD6 /* PFMultiProcessFileLock.h */, - 9E9ECAB2E005E92FF1711C904032D845 /* PFMultiProcessFileLock.m */, - 8414D497D5AF83A586CE597084435FAE /* PFMultiProcessFileLockController.h */, - BC23D8D1583323AEC4319A567379AE0F /* PFMultiProcessFileLockController.m */, - E89FDC075819C960003126B2E4A6CD5C /* PFMutableACLState.h */, - 65FF31D34C22C23F62FBA20D9B7D7C22 /* PFMutableACLState.m */, - CE518703881DE5CA423A20499ECDC6AD /* PFMutableFileState.h */, - 1F13645A1FC49585D4052A12F65BAC07 /* PFMutableFileState.m */, - 29AC84ACC2284DC7D4A26CD3DE2F5593 /* PFMutableObjectState.h */, - A09A8B330777A976623A127D00A31688 /* PFMutableObjectState.m */, - 9F0E9294301984DC28389681C02CAE9B /* PFMutablePushState.h */, - D8B69E7AD96CC6404E9A378A007761C3 /* PFMutablePushState.m */, - 043864EF7F65C382A51BEA16C5EBB115 /* PFMutableQueryState.h */, - A528111D7A936F28A8552C9982E93715 /* PFMutableQueryState.m */, - 3D3F66F90965E3A12CB64DEAE106CCC4 /* PFMutableRelationState.h */, - 2210AC0B8E1C36C531569431FED76C6F /* PFMutableRelationState.m */, - D47E2B50535BEBB984A44A5E380A1899 /* PFMutableUserState.h */, - 075A9E0DA603A9C6B020AEE7FC5B7A91 /* PFMutableUserState.m */, - E07AD1BDC7C8535E1A0A1B7958025A92 /* PFNetworkActivityIndicatorManager.h */, - 241DE7E720235E1293C880CBB92E6037 /* PFNetworkActivityIndicatorManager.m */, - 7561E1617CDB3676851A461B32BAD227 /* PFNetworkCommand.h */, - 20AD7A66980A24CEED5FEFF10C43C907 /* PFNullability.h */, - F05383268A125B0EE32BE793F2940942 /* PFObject.h */, - 30FF88F63B1181C7F1D5B463098BD749 /* PFObject.m */, - FD3ADD8CA3E681E4082BE70B65F75C59 /* PFObject+Subclass.h */, - A60C0A0DD9BA6E60D184841F050BD285 /* PFObjectBatchController.h */, - DEF456870840E66AE413DE98C5013DA4 /* PFObjectBatchController.m */, - 2985BFC5C86CBD73F98331A8CBE0AC82 /* PFObjectConstants.h */, - FB83ED9CED7C0E54F55F8D79DEF90CCE /* PFObjectConstants.m */, - C67B9105DBF2A4806B810D4C91492A7A /* PFObjectController.h */, - 349C704F429F4C4E216F689070040BB4 /* PFObjectController.m */, - 166D99DF393A0B52E9B7797AD00151D1 /* PFObjectController_Private.h */, - 9AC40A69DAFB3828DE1563F57092BA09 /* PFObjectControlling.h */, - D0B71153D34E562ACF68F48FB7FDADAB /* PFObjectEstimatedData.h */, - 516589740C3BFF83DA4A36876F16A619 /* PFObjectEstimatedData.m */, - 73BF8BE9385A3D1A65CD98FFEE2D3D1C /* PFObjectFileCoder.h */, - 62CAFF354F98B00137C57CC547DF0DF1 /* PFObjectFileCoder.m */, - 5969F1692114D93014B5D9B9FFC0D2BD /* PFObjectFileCodingLogic.h */, - 45E05BDE47E9DB32B931EE360B02476B /* PFObjectFileCodingLogic.m */, - 04B8709A759AFBF2338CD683415C1896 /* PFObjectFilePersistenceController.h */, - 8256FA5420925F6CADCB4C5AC7CE573B /* PFObjectFilePersistenceController.m */, - 438DDEBF7F22477BF899EFD13A21B646 /* PFObjectLocalIdStore.h */, - 05966AE09355F02D4FED4D2118B95475 /* PFObjectLocalIdStore.m */, - E1F2965F8C307884A46B1AAE4D8ECD98 /* PFObjectPrivate.h */, - 435DAA47CFDDF383FBFCBDAD51AA78B2 /* PFObjectState.h */, - 452F073FE5B24730589F500D722C4CB2 /* PFObjectState.m */, - 7329083460ED8B649477E95909F03887 /* PFObjectState_Private.h */, - 9E7B7161635919425AA5D7D3A5558804 /* PFObjectSubclassInfo.h */, - 6BD7B193C39EC475280660DD0302D6E2 /* PFObjectSubclassInfo.m */, - 9959A698F7854FAC8C6FA6CAD244E42E /* PFObjectSubclassingController.h */, - 2185FDCDE303483489621D861E875441 /* PFObjectSubclassingController.m */, - D8B2ACC39357BAAB14306E00BA3E428B /* PFObjectUtilities.h */, - 0091577C9867D249011C372417312830 /* PFObjectUtilities.m */, - 1FD848862A585F198F6FCAC8B8EFB72E /* PFOfflineObjectController.h */, - 4C9E435584357B992826E680CBFE5DFF /* PFOfflineObjectController.m */, - 0113C7DDD735C654297621D228AFDEB3 /* PFOfflineQueryController.h */, - 7A5FCE7E535A69957FAD0C1B32F14873 /* PFOfflineQueryController.m */, - 91D3B95A12116CBA1AE9ABED59FCEEB0 /* PFOfflineQueryLogic.h */, - B0716E42F47F257A3770B7DD8081EDC1 /* PFOfflineQueryLogic.m */, - 7594F8FEE9A171F78D2E3F6CDE674229 /* PFOfflineStore.h */, - B736120F3CE5A59BD18E4D01F84A0B2D /* PFOfflineStore.m */, - CCD35CE7907E6242CDB7C52C7FF9CB0E /* PFOperationSet.h */, - B581DD1ACB958FFDB072BAA4F2237507 /* PFOperationSet.m */, - ADB7018CBCF8438824B821ED70CA23BC /* PFPaymentTransactionObserver.h */, - 2749A3FC2730A5F92649D4FA2C5D48EF /* PFPaymentTransactionObserver.m */, - 59670B276943E78259AC1BA4451BC0F6 /* PFPaymentTransactionObserver_Private.h */, - FF372967FCF6DDE5A2CFFED0A29DF613 /* PFPin.h */, - 6928FC9D915EE8FECB9382A37F4E3446 /* PFPin.m */, - 8D20CBAAD1BA598F1D6247B41E4566FF /* PFPinningEventuallyQueue.h */, - 6698D999B8C3EFC728172EC43B1557FC /* PFPinningEventuallyQueue.m */, - A3E723872EB18F77CB30EE5A350765C6 /* PFPinningObjectStore.h */, - 0852D13FDBDEF928743F6173924EB4AE /* PFPinningObjectStore.m */, - FF61D452E7B69C442EFEC72A2A7580FE /* PFProduct.h */, - 695743A26F0576E1D0B7E9A2BDACD034 /* PFProduct.m */, - 96445D7015BFE014D85E10B2485BED3F /* PFProduct+Private.h */, - 0C2D23C919350BCE1204859E2D3084E1 /* PFProductsRequestHandler.h */, - 992C8C2C65196C7C84875BE02C16F5BF /* PFProductsRequestHandler.m */, - CCBECCDD0315E3F03B8C7115AEF53966 /* PFPropertyInfo.h */, - F101F813C282DB4B68E1395D8B435B3A /* PFPropertyInfo.m */, - 2A95E9EA935826FB78AE6D397AE3194A /* PFPropertyInfo_Private.h */, - D16736489B2F33CEE9D10BB1901E56F4 /* PFPropertyInfo_Runtime.h */, - 9D74B8A82D1C235550B3CFCBEB08229D /* PFPropertyInfo_Runtime.m */, - 367AE0EE476D9C3AD44EFC68E0EC667A /* PFPurchase.h */, - 70D415D5D8A179CBA96E760BAA1CEBF6 /* PFPurchase.m */, - CE7CAE3094180B95240126C2822042E2 /* PFPurchaseController.h */, - 4C254B2D112ACF8B32BBA3B5B47AD3D3 /* PFPurchaseController.m */, - F7B69ECB48E71EF166AA0B4EEEAF886B /* PFPush.h */, - 2F89FFDAA4292F5FBED5DCC1AD20E60C /* PFPush.m */, - F65D1CCFE6679492E73D2B496A3538B0 /* PFPushChannelsController.h */, - C0FB09BF7F073967C701AC4CBD6E943B /* PFPushChannelsController.m */, - 0FF2D1B9FAE8A0A6023A7692CC3C779D /* PFPushController.h */, - 8F9A09A43164225380B1BDCE467353C7 /* PFPushController.m */, - 82C9F7010D830A1139C299899A83B9C2 /* PFPushManager.h */, - 92A90342C0F0E20145742435B920F2FF /* PFPushManager.m */, - 50BA63747E27C27E4D5B2B8E842C794B /* PFPushPrivate.h */, - 08A2139169368DCEA2B9DDFF8FC52DC0 /* PFPushState.h */, - 9ADD777B2E527B0D2F8A8AC96C48FE6E /* PFPushState.m */, - 49E8615A4B8AAD457BEECB6AC39FBC7F /* PFPushState_Private.h */, - 2AC94B957B5EE460B0672AD2E1CC4E90 /* PFPushUtilities.h */, - 3C153997184ED2FF1E8380B9139AC366 /* PFPushUtilities.m */, - EA3DD2288239EFA0AA3CB9B39F38F54F /* PFQuery.h */, - A6F89455E34EE7028968AEDF82F78CDF /* PFQuery.m */, - 28EBD86C43DADC2E0614A6FF816D6268 /* PFQueryController.h */, - 5E14F114F990190EA018F59BFD8A7CA1 /* PFQueryController.m */, - 2A7E2B8D9A365D86227F46D0BDDCDD07 /* PFQueryPrivate.h */, - A72EA68DFEA7E21C47FD42437F8897F9 /* PFQueryState.h */, - 6C796C5611EDAAB47F4E3BF6D9EEA9CC /* PFQueryState.m */, - 18BF33071D03951244C7767E1153C152 /* PFQueryState_Private.h */, - DDF8F676322E06A458A9455290D831AD /* PFQueryUtilities.h */, - CD86AF14E6AC36C77A150AE85409AE37 /* PFQueryUtilities.m */, - 3F95840228CCB23871D1FDA853144584 /* PFReachability.h */, - 39965C065F1A6625731B58560E98A306 /* PFReachability.m */, - 4E547C2347FABBF6388F1EF5F0718731 /* PFRelation.h */, - 1D4F461316B1B02A7332A20432095322 /* PFRelation.m */, - C059DE90663E3A5B3FAB03899B3EE981 /* PFRelationPrivate.h */, - D9207DF0F12014BFB1CFDCE5A3B13FB7 /* PFRelationState.h */, - 49078E325B83F07DF6DEDE0A8AF6C0B9 /* PFRelationState.m */, - FA8BCD13675B9DB1665D76BA15065FFB /* PFRelationState_Private.h */, - 0636531503B8A71FA7D528F8E9D1F2CC /* PFRESTAnalyticsCommand.h */, - F4013A55E87016979FBEC0CC2D707560 /* PFRESTAnalyticsCommand.m */, - 0F235F78B07EDEC0A4ABEA5492758AC6 /* PFRESTCloudCommand.h */, - B65B209398DEEE0639810752FA7A18D7 /* PFRESTCloudCommand.m */, - 6E4572E64BE534864C8EDDB5AFDCDCCE /* PFRESTCommand.h */, - E47461E98082A9CA98BD79A9B64FB02B /* PFRESTCommand.m */, - 7D66B6E411C773A4C325070F091A185F /* PFRESTCommand_Private.h */, - 3A60E6832260DEEA85851BDB87E31EFE /* PFRESTConfigCommand.h */, - 87C3814F3B0BD8F178C11CCFC60DA422 /* PFRESTConfigCommand.m */, - D05CFABD73D1FB90C529520B0DC77F20 /* PFRESTFileCommand.h */, - 4B5EF0AD4F734B79EDED699BCB4D4BB0 /* PFRESTFileCommand.m */, - 9A198263993B0BD6D29BF39EAB72DAFA /* PFRESTObjectBatchCommand.h */, - FF33B85D0ECE3439AEBAC37BDAA6C3C1 /* PFRESTObjectBatchCommand.m */, - 41094D76ED63E327FE9C849B59884D75 /* PFRESTObjectCommand.h */, - E59D99D003850337B845D727F83D8F81 /* PFRESTObjectCommand.m */, - 46B4B08EA86C057DDF2D5999D4AD5896 /* PFRESTPushCommand.h */, - 89B0FEF6909A74F2C8A2B4851AC77B72 /* PFRESTPushCommand.m */, - 981AD73BD30C2A11D8AA68A9DE64E0C5 /* PFRESTQueryCommand.h */, - D0F85BD16C75AA3CE44524754ECC9372 /* PFRESTQueryCommand.m */, - 52781911B0E8FC1A6419C6DB628698D9 /* PFRESTSessionCommand.h */, - 6C59735CBC2ADCF341B3403FA4E54F31 /* PFRESTSessionCommand.m */, - FA772C990873A5D9CEA1C1147D5F3999 /* PFRESTUserCommand.h */, - 12F717FA93D810E6E56AA79E8DA31F49 /* PFRESTUserCommand.m */, - 701CB3B6C89D2BF5586DA0598F75C795 /* PFRole.h */, - 6A03934E6774452C43AC8C689387D333 /* PFRole.m */, - 9921F60FE1CC3C791C3B38E4C7BC3840 /* PFSession.h */, - F6ADB903F627F6C71373F05CDF219611 /* PFSession.m */, - 5074739FCD9F69FED5FDF7014860BB24 /* PFSession_Private.h */, - BC4DB7A7953625E3259CE8EFBF4B48A0 /* PFSessionController.h */, - CA16BCCFE65EA3B9355F70FC4E81B1D5 /* PFSessionController.m */, - 20C725EA9656F619043E7F4C0CCBC219 /* PFSessionUtilities.h */, - C2D09C30034987C004CAC0DD30E50EF3 /* PFSessionUtilities.m */, - E8F3C1717348891BC57725A0810D7DF6 /* PFSQLiteDatabase.h */, - DAC816672E32BF119EB78DE481DF82C4 /* PFSQLiteDatabase.m */, - 87A95FA6B2DDA6FF87424D908CC257B8 /* PFSQLiteDatabase_Private.h */, - BD7F6400C626D55400820230D04C5F7F /* PFSQLiteDatabaseController.h */, - 6463ABEE30CC6F5D3278EB29F094EA5C /* PFSQLiteDatabaseController.m */, - 2BB1C00F959E71B835BF4CBA71F2A4DC /* PFSQLiteDatabaseResult.h */, - B466BAD6E30106D96C85707E09AA357B /* PFSQLiteDatabaseResult.m */, - 3D3165725CDF1149D3CCA74613D69C71 /* PFSQLiteStatement.h */, - FA0A405D111BD368A804BC5E6B23F3DC /* PFSQLiteStatement.m */, - 51E1566E07DFF49B458706F904502E3E /* PFSubclassing.h */, - 5FA2345F3E38B080C28690468CB56BCE /* PFTaskQueue.h */, - 79DB596B5868A1F37939AA5E108ED2AA /* PFTaskQueue.m */, - AED0C7F4991EEDAD40B929FE5954A58A /* PFThreadsafety.h */, - CD3BE94284E25134F4C852DF25C2BB81 /* PFThreadsafety.m */, - 161E3FAF78679E3EDFED60CD40654CFE /* PFURLConstructor.h */, - 0F860F4621C29DA310856A566C83712D /* PFURLConstructor.m */, - 0213DC0ECD5BC986C04AF1771A8B8315 /* PFURLSession.h */, - A83BE4181E146B3BD3F668BB14864CE0 /* PFURLSession.m */, - AFA589B0E7364B47DD39581ED7F8997F /* PFURLSession_Private.h */, - 95E1D1F624E0E8D6C0FAD45089D5480D /* PFURLSessionCommandRunner.h */, - 6C6494683E07D5C70C872F4947A38578 /* PFURLSessionCommandRunner.m */, - 76D651F3BCB876EB2B8F7F5C4E0062FF /* PFURLSessionCommandRunner_Private.h */, - 5F215C518E3FFBEF197136D91C115EE0 /* PFURLSessionDataTaskDelegate.h */, - 1990BFF9E6D313BBE004A6390A0AC1D8 /* PFURLSessionDataTaskDelegate.m */, - EC2DB9D26240C2630858BA37A5591DE2 /* PFURLSessionDataTaskDelegate_Private.h */, - CB7BC0721D61927E1CA5E5A15874B94C /* PFURLSessionFileDownloadTaskDelegate.h */, - 531AB65EED2C24DDFCE29F4E32570062 /* PFURLSessionFileDownloadTaskDelegate.m */, - F3B6ACDE18741CD97E959576C1D39CDD /* PFURLSessionJSONDataTaskDelegate.h */, - 910165D4217068C24C287CE5AF13D6BD /* PFURLSessionJSONDataTaskDelegate.m */, - 4F202FA64ADCF9050D08CB944B331392 /* PFURLSessionUploadTaskDelegate.h */, - 670A877E489DE7EA116B48C111981C8A /* PFURLSessionUploadTaskDelegate.m */, - 4AB74A37510E78D1DBF9E663451E9941 /* PFUser.h */, - AE7C306D0EC5E02AF1AC9D97F419ABE4 /* PFUser.m */, - CCAD3E3BBFF0D6A1F1CBE0F58445B6C8 /* PFUserAuthenticationController.h */, - 165C1917DABAAC14E0BB7825B8C068D6 /* PFUserAuthenticationController.m */, - EF61CFA03E984B1560E98203F1CF9D40 /* PFUserAuthenticationDelegate.h */, - 7A78A342E3D58FAB3B9BCF2E2A6640FE /* PFUserConstants.h */, - 3173C656ABA36E19AFFAE28189BBC6EF /* PFUserConstants.m */, - FB320B22C54E1E2869AD39B77A7BD653 /* PFUserController.h */, - B408965C776EA83368E1BA4B52F57587 /* PFUserController.m */, - 07A4B336BA9ACE65629272FCD913D35C /* PFUserFileCodingLogic.h */, - 7158AF2B7D008CB9610944ABC757C3D0 /* PFUserFileCodingLogic.m */, - 9EA3E4C86DB2F16D57983EE7A65D5B49 /* PFUserPrivate.h */, - C1EF55F530A54A7FA4E2A1F21B9C2A6C /* PFUserState.h */, - 50C5DCAFBBEE9E4B148EFD23665B1FD2 /* PFUserState.m */, - A7C521FC2EC885334AB4AE8A70A34975 /* PFUserState_Private.h */, - E10977BA6FFA295F2AD61B795B2C7FD7 /* PFWeakValue.h */, - B2DCBEE27C7147DD02409495780E224F /* PFWeakValue.m */, - B9847B3742D0A294C228288B8E4D4092 /* Resources */, - FF92B86A83193D4CE356F79F769B7E0D /* Support Files */, + A4FDC68F75815A014551F0B6B572D2AF /* IQKeyboardManager.bundle */, ); - path = Parse; + name = Resources; sourceTree = ""; }; - DB0B77C9F7E83271AAB0B4F0A63CA39C /* Core */ = { + BC7D3B67D42FFD3E1347CBCA43F97813 /* Support Files */ = { isa = PBXGroup; children = ( - 952CDBE90871479F4265EF2DFD8AE480 /* NSData+ImageContentType.h */, - 9F7534EE7BD51C1E47D6B3FB6990034C /* NSData+ImageContentType.m */, - E85BC94017DD51217EED919EF5604C8B /* SDImageCache.h */, - EA7C8A67AD890502B88C38EC734BDD54 /* SDImageCache.m */, - 86F1AD27F1609FA38C3E2584530BD685 /* SDWebImageCompat.h */, - 5B6C8C1244901A4DC13F98B0BD264307 /* SDWebImageCompat.m */, - C617F4B4A1CE53AEAC7582E501F4DB3C /* SDWebImageDecoder.h */, - 7625861250EB678747DBDB0DA87F845C /* SDWebImageDecoder.m */, - 3829F70779211216073D6EB001F14DDB /* SDWebImageDownloader.h */, - 1E004D344C095F55232FB0E20CE0039D /* SDWebImageDownloader.m */, - 83D09D1579320C595EAB76A27A66A393 /* SDWebImageDownloaderOperation.h */, - 41B0B19F9EC056DDEB90C861DD253385 /* SDWebImageDownloaderOperation.m */, - 2827E635AE454DC870F2874F7615C635 /* SDWebImageManager.h */, - 99E82BD8E277629EAEF26AA8860F2772 /* SDWebImageManager.m */, - 0F5AAAE929C4C74F67C9EDCE3E0EB9FB /* SDWebImageOperation.h */, - 945B8EB1B5E9F204BDA638C028956715 /* SDWebImagePrefetcher.h */, - 659235A87B6E9B8D50AC86824833B4C6 /* SDWebImagePrefetcher.m */, - 5A3039C23FDAA1C416B9A8B4B571DEF1 /* UIButton+WebCache.h */, - 448B673FD293D7336F276231DF7DE1FC /* UIButton+WebCache.m */, - B149C76BFE429BA3CEFD6436D38D06A5 /* UIImage+GIF.h */, - 3ACDA3B548B75B13FC54C1C0A484A047 /* UIImage+GIF.m */, - C8869D548301C534BEC8788DACFA7BCB /* UIImage+MultiFormat.h */, - D04EDCD4786B77A896200D1559245584 /* UIImage+MultiFormat.m */, - 8A1A3BAE08183E61A9D99E03845A1950 /* UIImageView+HighlightedWebCache.h */, - 95783CA02ACC8DE896F47A0F4FAD5845 /* UIImageView+HighlightedWebCache.m */, - 95DE36BCC0193B52A414C8C4089114E9 /* UIImageView+WebCache.h */, - 512E8FF912FFD36699AEDF3133DB49FC /* UIImageView+WebCache.m */, - 61A6CC3AD49D1EC0236AC77C6C3FDEE2 /* UIView+WebCacheOperation.h */, - 69DFF6E4BCAFB2D84CF88A79538591A4 /* UIView+WebCacheOperation.m */, + 265A36A163461FAFE8B22F91E5FF5839 /* AFNetworking.modulemap */, + 91F6CE6961CE84A5E762D863216E0997 /* AFNetworking-dummy.m */, + B517C85F24F47CE2FEA872AFC6676C80 /* AFNetworking-Info.plist */, + A6AFE5A0BB8F671D756405659A7280C4 /* AFNetworking-prefix.pch */, + 8852424B3CD79FB522C7DBB741B3A915 /* AFNetworking-umbrella.h */, + 7AB05A9755C75CB37B4B278883D9ECBE /* AFNetworking.debug.xcconfig */, + 4AB7F6659411A2066C581E0CA1DB5C65 /* AFNetworking.release.xcconfig */, ); - name = Core; + name = "Support Files"; + path = "../Target Support Files/AFNetworking"; sourceTree = ""; }; - DCD2569488C2DE61703CF16819F46F38 /* Bolts */ = { + C9E21EB76BAE08F39E47EEBAA84FD02F /* Resources */ = { isa = PBXGroup; children = ( - 7D92BBC08692ADEF38D6E159EE5963AD /* Support Files */, - E6EFEB7422FA838B2546D089AAE302AA /* Tasks */, + 2A04E1624A7D22B26C4108F5511DBA59 /* en.lproj */, ); - path = Bolts; + name = Resources; sourceTree = ""; }; - E19D72437AA8F886F4D86F8F81B58A9D /* Default */ = { + CC67B748D6D89E34B3EBA3591D5D4298 /* Pods-FoodbLog */ = { isa = PBXGroup; children = ( - E95B033A6FF1B30BFDD04AE4D596F2EA /* Chameleon.h */, - E7777D9C8AEF9BE8A47A082328045E3C /* Chameleon_.h */, - F8EDD29F24657A06C6E7F595BEB0FE2F /* Chameleon_.m */, - C2D1C4E98593EC75192FB9A4BA3ECB4A /* ChameleonConstants.h */, - 40A9F64F4334B4832DA1DAE7B7993FD8 /* ChameleonConstants.m */, - BDAFD7316C60383055E23BC9BF253BC5 /* ChameleonEnums.h */, - AF77BCE7F4E600FB0FF25AD70D5860A0 /* ChameleonMacros.h */, - 751D3443C2AA75402B1A10DDA758A575 /* NSArray+Chameleon.h */, - 47D632AD5CAB17E28A0843C0107B3A73 /* NSArray+Chameleon.m */, - 6F1C54627C59B634F5A8A947CB08EE44 /* UIButton+Chameleon.h */, - C47EA5E0FE2EDE215EF920002C45CABC /* UIButton+Chameleon.m */, - 679635BCDBAAA84085EA29352E7478C6 /* UIColor+Chameleon.h */, - 9F422A1C8B0F6527F123CE3D95BC2051 /* UIColor+Chameleon.m */, - CB1797C033036090B451088C89260E49 /* UIColor+ChameleonPrivate.h */, - 34E153BBD9AAB5FCAEC5F2C8976F3343 /* UIColor+ChameleonPrivate.m */, - 1B8464F07E251683523617CE1C8DCD6E /* UIImage+ChameleonPrivate.h */, - 7154543FC0EDEF72C9DAA39A933C7F1F /* UIImage+ChameleonPrivate.m */, - D037863CFD3CE4061E8C22D77EE6DD5A /* UILabel+Chameleon.h */, - 25815FEB0DE47ED86D8ED80B2A8909AA /* UILabel+Chameleon.m */, - 7F047216A5E0C25046A45A773B453E53 /* UINavigationController+Chameleon.h */, - DBCC900D32AFEFDA4E083D025D1CDCAC /* UINavigationController+Chameleon.m */, - 08ECFA9AF8B024A3D543EE06C7273F36 /* UIView+ChameleonPrivate.h */, - DFD4D5F1EA65A4AFBD41C94594DC0926 /* UIView+ChameleonPrivate.m */, - 4E8270CB580B17C43E533286D51C2D7C /* UIViewController+Chameleon.h */, - F3D49D3F596E2FF8547A010509605767 /* UIViewController+Chameleon.m */, + A62DEB07190D9A48B19931ABEF8231C7 /* Pods-FoodbLog.modulemap */, + 8F7F9F74CC5A4F15ADE6F15432160734 /* Pods-FoodbLog-acknowledgements.markdown */, + FD99F6C0C8D35C9AECD61CAC8D4951B4 /* Pods-FoodbLog-acknowledgements.plist */, + 71E8757C5E655C53AAFA0481265D031B /* Pods-FoodbLog-dummy.m */, + 11CBBD39FFE4DF992FED341E869D5277 /* Pods-FoodbLog-frameworks.sh */, + 9295942D69DE1369ECE1A9BCC87CA017 /* Pods-FoodbLog-Info.plist */, + 47B8D17F18C41D9E28B5AD8E78B23877 /* Pods-FoodbLog-umbrella.h */, + 849E5A8317B6998E948A27507E902A90 /* Pods-FoodbLog.debug.xcconfig */, + 5E8A133C5B52375ED7ED0B08ADBD8537 /* Pods-FoodbLog.release.xcconfig */, ); - name = Default; + name = "Pods-FoodbLog"; + path = "Target Support Files/Pods-FoodbLog"; sourceTree = ""; }; - E3AE315F07920E1FAB247D7A4F1B3972 /* Support Files */ = { + CE24BD2F839421EACDDDAC644746E6D9 /* Support Files */ = { isa = PBXGroup; children = ( - 96DB0E56E2231F314D87A2254DC2DB82 /* Info.plist */, - 618A87BB12362A560B73946CDE741CFD /* Unirest.modulemap */, - C3F6F352E4DEB45514F7E02EEBDB016E /* Unirest.xcconfig */, - 1D63CAF2AF89704D532ED74A5F3B1806 /* Unirest-dummy.m */, - AB39A28463C679EBC0BE2339E85EBFB0 /* Unirest-prefix.pch */, - F3C1A3ABFDF15B4DA28FAE55E6A8F9B8 /* Unirest-umbrella.h */, + AF48650F07B7D424D0C0F148D2C63F3B /* Parse.modulemap */, + 12EE481EE7117C1AC26F8C373608E91D /* Parse-dummy.m */, + F01AF6F27447ED96CC1D67478AE5944A /* Parse-Info.plist */, + B252B37D2D546870C8A826AB65BC2B95 /* Parse-prefix.pch */, + 43ED988181D6943C924184E66A36963B /* Parse-umbrella.h */, + 38F8E3AFD6049401797C7A47018A213A /* Parse.debug.xcconfig */, + 9B994E9D8D38725EB2DBDFA907134A7C /* Parse.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/Unirest"; + path = "../Target Support Files/Parse"; sourceTree = ""; }; - E6EFEB7422FA838B2546D089AAE302AA /* Tasks */ = { + CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( - F26F2A46EFE8B567CF8E9058C95C550C /* BFCancellationToken.h */, - DD5095A8F8D31FD6548CA972007FE2F2 /* BFCancellationToken.m */, - 0FBC35C1E8CA28EDFF045C5C6A6AB64B /* BFCancellationTokenRegistration.h */, - 184CDD6D4BEC4A05DA974D0905409BB5 /* BFCancellationTokenRegistration.m */, - 8B84B94BA546CAD368DB53A7DFB7D87B /* BFCancellationTokenSource.h */, - 8AECC8BC20B105122A1E79F9C7E14A1C /* BFCancellationTokenSource.m */, - 68DFA1C5606B064C64972A0D99D79614 /* BFDefines.h */, - EC56529C7E683E2B46B011FAB4F87A2E /* BFExecutor.h */, - F2BEB596D4234E666A47493046F22D9D /* BFExecutor.m */, - 3C0356BBA99F327689450897B320B7B3 /* BFTask.h */, - 3A22E843656CB49C6E68E4BE98036F2C /* BFTask.m */, - 43EF76379A5B47561340CD04EDED49D0 /* BFTaskCompletionSource.h */, - FEF707A6B74089D8250C9AEEDB522B65 /* BFTaskCompletionSource.m */, - 45580BD459DF4A00A74028429FABC4D8 /* Bolts.h */, - 84513CB26B8A0050F9E684391FC1BC5D /* Bolts.m */, - 5F8406F5398993A992C272C81CFDE2BC /* BoltsVersion.h */, + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, + 35E526B6E4CA6A7E89FE8C5A5B1F2259 /* Frameworks */, + 595CD60B097830EF6B8B59E1F985D800 /* Pods */, + ACE7852A20DA825AE217649C3D71EFB7 /* Products */, + 172C6AB29CA1720C0D85F380DD22AFB9 /* Targets Support Files */, ); - name = Tasks; sourceTree = ""; }; - EE62598D14C185E64BC5D5758D9EBE48 /* Products */ = { + D198DD0422CB3811CCB34AA14A138785 /* UIKit */ = { isa = PBXGroup; children = ( - 158142C7F929BA4F36A79B3F1266EDF4 /* AFNetworking.framework */, - 39CBD2387C0A22DE368A7A3D92A3E3FE /* Bolts.framework */, - 1A52C07A61861817130D7B9AECEA563F /* ChameleonFramework.framework */, - E49698D71E7A652987CD66FB55CF759D /* FlatUIKit.framework */, - E9FBCA63748E8FB4F92A5E4B87A13C84 /* IQKeyboardManager.framework */, - 5A771B06A45185BFBDA4C3A4A04B8B5F /* Parse.framework */, - 854280D62BE01F6E5C7DA21C6D62CBD7 /* ParseUI.framework */, - 1DB4ED0D15FF25EEA3709DC4DCCE9676 /* Pods.framework */, - 2436CD3523CA72198B0D962C17E46301 /* SDWebImage.framework */, - 1717B0778A13741CD446D6173A471FBC /* Unirest.framework */, + C0186D06FBE7DA63E6E3D6BA78C59D81 /* AFNetworkActivityIndicatorManager.h */, + 8B4598F68BAD6898D603B376A1FB1A8B /* AFNetworkActivityIndicatorManager.m */, + 246514DFF438978008D8FA6C3DB62A87 /* UIActivityIndicatorView+AFNetworking.h */, + AFA966371146146D7F2018130EFE0F66 /* UIActivityIndicatorView+AFNetworking.m */, + 13D51BF48F5AB0EACFEFDE67304AE0AE /* UIAlertView+AFNetworking.h */, + 18507E1294DADA225725E281BEEF80DD /* UIAlertView+AFNetworking.m */, + EE978A828BDE18C9C31167600F655876 /* UIButton+AFNetworking.h */, + 40668A53B58A0048FA222C4AB7E2189E /* UIButton+AFNetworking.m */, + F364E09FEB64FC9E1C8B7224CDCE8E01 /* UIImage+AFNetworking.h */, + 8E9D2D880354EC317D86A4349D035200 /* UIImageView+AFNetworking.h */, + A408C24FBC30C794341C29AD9ECA2CD1 /* UIImageView+AFNetworking.m */, + DE9F993B8C26D2CD762FFC2EB4E32734 /* UIKit+AFNetworking.h */, + 0F396B4049BADC218F3C27A0FB8AF963 /* UIProgressView+AFNetworking.h */, + 51CF4033E47188387317DC9CBC5EBBA3 /* UIProgressView+AFNetworking.m */, + C8CC6659A6C2F9156DD09335364D0A48 /* UIRefreshControl+AFNetworking.h */, + 76CB784D54B055F86031B44399CB67A2 /* UIRefreshControl+AFNetworking.m */, + 7DE2D5472532E535898481C5442AAA5B /* UIWebView+AFNetworking.h */, + 7E737BD38A79BE130905DB568587BBC4 /* UIWebView+AFNetworking.m */, ); - name = Products; + name = UIKit; sourceTree = ""; }; - F34C45A99F042208B242BC97FB92A88E /* UIKit */ = { + E8942D476A67018116BB908E43FDA24B /* Bolts */ = { isa = PBXGroup; children = ( - CE94DB6C100CE51E45FAF3164C75AE11 /* AFNetworkActivityIndicatorManager.h */, - 1112AB4B9D811AA4D841354E84FBA4A6 /* AFNetworkActivityIndicatorManager.m */, - 38B24E4D6538C00EB19CA86398ED5FA7 /* UIActivityIndicatorView+AFNetworking.h */, - E58F8383E7BEF7B6D7E8497170CCA20D /* UIActivityIndicatorView+AFNetworking.m */, - 69AB466A89966108035F106401A75D3C /* UIAlertView+AFNetworking.h */, - 86CCF8CA09C85DC9F7A1996054A59F84 /* UIAlertView+AFNetworking.m */, - EB1C14F4C3EB11646EDE6682C4237038 /* UIButton+AFNetworking.h */, - A3DC79169AA38109A4D516CEFB2B3089 /* UIButton+AFNetworking.m */, - 12141DC6DC4E3FFE804DFE337A3374C7 /* UIImage+AFNetworking.h */, - 39DCC2C5EF00A91CDD98FA4B087203B3 /* UIImageView+AFNetworking.h */, - 103FF4C21FC1A058E47E222F14825A8B /* UIImageView+AFNetworking.m */, - B420E3B76BA771BB141A4869B8EB491C /* UIKit+AFNetworking.h */, - 640E6EE31F76BFD4D000EC49F5EC7E9F /* UIProgressView+AFNetworking.h */, - E48CF71243F5A2BBFC8F7F74E80A2E81 /* UIProgressView+AFNetworking.m */, - 124E3271A7DC3EF54FAD044CE7F7F652 /* UIRefreshControl+AFNetworking.h */, - A0A2EC5C748A58FEB0FE76B1573EA9BF /* UIRefreshControl+AFNetworking.m */, - 3772DE6021E4CAEBBA3DD14A4CF8ED7D /* UIWebView+AFNetworking.h */, - 9E971BE0DEBFF48B45DEB3916FCECACA /* UIWebView+AFNetworking.m */, + 184BEF9B5CABA24D9A779A2C07AD0583 /* Support Files */, + 2FF61124D8A80D2D8DE9D6F350DE5041 /* Tasks */, ); - name = UIKit; + name = Bolts; + path = Bolts; sourceTree = ""; }; - F4CA14B78B1E949E3661F2EBD324B854 /* Support Files */ = { + F387619E937BAFBEDDAF6DD4559FAC1B /* Support Files */ = { isa = PBXGroup; children = ( - E5A60EC03BFE539C5A45F114B579D083 /* AFNetworking.modulemap */, - AF7EB139234D7591A9BBBFE257CBEDC2 /* AFNetworking.xcconfig */, - DFF3FDB3E1DBB2B57D6B105B337F26B5 /* AFNetworking-dummy.m */, - 2AD694A9C59B0664BD55D6F67E1D1551 /* AFNetworking-prefix.pch */, - E5C14A4D20250982D60F0E6603D66AD5 /* AFNetworking-umbrella.h */, - 00FCD89C9B46262B83E716F2D8EB9F2B /* Info.plist */, + 927DBA16CBE9B29D79E1EE774EE19F59 /* ChameleonFramework.modulemap */, + D79C12A61A4543E416CBB738D3FF37C3 /* ChameleonFramework-dummy.m */, + C2ACCA2ADD065408B661FC354F02DBD2 /* ChameleonFramework-Info.plist */, + FF6E60AD4F8CE395B8997C363B38E9FD /* ChameleonFramework-prefix.pch */, + F18000A5D7CD27A6122BE6E91FD82BC9 /* ChameleonFramework-umbrella.h */, + DA0DF40D1E6DB2A9A53542C123149969 /* ChameleonFramework.debug.xcconfig */, + 7142851694FCB943E670DC3C15E92EBF /* ChameleonFramework.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/AFNetworking"; + path = "../Target Support Files/ChameleonFramework"; sourceTree = ""; }; - FF92B86A83193D4CE356F79F769B7E0D /* Support Files */ = { + FCCC03A49F4A917E53DF929ED3AE9864 /* Resources */ = { isa = PBXGroup; children = ( - 53C1E24C34781F516F273B45CBD6083A /* Info.plist */, - 5141615EE5D0ACF917C43ABD7872ED3A /* Parse.modulemap */, - B7A94758BEFF018FDE24D7113BEAF994 /* Parse.xcconfig */, - 0C215F34F0C6B81200F3B21B59E574C4 /* Parse-dummy.m */, - B85BAD594BAF8219C7223ABC66A87291 /* Parse-prefix.pch */, - 42AFF659E9E3F99529B442E5A4B428AE /* Parse-umbrella.h */, + 7389E3A97A4248463F61AE93C1902809 /* flat-ui-icons-regular.ttf */, + 416EF6ABD24C5B14BDDDADF319BC2942 /* Lato-Bold.ttf */, + 64999537AFDE8F90807B5B5991781283 /* Lato-Italic.ttf */, + 4313FC1E27E9B9A96CC0E86A9963B5EE /* Lato-Light.ttf */, + B4B9DA35E6B073D79C38529A56AD6105 /* Lato-Regular.ttf */, ); - name = "Support Files"; - path = "../Target Support Files/Parse"; + name = Resources; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 388ED1AA89D7568EA21BA112D1FE2A57 /* Headers */ = { + 28FAD78D380E7661ADD03202D7BBA130 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - B19E110869DC3DF422B3762F933F2947 /* BFTask+Private.h in Headers */, - C875CB2BA348DA2E8E75996718D4ABBE /* Parse-umbrella.h in Headers */, - 8666CAD3866D86E8C68DCB05F3AEF7EE /* Parse.h in Headers */, - 15028369186C1FA07E92A2C523793346 /* Parse_Private.h in Headers */, - B5360419A1D37E8AD521422A349937B5 /* ParseInternal.h in Headers */, - C52D24546D38397CC3628E749B3072C2 /* ParseManager.h in Headers */, - 922364D450785E692289C4B3E634AA0B /* ParseModule.h in Headers */, - DD20695DA1E0462A054919557698F81A /* PFACL.h in Headers */, - 40F91C3C6723E7A874F8F1C2CE94E25C /* PFACLPrivate.h in Headers */, - 4B101F882432C961929B98E8ACE9EA3E /* PFACLState.h in Headers */, - C9BF259B4A008A4F8E04302C2128F39B /* PFACLState_Private.h in Headers */, - A5DD8FB83FC8F1D925B77AAE426871DB /* PFAlertView.h in Headers */, - 46DE21C634CA5EC0092EF560A0AE9F83 /* PFAnalytics.h in Headers */, - 84A8E078987034C1AFF3E7E0A8DEF315 /* PFAnalytics_Private.h in Headers */, - 609379F36815C46BB2D1DE0D0D79A4D9 /* PFAnalyticsController.h in Headers */, - 7E72F70FA02633AA541059978F9C6F58 /* PFAnalyticsUtilities.h in Headers */, - 410B8B0EDAF6420C411731D37B919BA7 /* PFAnonymousAuthenticationProvider.h in Headers */, - 0C8193BB3438FD577E908844C52CBAE3 /* PFAnonymousUtils.h in Headers */, - 642EB58AD882CD39AC00D6AF2D86AB0F /* PFAnonymousUtils_Private.h in Headers */, - EF25F1828B2E522567620CF65D9CB2B3 /* PFApplication.h in Headers */, - DD0DC07C8FAA28906ED06BDBB7796B26 /* PFAssert.h in Headers */, - 71C23B2C8D4F20077DDFDE7592C85F94 /* PFAsyncTaskQueue.h in Headers */, - 701B467861F2E4FFD952FB4222CB69D1 /* PFBase64Encoder.h in Headers */, - 23DA567FCA367B078F006BC80B385A72 /* PFBaseState.h in Headers */, - 35D90B1648728CE3D3B8899C45F81C6D /* PFCachedQueryController.h in Headers */, - 3E2FCC09E1EA105175022BD457421DA5 /* PFCategoryLoader.h in Headers */, - FF579D3BBF1E7DBC750EF3F759FF0B3A /* PFCloud.h in Headers */, - 1DE1FD67F8ACAF781BFBA35294731340 /* PFCloudCodeController.h in Headers */, - 600FCE6E7E6328890DA0C6492FFF9DFB /* PFCommandCache.h in Headers */, - ADBF656E8ABD4B5E7F842C83D70D3A2C /* PFCommandCache_Private.h in Headers */, - 7F2D1B51012B9B065FB7A7F045F17197 /* PFCommandResult.h in Headers */, - A788FD9477EE0E296E76D40EC7D708BE /* PFCommandRunning.h in Headers */, - B560A64CC02086C8E849A9E4E5B6B95E /* PFCommandRunningConstants.h in Headers */, - 070236D0B58D890654DF03242AE34225 /* PFCommandURLRequestConstructor.h in Headers */, - 00C7470973DA089B399739C3C8FA3261 /* PFConfig.h in Headers */, - DE59377917D4F6739F7D33692BBF5E36 /* PFConfig_Private.h in Headers */, - A291AA7D8E6EC71A2BC94DAF4FC8FCDE /* PFConfigController.h in Headers */, - 75F6E77D0C3CF4CB2D8DC5E6A04DCA2B /* PFConstants.h in Headers */, - 82480D9A8C3DB40AA7FCA061306BCE82 /* PFCoreDataProvider.h in Headers */, - 58875F6CFB33E6C2577F3B66DC98D408 /* PFCoreManager.h in Headers */, - 2651AC8373EFD218E9B31DE0BC70BB46 /* PFCurrentConfigController.h in Headers */, - DC46A579BFDE8D3AC76D0254644D0E62 /* PFCurrentInstallationController.h in Headers */, - 7E641831952CCEA0E69040B9C2A763AC /* PFCurrentObjectControlling.h in Headers */, - 38D3FF3179ABF5053A3020FAA1734BCF /* PFCurrentUserController.h in Headers */, - 0C7114D262099F0725F0E2B4676F31AA /* PFDataProvider.h in Headers */, - B13162A34641F63442064CE3A7F9531B /* PFDateFormatter.h in Headers */, - A674F09CCD944283805048A08AF69A8D /* PFDecoder.h in Headers */, - AE6F1E5466D6A156C4ACABF32EE7BFF9 /* PFDefaultACLController.h in Headers */, - F6A79B06EAE6692D583D6788CEF9DACA /* PFDevice.h in Headers */, - 6D48CA47C9FC90699498549AB385B7AA /* PFEncoder.h in Headers */, - FF9A53DD199C04199F21EA2A2E35A17B /* PFErrorUtilities.h in Headers */, - FD72DD1FC7AA611C0DF4EBBD03C42363 /* PFEventuallyPin.h in Headers */, - 7E62EA04B22D78CABD00D2A263D579DF /* PFEventuallyQueue.h in Headers */, - DA6210F0AF6691B4B5DF3D4235195E35 /* PFEventuallyQueue_Private.h in Headers */, - F197180E30542A978335A060E3F48CA4 /* PFFieldOperation.h in Headers */, - 8F802C08F3A6B223608B7BAE5026653F /* PFFieldOperationDecoder.h in Headers */, - 7DBC9A33EB62F47CEDD87B597862A5E7 /* PFFile.h in Headers */, - 50E14D6844CEDB186D967AAB4AA6614E /* PFFile_Private.h in Headers */, - D24AE8094558747F6234D62835B70069 /* PFFileController.h in Headers */, - 559DF047869A009C0B54AE0FE810A629 /* PFFileDataStream.h in Headers */, - 907EA38681D1EABC5FF76E97F2B1815D /* PFFileManager.h in Headers */, - 1ABF8D2D35FB298C1EDDCF4EED79EEAB /* PFFileStagingController.h in Headers */, - 9447963BE5DC80296250810555FD675A /* PFFileState.h in Headers */, - 1E2F63454C414C566931F58FFD8B0366 /* PFFileState_Private.h in Headers */, - D615322AEC8910260E315C8F6FC9B208 /* PFGeoPoint.h in Headers */, - 7F61EAC54FAB0FC8FE6D003010E5F53E /* PFGeoPointPrivate.h in Headers */, - 6FB9CB1FEFF184671C880C6F1367CD9A /* PFHash.h in Headers */, - 2DEBCB4D624508DCA9C8F86FE4A65AC8 /* PFHTTPRequest.h in Headers */, - 35BD8AE2C1DFE6EAFA33AD500529D6C1 /* PFHTTPURLRequestConstructor.h in Headers */, - B8D2A44973A3398DFAB2CFC555945E9F /* PFInstallation.h in Headers */, - A755BC067D0CDDA8896338F585481CBD /* PFInstallationConstants.h in Headers */, - 89BD75891C23C737B4E1FBE04BC93912 /* PFInstallationController.h in Headers */, - F9F6A80DFFD7DE5540E15117F031CB72 /* PFInstallationIdentifierStore.h in Headers */, - 9C2932109FC679BE463FC331B50423AF /* PFInstallationIdentifierStore_Private.h in Headers */, - D065F7FE6168EE2B3FB388E113DAB933 /* PFInstallationPrivate.h in Headers */, - EC747314543C5820CFA3FAB3DDDB5E4F /* PFInternalUtils.h in Headers */, - 07EA55EDAC7169BB5B7B0F5A5B8CB138 /* PFJSONSerialization.h in Headers */, - DDD1AB18B4FA19A76848B762B363F30B /* PFKeychainStore.h in Headers */, - EF9DB6673456532F88CB0565833BC135 /* PFKeyValueCache.h in Headers */, - 0B7C881616BB559CC31A81C21BECCC65 /* PFKeyValueCache_Private.h in Headers */, - CC008B1632F73EB16B48AD745FF5A569 /* PFLocationManager.h in Headers */, - B3E957A28CE946DAAB3E2128AA110F5E /* PFLogger.h in Headers */, - B256D9D106272C802ACD308D87482EC9 /* PFLogging.h in Headers */, - 0D5BD5E3C62E8A802636BCAEEC2B6C99 /* PFMacros.h in Headers */, - C0CC3307CCB98501AE5F9229451B1673 /* PFMulticastDelegate.h in Headers */, - BC7DF6411CDD947A4754A1DA47FF1966 /* PFMultiProcessFileLock.h in Headers */, - A47C4933C85C24DCBDCA72DCD85AD6E1 /* PFMultiProcessFileLockController.h in Headers */, - EB51F11A058B57302652970171C78A8E /* PFMutableACLState.h in Headers */, - 02665DAFADACC82A7315554BDCE85F03 /* PFMutableFileState.h in Headers */, - EBCE0AF5480E47AB4426F1DB159DD7F3 /* PFMutableObjectState.h in Headers */, - BF1DCE7A1E61FA20BEB85FADB980E8ED /* PFMutablePushState.h in Headers */, - 81544A20CF8B4EE6B524F41A4EDC25F3 /* PFMutableQueryState.h in Headers */, - BDF120CAD7F04E844A83AD6D3F23B170 /* PFMutableRelationState.h in Headers */, - 812B691E8FAC951A069A1BA5C6760663 /* PFMutableUserState.h in Headers */, - 769360684E30131957237D08EB031319 /* PFNetworkActivityIndicatorManager.h in Headers */, - 08341BBDE78EE81BBC73C2AB4915D516 /* PFNetworkCommand.h in Headers */, - 02A65C27E48E80BE747C4932BFFFFAF3 /* PFNullability.h in Headers */, - AF6BC627636C58624D1EB0AA12D8D015 /* PFObject+Subclass.h in Headers */, - DD64D07491A39A4FC01CA497039556C7 /* PFObject.h in Headers */, - 983719E3BCBA2346289FCFA98597C211 /* PFObjectBatchController.h in Headers */, - 30DDAD1EFC6C9D23DE6DC67CF129B024 /* PFObjectConstants.h in Headers */, - 4097EF9AA60FB31D9363255EB2736A04 /* PFObjectController.h in Headers */, - CC1CB2CD7FD4950419F251F7E71FD6B7 /* PFObjectController_Private.h in Headers */, - 91A66B0DA11044668B3290268B010A91 /* PFObjectControlling.h in Headers */, - BADD133A360C992EE7BC76C6308E2078 /* PFObjectEstimatedData.h in Headers */, - FFF9ABFCA518F8DA659C4F7DBA760D07 /* PFObjectFileCoder.h in Headers */, - D4FA238C23A1F6B1489D87258EF7FED6 /* PFObjectFileCodingLogic.h in Headers */, - BF8025C47B161CF683A15E799A0C4257 /* PFObjectFilePersistenceController.h in Headers */, - 085BF93D37DC7D94456A18B05E2EF856 /* PFObjectLocalIdStore.h in Headers */, - 9DE007397D46FCD7EDCAAD914D362962 /* PFObjectPrivate.h in Headers */, - E558BC559ED38B40C8C86E4D988C284C /* PFObjectState.h in Headers */, - 060FAE6738D4A523F6B4FAF1574108E7 /* PFObjectState_Private.h in Headers */, - 5F3CB2BB91D0113EFA8C7BE2EFF0C515 /* PFObjectSubclassInfo.h in Headers */, - 0BF949FCBA3FBC12A5F83A5A9A24027A /* PFObjectSubclassingController.h in Headers */, - 1553363B4807FFD3280496BEBEEDF7B9 /* PFObjectUtilities.h in Headers */, - CB2E26B6FD21531996D5E818EE0E86D5 /* PFOfflineObjectController.h in Headers */, - 6B90807B73E419A00ADBBE09FC10AA0A /* PFOfflineQueryController.h in Headers */, - 3908E0D63B537D99AF0305F4B6368C4E /* PFOfflineQueryLogic.h in Headers */, - 16B1B84F040D411768F471AD5518D757 /* PFOfflineStore.h in Headers */, - 99763C2E67BD206ECF0617053727ECF1 /* PFOperationSet.h in Headers */, - 0B541C92E1E37077895643AD634F021B /* PFPaymentTransactionObserver.h in Headers */, - 0C12340640015917EAC4EDCD39056719 /* PFPaymentTransactionObserver_Private.h in Headers */, - 85525C684E0D4BEB7CDE65630A944455 /* PFPin.h in Headers */, - 468FF44FFA482F55A8F2C3380821DFAA /* PFPinningEventuallyQueue.h in Headers */, - 05EBF7663E6672F4B4B1D57D59699783 /* PFPinningObjectStore.h in Headers */, - 46412ECE623580E072CBD5365C6A3B6D /* PFProduct+Private.h in Headers */, - B04876885B79CFA7197C5B2D5DAED7A8 /* PFProduct.h in Headers */, - 914F063FBFF81D8FC168201362C3AD03 /* PFProductsRequestHandler.h in Headers */, - 880795DD5DE964C5923A626DD6D179F0 /* PFPropertyInfo.h in Headers */, - 5493FA81C5903BF9869E1907692EEDE2 /* PFPropertyInfo_Private.h in Headers */, - A8658D6CDD36670490167A1E317ED0E8 /* PFPropertyInfo_Runtime.h in Headers */, - F31577AE2382F8C6B6C1FA2EA2516B5B /* PFPurchase.h in Headers */, - DB3E49E9C65CD7BB5A8B80E56051FA0F /* PFPurchaseController.h in Headers */, - B481D759AF6F9575FF8A734265863284 /* PFPush.h in Headers */, - 865D170D75568308E5B3162A4B7D64D4 /* PFPushChannelsController.h in Headers */, - 9C4D0E6A8615B969362891FA9DBE59D6 /* PFPushController.h in Headers */, - 86EBF8540C0611DF735C4B9179439A57 /* PFPushManager.h in Headers */, - 5833A4E8C4BB9D66FE2E6046AEAB0A82 /* PFPushPrivate.h in Headers */, - 76EBBA34637F5D9263E2F80DD560327A /* PFPushState.h in Headers */, - 5FBC0462F76FE448FC25613F5871DD3C /* PFPushState_Private.h in Headers */, - F8FD10687BAC1412515D48E501BFAFCC /* PFPushUtilities.h in Headers */, - 3CE2490C31C654B4FC925FF423DD59F6 /* PFQuery.h in Headers */, - D2C16698521B60E99C434317D85C784A /* PFQueryController.h in Headers */, - 659516FF10399AFA658E5C32D30ED819 /* PFQueryPrivate.h in Headers */, - 362782D9DE0225DE35683BFEE4BD74D7 /* PFQueryState.h in Headers */, - DBB9EFDC23CAD3FBF96BA742FF368DFF /* PFQueryState_Private.h in Headers */, - E79DF6B53296F28FF0EECEA83A52E785 /* PFQueryUtilities.h in Headers */, - 559511CDAB19CB7BE18CFB3FA8475EC6 /* PFReachability.h in Headers */, - D29768D0274DCC14B8417BAA3437B76E /* PFRelation.h in Headers */, - 3285313A5750267631C83B26AA91C70E /* PFRelationPrivate.h in Headers */, - BFCBCD5704852B8629D48325773197BB /* PFRelationState.h in Headers */, - 81D506DFD069CB4DD07720C7E5241A00 /* PFRelationState_Private.h in Headers */, - 11CB9FA5E328C6A63DD864216EDFF695 /* PFRESTAnalyticsCommand.h in Headers */, - 5028F505B6C29ECC75690F30D2EC562F /* PFRESTCloudCommand.h in Headers */, - D4534103AAF36517168B1585A34C0662 /* PFRESTCommand.h in Headers */, - 54CCEE7F9DA84B548532A8ED8BDC94FA /* PFRESTCommand_Private.h in Headers */, - 39210257D058B5AA51250AA258FA6899 /* PFRESTConfigCommand.h in Headers */, - 8C1C6EBE791F72132E73E26A2C397472 /* PFRESTFileCommand.h in Headers */, - D5DBB64D5E73E9F6948261968BA4C55C /* PFRESTObjectBatchCommand.h in Headers */, - DFCB6C03701911A2580798FC2A15207E /* PFRESTObjectCommand.h in Headers */, - 3F7ABD7936923EE0144B79C5A9D149D9 /* PFRESTPushCommand.h in Headers */, - 2B732D60AE1287E07F1015309D18D0AD /* PFRESTQueryCommand.h in Headers */, - 36287F3CFD42E28E556EA2DBFEACEF13 /* PFRESTSessionCommand.h in Headers */, - F3CE9ADEE55B3C0C530162B443AF1480 /* PFRESTUserCommand.h in Headers */, - 20C7252EEE066D91929BF7D8B5C6838F /* PFRole.h in Headers */, - F509A9C960A71CF54CA3A6D6BAABD73E /* PFSession.h in Headers */, - 65068196154B9043E9F0CD4E10A6FCD9 /* PFSession_Private.h in Headers */, - C9AE5EF700DBE91C6177D13237F947F1 /* PFSessionController.h in Headers */, - 2EC685DD508470C1788C87CDDF007558 /* PFSessionUtilities.h in Headers */, - 29B61540AF67174BB27CB2C2D7674E52 /* PFSQLiteDatabase.h in Headers */, - C162D829CB46A3EE6F60AF6C1FEC397E /* PFSQLiteDatabase_Private.h in Headers */, - 5C00F9E0420C0AEF441F7DDAD11DB9FD /* PFSQLiteDatabaseController.h in Headers */, - EE34A74782C680986EC70CF85F41B837 /* PFSQLiteDatabaseResult.h in Headers */, - AEBC8D138ED39354A6CB7C337A9868E6 /* PFSQLiteStatement.h in Headers */, - 53346BF42179DEA6DC34CB3365E11DA8 /* PFSubclassing.h in Headers */, - A5C292991526FD5421D49EDAC373900A /* PFTaskQueue.h in Headers */, - 5BF915D0480268928F160D158F775441 /* PFThreadsafety.h in Headers */, - 692DBA32F537001D163F3420F1FCF576 /* PFURLConstructor.h in Headers */, - 87E645C82E157EAD9C62984142547C28 /* PFURLSession.h in Headers */, - 23A447603B862AF8F293FD85256A41BF /* PFURLSession_Private.h in Headers */, - D524881CD777E35975CAB82E6DCCF7EE /* PFURLSessionCommandRunner.h in Headers */, - C6D894730B4F071F9DE54B9F0533CD6B /* PFURLSessionCommandRunner_Private.h in Headers */, - 261A6EC9FDC79586F2F79B132D39B0E6 /* PFURLSessionDataTaskDelegate.h in Headers */, - 68CBBF9F8662197E97FBC617B1F5E612 /* PFURLSessionDataTaskDelegate_Private.h in Headers */, - 6C732292C1F52E0D63FE1366A5167CCF /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, - F24372B3FA3A2DFED3FF5C5C36BD5134 /* PFURLSessionJSONDataTaskDelegate.h in Headers */, - D2E0B5F8552B7289349FA1FDA8327BE4 /* PFURLSessionUploadTaskDelegate.h in Headers */, - 90BCBF4E7A7FAB6A6D87B97CF4AC0EB0 /* PFUser.h in Headers */, - 651A97908209001C692BADB99D592CC4 /* PFUserAuthenticationController.h in Headers */, - 933ADDA7D35D7E996E34179032B93265 /* PFUserAuthenticationDelegate.h in Headers */, - 2010B04FB060C15EF817627F7325F019 /* PFUserConstants.h in Headers */, - BB4BDDF1BF7CC2EF1BC174D807E8745E /* PFUserController.h in Headers */, - D88B5ABB7774B96D1A9F141F663974FF /* PFUserFileCodingLogic.h in Headers */, - D5F44193689A0F8B022452B5A23B1551 /* PFUserPrivate.h in Headers */, - 5157B840FF52F188E3E995231CBBDA61 /* PFUserState.h in Headers */, - D418B83B7A6BB0095E345D682BD9F4B2 /* PFUserState_Private.h in Headers */, - 58F8F5123EBE7C0BADAC8CA5940E15B2 /* PFWeakValue.h in Headers */, + 658DD32CED473FCE3E157760C94A6AB9 /* FlatUIKit.h in Headers */, + F1A626CC96C4F5309BDB955D24C08340 /* FlatUIKit-umbrella.h in Headers */, + F5A1F5648B57F8EE92271219D9640F86 /* FUIAlertView.h in Headers */, + E073A9FAA1E4FBFEED33E37680301216 /* FUIButton.h in Headers */, + A5F3A45286A396D2C6C2756E87A6FEFD /* FUICellBackgroundView.h in Headers */, + 1810DA64266F52B6508F1AF0754D7D1F /* FUIPopoverBackgroundView.h in Headers */, + 8702D2031C885CF3BB2D8795A6FC0C3A /* FUISegmentedControl.h in Headers */, + 446C0BBFFD9EAB06C6FCCF34AE0E5286 /* FUISwitch.h in Headers */, + 3C4D35E189329636BFF6117BF20985E3 /* FUITextField.h in Headers */, + 7C404DEBEDF06360F28C8E6C457520AF /* NSString+Icons.h in Headers */, + 0C0D5C75A59E94327ABF2F1277BA6325 /* UIBarButtonItem+FlatUI.h in Headers */, + 21F70A540678BB24C4996F1CD1855CA9 /* UIColor+FlatUI.h in Headers */, + 8CCFEC94CDC419B16F917810D8439F39 /* UIFont+FlatUI.h in Headers */, + 348A4B6738A8BD6637F87F3926564CEF /* UIImage+FlatUI.h in Headers */, + F0F92512DD701E369E2EE06A213E11DD /* UINavigationBar+FlatUI.h in Headers */, + 7BB986930A679B4F4A6E2F0567AA1118 /* UIPopoverController+FlatUI.h in Headers */, + F9410635D2A13AC2DC7A9CCB266F8596 /* UIProgressView+FlatUI.h in Headers */, + AA0FC201A1809E7157E034B695A569F2 /* UISlider+FlatUI.h in Headers */, + 869568B070A4B8CAC7778AE5EE71BD5A /* UIStepper+FlatUI.h in Headers */, + 32F3C97B6182D3AC5A80BA4739537E08 /* UITabBar+FlatUI.h in Headers */, + 5C069A9D5B4CAE514B4F46117B04E888 /* UITableViewCell+FlatUI.h in Headers */, + 5FC03CE121193E811A7A38226CEB7FE6 /* UIToolbar+FlatUI.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 39D91A755BE4D0420B3BB7DED36CB19C /* Headers */ = { + 324720C9A5939C3ABB4CCF923B4D2735 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 5170AC51A5B179F66390148099B8DBD2 /* BFCancellationToken.h in Headers */, - 6994FD62E98115B34E1064735491A3E8 /* BFCancellationTokenRegistration.h in Headers */, - ACF3C5FC3D4BDA62237AF449A9CF36F7 /* BFCancellationTokenSource.h in Headers */, - 3E2A5D1F275AF382312EA06AE35D31CE /* BFDefines.h in Headers */, - 7B551F81DAEAE48E0B109F1E95DC593E /* BFExecutor.h in Headers */, - 5246DA130CEE97E101DAB2A2A6BE3589 /* BFTask.h in Headers */, - 70DE08E9F704FCB278344B3E28BE3CEC /* BFTaskCompletionSource.h in Headers */, - 9BD8BED31DA9CD2892F6A3FC69094F86 /* Bolts-umbrella.h in Headers */, - 86EFAED63E331229C9A850686E235D3C /* Bolts.h in Headers */, - FBA5CB027B1188E85093444910F59EBB /* BoltsVersion.h in Headers */, + 8011E13C93B1251BE83F73849CBA41D4 /* Base64.h in Headers */, + EF985A767B2C450FA8F0640769D206AD /* UNIBaseRequest.h in Headers */, + 5BB2CC688FADABE72F1EE80DBCDE28A5 /* UNIBodyRequest.h in Headers */, + 2267E143F866BBFEB39DDB060F71B943 /* UNIHTTPBinaryResponse.h in Headers */, + 03C60FBD9CB7547B458B40058168BB28 /* UNIHTTPClientHelper.h in Headers */, + 38B64A887C7C04EAEE5414A2715EEC58 /* UNIHTTPJsonResponse.h in Headers */, + 13CDBBD7FCCA51D3FD1983ED9C0486D1 /* UNIHTTPRequest.h in Headers */, + BD2636AC38047EE877D06873DC7EF988 /* UNIHTTPRequestWithBody.h in Headers */, + 53C9A682E744C8CD8A71E7926530B78D /* UNIHTTPResponse.h in Headers */, + 6D856BD6272DC3B97FBAC3D6503343D8 /* UNIHTTPStringResponse.h in Headers */, + 1E82CB078732A340B2516F9D5971E917 /* UNIJsonNode.h in Headers */, + D7AB05392442CA0F7360E9A0DEFDF10F /* UNIRest.h in Headers */, + 1E8D6949CBCA40DB1BB2E04CBAC3A80F /* Unirest-umbrella.h in Headers */, + 24D23BC1BBB0A7A7F30C9EC3F45CCBB8 /* UNISimpleRequest.h in Headers */, + 63BA863394E7EEC25970ADD618763ADE /* UNIUrlConnection.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4B50BAB7CC2516D12B4791188BDE478E /* Headers */ = { + 43FD6D86FE03BF966B0926576933AC19 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 52ED970A283D03D34DC00909A1999A83 /* Base64.h in Headers */, - D72448C129C6C3093EFB47F9B360649C /* UNIBaseRequest.h in Headers */, - 16CFF11408F9C860822B1C08C5B947B2 /* UNIBodyRequest.h in Headers */, - 4544A6870F05203BEBD5F0E110000F79 /* UNIHTTPBinaryResponse.h in Headers */, - DE88747F5E12625871B4DE2BC7766F78 /* UNIHTTPClientHelper.h in Headers */, - CD2BB9C4D23280239B9E4C4FACAB3F1D /* UNIHTTPJsonResponse.h in Headers */, - 983532B8471523F38F8B9EB87ADECBB6 /* UNIHTTPRequest.h in Headers */, - 9F5716CA913F8214ADFF20CD50D717A7 /* UNIHTTPRequestWithBody.h in Headers */, - E02B2DFE8A7D8B891A15251B1B875CAD /* UNIHTTPResponse.h in Headers */, - 375C6DC137523B08F9A51780453E0435 /* UNIHTTPStringResponse.h in Headers */, - F12120CD70A4A707EB19F2A4C3ADDBE8 /* UNIJsonNode.h in Headers */, - A66F7659D963A8B2F9B3F781178F7EDB /* Unirest-umbrella.h in Headers */, - 1EA983380DF81353ED043D3FFCC62E7D /* UNIRest.h in Headers */, - 471F4767970DEA5F148FCD710A036038 /* UNISimpleRequest.h in Headers */, - 957629014B639AF56B4E3CBD3810706B /* UNIUrlConnection.h in Headers */, + 65954C025FD7062A89E4CAB5E385B3DF /* NSData+ImageContentType.h in Headers */, + 9DB442303F0400FF942BB74CE5BB31D0 /* SDImageCache.h in Headers */, + BA6DFE37B6BBCC3575139A1C0A6989A1 /* SDWebImage-umbrella.h in Headers */, + A8F6AAD9D6A648D30F327911D8CE53CE /* SDWebImageCompat.h in Headers */, + 324F9FD525319CA2193E87C87FD96700 /* SDWebImageDecoder.h in Headers */, + 8FD6FCE130BFD1E16FB2A68476BED532 /* SDWebImageDownloader.h in Headers */, + 13EFAF7127423EC8B6BE3BC894FAB0DC /* SDWebImageDownloaderOperation.h in Headers */, + 69EBAC092096215DC0EA9C889002873B /* SDWebImageManager.h in Headers */, + 993DAD4DC798A7883F3C30AE13359184 /* SDWebImageOperation.h in Headers */, + 966DE4286AC2490A6FCBACA8413C8067 /* SDWebImagePrefetcher.h in Headers */, + 54FA74375505B520AC81A5FE3C892313 /* UIButton+WebCache.h in Headers */, + ED9C3556AC3D5037CB6FF529D816FB12 /* UIImage+GIF.h in Headers */, + 38D829CEA9E110D82321565160D8394C /* UIImage+MultiFormat.h in Headers */, + F9352FCBA2935DB07B38CDCC3E5D04F5 /* UIImageView+HighlightedWebCache.h in Headers */, + D6A76FC088B728E09BE669238269A3F6 /* UIImageView+WebCache.h in Headers */, + 5064614BEFC3E1DCB85B376E7C849393 /* UIView+WebCacheOperation.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 583DC96F727AEB6D3AD1902C79DCB32F /* Headers */ = { + 6F3D3020832CEDA9562C661557CD8F6B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 05D157847239824F4D4312D3376C76E1 /* Pods-umbrella.h in Headers */, + E9301E9CC4AAB6DCE8FAEE224E15F583 /* ParseUI.h in Headers */, + 79E628F0D120F5718AF6A64BDA3BFB05 /* ParseUI-umbrella.h in Headers */, + 01903DCA721AA027FF2C4BFB3235968F /* ParseUIConstants.h in Headers */, + 4088CBC095D20D651F6BA5F7A3FED8FE /* PFActionButton.h in Headers */, + 747E24F16EF4878D1A18D93BB11C1E48 /* PFActivityIndicatorCollectionReusableView.h in Headers */, + 1B1F1AF2A1AB6F428F22E527890F4BD2 /* PFActivityIndicatorTableViewCell.h in Headers */, + B79B6F2E53077EAEBD1BCDA3DF97E926 /* PFCollectionViewCell.h in Headers */, + 70BCB2E06955566BC275547B1CE87E1E /* PFColor.h in Headers */, + DA15806CB1F348AB5EDB812656E228F2 /* PFDismissButton.h in Headers */, + 3005D65B0D40094D6DA7A7D7213106DF /* PFImage.h in Headers */, + E0689342829558FC97ECA6AE5B078183 /* PFImageCache.h in Headers */, + E57913A90FF880A05C0C1CBA7C10F570 /* PFImageView.h in Headers */, + 30DE4D927EC179D0C616A2855CDB459A /* PFLoadingView.h in Headers */, + 7D712156EAFC4E82DB10F63FF6DE9688 /* PFLocalization.h in Headers */, + 343BA4FDC3A386CEC60414AF4686A9B9 /* PFLogInView.h in Headers */, + 0433ED820B0734E79BC0D1269B11B1DF /* PFLogInView_Private.h in Headers */, + 617837DA00E113ED6434856AFD3B0655 /* PFLogInViewController.h in Headers */, + 96F1A018D913D4362A1013D53C417E4F /* PFPrimaryButton.h in Headers */, + BC976BE2061D253EDB43A6E3CD2BD60E /* PFProductTableViewController.h in Headers */, + 82A7493CFF424B02B1EA1D347F3EF1B5 /* PFPurchaseTableViewCell.h in Headers */, + B2F619610C5E641B67EDF4E366C0E073 /* PFQueryCollectionViewController.h in Headers */, + E11481C2A7C5F0D2D2B514972DC3BD75 /* PFQueryTableViewController.h in Headers */, + BB37D3123E1BA2AAB5924D33133261F3 /* PFRect.h in Headers */, + 18F82D1C6E5E33BAFAD4215A6CC4ADD3 /* PFResources.h in Headers */, + BB59A06B6A75653CECA76692FBABC24B /* PFSignUpView.h in Headers */, + 6482EBE780EB543371D426AC31797DAE /* PFSignUpViewController.h in Headers */, + 2FAA5B2F5F9FDDE4AA56578E1EAC701A /* PFTableViewCell.h in Headers */, + A1C35F6CD4D45B271A2E74D7A7CC1A86 /* PFTextButton.h in Headers */, + D8E2653DA4361CAA33F7832803BD676C /* PFTextField.h in Headers */, + 09256B3E535A3C628240CF7C752E131C /* PFUIAlertView.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5E6AF2096BC65B5D4860401AF12D1EF6 /* Headers */ = { + 6F84814001FC54309657F31682B0B240 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - B70CA4BC7BB83E481E558E6AAA8412C5 /* Chameleon.h in Headers */, - E5B487076917F1226B4C1A56D773DFD0 /* Chameleon_.h in Headers */, - A08F870B965E23DB26F9F3BC9614AB09 /* ChameleonConstants.h in Headers */, - B750116226049256663DE15211774B7D /* ChameleonEnums.h in Headers */, - F32EF9C380E16DDF332B529C0D807248 /* ChameleonFramework-umbrella.h in Headers */, - 3D74313147EEE5D8185617B018976DB3 /* ChameleonMacros.h in Headers */, - C7A28D0D2CA57377088C993FE4004B15 /* NSArray+Chameleon.h in Headers */, - 2653154AB4F1D2D1EFC3A0D1B3EBDD6F /* UIButton+Chameleon.h in Headers */, - 69A0BF96DC2497ED9235983A1F3C99D1 /* UIColor+Chameleon.h in Headers */, - 2BF9D4C9E9BC46EA9B0C278A6192077C /* UIColor+ChameleonPrivate.h in Headers */, - 05A6481EBC9C1D64BE2143BFA46D1364 /* UIImage+ChameleonPrivate.h in Headers */, - 3663EF1579F35B5063E6D197E3AB625B /* UILabel+Chameleon.h in Headers */, - BC579CE26DDD15A574021B2FB19403AB /* UINavigationController+Chameleon.h in Headers */, - 6E3613B326C980EF5EE22FE9B8409521 /* UIView+ChameleonPrivate.h in Headers */, - 25C7D6A015D734D046617621AD633F77 /* UIViewController+Chameleon.h in Headers */, + 755D05098517A360EA8B6BF70AED2F97 /* IQBarButtonItem.h in Headers */, + 0C26152F6C1310B04B876FD3B44B1021 /* IQKeyboardManager.h in Headers */, + 05BD04A5F73E3D27A7D713F3C5CB5F7A /* IQKeyboardManager-umbrella.h in Headers */, + D6E746CCAE091711861229C64E08D878 /* IQKeyboardManagerConstants.h in Headers */, + 999D42B892A6FFA309196DA2508021E1 /* IQKeyboardManagerConstantsInternal.h in Headers */, + 3DC92CBA93056F0AB9A06A9690F79256 /* IQKeyboardReturnKeyHandler.h in Headers */, + DAE230257B3B2669C1587D2039114C8F /* IQNSArray+Sort.h in Headers */, + C912666A5A195657F1BADD12361FA838 /* IQSegmentedNextPrevious.h in Headers */, + 6544222D2E3DD831AFFA9A3DCF39345D /* IQTextView.h in Headers */, + 31185487A9186107B6DE9891D14BFE90 /* IQTitleBarButtonItem.h in Headers */, + 7D753DB6C985E2BA23D16756811EE941 /* IQToolbar.h in Headers */, + 5EF07666094CCCAD7F7FD9C75E1B1A39 /* IQUITextFieldView+Additions.h in Headers */, + B38703522CBD2E293FD804AD58121426 /* IQUIView+Hierarchy.h in Headers */, + 818582725BCC7A824799342881C7FB4D /* IQUIView+IQKeyboardToolbar.h in Headers */, + 4E1AD5C16CF7F3F2397F4A106F313096 /* IQUIViewController+Additions.h in Headers */, + 4B9F5156E5DDC40B87884E5C37B1153B /* IQUIWindow+Hierarchy.h in Headers */, + BD0BF44B4A873132D7BEE79DC691F996 /* KeyboardManager.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6149D6F2DD82EDC24248FE0AC9319BEC /* Headers */ = { + 869988D1C6EFA80212F480B9CFCD1838 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - C4860B9A56C65B06A6A62F48E922EAD4 /* IQBarButtonItem.h in Headers */, - 301143C8C212294FFCC42F86D6A99846 /* IQKeyboardManager-umbrella.h in Headers */, - 74BB711F61F6158AB83734F028642AD0 /* IQKeyboardManager.h in Headers */, - 137CB10D45ADB684EB29A3D1E8135328 /* IQKeyboardManagerConstants.h in Headers */, - C910EABE33979FDF4C2ED6D0F6C13892 /* IQKeyboardManagerConstantsInternal.h in Headers */, - CFD11F42A5832B2D710A1A1C2821F218 /* IQKeyboardReturnKeyHandler.h in Headers */, - D6AF54BD822E58E71B02BDBE42E4C7C5 /* IQNSArray+Sort.h in Headers */, - DF4E97FC3CD796A33F6184C7FE4A7037 /* IQSegmentedNextPrevious.h in Headers */, - 4AAC225B0755F97FDFDBEA15F19DF8D9 /* IQTextView.h in Headers */, - 580666EB7E509B4DF24325CB34CEB527 /* IQTitleBarButtonItem.h in Headers */, - 97F56E7243ACF006365782F47CCE163A /* IQToolbar.h in Headers */, - D0770A9624B9CEA68A8B26D2F68EF3A8 /* IQUITextFieldView+Additions.h in Headers */, - 22CB5A83D72BF7789AFE172FA691F1F8 /* IQUIView+Hierarchy.h in Headers */, - F0316F2F6E503EDD935F39D8B12DDAEF /* IQUIView+IQKeyboardToolbar.h in Headers */, - 5F4B66E46F7665627618343D1ED4D14D /* IQUIViewController+Additions.h in Headers */, - DCAD1FDA90F25CCD484CEA417972DE0E /* IQUIWindow+Hierarchy.h in Headers */, - 94568474EE97E77A387746CF37D38E40 /* KeyboardManager.h in Headers */, + FEAF74C28B30197791132CA4C268A2CD /* Pods-FoodbLog-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9C80F38D01CF08B0F39839F63560CCB2 /* Headers */ = { + A87BA2B7FE18D40CF23B2C76BF652F14 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 290353FFD70C6FED0E88244849792541 /* AFHTTPRequestOperation.h in Headers */, - 4126FC06B09C1514C4623BEF344EEDF2 /* AFHTTPRequestOperationManager.h in Headers */, - 43BC8D2611C04A47C0BE9FFB228E07A5 /* AFHTTPSessionManager.h in Headers */, - F2E9945B7494E20ED7DC4720A2B8CDC9 /* AFNetworkActivityIndicatorManager.h in Headers */, - 34BEE08ED8F8B9B3B939D4D732CFBEFE /* AFNetworking-umbrella.h in Headers */, - 96247D22CC837A06A450BB49F1D2F79E /* AFNetworking.h in Headers */, - 4F093F6FBA6E6B060CF66145CF214E14 /* AFNetworkReachabilityManager.h in Headers */, - 68F25493DF29423FEA798D2247A6C918 /* AFSecurityPolicy.h in Headers */, - 6FDE95FB21B7F5E1EC7A9F49489DAC62 /* AFURLConnectionOperation.h in Headers */, - D7C1594DC6A0E38E33E8971C288A9F82 /* AFURLRequestSerialization.h in Headers */, - 76C1FA68EFCD242119622AE2CEB4D24F /* AFURLResponseSerialization.h in Headers */, - DFC29AA19504EF95C8902348017273A8 /* AFURLSessionManager.h in Headers */, - 56C8D4F00869E61F210A24E0EE8F3A13 /* UIActivityIndicatorView+AFNetworking.h in Headers */, - CEDFE191DF66B8884828359B3494F8E9 /* UIAlertView+AFNetworking.h in Headers */, - 401C2DDD1436B4AD6B3A43D775389EA4 /* UIButton+AFNetworking.h in Headers */, - 76C72D9FA8C86EBBC7E3E4AF7F0B4BB5 /* UIImage+AFNetworking.h in Headers */, - 9E795055729E8F398250A5687BB00AE2 /* UIImageView+AFNetworking.h in Headers */, - C70AC3CB2D21E9466D55F37D6167DBA5 /* UIKit+AFNetworking.h in Headers */, - 7999F436677B92F6DDA1C3D45B67762F /* UIProgressView+AFNetworking.h in Headers */, - B42A49260E02658534FF92164B6FC311 /* UIRefreshControl+AFNetworking.h in Headers */, - 32BE0FB08D9ECD2974197D862E320E36 /* UIWebView+AFNetworking.h in Headers */, + CE94EBF86870898CC0BDAA6ED65C6BF4 /* BFTask+Private.h in Headers */, + 2EE700C80315947D821E53B00AA74847 /* Parse.h in Headers */, + CF4D60758633BAE6D1B122456EC24F75 /* Parse-umbrella.h in Headers */, + 72FAFB0F0E6FF8AB2E9CB406A0C6D66B /* Parse_Private.h in Headers */, + B3CCC9CE6FF7374AE8CA9882F02F0425 /* ParseInternal.h in Headers */, + 89982466919DA42C5657FB1D75221B9C /* ParseManager.h in Headers */, + 365CF97A9023756C3B71A78C0F150024 /* ParseModule.h in Headers */, + D67DF497D24A2D6049AF0B75A46AE48F /* PFACL.h in Headers */, + AF3B908A52FDFCC291BABD7DEA6A4C3B /* PFACLPrivate.h in Headers */, + 4927A5D31337BBF09B4D630EEBB29762 /* PFACLState.h in Headers */, + D1ABCFFF2DBFE6D749E1C7C772262D39 /* PFACLState_Private.h in Headers */, + D6870DB8F518AC2F91F9FB95CFF384D9 /* PFAlertView.h in Headers */, + 2142C67AE21760B7CC6503EA03FF5F66 /* PFAnalytics.h in Headers */, + 83E42BD304254F2EA45636E1EBFEBCD5 /* PFAnalytics_Private.h in Headers */, + E58B15E1388E3893149BE0E2AF7C021D /* PFAnalyticsController.h in Headers */, + 46F36C74EF8B07192275578A983B1E96 /* PFAnalyticsUtilities.h in Headers */, + B953AB7BAE43C522F0DC429FFD1CBEB8 /* PFAnonymousAuthenticationProvider.h in Headers */, + 03737B28D6BAF57168047F81B5FC83DC /* PFAnonymousUtils.h in Headers */, + C4885489A964BAC5764A68106B49CE84 /* PFAnonymousUtils_Private.h in Headers */, + 8A89A0B9F1586CA458B63C76E953F154 /* PFApplication.h in Headers */, + 4D410BAF4CB2B1C8C7AD0F85700EE2D8 /* PFAssert.h in Headers */, + 24C5777AA30FE28C5A943689139B9DA1 /* PFAsyncTaskQueue.h in Headers */, + F738741C0DA60836C6691930B8903F44 /* PFBase64Encoder.h in Headers */, + 80701E4D0A3C6FD04DB9EA02163971E5 /* PFBaseState.h in Headers */, + 6474A151BAB6300B587DF01C1F4FFD7E /* PFCachedQueryController.h in Headers */, + 1DD099BB263B6FC964DF781D1887C906 /* PFCategoryLoader.h in Headers */, + 3A1CC2DA6F8F25B29230E84636D88D6D /* PFCloud.h in Headers */, + D804E6D1B5A4F1ED130362B6610693FE /* PFCloudCodeController.h in Headers */, + 772FAB57D507F834419A8B53F81775FE /* PFCommandCache.h in Headers */, + CA5F23766F60847E0A35969F56BE64E3 /* PFCommandCache_Private.h in Headers */, + D2641614DC999C027E62514B55A06016 /* PFCommandResult.h in Headers */, + C1514CF8F5DC189265CCE541F189F4BD /* PFCommandRunning.h in Headers */, + 21E02BBD258139C9B5170C242EAB46EB /* PFCommandRunningConstants.h in Headers */, + FE3FEBF0DEEFD932C5106CA7DCCC1FF3 /* PFCommandURLRequestConstructor.h in Headers */, + F8B195D52D2D7BE80CF4EE6B726204A6 /* PFConfig.h in Headers */, + 17407DB318F6ECE65359F1988EB587C6 /* PFConfig_Private.h in Headers */, + 04CB32149BEA0320CF6F9640A78D8327 /* PFConfigController.h in Headers */, + 38633D20F3A40F43C90014227D54371B /* PFConstants.h in Headers */, + 6EC4D234025E1A35DBB519302842C887 /* PFCoreDataProvider.h in Headers */, + 1C6C96BE29A770F780EDC084673E03DA /* PFCoreManager.h in Headers */, + DDFB747838D1B33306D14FB92112203A /* PFCurrentConfigController.h in Headers */, + 6355D259CFE41FA5DB24D153FB7A462A /* PFCurrentInstallationController.h in Headers */, + 4B711F7739F9BC189B32ABDB6BA90A0F /* PFCurrentObjectControlling.h in Headers */, + F914B72A685B4117F89010C60D49A74D /* PFCurrentUserController.h in Headers */, + C7A351D5E8CBD94236D7A7B43E6E228A /* PFDataProvider.h in Headers */, + B93A8E1F2FBE4ECDF4C19B2E1698AD3E /* PFDateFormatter.h in Headers */, + D75ADB82D221CE073A2385D9BF116313 /* PFDecoder.h in Headers */, + BB068C0CCE5128CAED93094E6A3164DB /* PFDefaultACLController.h in Headers */, + C102035B25414733AA5D99E52A896424 /* PFDevice.h in Headers */, + 46C66D1485581BB40EFAB6E834BD8C47 /* PFEncoder.h in Headers */, + F7F1F58441A29C3E9E037BF03A1E0172 /* PFErrorUtilities.h in Headers */, + 4B2AFEB8AA38E3742467F54CF68224C6 /* PFEventuallyPin.h in Headers */, + E8D145B6A8F126EE542D4560DA53C04B /* PFEventuallyQueue.h in Headers */, + A160951FFCA747F6D3865F68468227C1 /* PFEventuallyQueue_Private.h in Headers */, + F906BA7712F8F45BF05FD888A25ADB6F /* PFFieldOperation.h in Headers */, + 7604B65CA0E258822D5401A28AD4F6E0 /* PFFieldOperationDecoder.h in Headers */, + 8FB1DF7D54B01E7F8B51A01CCD305E7C /* PFFile.h in Headers */, + EFC43ED31D5EAC920327974ECFCEEE03 /* PFFile_Private.h in Headers */, + 7652337C6698F42EC8AA67BEBABC57E8 /* PFFileController.h in Headers */, + 0E46571B85EE1DEB0E0BBE4324B2F5CE /* PFFileDataStream.h in Headers */, + 71406894593D147D7656C97D0BE33AE0 /* PFFileManager.h in Headers */, + 62868B8A6396629E54D5A1B9EDC2DCED /* PFFileStagingController.h in Headers */, + E3C98A1E8B44CB98C75C72B0153311FA /* PFFileState.h in Headers */, + DA339154E42740D763E1E4E42DDB9A1E /* PFFileState_Private.h in Headers */, + A1C0916A3268ADF687DDA3BA26ECCB4F /* PFGeoPoint.h in Headers */, + F73C65E428DB0FF941082D3A5112C901 /* PFGeoPointPrivate.h in Headers */, + 1053442EE9C1B64B2AAD7CB91CC8F960 /* PFHash.h in Headers */, + 3BFD15515778438F53184FB409F433FA /* PFHTTPRequest.h in Headers */, + 4C94CABF04CF5B40BA9A93E090EB08AD /* PFHTTPURLRequestConstructor.h in Headers */, + DA468AF6666C79B9CE948EBEC956317A /* PFInstallation.h in Headers */, + 084E0CA489A67284CCA0A3CACBF8B0E7 /* PFInstallationConstants.h in Headers */, + 99D4F3E015F413FE2AC39FABE7E8D931 /* PFInstallationController.h in Headers */, + 494AB2A28A1FE50E4A600C9EA897D4DD /* PFInstallationIdentifierStore.h in Headers */, + 74D6C8F8FFCA98252D63ECB118C4A832 /* PFInstallationIdentifierStore_Private.h in Headers */, + 1AF8E5D403591848BFA38386949654ED /* PFInstallationPrivate.h in Headers */, + B6DFDA7AEEE3818FB42BF55BB43EA79B /* PFInternalUtils.h in Headers */, + 3C8E21B73FA1F3272C097FF1635AE123 /* PFJSONSerialization.h in Headers */, + 3E9C3B14F625AD4489FB47F637D3AD44 /* PFKeychainStore.h in Headers */, + 5E55D469ABDA00CB5E22565486F051AE /* PFKeyValueCache.h in Headers */, + AF12089323AED5E530B41B0F4FCA25E7 /* PFKeyValueCache_Private.h in Headers */, + 235CA0C0E4047D17A23597B064580FDC /* PFLocationManager.h in Headers */, + 6B9A30C0DEEE650ACE7112BEF04EB351 /* PFLogger.h in Headers */, + 66761408528652240616F11E28CA1AD4 /* PFLogging.h in Headers */, + F578343769211EBC6B3F9E68ACCD6A8C /* PFMacros.h in Headers */, + EC4BF1A648624D63284CED0E9A6992CA /* PFMulticastDelegate.h in Headers */, + DF6BE3AEF2D65C63BB86491AF2D1D74F /* PFMultiProcessFileLock.h in Headers */, + 1383661E416ECA10B53C370FD7DA478C /* PFMultiProcessFileLockController.h in Headers */, + D4C5AECA4AEB0E17B93EECD0ADD06AEE /* PFMutableACLState.h in Headers */, + E6074F2DE1234DE003E339251CE655DC /* PFMutableFileState.h in Headers */, + E2C42C2EC9B809BA3AEDE05F92643393 /* PFMutableObjectState.h in Headers */, + A87EDB8E2777D3E2D232BCB2A6CFE489 /* PFMutablePushState.h in Headers */, + F408B67DE22C6E247BE9587685BFD844 /* PFMutableQueryState.h in Headers */, + C8E3699CC4885FE30DB9B4F6733EBFDA /* PFMutableRelationState.h in Headers */, + 250A6A22ADFC9DCDE240E81BF031C373 /* PFMutableUserState.h in Headers */, + BB9E8B6CA1A0F28FE241638A9272ED77 /* PFNetworkActivityIndicatorManager.h in Headers */, + D48ADA5A04EC8BD8FFB980445E0DE387 /* PFNetworkCommand.h in Headers */, + 79D5AB7ED99F6F3FB99421D0DD941FC6 /* PFNullability.h in Headers */, + 0FC757A2467A1C8278B3C8E0FD126CB9 /* PFObject.h in Headers */, + A0B32A29C37C2FD2C97C80F4F4E9BB2E /* PFObject+Subclass.h in Headers */, + 0CCEBBF735A04B98E5C808E82DAE4CA8 /* PFObjectBatchController.h in Headers */, + 9303E978E2E7E3C00257DD5DC7B6E9B7 /* PFObjectConstants.h in Headers */, + 87753E6E8545A51BB7F4BDBD7DD3FAC2 /* PFObjectController.h in Headers */, + ABB094B942B56188EF4189D1F88D5903 /* PFObjectController_Private.h in Headers */, + 1AFB8287EE97FBB14C982D3730384309 /* PFObjectControlling.h in Headers */, + 52347D4DE0F39E74CAFB1591E68221E7 /* PFObjectEstimatedData.h in Headers */, + DAD63D2B12385137F611785D8087B0C7 /* PFObjectFileCoder.h in Headers */, + 533D41F33F1F148F6D7BBC7BB5C3DEA6 /* PFObjectFileCodingLogic.h in Headers */, + 135A844B6167C7B3BBC7AED7CA8826DA /* PFObjectFilePersistenceController.h in Headers */, + 50A74BA500644CFE9D103329CBEB0D32 /* PFObjectLocalIdStore.h in Headers */, + D50C7B2A36FA249BB8504A699EB42614 /* PFObjectPrivate.h in Headers */, + E283FC5D5F9002724D4E524E59577F76 /* PFObjectState.h in Headers */, + BFBF76808AF82215541A512281405BE3 /* PFObjectState_Private.h in Headers */, + 9FCD98AAEE8AD79C20BD6854611C7421 /* PFObjectSubclassInfo.h in Headers */, + C21257ABEC8456229A8715EE704A7DF1 /* PFObjectSubclassingController.h in Headers */, + 35DFE8F14A41999C6A59595E8B8A147F /* PFObjectUtilities.h in Headers */, + 6D0EDE2C0500E59D3BCCDF8014073A8B /* PFOfflineObjectController.h in Headers */, + BAFB7DE6902268900B1B195416BE4D04 /* PFOfflineQueryController.h in Headers */, + 105080EA61E3AD581D9D992B1C5EB418 /* PFOfflineQueryLogic.h in Headers */, + 7CA0EC245101545B13439BA0D2D9B8CA /* PFOfflineStore.h in Headers */, + 86E6118CAFA8C90FC0ABF1688FE6E65E /* PFOperationSet.h in Headers */, + 21BCE7766FE3C1F059C9002704419CA1 /* PFPaymentTransactionObserver.h in Headers */, + 11BCBDEFED4629E3C8FC48ED753E74E6 /* PFPaymentTransactionObserver_Private.h in Headers */, + 1EDEA12414A8201331E9B8B22F1B7F92 /* PFPin.h in Headers */, + 1B63D74CBA62C2E4CEA16D613970A1D9 /* PFPinningEventuallyQueue.h in Headers */, + 18BFB3DF28A19F110FE09F0BCC652A99 /* PFPinningObjectStore.h in Headers */, + D8959E35373758B9DF78F533C55FFC08 /* PFProduct.h in Headers */, + 7DA854BB5C3326B269441322D1C2628B /* PFProduct+Private.h in Headers */, + 8F78EF384897E4D8632DD80FB74EB452 /* PFProductsRequestHandler.h in Headers */, + 6EB34C4A888CD75B1347430E8E2DC8AB /* PFPropertyInfo.h in Headers */, + CC8AEBF8D6620E619F26B670189D49C8 /* PFPropertyInfo_Private.h in Headers */, + 7FDF8C860061C943C172B1CD123039BF /* PFPropertyInfo_Runtime.h in Headers */, + 7B7EE0F54A3687CFB442555D1F00B532 /* PFPurchase.h in Headers */, + 7BE8B7B3771AAA185FA9AF266ACB51D0 /* PFPurchaseController.h in Headers */, + 32B13741B4A59633A35C03D3BD085300 /* PFPush.h in Headers */, + 44D664F52828716532BBE6F0A5D9BF6B /* PFPushChannelsController.h in Headers */, + 17987D10D1BCBE60B5B277B9194A1CE1 /* PFPushController.h in Headers */, + A17802ED40EC2AA21BA76147AB4AD71B /* PFPushManager.h in Headers */, + 5717FB78F8B2247DAF6CC1D1F0CD1D98 /* PFPushPrivate.h in Headers */, + 8F495189348B03AE6F7B46DA0413D883 /* PFPushState.h in Headers */, + F8D55F4F51D08B48B8B0776E9DE8E4D2 /* PFPushState_Private.h in Headers */, + 2577E5E644A5FDDF4CB92BAF5F31EC7D /* PFPushUtilities.h in Headers */, + B337B1573E6106190658E45630AD4381 /* PFQuery.h in Headers */, + 17FFB9A78D520A8A0C2133681F0C4589 /* PFQueryController.h in Headers */, + DB6AD4AA0A96598835F98152FDD9EAA6 /* PFQueryPrivate.h in Headers */, + 543BA9CDC20915D1B7D6CE986E3C86BC /* PFQueryState.h in Headers */, + 19BEEA34AF0C75BF7625B3E99E24D16B /* PFQueryState_Private.h in Headers */, + 01BB74BC139D1D09260F64D925379F49 /* PFQueryUtilities.h in Headers */, + 4EDC3D68FA4D08025BAF6A25AFB5E65B /* PFReachability.h in Headers */, + 42B6719FA91532EEEF59E348C9F722F6 /* PFRelation.h in Headers */, + 7CE03C57C94CDC8B9A2074371BF4DD5E /* PFRelationPrivate.h in Headers */, + 6EFE18C45AAF6979BA21513D0DC45732 /* PFRelationState.h in Headers */, + 533BECEF90857A789B965FE3C20DA467 /* PFRelationState_Private.h in Headers */, + 46BF99BEBFFD63DBE8BC085CD18A4024 /* PFRESTAnalyticsCommand.h in Headers */, + B9667C60685EA0031CA019D522B3028F /* PFRESTCloudCommand.h in Headers */, + 0C4D15C99084144F0AE0AACF24644554 /* PFRESTCommand.h in Headers */, + 9CEF7DD95429E95AAA42B8ED323DDA01 /* PFRESTCommand_Private.h in Headers */, + 56CAFB300305782D5B129B4DD0B0EE58 /* PFRESTConfigCommand.h in Headers */, + A2C0656F1C90FA35634A60E17128300D /* PFRESTFileCommand.h in Headers */, + 4FEBA5F071565CE6BEFF968CD56E365A /* PFRESTObjectBatchCommand.h in Headers */, + 1F14458F8079F45B39F591632AF289EE /* PFRESTObjectCommand.h in Headers */, + 2248CB8CC7031E8FAA06E3E917BC5734 /* PFRESTPushCommand.h in Headers */, + BF8D6320B7CD58347D2D83FFD03CF8C7 /* PFRESTQueryCommand.h in Headers */, + B322A3CEE4151E27F3073CBEC0BBA270 /* PFRESTSessionCommand.h in Headers */, + 82193516C2657105BB1B20F27C8C012A /* PFRESTUserCommand.h in Headers */, + 7757891143F134EF973508DD56821CA6 /* PFRole.h in Headers */, + 516412468B9D294B708BB12CCDE0E76E /* PFSession.h in Headers */, + 22C4D0EA9DC115B2C820CC447AA2DCBC /* PFSession_Private.h in Headers */, + CA6BAD1169CA01807573AE331781DCB5 /* PFSessionController.h in Headers */, + 000A86E96A999630D18730F9FE407521 /* PFSessionUtilities.h in Headers */, + D08A4B442A5964C417489F08A81784F5 /* PFSQLiteDatabase.h in Headers */, + 21DC14D176AC70D4936783626B9F0377 /* PFSQLiteDatabase_Private.h in Headers */, + 97BEC95DB23314A8FEB59FD75DE72D66 /* PFSQLiteDatabaseController.h in Headers */, + 1233214C807850AC28C1C7BC25C7606D /* PFSQLiteDatabaseResult.h in Headers */, + 03E5826A251D0DE9BF070EAB5A3F6B07 /* PFSQLiteStatement.h in Headers */, + B3E81351F8E1BDBF2F584E84B3A49B8E /* PFSubclassing.h in Headers */, + 60235CFEA89AAEDCC92FD14F7B13642E /* PFTaskQueue.h in Headers */, + B012C2B3E0D50B9AB1CDFFCB0E76CA7B /* PFThreadsafety.h in Headers */, + ED7504BB4E39C1BD0DBBC215994E7D77 /* PFURLConstructor.h in Headers */, + FF73BEC217D2099177CEFA7DFEA4A4FD /* PFURLSession.h in Headers */, + A46EEDC8DCA2052DACCF4C8B558ADD01 /* PFURLSession_Private.h in Headers */, + 77894BDDAFFE8441526B64E1BBB856C7 /* PFURLSessionCommandRunner.h in Headers */, + 52D60DFB5AF85D51AE70D3FA3B5F8633 /* PFURLSessionCommandRunner_Private.h in Headers */, + BD4F7DE5F808676F975022B06C963C28 /* PFURLSessionDataTaskDelegate.h in Headers */, + 0CC24C2247F9698B3E15F4CD4A651E9D /* PFURLSessionDataTaskDelegate_Private.h in Headers */, + 67E47244AD75E871069A0531DD9C9608 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, + CF17EAE278CDD50904A3B07140E9DFD6 /* PFURLSessionJSONDataTaskDelegate.h in Headers */, + 5F7CFB98E474841AFEAC9142671E1607 /* PFURLSessionUploadTaskDelegate.h in Headers */, + 262301EFB0DF84B163076AE6AE233A63 /* PFUser.h in Headers */, + FEEB54C300BDC23661F4B2D1C4BD939C /* PFUserAuthenticationController.h in Headers */, + 1A8275935FF8BACEEA3858BEA3434421 /* PFUserAuthenticationDelegate.h in Headers */, + 49213E71A202E706B4C67562EC826709 /* PFUserConstants.h in Headers */, + CA6093691030EB225102EA5B084B9966 /* PFUserController.h in Headers */, + E99B3AC70816797E71FD03AD9F6ED794 /* PFUserFileCodingLogic.h in Headers */, + 44C1F895434928D4584C6938E69F6D32 /* PFUserPrivate.h in Headers */, + 94D401C18BF19BD75CFAC4BFB763CE7C /* PFUserState.h in Headers */, + A6ADA7DB7955937E81F5AC2A9BB71A46 /* PFUserState_Private.h in Headers */, + 72312D1A5AE5A6C1B984412285CF5E92 /* PFWeakValue.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - AC91774028638A24901EF79621BB4B49 /* Headers */ = { + AF22F1D7166A225277DB625EE4F4D51A /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 78A8A850CF4468F3941A7C0FED24B478 /* NSData+ImageContentType.h in Headers */, - 711F182E232E170C30B9A4910D4F4A1C /* SDImageCache.h in Headers */, - 3202AC804F373286713C96F5C232CA05 /* SDWebImage-umbrella.h in Headers */, - BA0E56DF8E304354DAFFBB3FF5DD9F86 /* SDWebImageCompat.h in Headers */, - D415C495170B2A2E7E69ABA5B139A2FD /* SDWebImageDecoder.h in Headers */, - 77279ECB1DD6E318B41237C0C81AA22F /* SDWebImageDownloader.h in Headers */, - 019CBBA1F0B35123BC7D10A6193906B3 /* SDWebImageDownloaderOperation.h in Headers */, - E14E2BA988329F8623EA43EA9C00EBF2 /* SDWebImageManager.h in Headers */, - D520CFD6CB433229A09975C500CE9B07 /* SDWebImageOperation.h in Headers */, - 96480A6B7B7FE7CC3FB468A1A4649991 /* SDWebImagePrefetcher.h in Headers */, - 1F00ABAAF2ED02430D7D0DEBA14EAA0E /* UIButton+WebCache.h in Headers */, - B8079CC4A6F4028A5A8F00AEB5D15D84 /* UIImage+GIF.h in Headers */, - CAC311E7208D8B268D01C33A0877E796 /* UIImage+MultiFormat.h in Headers */, - 3AF6CD10F85C9E6BCD008611943EA541 /* UIImageView+HighlightedWebCache.h in Headers */, - 9AA2F1D9208BABD6BDC47F071EE6B2F5 /* UIImageView+WebCache.h in Headers */, - 59259920887AD1C28099DE102068ABBC /* UIView+WebCacheOperation.h in Headers */, + EEBA3FE1C7E10F722123D0898B8A3390 /* Chameleon.h in Headers */, + CC3CACD5E552F8287FF72CCEDB01EDE9 /* Chameleon_.h in Headers */, + 2122B48610E7556893633F090FF877DB /* ChameleonConstants.h in Headers */, + D9FA43E9B824136A20E678A3C9CE7507 /* ChameleonEnums.h in Headers */, + A5EC9DBA68F789AE7442C6EA6D182285 /* ChameleonFramework-umbrella.h in Headers */, + 493A39F7AB5CC399A17F93EB112A7C15 /* ChameleonMacros.h in Headers */, + 30EE70080B2F12E67F05AD0CAC186B75 /* NSArray+Chameleon.h in Headers */, + E422151D5688228672DB1F43821D0AB9 /* UIButton+Chameleon.h in Headers */, + C8CCDFB80193D1AC799456689D8B1C55 /* UIColor+Chameleon.h in Headers */, + DDCAA9BE250EAD797FB91253079205E5 /* UIColor+ChameleonPrivate.h in Headers */, + 63FAAFF9D8F289AB5D001057E0A6E0C2 /* UIImage+ChameleonPrivate.h in Headers */, + B8E17F40332B9A8B4AD153AC08C7C60B /* UILabel+Chameleon.h in Headers */, + F3A723074159B52AECB8DB92DCC9068D /* UINavigationController+Chameleon.h in Headers */, + B0647F5D1F335773BA3C155C2FE34280 /* UIView+ChameleonPrivate.h in Headers */, + E15973B7000BAF44794642F5C614DEB2 /* UIViewController+Chameleon.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - C83E05D17A427F8E332445910F2DF93A /* Headers */ = { + E697802B9834E2C0A31B1FCFE32EF0C2 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 1E77F47173B565CBEEFE192E550EF3C3 /* ParseUI-umbrella.h in Headers */, - 6E42ACBF90AC267ACDDA8799CA89BB64 /* ParseUI.h in Headers */, - 2AC664C8C0DC0C5C450FC5F535FC5CD7 /* ParseUIConstants.h in Headers */, - AFDB8DFEFC8E9CB1824D5E8E486E7477 /* PFActionButton.h in Headers */, - CFE750013160AF86E0FA288F613BEF23 /* PFActivityIndicatorCollectionReusableView.h in Headers */, - 321EFB06767949574D5A41A53BCBD75E /* PFActivityIndicatorTableViewCell.h in Headers */, - 7D866D159BD8DD5F53DED0E5051D2958 /* PFCollectionViewCell.h in Headers */, - 4D08AAD4280B4F3DAF62BEE648397C5B /* PFColor.h in Headers */, - 3C66A01E32541AED7FE6DE40F9603317 /* PFDismissButton.h in Headers */, - 2722BE2D92728CC58538D79DCCC6AB8A /* PFImage.h in Headers */, - ADE10A2BCF73315551544ACB9609A9F9 /* PFImageCache.h in Headers */, - 2B20A8A653974DF6C186E953D400934A /* PFImageView.h in Headers */, - B6C7D295D947EF5EEF765DC28F477ABA /* PFLoadingView.h in Headers */, - D561FA307BEA6A6DE6EE95F54FEA65D7 /* PFLocalization.h in Headers */, - E838191640FDD81D844B51A75FBBC22A /* PFLogInView.h in Headers */, - 1E257FF36AC3E450D96E4EB09899344A /* PFLogInView_Private.h in Headers */, - BACC3A14C83F687DAD862608C61D43A0 /* PFLogInViewController.h in Headers */, - EA52F5267A63804A76EBCC450C31655C /* PFPrimaryButton.h in Headers */, - 17E279F36DF637ABB37F9F718654E7A1 /* PFProductTableViewController.h in Headers */, - 1CC6C0407717ACF5D33185F2DDBD4070 /* PFPurchaseTableViewCell.h in Headers */, - 1D8F9FD9CA6B7463F88EAC84744B131A /* PFQueryCollectionViewController.h in Headers */, - 77E79A433697DD877A226FB07BA3B6C7 /* PFQueryTableViewController.h in Headers */, - 9EA16CADFB87A87B82F31805D5A206E5 /* PFRect.h in Headers */, - 3F83EB6916D3C7D050C0012134605DED /* PFResources.h in Headers */, - C28FDD4A6A228F0415AD40DEC282792C /* PFSignUpView.h in Headers */, - 0348BC4197B03EA005FADC6D63870811 /* PFSignUpViewController.h in Headers */, - AFEB92BEE0C21C0467A0355D0A665ED1 /* PFTableViewCell.h in Headers */, - FEEE6031EC08A0265F3B4248F047BCBA /* PFTextButton.h in Headers */, - CF4FB0904DD7229A65A31AF7DE90514D /* PFTextField.h in Headers */, - CD5269A8E00F9F1B4AEBC8E26BE87446 /* PFUIAlertView.h in Headers */, + 7E4206E2E57E51D8EDF9E49677C3DA3D /* AFHTTPRequestOperation.h in Headers */, + 714FB212B725F8BDF3683F38B7F6B4CE /* AFHTTPRequestOperationManager.h in Headers */, + 98E9E7DA23152B6ABA2CCE66175BEDA9 /* AFHTTPSessionManager.h in Headers */, + BE32F7A8ED25F80F8FA9558A89EBEAAF /* AFNetworkActivityIndicatorManager.h in Headers */, + 40F68DEA67982D3B13DF8EC32D23C859 /* AFNetworking.h in Headers */, + 4D9D2707B9A1C9724DFCD9D69B993FA1 /* AFNetworking-umbrella.h in Headers */, + A41AA45BCD642898558436AF46D198BC /* AFNetworkReachabilityManager.h in Headers */, + 2921ACB9BA038E23AD06882CA0726C09 /* AFSecurityPolicy.h in Headers */, + 72CEF78CC6C2341AB78EC7ED7A3B2844 /* AFURLConnectionOperation.h in Headers */, + B4FF3032C86287B3EB198AE9902F83A5 /* AFURLRequestSerialization.h in Headers */, + 7FBDBBC09E7D8CE63696847366DCFEE3 /* AFURLResponseSerialization.h in Headers */, + 63B554E188C8F0ECE4E2FE49DC187B71 /* AFURLSessionManager.h in Headers */, + 894AA3587AF5C3A6D545C4A4BA5B58AC /* UIActivityIndicatorView+AFNetworking.h in Headers */, + 313BD1D22D3DE3450A1B4727713A15E9 /* UIAlertView+AFNetworking.h in Headers */, + 6A8840784D210166F0E75E0AF8E413AD /* UIButton+AFNetworking.h in Headers */, + 733D1FF755A7E59F0218E2A9225E9ECA /* UIImage+AFNetworking.h in Headers */, + 96BE3ED0FDDA9CBA6D0DF772A7BA40E0 /* UIImageView+AFNetworking.h in Headers */, + 6DA6530898EC420505935E4CBB869ADB /* UIKit+AFNetworking.h in Headers */, + 0F5680893697DCD762345A72BE90A107 /* UIProgressView+AFNetworking.h in Headers */, + 746B0BD3442F7C333D7F7E2C518E9031 /* UIRefreshControl+AFNetworking.h in Headers */, + 33263E341C1322500C5F2632B22EECA7 /* UIWebView+AFNetworking.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - D82B999D20A683EA96D970C990A92BDD /* Headers */ = { + EE9A4A328AE28C4C48EE44FEDF3F76A5 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - F888C8B955E332D7B81BA8E85F1BCC4B /* FlatUIKit-umbrella.h in Headers */, - 5638E8C1AC3D36348BF52B821A63184E /* FlatUIKit.h in Headers */, - 201742A2D20350811849AC7E279D89C1 /* FUIAlertView.h in Headers */, - 0C5291482A3F7BA2CC58320C9B5BCA16 /* FUIButton.h in Headers */, - 1768B9615B6D6518F559FA5355AE3C7E /* FUICellBackgroundView.h in Headers */, - 6B4F96C280717746A98B11A1EAFD274F /* FUIPopoverBackgroundView.h in Headers */, - A301B8F6BC707D768D1BA401B66CA18A /* FUISegmentedControl.h in Headers */, - 30686CFDA8810EA3FD79C81676D8BEE4 /* FUISwitch.h in Headers */, - F80F0C5DD55B014CBCE737C87E3E24F0 /* FUITextField.h in Headers */, - 2ECF841EB016889D3AF3A8615708FB37 /* NSString+Icons.h in Headers */, - C487BF47D0AEBFFB32FDA30A03F2903D /* UIBarButtonItem+FlatUI.h in Headers */, - 2FA3641B2811D21FFBC3732564E11BD9 /* UIColor+FlatUI.h in Headers */, - 420E5F12AB7FC7093F055D7B3EEE0595 /* UIFont+FlatUI.h in Headers */, - 48303E0C3327C7EB6FAF609E6B42387E /* UIImage+FlatUI.h in Headers */, - 1B8D06F57ABB9C73800ED039173E80A2 /* UINavigationBar+FlatUI.h in Headers */, - 2A1E59654B89E214A131F4AA82B8741A /* UIPopoverController+FlatUI.h in Headers */, - E7A0DF07BEE9186EAA58D701552BEBE0 /* UIProgressView+FlatUI.h in Headers */, - 9953A1F6E763CEED3CC4DB86C9D55845 /* UISlider+FlatUI.h in Headers */, - 96B8E925EA9DD5D8394039CB6E187FAA /* UIStepper+FlatUI.h in Headers */, - 3BEC156281D69151048A9799FB68580A /* UITabBar+FlatUI.h in Headers */, - 3C993E9055C907D131B70A13725FCBD2 /* UITableViewCell+FlatUI.h in Headers */, - DE88AADD6CDD355FDEF74226741ADA01 /* UIToolbar+FlatUI.h in Headers */, + 33E6684C7788A971BC853F79DFF4CEBB /* BFCancellationToken.h in Headers */, + 3A066B9A2C17944AB5CE63613BCB1EC5 /* BFCancellationTokenRegistration.h in Headers */, + 32C1805D7037A65C326F15AAD4BE4831 /* BFCancellationTokenSource.h in Headers */, + 402896AEC22293D8BCD6860E87020689 /* BFDefines.h in Headers */, + F77A9F2C3BA210256751313BC23B8BAA /* BFExecutor.h in Headers */, + 25716D382DCFCAD7F4D883C97A203B25 /* BFTask.h in Headers */, + DE6FF42AA13354302CCE67FBA5AE3056 /* BFTaskCompletionSource.h in Headers */, + ACA8475381335DA76ADC114838D0274C /* Bolts.h in Headers */, + D2305969E531EBA7A255D3C4302E7665 /* Bolts-umbrella.h in Headers */, + AEDEB8A43CD152EBE7A2E0C3080CE070 /* BoltsVersion.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 02BAF45DCD86C52CC44CF7BA784F8821 /* Pods */ = { + 0130B3724283586C0E9D2A112D4F2AA1 /* AFNetworking */ = { isa = PBXNativeTarget; - buildConfigurationList = 21132C688AA5261B8ED9F7A691EF1EF6 /* Build configuration list for PBXNativeTarget "Pods" */; + buildConfigurationList = B61E8ABD6FC78810EA49DC0E9646BF83 /* Build configuration list for PBXNativeTarget "AFNetworking" */; buildPhases = ( - 660F2C54023ACC3ED0EFB35FFD73B803 /* Sources */, - 375A26ACEC7AD247B13F80B8B136A4E3 /* Frameworks */, - 583DC96F727AEB6D3AD1902C79DCB32F /* Headers */, + E697802B9834E2C0A31B1FCFE32EF0C2 /* Headers */, + AA62F81298E1C83BC728A8E7CF9813D0 /* Sources */, + A7595237C8CA923B81E67B2998909D90 /* Frameworks */, + 63178402A1D67B14B2181EFEA0F16079 /* Resources */, ); buildRules = ( ); dependencies = ( - 833EC6DA6E1B715ABA24B77629634C71 /* PBXTargetDependency */, - BE2FADE693886D87AA14EF842401EB52 /* PBXTargetDependency */, - 740CF386944A55D4C1907F21B4025996 /* PBXTargetDependency */, - E6090C7FFB7876A1949EE0CFC67771FB /* PBXTargetDependency */, - 7BE6CB7F9DAE6A0DAE1C980D075FEE27 /* PBXTargetDependency */, - BCA6916A563A2BFB0790F5F1176F06B8 /* PBXTargetDependency */, - 7EA5AF59068D0D4355722B37D687458E /* PBXTargetDependency */, - D419ED2018FF2177A32FFBEC4F9A534D /* PBXTargetDependency */, - 36A61B79DE591B2594995FA9A0D2B2DB /* PBXTargetDependency */, ); - name = Pods; - productName = Pods; - productReference = 1DB4ED0D15FF25EEA3709DC4DCCE9676 /* Pods.framework */; + name = AFNetworking; + productName = AFNetworking; + productReference = A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking */; productType = "com.apple.product-type.framework"; }; - 449BE13505657F8E1C2D26738417B4FD /* Unirest */ = { + 15DDA603BCB24C941C84C97F8CA1B5CD /* Pods-FoodbLog */ = { isa = PBXNativeTarget; - buildConfigurationList = 5FB2967A6A20FE963247B4DAAAF6AB7D /* Build configuration list for PBXNativeTarget "Unirest" */; + buildConfigurationList = 525EE82D6B4EC9040F2C31DA0640A839 /* Build configuration list for PBXNativeTarget "Pods-FoodbLog" */; buildPhases = ( - 191D4B850ECF0ADD7E5131DD17450C64 /* Sources */, - 80E6DD3820978CAACD4A2E3F5EB2B3F8 /* Frameworks */, - 4B50BAB7CC2516D12B4791188BDE478E /* Headers */, + 869988D1C6EFA80212F480B9CFCD1838 /* Headers */, + B2727A62DF15F2486A82F69C0FF76993 /* Sources */, + 6F507917EE997E5E24E07D04329502F4 /* Frameworks */, + 35631DD03E3A55A28E1A48B10E6E2610 /* Resources */, ); buildRules = ( ); dependencies = ( + EDECE1205B730A5E7D0180F8AD80432E /* PBXTargetDependency */, + 24F464CC0E8B4E4F2EEFA03F92B39FAB /* PBXTargetDependency */, + 31C75145ABB32D28C86E8463012A82F4 /* PBXTargetDependency */, + 545135E68A48EFAF18694F358ADC1EC2 /* PBXTargetDependency */, + B7B913213EE748F5FC38D91A88A2057B /* PBXTargetDependency */, + ABBCC4D5C9A5FA0B6EF9D801BD7C4918 /* PBXTargetDependency */, + 67D4132B453E02D129AD8AB0BC7C585F /* PBXTargetDependency */, + 378D961612F78BB22DC1CB320CFEBE31 /* PBXTargetDependency */, + 7D0610D3D336E130A02996F82893C374 /* PBXTargetDependency */, ); - name = Unirest; - productName = Unirest; - productReference = 1717B0778A13741CD446D6173A471FBC /* Unirest.framework */; + name = "Pods-FoodbLog"; + productName = Pods_FoodbLog; + productReference = DC82E912A46E0D98C54FA4D7AA8638BA /* Pods-FoodbLog */; productType = "com.apple.product-type.framework"; }; - 4878C70B21CA37D7CB8A476BF986741B /* AFNetworking */ = { + 28BFDC89BA4363F4F3576DEC70EE10AE /* ChameleonFramework */ = { isa = PBXNativeTarget; - buildConfigurationList = DCFA04D9F87841983F47B020C3F295D0 /* Build configuration list for PBXNativeTarget "AFNetworking" */; + buildConfigurationList = D8BDCAEAFB484664860383CA2CC9C8F8 /* Build configuration list for PBXNativeTarget "ChameleonFramework" */; buildPhases = ( - D368A0D8E440ED2393A424F47A6C5549 /* Sources */, - 60C3D26E2C8843CA90222B621C57A0DA /* Frameworks */, - 9C80F38D01CF08B0F39839F63560CCB2 /* Headers */, + AF22F1D7166A225277DB625EE4F4D51A /* Headers */, + A0C03453344651888EB8D38AB148EE1B /* Sources */, + 0AF9CF3C76DBE562539FE47E28672C5A /* Frameworks */, + 85F41D0E1F460926708CD57655E560DD /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = AFNetworking; - productName = AFNetworking; - productReference = 158142C7F929BA4F36A79B3F1266EDF4 /* AFNetworking.framework */; + name = ChameleonFramework; + productName = ChameleonFramework; + productReference = 0383903D05EDD5C442C682C1F7A1752D /* ChameleonFramework */; productType = "com.apple.product-type.framework"; }; - 5855D213D188EE14086C1F827DE7B1FF /* IQKeyboardManager */ = { + 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */ = { isa = PBXNativeTarget; - buildConfigurationList = DC2565CD7646AD5E276A24C4976C27A3 /* Build configuration list for PBXNativeTarget "IQKeyboardManager" */; + buildConfigurationList = 51A78600708B12200B7613A059F264AD /* Build configuration list for PBXNativeTarget "SDWebImage" */; buildPhases = ( - 46C9A469E746CD4C928A7ABF0F60A76C /* Sources */, - E1208EB7D50F9D15A29F953A7FE1248B /* Frameworks */, - 6149D6F2DD82EDC24248FE0AC9319BEC /* Headers */, - CC697E96C3FEF12FD07E52E508AFBEF1 /* Resources */, + 43FD6D86FE03BF966B0926576933AC19 /* Headers */, + FC1085334AE2AA872DB58D336C4A4D10 /* Sources */, + C76329B6D29A067AF194CAACFB3A8B2D /* Frameworks */, + 85FF02394D29B5E99D9AFD674983AF4A /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = IQKeyboardManager; - productName = IQKeyboardManager; - productReference = E9FBCA63748E8FB4F92A5E4B87A13C84 /* IQKeyboardManager.framework */; + name = SDWebImage; + productName = SDWebImage; + productReference = B0B214D775196BA7CA8E17E53048A493 /* SDWebImage */; productType = "com.apple.product-type.framework"; }; - 59A0C52286D680208602EBE33F4979AD /* ChameleonFramework */ = { + 42465A188431886AB035275F049824D3 /* Bolts */ = { isa = PBXNativeTarget; - buildConfigurationList = 902666324428AE8009C1F1B64BF2EF92 /* Build configuration list for PBXNativeTarget "ChameleonFramework" */; + buildConfigurationList = 45D24D7DA9B5391B128D06A688D5FFEB /* Build configuration list for PBXNativeTarget "Bolts" */; buildPhases = ( - 53435A3242C754EFDBEE1396995EDBC0 /* Sources */, - 9693F40C1D537760F25B5604FE9C3B9A /* Frameworks */, - 5E6AF2096BC65B5D4860401AF12D1EF6 /* Headers */, + EE9A4A328AE28C4C48EE44FEDF3F76A5 /* Headers */, + D4B1C8AD04AB4A8712EB1F4D16D87BC7 /* Sources */, + E5E0181A204601DE496DB5E7D4ABE0B1 /* Frameworks */, + 47D8DA7F169DE7BD5DBCB36D514E3F59 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = ChameleonFramework; - productName = ChameleonFramework; - productReference = 1A52C07A61861817130D7B9AECEA563F /* ChameleonFramework.framework */; + name = Bolts; + productName = Bolts; + productReference = F84B331B5D6AAF1548DD1BB004AE5C2A /* Bolts */; productType = "com.apple.product-type.framework"; }; - 708E01B006A9F88B3C13711562282B5E /* Bolts */ = { + 7F3FE5658AEC4AF2B296EDA73A218182 /* Parse */ = { isa = PBXNativeTarget; - buildConfigurationList = EE1ADA34B931E600AF64DF5B88F4BD84 /* Build configuration list for PBXNativeTarget "Bolts" */; + buildConfigurationList = 9C523E6143DB0C70A8B0FEB07F0A5E69 /* Build configuration list for PBXNativeTarget "Parse" */; buildPhases = ( - 345D942EED6C8A0820100F4442C5AA7F /* Sources */, - 07C7C4672DEF49F8FB21993A7F583397 /* Frameworks */, - 39D91A755BE4D0420B3BB7DED36CB19C /* Headers */, + A87BA2B7FE18D40CF23B2C76BF652F14 /* Headers */, + 0C424E228E54015C4B670D7DFB7DE551 /* Sources */, + 70B9087E2E161834B897DE5A668DCA45 /* Frameworks */, + 282C7AF05E916B37CFB2A9488C1FB05A /* Resources */, ); buildRules = ( ); dependencies = ( + 11E1920315684F86EADC632C76C8587C /* PBXTargetDependency */, ); - name = Bolts; - productName = Bolts; - productReference = 39CBD2387C0A22DE368A7A3D92A3E3FE /* Bolts.framework */; + name = Parse; + productName = Parse; + productReference = 0652F2476C7C87C6C0F6CB68072EA25F /* Parse */; productType = "com.apple.product-type.framework"; }; - AD0892BE565CA9D5A839B9137561277C /* FlatUIKit */ = { + 923099EAAC66CBEDD533E3FE43830166 /* FlatUIKit */ = { isa = PBXNativeTarget; - buildConfigurationList = 74EF3DD21DD17AECC1EDC763152044A7 /* Build configuration list for PBXNativeTarget "FlatUIKit" */; + buildConfigurationList = 572543452275637D1FC81DC359D9A50C /* Build configuration list for PBXNativeTarget "FlatUIKit" */; buildPhases = ( - 7AF601FD3EC7FA8E282708517FDBCE90 /* Sources */, - 8DF0F522B67FD65AE6A2212D2CDBEB8B /* Frameworks */, - D82B999D20A683EA96D970C990A92BDD /* Headers */, - 8E7DDBD73DD0BAF319AA8F87317B6547 /* Resources */, + 28FAD78D380E7661ADD03202D7BBA130 /* Headers */, + 1E97850B772151D7BBBEBFF2E00258F4 /* Sources */, + 5C1186D4F3AA17F08B0E5E18291421B4 /* Frameworks */, + 1111E8A55D0DF9305BDD4D19A219D814 /* Resources */, ); buildRules = ( ); @@ -3133,1181 +3215,1354 @@ ); name = FlatUIKit; productName = FlatUIKit; - productReference = E49698D71E7A652987CD66FB55CF759D /* FlatUIKit.framework */; + productReference = BCF2FF91155574F810AA6ADB7F19CC31 /* FlatUIKit */; productType = "com.apple.product-type.framework"; }; - AE2762B37E506C0F5F264DA433F088C3 /* SDWebImage */ = { + 96F971576D7B3914510B0B2FB38F43A2 /* ParseUI */ = { isa = PBXNativeTarget; - buildConfigurationList = 240572BBF69462D0F27EBBD8B2F4B897 /* Build configuration list for PBXNativeTarget "SDWebImage" */; + buildConfigurationList = 206CFF50794E2F033F8F7D1CA4B6D926 /* Build configuration list for PBXNativeTarget "ParseUI" */; buildPhases = ( - 330E74BF939412164181ED3E38E1F4C3 /* Sources */, - 072B266F6265B6D13FA98A3F6FC2B0B7 /* Frameworks */, - AC91774028638A24901EF79621BB4B49 /* Headers */, + 6F3D3020832CEDA9562C661557CD8F6B /* Headers */, + 2F695D4796FBFFD8A259731172B38526 /* Sources */, + 05A298B14480994CEB5F25490E57D1CD /* Frameworks */, + B73CE196DD2B14CEF2F1B93698B71DCB /* Resources */, ); buildRules = ( ); dependencies = ( + 9CE0CCA8DA2FE46BEB7DFE0A10B6CA0D /* PBXTargetDependency */, + 8F09761C4AE4FC754A7AA2DE94709F8F /* PBXTargetDependency */, ); - name = SDWebImage; - productName = SDWebImage; - productReference = 2436CD3523CA72198B0D962C17E46301 /* SDWebImage.framework */; + name = ParseUI; + productName = ParseUI; + productReference = 062054FC97AAAB3D2F4AB253A7CDE385 /* ParseUI */; productType = "com.apple.product-type.framework"; }; - B8A759F57254B6094CF99273E5ECEE8B /* Parse */ = { + DD9AC66E330E40497F19A867C63FBAAA /* Unirest */ = { isa = PBXNativeTarget; - buildConfigurationList = 006EAC57210788D5B6256A754B162997 /* Build configuration list for PBXNativeTarget "Parse" */; + buildConfigurationList = EA7ABE50FB6EA7A4A6CAA4A5C5380BD6 /* Build configuration list for PBXNativeTarget "Unirest" */; buildPhases = ( - E6712D52444976796E437CC03D0E8A8D /* Sources */, - 431F2351CC13B7BD033ECDBC279A83FC /* Frameworks */, - 388ED1AA89D7568EA21BA112D1FE2A57 /* Headers */, - 60EA61A81F27E2F72A027408593371FB /* Resources */, + 324720C9A5939C3ABB4CCF923B4D2735 /* Headers */, + 90E8C54D0CE7627A9E9FA12FB6859335 /* Copy . Public Headers */, + AC965A15FD8A8C4AF6FC3464500E5A12 /* Copy HttpRequest Public Headers */, + 4C463E297FC3B0D0A43041080634DD7C /* Copy HttpResponse Public Headers */, + 1E87252F689F2AC232EF6B3E48BFF1C2 /* Sources */, + 535965DE03A38610A3DF44D409F1BDF8 /* Frameworks */, + 1E287E392C1AD3AF02DE35029F5E1FC5 /* Resources */, + 7CE68911DB9A1FB1E22FA541A710F780 /* Create Symlinks to Header Folders */, ); buildRules = ( ); dependencies = ( - B3B29955684C67EF1AECC21B786E8840 /* PBXTargetDependency */, ); - name = Parse; - productName = Parse; - productReference = 5A771B06A45185BFBDA4C3A4A04B8B5F /* Parse.framework */; + name = Unirest; + productName = Unirest; + productReference = D6CC7CC57AD4796048E05E9C30825826 /* Unirest */; productType = "com.apple.product-type.framework"; }; - F710EAB41DD6932844C4A82A87A2628F /* ParseUI */ = { + FBA456CB50E371584C11231929A0971E /* IQKeyboardManager */ = { isa = PBXNativeTarget; - buildConfigurationList = 908E2BA7D177B512E6ED5E535DBE9FC3 /* Build configuration list for PBXNativeTarget "ParseUI" */; + buildConfigurationList = 290794F1B7C30B95EDA1658C9F5C37E9 /* Build configuration list for PBXNativeTarget "IQKeyboardManager" */; buildPhases = ( - D8DF8655A2CD0FF22D41AD6691FBD8FD /* Sources */, - 6FF4BEFF7B03474CA9992F70F986EBD3 /* Frameworks */, - C83E05D17A427F8E332445910F2DF93A /* Headers */, - 3CD37A96E6EADA70594AC503C6C7FAAA /* Resources */, + 6F84814001FC54309657F31682B0B240 /* Headers */, + 8F8CD7DFEE02805BBEAA0910B4914994 /* Sources */, + FF5E3D2C3355425B1E11123AF7B4DBC2 /* Frameworks */, + 3F2BEB6F19A3B7B33306FEB5E210ACEF /* Resources */, ); buildRules = ( ); dependencies = ( - 0EA8D9CABBF5EEF3C48E8D0489E04EDC /* PBXTargetDependency */, - 7DC500B48EF30D6F4A8D2EBE88FC0087 /* PBXTargetDependency */, ); - name = ParseUI; - productName = ParseUI; - productReference = 854280D62BE01F6E5C7DA21C6D62CBD7 /* ParseUI.framework */; + name = IQKeyboardManager; + productName = IQKeyboardManager; + productReference = 98527D7196957AAB07B79E2E2AFDE23E /* IQKeyboardManager */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { + BFDFE7DC352907FC980B868725387E98 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0700; + LastSwiftUpdateCheck = 1300; + LastUpgradeCheck = 1300; }; - buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; + buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( + Base, en, ); - mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = EE62598D14C185E64BC5D5758D9EBE48 /* Products */; + mainGroup = CF1408CF629C7361332E53B88F7BD30C; + productRefGroup = ACE7852A20DA825AE217649C3D71EFB7 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 4878C70B21CA37D7CB8A476BF986741B /* AFNetworking */, - 708E01B006A9F88B3C13711562282B5E /* Bolts */, - 59A0C52286D680208602EBE33F4979AD /* ChameleonFramework */, - AD0892BE565CA9D5A839B9137561277C /* FlatUIKit */, - 5855D213D188EE14086C1F827DE7B1FF /* IQKeyboardManager */, - B8A759F57254B6094CF99273E5ECEE8B /* Parse */, - F710EAB41DD6932844C4A82A87A2628F /* ParseUI */, - 02BAF45DCD86C52CC44CF7BA784F8821 /* Pods */, - AE2762B37E506C0F5F264DA433F088C3 /* SDWebImage */, - 449BE13505657F8E1C2D26738417B4FD /* Unirest */, + 0130B3724283586C0E9D2A112D4F2AA1 /* AFNetworking */, + 42465A188431886AB035275F049824D3 /* Bolts */, + 28BFDC89BA4363F4F3576DEC70EE10AE /* ChameleonFramework */, + 923099EAAC66CBEDD533E3FE43830166 /* FlatUIKit */, + FBA456CB50E371584C11231929A0971E /* IQKeyboardManager */, + 7F3FE5658AEC4AF2B296EDA73A218182 /* Parse */, + 96F971576D7B3914510B0B2FB38F43A2 /* ParseUI */, + 15DDA603BCB24C941C84C97F8CA1B5CD /* Pods-FoodbLog */, + 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */, + DD9AC66E330E40497F19A867C63FBAAA /* Unirest */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 3CD37A96E6EADA70594AC503C6C7FAAA /* Resources */ = { + 1111E8A55D0DF9305BDD4D19A219D814 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 12818D0029FE4E7608CDA06B0E38E47D /* flat-ui-icons-regular.ttf in Resources */, + 9835F5DE63612AE5CB247BEDF9F6BAD9 /* Lato-Bold.ttf in Resources */, + 91D1F2E5F9AECFF5785A6814972F9054 /* Lato-Italic.ttf in Resources */, + 881CD8405ABE6BEFB471F1622F70BC8D /* Lato-Light.ttf in Resources */, + 646E86EA149691E2A103AABC8ED83B3E /* Lato-Regular.ttf in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1E287E392C1AD3AF02DE35029F5E1FC5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 282C7AF05E916B37CFB2A9488C1FB05A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 96E3D29B214EBF429C504C8CA55D1B9F /* en.lproj in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 35631DD03E3A55A28E1A48B10E6E2610 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3F2BEB6F19A3B7B33306FEB5E210ACEF /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6CC8DAFDF47415C82B325AB167FB27C2 /* IQKeyboardManager.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 47D8DA7F169DE7BD5DBCB36D514E3F59 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 63178402A1D67B14B2181EFEA0F16079 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6B21CA125A5B44F5D0CF90AEE2B4A390 /* en.lproj in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 60EA61A81F27E2F72A027408593371FB /* Resources */ = { + 85F41D0E1F460926708CD57655E560DD /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 736C8D4C0851A2F2334668FFF20DE0B4 /* en.lproj in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8E7DDBD73DD0BAF319AA8F87317B6547 /* Resources */ = { + 85FF02394D29B5E99D9AFD674983AF4A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1A1996C93383A3C703E7DA5BC59F0FDB /* flat-ui-icons-regular.ttf in Resources */, - 561FDB72BA8B61417BC0109D57FB53DD /* Lato-Bold.ttf in Resources */, - 2A20DD6FD5B9EA1CB9D7D33AD25F6990 /* Lato-Italic.ttf in Resources */, - F2FA2A4CAE1467E990B61BA78254E651 /* Lato-Light.ttf in Resources */, - 6047CAC2349B1C186BA37A51DE790C9E /* Lato-Regular.ttf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - CC697E96C3FEF12FD07E52E508AFBEF1 /* Resources */ = { + B73CE196DD2B14CEF2F1B93698B71DCB /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - ED57B9619E1F3F4E022A01BE00EF4530 /* IQKeyboardManager.bundle in Resources */, + 2552EF538219FE248A64E2D5ECE1F267 /* en.lproj in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 7CE68911DB9A1FB1E22FA541A710F780 /* Create Symlinks to Header Folders */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Create Symlinks to Header Folders"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "cd \"$CONFIGURATION_BUILD_DIR/$WRAPPER_NAME\" || exit 1\nif [ ! -d Versions ]; then\n # Not a versioned framework, so no need to do anything\n exit 0\nfi\n\npublic_path=\"${PUBLIC_HEADERS_FOLDER_PATH#$CONTENTS_FOLDER_PATH/}\"\nif [ ! -f \"$public_path\" ]; then\n ln -fs \"${PUBLIC_HEADERS_FOLDER_PATH#$WRAPPER_NAME/}\" \"$public_path\"\nfi\n\nprivate_path=\"${PRIVATE_HEADERS_FOLDER_PATH#$CONTENTS_FOLDER_PATH/}\"\nif [ ! -f \"$private_path\" ]; then\n ln -fs \"${PRIVATE_HEADERS_FOLDER_PATH#$WRAPPER_NAME/}\" \"$private_path\"\nfi\n"; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ - 191D4B850ECF0ADD7E5131DD17450C64 /* Sources */ = { + 0C424E228E54015C4B670D7DFB7DE551 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 147FA8C1A763341DFA6B838D9532FC55 /* Base64.m in Sources */, - 2C9CFCC48CDDF031048B7044BB349D12 /* UNIBaseRequest.m in Sources */, - EF88E78AD45E08C4F4835AEADBA00528 /* UNIBodyRequest.m in Sources */, - 80DB3811EC52219701D567DD67725E8A /* UNIHTTPBinaryResponse.m in Sources */, - 0BB2B530D1993F5804817AFDB3395405 /* UNIHTTPClientHelper.m in Sources */, - B7B497851D50FB6FEA63C93E0DD011A3 /* UNIHTTPJsonResponse.m in Sources */, - CCD89E374EFF51BDB69B2E83BCD866CD /* UNIHTTPRequest.m in Sources */, - CE215822CBE1DDC09FD815295B8ECCE1 /* UNIHTTPRequestWithBody.m in Sources */, - 6B9014C83E7F6D9632EB74343BEE2582 /* UNIHTTPResponse.m in Sources */, - 56A004470E655CD8F393A21E3C1A04A6 /* UNIHTTPStringResponse.m in Sources */, - 23357D71E2218F329CCBA7272D131D11 /* UNIJsonNode.m in Sources */, - 078201E171E284AFE36960EC9FCE97A5 /* Unirest-dummy.m in Sources */, - 16458A90629AA31591FB90202D7515A5 /* UNIRest.m in Sources */, - 74CFCCDE620A8A7618A9B30E77E774CE /* UNISimpleRequest.m in Sources */, - 50D3556B4B8004C309EA48A3C98855EF /* UNIUrlConnection.m in Sources */, + AA1026B1D369DE93692B71C618D3A82A /* BFTask+Private.m in Sources */, + 6AEE6C668ADED265E5073A0C10F14DEA /* Parse.m in Sources */, + 684E3449A728EFEBE2160ED5F8E37900 /* Parse-dummy.m in Sources */, + 66DB7FE778575C04997A47CE9AA4C978 /* ParseManager.m in Sources */, + 98DA10F38127EB1D4AFF2BDB077F68B7 /* ParseModule.m in Sources */, + 05896B286C7BD0C5F16B9AFE7857FAC4 /* PFACL.m in Sources */, + C5BDF2C3F576679C66B34129891D1919 /* PFACLState.m in Sources */, + AB7A59AE59C71EE96481D322D85D64F8 /* PFAlertView.m in Sources */, + 4BAD01BECD8E7D90990BF6B30EAC04C3 /* PFAnalytics.m in Sources */, + 965E194205240C804A5CC4E09422F906 /* PFAnalyticsController.m in Sources */, + 67E9AAA2DF855990B53C8E37179D1B08 /* PFAnalyticsUtilities.m in Sources */, + D1BB40613CBDD8C6DAA7812E7FFFF26C /* PFAnonymousAuthenticationProvider.m in Sources */, + D2FE57DEAD266E99D8CDBD42BC46CA3F /* PFAnonymousUtils.m in Sources */, + C1FCB24C1B387306C08722AD05271F71 /* PFApplication.m in Sources */, + 700F5568DDA1E624C522F380B8738A42 /* PFAsyncTaskQueue.m in Sources */, + F59673E41BF429818335D4E6BA080037 /* PFBase64Encoder.m in Sources */, + 3F2C1610BA5B0F27BAB9D3067AC8FB30 /* PFBaseState.m in Sources */, + DF088B8852C119D2181A3D18888CA8D2 /* PFCachedQueryController.m in Sources */, + 31C43362935AD5BBD696F7FAA1492DD0 /* PFCategoryLoader.m in Sources */, + 808F096E62506786671896B6BE8FC00E /* PFCloud.m in Sources */, + 94A9BD60599FB2C2AA2B0AB35934B758 /* PFCloudCodeController.m in Sources */, + D80843081D15837B4B5C8D66D2A8036D /* PFCommandCache.m in Sources */, + F4A3C9920EDEA3E824FE7C0843DD52CE /* PFCommandResult.m in Sources */, + 91F72E1C525A78F015595B286044D120 /* PFCommandRunning.m in Sources */, + 8F498BF52B76ACF30337C019FF3B30EC /* PFCommandRunningConstants.m in Sources */, + 456125DA576BBA0E50106E319FF73A44 /* PFCommandURLRequestConstructor.m in Sources */, + 170B81C1284725FB6076446FABCCDFE3 /* PFConfig.m in Sources */, + 85A58BD000E6A4ADF674465A45C88D41 /* PFConfigController.m in Sources */, + F3208A893E46B96AEB700BA316A28496 /* PFConstants.m in Sources */, + C7526D6608B593099FEC8D0896359897 /* PFCoreManager.m in Sources */, + B84EC5076309422B9A2C7A55CDABF5EB /* PFCurrentConfigController.m in Sources */, + A75ECFAB2C512E4E952D146A0B14729E /* PFCurrentInstallationController.m in Sources */, + A83FB900F4477F11C2DCD7F8B69209B3 /* PFCurrentUserController.m in Sources */, + 8F6BC9571604760D4F4E1AAA4105F39A /* PFDateFormatter.m in Sources */, + D912EE794EA43F144E2BFDB5E306D3BC /* PFDecoder.m in Sources */, + 34A10781FF0D6156B2F0E33BB5DF0224 /* PFDefaultACLController.m in Sources */, + 4FB349659BB29F142EB4C5A11CF8D33E /* PFDevice.m in Sources */, + 34282579CDF97D7263F08A2B79AF81D6 /* PFEncoder.m in Sources */, + 71535E3B142F488A3F510A0A2D854A26 /* PFErrorUtilities.m in Sources */, + 3E3D4C3FBC3D5752FB6F7D8CEC6DD58C /* PFEventuallyPin.m in Sources */, + 896FD5D0C72F697DF9C5D17F7B529E61 /* PFEventuallyQueue.m in Sources */, + EBAD17678C41DA0FC100BAF0C597CF1D /* PFFieldOperation.m in Sources */, + E3DE284C9F31AEA272123577A8454947 /* PFFieldOperationDecoder.m in Sources */, + FBF3606D5AA052B28AAF18AFA1F6F5E1 /* PFFile.m in Sources */, + 525611A9C3408922BB8EB81692E6D161 /* PFFileController.m in Sources */, + 064CF6A1C6BD102075020713D14FB109 /* PFFileDataStream.m in Sources */, + D079F0D0F75347213786652AF578F521 /* PFFileManager.m in Sources */, + F0FBC0D30A36AD2329B48A43A17C4F73 /* PFFileStagingController.m in Sources */, + B2471816ECEF65C1A92D0AC65357602B /* PFFileState.m in Sources */, + 79E30128DA0EB3E973E7089926A04270 /* PFGeoPoint.m in Sources */, + 0C90ECF0F1EE859A59AFA69F87780746 /* PFHash.m in Sources */, + 74942D131A05E345D9BC3D47F8487C58 /* PFHTTPURLRequestConstructor.m in Sources */, + 7715B49F4FD719BFF228560746AC6F96 /* PFInstallation.m in Sources */, + BC5EB4978A6158F54C41E94D40FB3A40 /* PFInstallationConstants.m in Sources */, + D89C08E3CB7C04D6DCC8D18E7149069E /* PFInstallationController.m in Sources */, + ED29E4C820CC9842AAD8DC8AD8DE1B7C /* PFInstallationIdentifierStore.m in Sources */, + 9BC741341F7A3E9797DA6EB1C47662E1 /* PFInternalUtils.m in Sources */, + 09AD6095076F77A17AF15C8FA5DADC7A /* PFJSONSerialization.m in Sources */, + FD18EFB419117DE421FCB38ACF9151AF /* PFKeychainStore.m in Sources */, + B5A306F6D83114B15C2C3A82F443F112 /* PFKeyValueCache.m in Sources */, + 69F700981DD5FE492C5E69C0AAD478C3 /* PFLocationManager.m in Sources */, + 78CCEA1A83DC9E7EFD3198F14D7AB289 /* PFLogger.m in Sources */, + 75DFF5A155538F100BE6FD0AEF6B2EEF /* PFMulticastDelegate.m in Sources */, + C22ECBA602D338BD6C554258C6C80DAB /* PFMultiProcessFileLock.m in Sources */, + DF5C7E7715762DEE188F738217816938 /* PFMultiProcessFileLockController.m in Sources */, + 466DA06DD6F7E087A1C72AA91896B56C /* PFMutableACLState.m in Sources */, + 278C6EAEEE0A5BF8D626590F9CE97ACD /* PFMutableFileState.m in Sources */, + 535123250BC23D2854597629C68EF4F1 /* PFMutableObjectState.m in Sources */, + 962F75F303F57D0673BD35FE3835415A /* PFMutablePushState.m in Sources */, + A386DD98979FC8C7E89C0C04EAA0FCF7 /* PFMutableQueryState.m in Sources */, + 9A93633A0CB818C83EC1FC7B7662BB75 /* PFMutableRelationState.m in Sources */, + 9310D82E97611942915A3940EC448CB4 /* PFMutableUserState.m in Sources */, + 30363108F907B435D4933CECA8A71F1C /* PFNetworkActivityIndicatorManager.m in Sources */, + 9F17CC9DD4071EB42DA080EF5B2905EC /* PFObject.m in Sources */, + F66FB96E58063242636624CC93CB1481 /* PFObjectBatchController.m in Sources */, + FEACB369279A460ECFC54C005A741AE0 /* PFObjectConstants.m in Sources */, + C590E355367085B3F71811AD1D8AE9BC /* PFObjectController.m in Sources */, + 16CFA704931431EC2146912A493064F2 /* PFObjectEstimatedData.m in Sources */, + 3365FAB014526B23559C5872E3437594 /* PFObjectFileCoder.m in Sources */, + AD1CB3E55033674B9517582A59A1E2AC /* PFObjectFileCodingLogic.m in Sources */, + A7FDEA1C1A76CA8E5DF230F4BA31677D /* PFObjectFilePersistenceController.m in Sources */, + C9780FA67E5B8C292063A552C855FB90 /* PFObjectLocalIdStore.m in Sources */, + FFDEA159E9BE6B9B53FB5726020990FE /* PFObjectState.m in Sources */, + 6DDD9E6F6119619D1120F3D382CA208A /* PFObjectSubclassInfo.m in Sources */, + D08EE9C2CF0357A7FD1D76F9B93776C4 /* PFObjectSubclassingController.m in Sources */, + CE68EA7C522F468D775F060CAF3E705D /* PFObjectUtilities.m in Sources */, + 3DBB6503CA0A6A4010CBF5811D2EF6A0 /* PFOfflineObjectController.m in Sources */, + 15821E308FD874609FFFE7B07AA7BEE9 /* PFOfflineQueryController.m in Sources */, + 6A8962718D8E9D7C66B2D3013F40D5C0 /* PFOfflineQueryLogic.m in Sources */, + E94EE26A559D916232409D3B78C1330C /* PFOfflineStore.m in Sources */, + 76F0ADD573F39F6C2E6AA583EE3E28AD /* PFOperationSet.m in Sources */, + 5BE7BF61E2C24AFF20EE09847B3462AA /* PFPaymentTransactionObserver.m in Sources */, + E8E206B9EEE20D20F0D9BEFE46B653D1 /* PFPin.m in Sources */, + F8CAF02F1E612CEFB2AB6C3B731ADA87 /* PFPinningEventuallyQueue.m in Sources */, + 7B1AC5CBBF99FE9A4DF4918085F741E7 /* PFPinningObjectStore.m in Sources */, + 70AF59761E0C2A4A726B6E59FEE3CC24 /* PFProduct.m in Sources */, + B7189A5111E54D1C0475383753974988 /* PFProductsRequestHandler.m in Sources */, + 59E5D1E2428A166DDC257FAF4FB9F9C3 /* PFPropertyInfo.m in Sources */, + A53F8B0DE57890778BFB311DF00E862B /* PFPropertyInfo_Runtime.m in Sources */, + BDF6A32A836F3709640D087117D096FE /* PFPurchase.m in Sources */, + 940E81601DA01C64F91AF1BAFE5D84AC /* PFPurchaseController.m in Sources */, + 9E95E582F430EE008AD319FBD4D2F352 /* PFPush.m in Sources */, + AF9A03B5B4E1AFB497391551CFB9EBA4 /* PFPushChannelsController.m in Sources */, + 50696775E4E363709DA7C32DDE26C749 /* PFPushController.m in Sources */, + 9CB57B8503F184A68E407640D207ADAC /* PFPushManager.m in Sources */, + 523D7711F694B582C1B3E89E912DF6B3 /* PFPushState.m in Sources */, + D880721F15CF00B4947F68BBDAE3BC19 /* PFPushUtilities.m in Sources */, + 91752E5ED76E71C38BC521664A4FD5B6 /* PFQuery.m in Sources */, + DEF9DDF8C9F9606CCDB79286AE41A95F /* PFQueryController.m in Sources */, + 831065AD23377EF92A22E15118931DED /* PFQueryState.m in Sources */, + FED8724CB7E797F857A8B6954F9672F7 /* PFQueryUtilities.m in Sources */, + B0B5582F003288C5C96AFA142471D43D /* PFReachability.m in Sources */, + 96AF27C042B48DFA54ACF2FAADFA773D /* PFRelation.m in Sources */, + A0D8132A74C3DD45A066B66B96872A8D /* PFRelationState.m in Sources */, + 1D4F83C8E6A5CCD96E035DF6E03A7C58 /* PFRESTAnalyticsCommand.m in Sources */, + 2644C9F43A44BDE784C59C428084FC25 /* PFRESTCloudCommand.m in Sources */, + F31306E41FB51E5765D496D169EA1C87 /* PFRESTCommand.m in Sources */, + 4777B57796CCF2501C8E4035ABC45459 /* PFRESTConfigCommand.m in Sources */, + 0354AEA3E753D30AE8E6B94A701A1A90 /* PFRESTFileCommand.m in Sources */, + A0345C0C15762A801A8E2CAD19B637F3 /* PFRESTObjectBatchCommand.m in Sources */, + C2678B91068F7931D5742BEB0AE154FF /* PFRESTObjectCommand.m in Sources */, + 0FA4BDB376E469CB553E01E199BBB63A /* PFRESTPushCommand.m in Sources */, + A271CE741A0CB0405BBE24DEC09F7ADB /* PFRESTQueryCommand.m in Sources */, + F83A166A204E7F70BAABFD2E4CA21FC7 /* PFRESTSessionCommand.m in Sources */, + 04BE8237D681A07B607B091DCB0FCE6A /* PFRESTUserCommand.m in Sources */, + BC69C3F29FE101D4247B541115AB8848 /* PFRole.m in Sources */, + 5A25D889204C1D0838E27A486CEE76AA /* PFSession.m in Sources */, + 16ADBCAD54B5CF1F3995F1AF0154F67B /* PFSessionController.m in Sources */, + F7A4DCF50AE508452A448EA22797EEBB /* PFSessionUtilities.m in Sources */, + DAAD175EBECAE7AF5296008E30760A93 /* PFSQLiteDatabase.m in Sources */, + 848290264E2010E537F5B77148DD4D32 /* PFSQLiteDatabaseController.m in Sources */, + 2DE51A8444F0CEE2BEA32BBE1D5A2C54 /* PFSQLiteDatabaseResult.m in Sources */, + 625FF9AE4686AEA4FDCDA12811832704 /* PFSQLiteStatement.m in Sources */, + E31DB9FC1B6D203D4C442A4E001AA9F8 /* PFTaskQueue.m in Sources */, + F257CA05C061D91DBF8FF42DF83ACB48 /* PFThreadsafety.m in Sources */, + 97DAA182EA0457ECE6DF454FDFB50E71 /* PFURLConstructor.m in Sources */, + 1B3EB346D29198E022DC233258C133B7 /* PFURLSession.m in Sources */, + FF4D68C2DEC5B1C462849F1F5EC83C76 /* PFURLSessionCommandRunner.m in Sources */, + 448ED42670A895C7549BEB4765047AB3 /* PFURLSessionDataTaskDelegate.m in Sources */, + D1816449E827B54FC644A5285C5E79E7 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */, + 457A1B73EB100DB2139DCBA29A6DB28A /* PFURLSessionJSONDataTaskDelegate.m in Sources */, + 3A83FC797677226A54553528FDC17526 /* PFURLSessionUploadTaskDelegate.m in Sources */, + A2245AAA5B2933D9DF90599CF9F14F1E /* PFUser.m in Sources */, + 73530A369BC0C71417737C7732EE4BE5 /* PFUserAuthenticationController.m in Sources */, + 53CB0FAB7D337B035394604A48E7A357 /* PFUserConstants.m in Sources */, + 16B523016828FB603F9E4D9DB07CD7AF /* PFUserController.m in Sources */, + 1EA53431B0411D64E969C75020D2253D /* PFUserFileCodingLogic.m in Sources */, + 192494CAD9AAE36D9D54BE9950D74FA4 /* PFUserState.m in Sources */, + 9566EE1DC82CDB9049D8D21CB842C386 /* PFWeakValue.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 330E74BF939412164181ED3E38E1F4C3 /* Sources */ = { + 1E87252F689F2AC232EF6B3E48BFF1C2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7B7C3638B6E988319B3FA952C346CBFA /* NSData+ImageContentType.m in Sources */, - 6DA2ECE77CC2784A64A26E90F014A43E /* SDImageCache.m in Sources */, - E7FD11B05D61D259B28A00D734C8ADCE /* SDWebImage-dummy.m in Sources */, - 37A5FFB9EF68EA6EE760C165B863D5CC /* SDWebImageCompat.m in Sources */, - 5E29911F3B449B3B34A5F5FE17091D65 /* SDWebImageDecoder.m in Sources */, - 53171C2389BC7B3907FD218BB525BE7B /* SDWebImageDownloader.m in Sources */, - 51E4CEC68B0F3280E78E936DE2C802A8 /* SDWebImageDownloaderOperation.m in Sources */, - 27E3D7D2DADC9260E839D0BCE7970AA7 /* SDWebImageManager.m in Sources */, - 615C7E0E8B8ADA53684AF3C18E20C103 /* SDWebImagePrefetcher.m in Sources */, - 5F48BA1FC07FF9E9FB70FD20539B73D6 /* UIButton+WebCache.m in Sources */, - 1C4130F636D2C8035EA27ABDC8BF6BF0 /* UIImage+GIF.m in Sources */, - B58C6D6F3BF6C13592066A9577BFE7A4 /* UIImage+MultiFormat.m in Sources */, - 2AB0ABAC419E9261CEF57B3AEF01892A /* UIImageView+HighlightedWebCache.m in Sources */, - A62F0B680C4DA4ECA92F35A3A31A79EE /* UIImageView+WebCache.m in Sources */, - D6551C65069FFCC73F7FEF21371EE1D7 /* UIView+WebCacheOperation.m in Sources */, + F33EECCDE7368710D4AB061B4D4EF441 /* Base64.m in Sources */, + B8184053368C7A9E1DC9520118C1E928 /* UNIBaseRequest.m in Sources */, + F4259C77CC1398618A0AB193BD065D6D /* UNIBodyRequest.m in Sources */, + 354857C6F33F12FCA2CFDB52898A2255 /* UNIHTTPBinaryResponse.m in Sources */, + AE6DA539CD6C6FFEFEB1CA40BF9998CE /* UNIHTTPClientHelper.m in Sources */, + 49DF183B1AF52E821ED5A77B97CF6DCB /* UNIHTTPJsonResponse.m in Sources */, + DC7BA7D1F02949DCEE942B23DFEEC45E /* UNIHTTPRequest.m in Sources */, + 8F43E873C338BF50D7914531236AAEDB /* UNIHTTPRequestWithBody.m in Sources */, + 1FC72C12CFE43E264EA429E7DB7C7787 /* UNIHTTPResponse.m in Sources */, + 5E13FE4DEC63873FCFEE5E3F62CF76B3 /* UNIHTTPStringResponse.m in Sources */, + 81CD1C3D3AEE6561FC8B25231388EDBA /* UNIJsonNode.m in Sources */, + E32B12CDAA8A832881EA08013F74B10A /* UNIRest.m in Sources */, + E94EB5FE3AAD983E3DEC7DC48A2A91A7 /* Unirest-dummy.m in Sources */, + B471B47E09E3665845AC1C686A63D6B0 /* UNISimpleRequest.m in Sources */, + BE7B9DCC1918965D09FCB459C6908AFF /* UNIUrlConnection.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 345D942EED6C8A0820100F4442C5AA7F /* Sources */ = { + 1E97850B772151D7BBBEBFF2E00258F4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 894DC3B2B49C7389A533622E67F8F22D /* BFCancellationToken.m in Sources */, - 45F3667CBF936682FCC7CA8BC4CC3D5A /* BFCancellationTokenRegistration.m in Sources */, - 0CE5E24F250E53E29F25C2E572347E37 /* BFCancellationTokenSource.m in Sources */, - 0D38863C2F0C8C62FA41D4EBF0CCCDCE /* BFExecutor.m in Sources */, - 55E51673B1F545892D10FEAF5E212CB0 /* BFTask.m in Sources */, - 98DEDCCCFC26916C1C0B17FD5685DD78 /* BFTaskCompletionSource.m in Sources */, - D9E185864F41628CE6012D1BD953B3BB /* Bolts-dummy.m in Sources */, - B8F552D52402155DEA1C3ABAADA5AB1C /* Bolts.m in Sources */, + 73468106D270D5373F13A88722F0F42B /* FlatUIKit-dummy.m in Sources */, + B535D14A88056AFF1A1B7CB70B9664B2 /* FUIAlertView.m in Sources */, + B69EFF69C1045685D6C9529BB5D56453 /* FUIButton.m in Sources */, + 8E3CAFDA290A60D8B3A289E6DAD97C53 /* FUICellBackgroundView.m in Sources */, + 3BC2F4893F897433C613EEEE5EE935A2 /* FUIPopoverBackgroundView.m in Sources */, + 04DBFADECB060B72536903FAD0684BBE /* FUISegmentedControl.m in Sources */, + F35BD45463573B117E40D3CAEEF20AC4 /* FUISwitch.m in Sources */, + 8FAC5B4DDD700682A6B3A9167F863290 /* FUITextField.m in Sources */, + F668EAE6CBB9ADC856DF7885478C3693 /* NSString+Icons.m in Sources */, + AD07E8D874E4871FF64FA7BDF298C678 /* UIBarButtonItem+FlatUI.m in Sources */, + F6CD1E97BE26915E38C4670CEB95CFAE /* UIColor+FlatUI.m in Sources */, + 58A62415FFD7B1782701548E67E4E8D0 /* UIFont+FlatUI.m in Sources */, + 63972B7F495EB80B6B9A732BCFFC62D0 /* UIImage+FlatUI.m in Sources */, + 4017F157B6276B31A37E281C033F7D41 /* UINavigationBar+FlatUI.m in Sources */, + 1EBA3D2F590571ADD7C4824FD35C6CD2 /* UIPopoverController+FlatUI.m in Sources */, + 5E1DA51B25F43C73FAEC3F35A34CF6D7 /* UIProgressView+FlatUI.m in Sources */, + 2D88653DF74717862CA3930405E6B1A6 /* UISlider+FlatUI.m in Sources */, + F5BA0DBEDD8F1AE74F6BF8E3AF1034EC /* UIStepper+FlatUI.m in Sources */, + 1B7B817BF37A32BD3EC434F3C36C4764 /* UITabBar+FlatUI.m in Sources */, + 80E0DE86061F5656E6CE5D4D06A38853 /* UITableViewCell+FlatUI.m in Sources */, + BD2D9BCFDCA527EA0CEBA86E82943CE0 /* UIToolbar+FlatUI.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 46C9A469E746CD4C928A7ABF0F60A76C /* Sources */ = { + 2F695D4796FBFFD8A259731172B38526 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E4CE54E7E5E7761C3F218A02EEF93937 /* IQBarButtonItem.m in Sources */, - C48FF36B83FBF7976BE709EA55A98796 /* IQKeyboardManager-dummy.m in Sources */, - E72D4099ECAD2C2EF446D7A15ABF1AB5 /* IQKeyboardManager.m in Sources */, - 0A82F2A0A315DE01EAE41F64995E6267 /* IQKeyboardReturnKeyHandler.m in Sources */, - E74AB182BF3A6C46BBD707E21BAD477E /* IQNSArray+Sort.m in Sources */, - 5B53AC29851339D724FE275129B15F51 /* IQSegmentedNextPrevious.m in Sources */, - D18F22A3F173743A23B0DA16E60903F4 /* IQTextView.m in Sources */, - 054CCF861A1760AFA43690CDA493DCE7 /* IQTitleBarButtonItem.m in Sources */, - 9BEAABBA382F9FF8BEDA67D82DC1ED2C /* IQToolbar.m in Sources */, - 94673C48A7772B6FB619DE778C9E3089 /* IQUITextFieldView+Additions.m in Sources */, - E4DCD5BB38F50C4450D50973C5D4D1DA /* IQUIView+Hierarchy.m in Sources */, - 48CAF2410DF2D6C38CC34301D7FAF80B /* IQUIView+IQKeyboardToolbar.m in Sources */, - CDF14B17CBC7DA990B1865D06741F776 /* IQUIViewController+Additions.m in Sources */, - D5501A84B14B55285EA233E188E29D37 /* IQUIWindow+Hierarchy.m in Sources */, + 492386F98E4215A5AD79F9CC7670AED3 /* ParseUI-dummy.m in Sources */, + 7F1A3ACA61A193AE5AC994B81D58AA12 /* PFActionButton.m in Sources */, + 98F1DA4E3B5EF713459CCDB878C388A4 /* PFActivityIndicatorCollectionReusableView.m in Sources */, + 70E7F7CC26DD49AF7C5F885CBFED80EE /* PFActivityIndicatorTableViewCell.m in Sources */, + 6B4EAD36189A20ACB81F4AF6B62EDC93 /* PFCollectionViewCell.m in Sources */, + 8BE7480FA5E61B80FCDAF98F65677B11 /* PFColor.m in Sources */, + CFC88C3F705FA4DCFC03D3A2B773C54B /* PFDismissButton.m in Sources */, + 96D0CF407A2B521A9A520132685C2A53 /* PFImage.m in Sources */, + 6A204352C2657039376D9B800EEA73DC /* PFImageCache.m in Sources */, + 9FB642D753999CE0D817238756960E9A /* PFImageView.m in Sources */, + 6449D6FF9A736A7B47059C6C6207F2E1 /* PFLoadingView.m in Sources */, + DC7016A3F483CE9795D9BC1B478A6FB2 /* PFLogInView.m in Sources */, + 1A871FF7D4F4A5A7CA464BE20B506535 /* PFLogInViewController.m in Sources */, + 8C2E6C32E366F961F86C99CE651AF056 /* PFPrimaryButton.m in Sources */, + 7D626270AE9630C1EC494E72B53795C5 /* PFProductTableViewController.m in Sources */, + 015904FC34AD7AC33B5C17A8B4DC2E5E /* PFPurchaseTableViewCell.m in Sources */, + 056D70251AC8E24C6BF38B23DD1714E8 /* PFQueryCollectionViewController.m in Sources */, + 20868FC093029679C5D39FF2B3620B1D /* PFQueryTableViewController.m in Sources */, + B060B84D7C08761A91B38892D95643E6 /* PFRect.m in Sources */, + 6607A316934DC065E94AA70556947F1E /* PFResources.m in Sources */, + 7C2D840346C748D52A6E325D25703569 /* PFSignUpView.m in Sources */, + D0CF387D344B15D8630064997043503C /* PFSignUpViewController.m in Sources */, + 2572640CFC23B4C317C822B8F7052777 /* PFTableViewCell.m in Sources */, + CE27939928BB4A1DB0706AC1C8A61541 /* PFTextButton.m in Sources */, + FB0309CEBF4E3B4B5E2857A88AD60698 /* PFTextField.m in Sources */, + 99819454185035CCC28034E61522B9C9 /* PFUIAlertView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 53435A3242C754EFDBEE1396995EDBC0 /* Sources */ = { + 8F8CD7DFEE02805BBEAA0910B4914994 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 834DB7506CF876239CFB19FE84EA3311 /* Chameleon_.m in Sources */, - A0DB84D629D67D67F58170F664DCE670 /* ChameleonConstants.m in Sources */, - 926F1EE7FBF6754B79D96D2A15EEB906 /* ChameleonFramework-dummy.m in Sources */, - E0063948C636F6269566C641EABDFE4E /* NSArray+Chameleon.m in Sources */, - 4920C0B4C91124C5CF9E105EE2D61F0D /* UIButton+Chameleon.m in Sources */, - A4DF94441F347ABF847CCCF27504E329 /* UIColor+Chameleon.m in Sources */, - 06BC5CD9B86633BB7DF4C7CF7707C4F2 /* UIColor+ChameleonPrivate.m in Sources */, - 075A87D234F2C77C04D2D66E29EF055A /* UIImage+ChameleonPrivate.m in Sources */, - A354F1562F901C110DABC0A353DC4176 /* UILabel+Chameleon.m in Sources */, - 3BD2E7A18782C72F168E30E45A368B73 /* UINavigationController+Chameleon.m in Sources */, - 78861AAFBF083EDFE5EEAE5224092B32 /* UIView+ChameleonPrivate.m in Sources */, - 54721C3C85DE8FC60FD62F346A8BC198 /* UIViewController+Chameleon.m in Sources */, + 08F77CB26BD05FE1B343D55D81CBEAD3 /* IQBarButtonItem.m in Sources */, + C45E267982D6D19F30F6E9E63F3DE81E /* IQKeyboardManager.m in Sources */, + 29BBF790B6F414BA173B1B782F99AB27 /* IQKeyboardManager-dummy.m in Sources */, + 7FC33645ED6F5B7A52A793A1F647EB67 /* IQKeyboardReturnKeyHandler.m in Sources */, + 0D86170F1985007D9E2EB7D2CAFE1BCE /* IQNSArray+Sort.m in Sources */, + 6740D1151D0F74B100B549BA5D8068DB /* IQSegmentedNextPrevious.m in Sources */, + 3491354D5E3DF8A5EFB4DB1ACBAB9B29 /* IQTextView.m in Sources */, + B5A96ABEBC622D7ADE04769DE77CA8FC /* IQTitleBarButtonItem.m in Sources */, + A57280D5D9EF86E700F1B12266FABBC7 /* IQToolbar.m in Sources */, + EE3C0F724C90FE75756273DAD768D769 /* IQUITextFieldView+Additions.m in Sources */, + E93714A40956181311573F34E143DB3C /* IQUIView+Hierarchy.m in Sources */, + 16765937127A9DE7C2E2BB1C5F588B65 /* IQUIView+IQKeyboardToolbar.m in Sources */, + FC6F96892F863F4088B93B5BC78CF60E /* IQUIViewController+Additions.m in Sources */, + 4896AA0698E4DAD2C367D7660C9257A6 /* IQUIWindow+Hierarchy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 660F2C54023ACC3ED0EFB35FFD73B803 /* Sources */ = { + A0C03453344651888EB8D38AB148EE1B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7123412A3B504586417AEC7FDCFA9A0A /* Pods-dummy.m in Sources */, + E67A6D29E52E288E8B60D39C878CF960 /* Chameleon_.m in Sources */, + D03E2E09CD4A257BF7CF59BC14F39774 /* ChameleonConstants.m in Sources */, + 525727E37B9DFED1CD3A18CFF752383C /* ChameleonFramework-dummy.m in Sources */, + 390E4C4935A539E3C35633049F4C4C0D /* NSArray+Chameleon.m in Sources */, + 0871B276C9E86024967A75834BF8BA6A /* UIButton+Chameleon.m in Sources */, + F05460F7ED57F04C670F8CF2A121BFD7 /* UIColor+Chameleon.m in Sources */, + 1443D972565FC29DF40A16022899A59D /* UIColor+ChameleonPrivate.m in Sources */, + 5630A2F69424A9E46E93DE4E4407AE1C /* UIImage+ChameleonPrivate.m in Sources */, + FB47B2B3700081A29B32CAB0B8361303 /* UILabel+Chameleon.m in Sources */, + FDCA64A498A1F1C61C0DE0342920FDB6 /* UINavigationController+Chameleon.m in Sources */, + 79D915DCC0E57B431C2DB968A7BB6674 /* UIView+ChameleonPrivate.m in Sources */, + 4CAADF796B7A0A57121A9E3C287127C5 /* UIViewController+Chameleon.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7AF601FD3EC7FA8E282708517FDBCE90 /* Sources */ = { + AA62F81298E1C83BC728A8E7CF9813D0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4BDFF6BEA49BDB9DBB4E06E17868248D /* FlatUIKit-dummy.m in Sources */, - 112A4FB2ECD2A55F39EDA4928D2ACA9D /* FUIAlertView.m in Sources */, - 56C20D36C1BE8A7DAE8498DA7D73F8F7 /* FUIButton.m in Sources */, - 2FD368C3F18F5F6AFAE5D2C1166D28F3 /* FUICellBackgroundView.m in Sources */, - EF479ABEEE6F16D8B37197AA22C70A02 /* FUIPopoverBackgroundView.m in Sources */, - B5CE0157F1F9EB6AF6F004D818F58A3A /* FUISegmentedControl.m in Sources */, - 6385A4FCE4594DB3C4C0AE3630B86375 /* FUISwitch.m in Sources */, - 20210326E14FAA2C05DEC09A2C822462 /* FUITextField.m in Sources */, - 7AE363356D9DAF059498E982C5BD0AD9 /* NSString+Icons.m in Sources */, - 5AF0906E3CC401EF05B9E306B3EFD499 /* UIBarButtonItem+FlatUI.m in Sources */, - A1818D9416A84341F98AFC7AF54565DC /* UIColor+FlatUI.m in Sources */, - 65C63243CF9B34F40546B4773EB0F188 /* UIFont+FlatUI.m in Sources */, - 5F2F9A38D20F0DA3A1216644C2FCE99F /* UIImage+FlatUI.m in Sources */, - 67B70A96D6BBBB9C9DC6D7BC1BE729D6 /* UINavigationBar+FlatUI.m in Sources */, - A3856F999C2EBB1F3A28359DD1F9C49A /* UIPopoverController+FlatUI.m in Sources */, - ACE1EEC5A30626AE9ECC8B8D13D1BBC6 /* UIProgressView+FlatUI.m in Sources */, - 1F01150CCF0FBD91A951A60C457623EC /* UISlider+FlatUI.m in Sources */, - 97C1D50670F0A109D5533CD3B1A3F6BF /* UIStepper+FlatUI.m in Sources */, - 5F072C98A3888CDCE924B1E0AE6CE025 /* UITabBar+FlatUI.m in Sources */, - BCB526791EA218830B02817A425FC7B0 /* UITableViewCell+FlatUI.m in Sources */, - 2EF4E8B5DA06CF8CF7E4C7437C04390A /* UIToolbar+FlatUI.m in Sources */, + 056DDAB5F33D617C977BAE5F25ECD98C /* AFHTTPRequestOperation.m in Sources */, + DEEA2648058B3E6F40892B4E254501F9 /* AFHTTPRequestOperationManager.m in Sources */, + B97B1932591A9DC33101F6DC39CACFA0 /* AFHTTPSessionManager.m in Sources */, + 1F74418A1A844AD6F2D0BE55DB5A565B /* AFNetworkActivityIndicatorManager.m in Sources */, + 57595893801E77A08FC28462EA856C40 /* AFNetworking-dummy.m in Sources */, + 97328A6D629EDD7889FB3194C26619E4 /* AFNetworkReachabilityManager.m in Sources */, + 499795646572C0F4982F952399B79430 /* AFSecurityPolicy.m in Sources */, + 6195644CA3E3419A95951B95B12769B1 /* AFURLConnectionOperation.m in Sources */, + E11377D77F494E8D27302892123A6C88 /* AFURLRequestSerialization.m in Sources */, + 1A18FCCEB1D3BF943E9E049EC19EA46D /* AFURLResponseSerialization.m in Sources */, + 4E149934317AEC01048B753730F6EA9F /* AFURLSessionManager.m in Sources */, + 0FF92B7CA2702E3FB545DBC76EB8F7DD /* UIActivityIndicatorView+AFNetworking.m in Sources */, + CF20CC7E23BD16017EB85C1F6D100F8A /* UIAlertView+AFNetworking.m in Sources */, + 43F3A74CC45BE08D52C8BCDC56F58617 /* UIButton+AFNetworking.m in Sources */, + 7F514C48A1433CC4E7666EED8526EB82 /* UIImageView+AFNetworking.m in Sources */, + B67A0B1855A78C232CA8CA4193480797 /* UIProgressView+AFNetworking.m in Sources */, + 37A3F447E3723760E69C1AC533341CF4 /* UIRefreshControl+AFNetworking.m in Sources */, + 53EC95B96212B86A7482BE9466EB41BF /* UIWebView+AFNetworking.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - D368A0D8E440ED2393A424F47A6C5549 /* Sources */ = { + B2727A62DF15F2486A82F69C0FF76993 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DF4112FFA156222BF7053EF22A8827B9 /* AFHTTPRequestOperation.m in Sources */, - C7B655603FB1089A5E2D28FCE12DF12F /* AFHTTPRequestOperationManager.m in Sources */, - D86913E8F8A1CA01D792A1DFD3AE671C /* AFHTTPSessionManager.m in Sources */, - 1EA06503C7AF1CA5E13950E3E7D7830E /* AFNetworkActivityIndicatorManager.m in Sources */, - C51B96A7E543F72CD7925968E35DC041 /* AFNetworking-dummy.m in Sources */, - C087B9B3A493BC8232CBA4DB1CB47A67 /* AFNetworkReachabilityManager.m in Sources */, - 4E32C6B26518F18DC4AB3E225B86EE88 /* AFSecurityPolicy.m in Sources */, - C6CDABE1AEBB5DC4A35A6B221BB98D13 /* AFURLConnectionOperation.m in Sources */, - 1389748BE24F9D2223187CB20D9A020C /* AFURLRequestSerialization.m in Sources */, - DB840EF5FD9645993A399CDE849E784C /* AFURLResponseSerialization.m in Sources */, - 945C9834347A969CDD4FB9A5AB9FF0E0 /* AFURLSessionManager.m in Sources */, - 4E94B8F460BF431A50D94814F7C8AF61 /* UIActivityIndicatorView+AFNetworking.m in Sources */, - E7FA21C38D6A1CB113BE2DA22E73B845 /* UIAlertView+AFNetworking.m in Sources */, - BB82DC2891A35AC22DD6D5CE4CAE4364 /* UIButton+AFNetworking.m in Sources */, - 081A50535FCDF50D0118223459790167 /* UIImageView+AFNetworking.m in Sources */, - CF051D17275C20E0FBF5736E3C8A0573 /* UIProgressView+AFNetworking.m in Sources */, - 1A15E1DAB1BF63371AE5ADFAED9169E5 /* UIRefreshControl+AFNetworking.m in Sources */, - 79D287D48B2A81896F365CA21F0B27D6 /* UIWebView+AFNetworking.m in Sources */, + E187E8D8CF825E41E24E4ECF043D165B /* Pods-FoodbLog-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - D8DF8655A2CD0FF22D41AD6691FBD8FD /* Sources */ = { + D4B1C8AD04AB4A8712EB1F4D16D87BC7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FFCB95154B6D3FFE635D0B029C9DCDCD /* ParseUI-dummy.m in Sources */, - 97188DAFC24B71E114F099B7D5B9D4B7 /* PFActionButton.m in Sources */, - 3B371953B0238DB248DE1BC578CC1763 /* PFActivityIndicatorCollectionReusableView.m in Sources */, - 31A5A0D5B06C83E2BC06706B5C71D701 /* PFActivityIndicatorTableViewCell.m in Sources */, - 443CA6F7BCEE6AD0A10CB1B7EAAB0F49 /* PFCollectionViewCell.m in Sources */, - 8A133A2111354CB3069F496C3E6EA4D7 /* PFColor.m in Sources */, - 18B8C836904EE4CFDDE436EF990D9AD9 /* PFDismissButton.m in Sources */, - 9533993DD6C1EEFAB0B8D8A10E9FC459 /* PFImage.m in Sources */, - CF4BBBB487F1B90564858FBA920DB06C /* PFImageCache.m in Sources */, - E018C8425DAE43110469B2BB53F55181 /* PFImageView.m in Sources */, - B1FA32E48268C4736E684891B7EDD16F /* PFLoadingView.m in Sources */, - 74F36D84B65EC8A5DFFACB41425FD8E8 /* PFLogInView.m in Sources */, - D869A997D224A53FD7AEE199188A47F3 /* PFLogInViewController.m in Sources */, - 650C1E4F37B6A46F29FBE1159B4FED23 /* PFPrimaryButton.m in Sources */, - 1E2C5495D45D2D139E10CE25437DB731 /* PFProductTableViewController.m in Sources */, - ECAC99B54CC6AC50099C82D5E69C7EC1 /* PFPurchaseTableViewCell.m in Sources */, - 075C96EC2BE69F7BFCB48378D69A7D3B /* PFQueryCollectionViewController.m in Sources */, - 472F9DBEF608A75DAFFFE2DA99EDC720 /* PFQueryTableViewController.m in Sources */, - 0F818565739B13360E63C07AF5B20931 /* PFRect.m in Sources */, - 36F6F33837CB843338FDE20F04EEA53B /* PFResources.m in Sources */, - 520223B8DB085DA0141770459F092D61 /* PFSignUpView.m in Sources */, - D60E0A78EB64C0A3AA2B8A1FE82C9C24 /* PFSignUpViewController.m in Sources */, - 5C92B2B9089ECEFB4F281922A5667DF1 /* PFTableViewCell.m in Sources */, - F04BFF3F29ADD7871EBA1AD5E2DD697D /* PFTextButton.m in Sources */, - 6FD778F16C4C4B1E0F0EF1D062793381 /* PFTextField.m in Sources */, - 6986AEC5F67808322A3448D59D93D907 /* PFUIAlertView.m in Sources */, + 09292E938D63ED03EE26FFF12249BDD0 /* BFCancellationToken.m in Sources */, + 03FDAA175EB6B999D72B4EB88E67B03E /* BFCancellationTokenRegistration.m in Sources */, + B6D5E48011E309C95B0D178AF8AA0494 /* BFCancellationTokenSource.m in Sources */, + 8D7B15921E081CC2B3191D35B5C4CEAF /* BFExecutor.m in Sources */, + 6CE0BDF4BC45D85351D65C54058ADCA8 /* BFTask.m in Sources */, + 8F8BD8F9E8C2408792AE189075B4B7BC /* BFTaskCompletionSource.m in Sources */, + 09FDD64FF016A46433ABC8E1A95CE5B6 /* Bolts.m in Sources */, + E9157D80838E300F27801069DA1BF917 /* Bolts-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - E6712D52444976796E437CC03D0E8A8D /* Sources */ = { + FC1085334AE2AA872DB58D336C4A4D10 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E6FE82B23F8EA7A2244E7009B5BE9B35 /* BFTask+Private.m in Sources */, - C496676BBA0A1803D2956D050648BC2B /* Parse-dummy.m in Sources */, - 5F87DC7216AAAC3E8C5F686FCD75504E /* Parse.m in Sources */, - 64942E20979F0BBFAB53A9587344574A /* ParseManager.m in Sources */, - 42E18C787CA22639EF8861529053CA25 /* ParseModule.m in Sources */, - 2BF0B0FCAF17D3F661A9DBDDE4C1A0CD /* PFACL.m in Sources */, - F48A0073A83F52B546CBD0F83AE4B5E9 /* PFACLState.m in Sources */, - 6AEED4415FDF6F732EA5FC7FE91DE387 /* PFAlertView.m in Sources */, - 90DDA06C040487F539952B9DEED0EE9C /* PFAnalytics.m in Sources */, - 9C4A72FAB5327D6CA6AC1FD538FFF765 /* PFAnalyticsController.m in Sources */, - 82FF48E83B021EA3C284BB01D5171684 /* PFAnalyticsUtilities.m in Sources */, - 6BCECB2C3FBF48D1939E2B0CB01369BB /* PFAnonymousAuthenticationProvider.m in Sources */, - C3B1893774804AEFBBE540A51F18F306 /* PFAnonymousUtils.m in Sources */, - BA7C5D5CBDC2B2A01DF616F5F9F44F53 /* PFApplication.m in Sources */, - CB6C2E1FC30E23D0FD4170C0E997965E /* PFAsyncTaskQueue.m in Sources */, - 1D6EB198244B1A45A8AC515FB55F8A31 /* PFBase64Encoder.m in Sources */, - DF9783A9F560D5610A0264999DC12176 /* PFBaseState.m in Sources */, - 99A9201DA721AF740C01B5EDFAABA362 /* PFCachedQueryController.m in Sources */, - C5ECC4860D1F76FDAAF747464E5115EC /* PFCategoryLoader.m in Sources */, - 9AFFDCBD2EFA5FCC852FC11B130F1D58 /* PFCloud.m in Sources */, - DD5A7AF485CECD375D8A31A0E565C0B7 /* PFCloudCodeController.m in Sources */, - 7EB69C6302B1F8B6EB8A6A2B1235BAA5 /* PFCommandCache.m in Sources */, - 1860DE8DF1B53B872C81AAC82D8664D2 /* PFCommandResult.m in Sources */, - 80B16D5378DE9FEC09BE4DD6B6736251 /* PFCommandRunning.m in Sources */, - 3E41EEEF24D5E3A8B51F6913EB56C1F9 /* PFCommandRunningConstants.m in Sources */, - 15BF1F1A314A6178051DD32340104201 /* PFCommandURLRequestConstructor.m in Sources */, - 33CABB84169CD5A9EA49749CE8D5AF69 /* PFConfig.m in Sources */, - B42ADCFDB245CA79715D0C2EA78DA719 /* PFConfigController.m in Sources */, - 88CD8AAA69B82F1F799BAD087C171F4C /* PFConstants.m in Sources */, - 510E3B949ED2FE3D73B41E8FEC958B0F /* PFCoreManager.m in Sources */, - 275BFA703F01104255FBA5C586059D95 /* PFCurrentConfigController.m in Sources */, - A02EAC529F09443BD7A356116F6501B8 /* PFCurrentInstallationController.m in Sources */, - 0C175305C5AA6D51FFCFFF1BC3884E23 /* PFCurrentUserController.m in Sources */, - BFA7FADD2B26A4ED79AA1C51DF3FC8F4 /* PFDateFormatter.m in Sources */, - 52378D0E3E8D15E556AD0D938C565904 /* PFDecoder.m in Sources */, - 57268F36D7FDFB0B9FF18B194021E66F /* PFDefaultACLController.m in Sources */, - F72B08E476AEE8FDA496E5AFF22E1211 /* PFDevice.m in Sources */, - E568A48D66409BA8A0D72948A76BA7C3 /* PFEncoder.m in Sources */, - D1DA2DC264C897235DE0BDEB8B1BC224 /* PFErrorUtilities.m in Sources */, - 79FD6CD16310D02D71E73BEFB2348E25 /* PFEventuallyPin.m in Sources */, - 0C346AA65B7AF010350F7F6D80CFECE8 /* PFEventuallyQueue.m in Sources */, - A95789DD338E2B4F4DE4A6F526C2D9AB /* PFFieldOperation.m in Sources */, - BEDE08E573291D509C6CED1FD1331AD9 /* PFFieldOperationDecoder.m in Sources */, - DA50FB2C52DE8E1B97B5DC7295C306EF /* PFFile.m in Sources */, - 4E126FAFFB6F5CE28E3E624C3EDC0F91 /* PFFileController.m in Sources */, - C7464F54166E991F02625B391966E116 /* PFFileDataStream.m in Sources */, - 3153F65AE472C546D0B82A0506EAE405 /* PFFileManager.m in Sources */, - B960B40A6AE7B82EA2CEAFA132701A38 /* PFFileStagingController.m in Sources */, - E824A7479B453062B8E1078E5FEB6593 /* PFFileState.m in Sources */, - BCE96BAF7792AC191408409C216392EC /* PFGeoPoint.m in Sources */, - 1506ABD5E6E321807F63BC4AB8D02476 /* PFHash.m in Sources */, - 246CDDDAF453166D28D1DED4D0EE307B /* PFHTTPURLRequestConstructor.m in Sources */, - C95564703E95A934CCC53561C84FA280 /* PFInstallation.m in Sources */, - 98D96015298020EBD1F8CEF29A018899 /* PFInstallationConstants.m in Sources */, - E6F69DD4C2753BA72C50A560093295AA /* PFInstallationController.m in Sources */, - 93593C8CEC4D5CD10176165A1FB590FE /* PFInstallationIdentifierStore.m in Sources */, - F2FBDA42A1914B2442436C5E46331DC2 /* PFInternalUtils.m in Sources */, - E69EBA135C06410746DE7C745328E4B1 /* PFJSONSerialization.m in Sources */, - C42D1B9307FE4CB40AC97EBCE5BF4D0C /* PFKeychainStore.m in Sources */, - D31DDC75C40F7802A5909C87FD92D689 /* PFKeyValueCache.m in Sources */, - 6F2B81E52BF94D21B7E5998594B45660 /* PFLocationManager.m in Sources */, - EC31DA0AD2D9DC6C3CC480E38B06EE48 /* PFLogger.m in Sources */, - 38CE9B95E08CBFE1FECE35CA70A80585 /* PFMulticastDelegate.m in Sources */, - B311DF0C9AF2973969DF5F3D5DB59893 /* PFMultiProcessFileLock.m in Sources */, - 6CE894F876E1564D6E0ED560102A78EF /* PFMultiProcessFileLockController.m in Sources */, - 245DFC6EA6488BC00D79FEBDD67120CC /* PFMutableACLState.m in Sources */, - B52BF523C19BC2BE9BEACDF246492BBF /* PFMutableFileState.m in Sources */, - C9160C9D7D4C5BA5A58C15D7BEC9FBC8 /* PFMutableObjectState.m in Sources */, - 8CEE29E1F162FF05BAD17F3E7A0E8CE8 /* PFMutablePushState.m in Sources */, - 4BE30B66812541495636DD163FF1883E /* PFMutableQueryState.m in Sources */, - A67A4AD2C47453ED4CB39D51C300BCA3 /* PFMutableRelationState.m in Sources */, - 1D144D582E410C4BF4A26DE2BA6D49AF /* PFMutableUserState.m in Sources */, - F3C5711AFBF65D0516DE2CC5B82327AA /* PFNetworkActivityIndicatorManager.m in Sources */, - 6F0672EDB0EF772409C5208AB63D2A64 /* PFObject.m in Sources */, - 719C7DFEF49882C658A4AB9BBF945214 /* PFObjectBatchController.m in Sources */, - 1B2D82F03E5A9115C9FA56EE380DC92F /* PFObjectConstants.m in Sources */, - 602A4FFEB249B2EAA9CB1577144E15F7 /* PFObjectController.m in Sources */, - F970CEBE2BFE2C75D77F1430EA1A8070 /* PFObjectEstimatedData.m in Sources */, - 5F2C44621812CC7FC58C42540E2B8DF9 /* PFObjectFileCoder.m in Sources */, - 777CA4DC7736301999870E265BC46206 /* PFObjectFileCodingLogic.m in Sources */, - D0BD3B6BA410A1F68CA467F83C8A1F66 /* PFObjectFilePersistenceController.m in Sources */, - 53DDC5A20AE0FC36B9EB9057E73E2334 /* PFObjectLocalIdStore.m in Sources */, - DF22181FA0AA2171CD5A90FD5A9CF463 /* PFObjectState.m in Sources */, - D7DD50AECF05688CC255BDF250F11D3F /* PFObjectSubclassInfo.m in Sources */, - 63AC6B54C96332522D2E1D3A2B5A9FCA /* PFObjectSubclassingController.m in Sources */, - 5A34E208AB8566495FE40B32FC0F6CDE /* PFObjectUtilities.m in Sources */, - 28232786D68CFA798B58F0CB7B3053F4 /* PFOfflineObjectController.m in Sources */, - B00994C1B019F9E34747157F32DAF3C5 /* PFOfflineQueryController.m in Sources */, - 40989E62DFC2D61D9AE058DDA08D2283 /* PFOfflineQueryLogic.m in Sources */, - B9B7F2451F157D9458ED688A59812404 /* PFOfflineStore.m in Sources */, - 02AAD5EB239375F6DCF31CC964589164 /* PFOperationSet.m in Sources */, - AF70918BA4A1F7B01BF4806ABF4EBCC5 /* PFPaymentTransactionObserver.m in Sources */, - B60C9D7DB05B984086E8CA1E1D7F87B2 /* PFPin.m in Sources */, - E175EDF8790813A2AC21686AFB4E5BA4 /* PFPinningEventuallyQueue.m in Sources */, - 9175F59D0D655B86986E1ECF24B7113F /* PFPinningObjectStore.m in Sources */, - E5995AC544AA3F6BEF60D0CED31BE825 /* PFProduct.m in Sources */, - F4C3BA9D56570D7677B5A3B8C06E6284 /* PFProductsRequestHandler.m in Sources */, - 041A2F2CF584FB5FEA239A92D31074D4 /* PFPropertyInfo.m in Sources */, - DE7E038BD46CB042C27E8B6AC613CE6B /* PFPropertyInfo_Runtime.m in Sources */, - 37C62F1CCE30D9F53B739FD6A1564EBE /* PFPurchase.m in Sources */, - DF747723F77FB06F718D406056389E95 /* PFPurchaseController.m in Sources */, - 275E9C8E81428BFFA25A8A6792ED7F15 /* PFPush.m in Sources */, - 91633EC8047DE0A4EB60BCDE94F5C9CB /* PFPushChannelsController.m in Sources */, - 6F211D52A51BB3B7132D3C533DCD38FA /* PFPushController.m in Sources */, - B9AD565BEFE8914A96E216DC39BF62D8 /* PFPushManager.m in Sources */, - B1D6EA77252B50043DFD235B103C032E /* PFPushState.m in Sources */, - 10C17C2B7C038CBE685BA997596FC6BD /* PFPushUtilities.m in Sources */, - 3CC1C5E8E24095195429DCEC031E5142 /* PFQuery.m in Sources */, - 5D94624CF0D13486F1116A90AC544355 /* PFQueryController.m in Sources */, - 0F69DED292C765610B9A2F38D01DD159 /* PFQueryState.m in Sources */, - 501928C7544ADD4A1C1D94EC4C80504D /* PFQueryUtilities.m in Sources */, - 35E2BE33BEBA6A706183B7236177FB67 /* PFReachability.m in Sources */, - 25146AB44EF9BA9137640A1ADF1A7251 /* PFRelation.m in Sources */, - 41B96055DADDE86477BA31048B29A279 /* PFRelationState.m in Sources */, - 67BB72A2583031B6F4C77075DBD1EAF9 /* PFRESTAnalyticsCommand.m in Sources */, - 57711B2EEAA9634082C80C5B5B2685F0 /* PFRESTCloudCommand.m in Sources */, - 8437F2118C0FDBB86032177892F5D133 /* PFRESTCommand.m in Sources */, - C1FE8FEB63E91B414194A3BE33D6E932 /* PFRESTConfigCommand.m in Sources */, - A8AF2E3383DACBAFC662073B21A3B773 /* PFRESTFileCommand.m in Sources */, - 6957DB4354F09F27956C7BD159A738B9 /* PFRESTObjectBatchCommand.m in Sources */, - B6B7EBF4D22CC0A218910F801E3E7893 /* PFRESTObjectCommand.m in Sources */, - F80AA3446181FBEC955728C0DEFFD0EF /* PFRESTPushCommand.m in Sources */, - A4D8D309B5FFB1FED10B0A9C00B0F512 /* PFRESTQueryCommand.m in Sources */, - 42DA9E8C04518B363512866ED3437C21 /* PFRESTSessionCommand.m in Sources */, - 9BD2657D9CC128E3FC8ADDA5C6E435F1 /* PFRESTUserCommand.m in Sources */, - 7D070B8F5BB7F1528204D9F2B7476300 /* PFRole.m in Sources */, - BC3A816654C98C980701953A602FEBE8 /* PFSession.m in Sources */, - BF09611D4DF15F03C1A17A151920771F /* PFSessionController.m in Sources */, - D84D44AAAD865013AA9455693FFCA05A /* PFSessionUtilities.m in Sources */, - 86D9414B63998C22E2FDAABE2CFC7AF6 /* PFSQLiteDatabase.m in Sources */, - 6822E7FBF25AA2E3447B742A8C012E17 /* PFSQLiteDatabaseController.m in Sources */, - 717FF800BFB8012F5E9BF2C5E5E6CEBD /* PFSQLiteDatabaseResult.m in Sources */, - 716C6053E4E72481420CEDBF7B4D97F0 /* PFSQLiteStatement.m in Sources */, - DD861EF2AAD1E9FBDBD58BDD993F8D32 /* PFTaskQueue.m in Sources */, - 978E0B62FABE7A8807CC10E029BAD3FA /* PFThreadsafety.m in Sources */, - 12CE322100BCF8F851455345B0BBE993 /* PFURLConstructor.m in Sources */, - AB432F93648CE14F642AC0D1B54B820B /* PFURLSession.m in Sources */, - 0DD61B3BBC161817A4B0D0F69953B817 /* PFURLSessionCommandRunner.m in Sources */, - 6963CDE7099BEF7479F5B30BC9CEE780 /* PFURLSessionDataTaskDelegate.m in Sources */, - 7D99F27B54676A48D67363BD873A7B8B /* PFURLSessionFileDownloadTaskDelegate.m in Sources */, - 16A2D80762322755D21CD8FEF9D4CE24 /* PFURLSessionJSONDataTaskDelegate.m in Sources */, - 44ECFCC0BC6C81844A0A7E9F0AAB84A4 /* PFURLSessionUploadTaskDelegate.m in Sources */, - 61F85E9DCA99CE232D1BC17CBBA75F17 /* PFUser.m in Sources */, - CBE6077CCD0144B5CBBA97B2BA1A589F /* PFUserAuthenticationController.m in Sources */, - E255BBC6E62B0077402B1019C428FC69 /* PFUserConstants.m in Sources */, - CCB526D3794E632CC0958E9648F8A105 /* PFUserController.m in Sources */, - 58FF88FEC2138455D35915B1A410FE97 /* PFUserFileCodingLogic.m in Sources */, - D163FD41FEC0BE74060FB498ED499801 /* PFUserState.m in Sources */, - 0EE089FF67095D05E638EFFE242ED8CD /* PFWeakValue.m in Sources */, + B3F2988C9D5F3C144651BF0A698F6394 /* NSData+ImageContentType.m in Sources */, + 79227FA8FC3B6B7EA7D79083B641E36C /* SDImageCache.m in Sources */, + 16C9563FC522AFCBB4B9593E72899D21 /* SDWebImage-dummy.m in Sources */, + 63C8A6145BA13CC1357BACF7619571A9 /* SDWebImageCompat.m in Sources */, + 46A85D0B3E105715569CB1BC5C7C88C8 /* SDWebImageDecoder.m in Sources */, + 5CCE8599A31182489B7556A9A94C0CE7 /* SDWebImageDownloader.m in Sources */, + 4D78D87B1BB66CD942A878041185C7C0 /* SDWebImageDownloaderOperation.m in Sources */, + 21486DFB5F9A1C12F5615840459CF0E1 /* SDWebImageManager.m in Sources */, + 6117F0C2CD693D1223FF88671015CE8B /* SDWebImagePrefetcher.m in Sources */, + 7B7E112AD433BAF56C889FF2C8D8828F /* UIButton+WebCache.m in Sources */, + C1A609EC0AACF147369E9433683D4C1D /* UIImage+GIF.m in Sources */, + CF023CFF89B2E017CC525D92766B31C5 /* UIImage+MultiFormat.m in Sources */, + DF3181F400F49532145EAF90931261AB /* UIImageView+HighlightedWebCache.m in Sources */, + 244941FCFAF0AF23318B474B95FDC752 /* UIImageView+WebCache.m in Sources */, + AA217B621ABD283FBA8020E902BB96AD /* UIView+WebCacheOperation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 0EA8D9CABBF5EEF3C48E8D0489E04EDC /* PBXTargetDependency */ = { + 11E1920315684F86EADC632C76C8587C /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Bolts; - target = 708E01B006A9F88B3C13711562282B5E /* Bolts */; - targetProxy = 440B4BA00F0AF4B40BF7A49BDC83248C /* PBXContainerItemProxy */; + target = 42465A188431886AB035275F049824D3 /* Bolts */; + targetProxy = 570B15215E9310693D397DC3282CE4B4 /* PBXContainerItemProxy */; }; - 36A61B79DE591B2594995FA9A0D2B2DB /* PBXTargetDependency */ = { + 24F464CC0E8B4E4F2EEFA03F92B39FAB /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Unirest; - target = 449BE13505657F8E1C2D26738417B4FD /* Unirest */; - targetProxy = CD0D91B187268B2D99C0502EB6E5D2D8 /* PBXContainerItemProxy */; + name = Bolts; + target = 42465A188431886AB035275F049824D3 /* Bolts */; + targetProxy = A896BC871784B8F9F89ED5DE758218C4 /* PBXContainerItemProxy */; }; - 740CF386944A55D4C1907F21B4025996 /* PBXTargetDependency */ = { + 31C75145ABB32D28C86E8463012A82F4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = ChameleonFramework; - target = 59A0C52286D680208602EBE33F4979AD /* ChameleonFramework */; - targetProxy = 1C29ED665F4B87D9675F955E977BFDBB /* PBXContainerItemProxy */; + target = 28BFDC89BA4363F4F3576DEC70EE10AE /* ChameleonFramework */; + targetProxy = C4176BB50DC5E33A6948CCDE5C9DB79C /* PBXContainerItemProxy */; }; - 7BE6CB7F9DAE6A0DAE1C980D075FEE27 /* PBXTargetDependency */ = { + 378D961612F78BB22DC1CB320CFEBE31 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = IQKeyboardManager; - target = 5855D213D188EE14086C1F827DE7B1FF /* IQKeyboardManager */; - targetProxy = 2B6F0EABE853CEC315E1515ED89B824B /* PBXContainerItemProxy */; + name = SDWebImage; + target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; + targetProxy = F85AB62DE4BDFE183DF7AC74A4381B9B /* PBXContainerItemProxy */; }; - 7DC500B48EF30D6F4A8D2EBE88FC0087 /* PBXTargetDependency */ = { + 545135E68A48EFAF18694F358ADC1EC2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Parse; - target = B8A759F57254B6094CF99273E5ECEE8B /* Parse */; - targetProxy = 59871585801A48734FC094EB7FAD6D0C /* PBXContainerItemProxy */; + name = FlatUIKit; + target = 923099EAAC66CBEDD533E3FE43830166 /* FlatUIKit */; + targetProxy = BB8AEE89F14DC93554130618C695B195 /* PBXContainerItemProxy */; }; - 7EA5AF59068D0D4355722B37D687458E /* PBXTargetDependency */ = { + 67D4132B453E02D129AD8AB0BC7C585F /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = ParseUI; - target = F710EAB41DD6932844C4A82A87A2628F /* ParseUI */; - targetProxy = 27306CB8A45B49B23CE38DF93A20A0DC /* PBXContainerItemProxy */; - }; - 833EC6DA6E1B715ABA24B77629634C71 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = AFNetworking; - target = 4878C70B21CA37D7CB8A476BF986741B /* AFNetworking */; - targetProxy = 7045E81907442F92CA4A8723F1685171 /* PBXContainerItemProxy */; + target = 96F971576D7B3914510B0B2FB38F43A2 /* ParseUI */; + targetProxy = 631FEB8D5D54757C74C640EC60514AD8 /* PBXContainerItemProxy */; }; - B3B29955684C67EF1AECC21B786E8840 /* PBXTargetDependency */ = { + 7D0610D3D336E130A02996F82893C374 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Bolts; - target = 708E01B006A9F88B3C13711562282B5E /* Bolts */; - targetProxy = 1652B26AA96AC191F5F67F69373B8539 /* PBXContainerItemProxy */; + name = Unirest; + target = DD9AC66E330E40497F19A867C63FBAAA /* Unirest */; + targetProxy = B7D7D2C4956FA3742D5187D428DDE8F8 /* PBXContainerItemProxy */; }; - BCA6916A563A2BFB0790F5F1176F06B8 /* PBXTargetDependency */ = { + 8F09761C4AE4FC754A7AA2DE94709F8F /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Parse; - target = B8A759F57254B6094CF99273E5ECEE8B /* Parse */; - targetProxy = E3472D24478FC589367ECA8C76AA8BC3 /* PBXContainerItemProxy */; + target = 7F3FE5658AEC4AF2B296EDA73A218182 /* Parse */; + targetProxy = 97F1B36C623FCCA4AA918D6FC51650CA /* PBXContainerItemProxy */; }; - BE2FADE693886D87AA14EF842401EB52 /* PBXTargetDependency */ = { + 9CE0CCA8DA2FE46BEB7DFE0A10B6CA0D /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Bolts; - target = 708E01B006A9F88B3C13711562282B5E /* Bolts */; - targetProxy = 39C688F1BB92818A0EF5F008838D6530 /* PBXContainerItemProxy */; + target = 42465A188431886AB035275F049824D3 /* Bolts */; + targetProxy = 023419A71D4C5BEBC9D817ADC6C3092B /* PBXContainerItemProxy */; }; - D419ED2018FF2177A32FFBEC4F9A534D /* PBXTargetDependency */ = { + ABBCC4D5C9A5FA0B6EF9D801BD7C4918 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SDWebImage; - target = AE2762B37E506C0F5F264DA433F088C3 /* SDWebImage */; - targetProxy = 3E8D58AC0642DFEF180F93A716AA5767 /* PBXContainerItemProxy */; + name = Parse; + target = 7F3FE5658AEC4AF2B296EDA73A218182 /* Parse */; + targetProxy = C217FDF16F9F1EFC2C5534E7024BB879 /* PBXContainerItemProxy */; }; - E6090C7FFB7876A1949EE0CFC67771FB /* PBXTargetDependency */ = { + B7B913213EE748F5FC38D91A88A2057B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FlatUIKit; - target = AD0892BE565CA9D5A839B9137561277C /* FlatUIKit */; - targetProxy = FFF40209AC9E59C58E5D29A6CFCDA530 /* PBXContainerItemProxy */; + name = IQKeyboardManager; + target = FBA456CB50E371584C11231929A0971E /* IQKeyboardManager */; + targetProxy = 70CDEE1F31046DF7D58238DE342DC5CB /* PBXContainerItemProxy */; + }; + EDECE1205B730A5E7D0180F8AD80432E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AFNetworking; + target = 0130B3724283586C0E9D2A112D4F2AA1 /* AFNetworking */; + targetProxy = 0CBD9EA31DDA34BF819A5EA071433D98 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 04654CE287C14F1D2297FA455C706262 /* Debug */ = { + 0D60DD6112F6671B16910B7B1747C274 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D6939221D085E5F1308A2B09EC84A8FB /* FlatUIKit.xcconfig */; + baseConfigurationReference = 5E8A133C5B52375ED7ED0B08ADBD8537 /* Pods-FoodbLog.release.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/FlatUIKit/FlatUIKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FlatUIKit/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FlatUIKit/FlatUIKit.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = FlatUIKit; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 0DB657C564719542C1398349C2BB0B99 /* Debug */ = { + 18EA0B983E6EB47AF0ACD58C619C7056 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 81D83DAA30D8226773AF7A7178B0B6BD /* SDWebImage.xcconfig */; + baseConfigurationReference = CEE21A440006EE2C4B423EFAE0DC86AB /* Unirest.debug.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SDWebImage/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Unirest/Unirest-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Unirest/Unirest-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = SDWebImage; + MODULEMAP_FILE = "Target Support Files/Unirest/Unirest.modulemap"; + PRODUCT_MODULE_NAME = Unirest; + PRODUCT_NAME = Unirest; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 1660907A1054770CA58025AF2C9DDF20 /* Release */ = { + 1A58A82F0ADB9BB12FD2E22EA42491CB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AF7EB139234D7591A9BBBFE257CBEDC2 /* AFNetworking.xcconfig */; + baseConfigurationReference = 9DA741B4EC0DCED29063435717645FC3 /* FlatUIKit.debug.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AFNetworking/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FlatUIKit/FlatUIKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FlatUIKit/FlatUIKit-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = AFNetworking; + MODULEMAP_FILE = "Target Support Files/FlatUIKit/FlatUIKit.modulemap"; + PRODUCT_MODULE_NAME = FlatUIKit; + PRODUCT_NAME = FlatUIKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 1CA307BCF518928282A65E3BA03E511B /* Debug */ = { + 1C5BBD4AB5852DA8628B9B0B467FC2D1 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3F6F352E4DEB45514F7E02EEBDB016E /* Unirest.xcconfig */; + baseConfigurationReference = DA0DF40D1E6DB2A9A53542C123149969 /* ChameleonFramework.debug.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Unirest/Unirest-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Unirest/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/ChameleonFramework/ChameleonFramework-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ChameleonFramework/ChameleonFramework-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Unirest/Unirest.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = Unirest; + MODULEMAP_FILE = "Target Support Files/ChameleonFramework/ChameleonFramework.modulemap"; + PRODUCT_MODULE_NAME = ChameleonFramework; + PRODUCT_NAME = ChameleonFramework; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 2C9A0CB8E3E3726B0344AC75149259F1 /* Release */ = { + 25AD9454612BF454A1E3DC4CD4FA8C6D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + 2ED5CD13F515BB46B86F73C5F9569190 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 16828D6C5E0FE1FF417BD7153C923545 /* ChameleonFramework.xcconfig */; + baseConfigurationReference = A7C121EE4B1DE511B784FCD1F75C3CAF /* SDWebImage.debug.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/ChameleonFramework/ChameleonFramework-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ChameleonFramework/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/ChameleonFramework/ChameleonFramework.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = ChameleonFramework; + MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; + PRODUCT_MODULE_NAME = SDWebImage; + PRODUCT_NAME = SDWebImage; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 324B88B070C2EF871C73D43F67CCECE4 /* Debug */ = { + 3DCA5EA2D1CF284CFB76122F415EC323 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 977577C045EDA9D9D1F46E2598D19FC7 /* Pods.debug.xcconfig */; + baseConfigurationReference = 38F8E3AFD6049401797C7A47018A213A /* Parse.debug.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - INFOPLIST_FILE = "Target Support Files/Pods/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Parse/Parse-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods/Pods.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_NAME = Pods; + MODULEMAP_FILE = "Target Support Files/Parse/Parse.modulemap"; + PRODUCT_MODULE_NAME = Parse; + PRODUCT_NAME = Parse; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 45718902149EEB1BE54C424BDE8B29FE /* Debug */ = { + 48A647147535E94A048A0C5CF01D4F30 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0B4A2BAAC5964A649072D028A69828A7 /* Bolts.xcconfig */; + baseConfigurationReference = 80331DEE2BF41B2AD40413E3C5DB2B28 /* ParseUI.debug.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ParseUI/ParseUI-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts/Bolts.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = Bolts; + MODULEMAP_FILE = "Target Support Files/ParseUI/ParseUI.modulemap"; + PRODUCT_MODULE_NAME = ParseUI; + PRODUCT_NAME = ParseUI; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 4D7F81969953582F60CC9FD9646FEAEF /* Debug */ = { + 5AC3F337A5C43C8D86E64EB328D04643 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AF7EB139234D7591A9BBBFE257CBEDC2 /* AFNetworking.xcconfig */; + baseConfigurationReference = 857F0BA6F21ED8BE24BBE09EC4796DD0 /* IQKeyboardManager.debug.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AFNetworking/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManager/IQKeyboardManager-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = AFNetworking; + MODULEMAP_FILE = "Target Support Files/IQKeyboardManager/IQKeyboardManager.modulemap"; + PRODUCT_MODULE_NAME = IQKeyboardManager; + PRODUCT_NAME = IQKeyboardManager; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 5CE5176205D06FF3FFE3DDDA9291E44B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - 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; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - 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; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - ONLY_ACTIVE_ARCH = YES; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Debug; - }; - 6781CB7905CCF95C5B8684C9B6CDD7E4 /* Debug */ = { + 896E5365E81BD3F8C6C88FB93B68E518 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 569E0DFDD549E86512FD99D4120EFAA0 /* IQKeyboardManager.xcconfig */; + baseConfigurationReference = 7BE179E9C8B4046FCC237E5DA15BB57D /* Bolts.debug.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManager/IQKeyboardManager-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/IQKeyboardManager/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts/Bolts-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/IQKeyboardManager/IQKeyboardManager.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = IQKeyboardManager; + MODULEMAP_FILE = "Target Support Files/Bolts/Bolts.modulemap"; + PRODUCT_MODULE_NAME = Bolts; + PRODUCT_NAME = Bolts; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 7034D331FE4897B9EAF9441363590CEC /* Release */ = { + 8E7C2EF045FC4D43603B34ED3A15D8D5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DA312349A49333542E6F4B36B329960E /* Pods.release.xcconfig */; + baseConfigurationReference = 4AB7F6659411A2066C581E0CA1DB5C65 /* AFNetworking.release.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - INFOPLIST_FILE = "Target Support Files/Pods/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFNetworking/AFNetworking-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods/Pods.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_NAME = Pods; + MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; + PRODUCT_MODULE_NAME = AFNetworking; + PRODUCT_NAME = AFNetworking; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 73254ED15E1A472519E0CB6EF31239AC /* Release */ = { + ABC30FFB3EDCDFCAC5B1A78670EF35E3 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D6939221D085E5F1308A2B09EC84A8FB /* FlatUIKit.xcconfig */; + baseConfigurationReference = 9B994E9D8D38725EB2DBDFA907134A7C /* Parse.release.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/FlatUIKit/FlatUIKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FlatUIKit/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Parse/Parse-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FlatUIKit/FlatUIKit.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = FlatUIKit; + MODULEMAP_FILE = "Target Support Files/Parse/Parse.modulemap"; + PRODUCT_MODULE_NAME = Parse; + PRODUCT_NAME = Parse; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 74857149DC1E0D599B8A01A78349A926 /* Release */ = { + B1B099CA53143C14AB8ABB66233C5E16 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 7142851694FCB943E670DC3C15E92EBF /* ChameleonFramework.release.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - 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; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PREPROCESSOR_DEFINITIONS = "RELEASE=1"; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 78F3DF798ED35DC7BA774B6E596F98A8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 16828D6C5E0FE1FF417BD7153C923545 /* ChameleonFramework.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_PREFIX_HEADER = "Target Support Files/ChameleonFramework/ChameleonFramework-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ChameleonFramework/Info.plist"; + INFOPLIST_FILE = "Target Support Files/ChameleonFramework/ChameleonFramework-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = "Target Support Files/ChameleonFramework/ChameleonFramework.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_MODULE_NAME = ChameleonFramework; PRODUCT_NAME = ChameleonFramework; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 8EE640E082CA32F6597FECA962AB4BDA /* Release */ = { + BCF92E5B31213776C06023CF06FF4752 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0B4A2BAAC5964A649072D028A69828A7 /* Bolts.xcconfig */; + baseConfigurationReference = 532AAB9D359ECDC94F8B03BB863AC81E /* Unirest.release.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Unirest/Unirest-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Unirest/Unirest-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts/Bolts.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Bolts; + MODULEMAP_FILE = "Target Support Files/Unirest/Unirest.modulemap"; + PRODUCT_MODULE_NAME = Unirest; + PRODUCT_NAME = Unirest; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - A7F837FFFC27E53B8DF18C13AA8C5F17 /* Release */ = { + BE81F1587DEF06899DC8A41C82965A3B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 81D83DAA30D8226773AF7A7178B0B6BD /* SDWebImage.xcconfig */; + baseConfigurationReference = 1C002313FB340FD9903A219A795BD6EE /* Bolts.release.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SDWebImage/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts/Bolts-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = SDWebImage; + MODULEMAP_FILE = "Target Support Files/Bolts/Bolts.modulemap"; + PRODUCT_MODULE_NAME = Bolts; + PRODUCT_NAME = Bolts; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - CC03F3DFC429B3595FC43661578AD3C5 /* Debug */ = { + C23C19FB5166B259C259D5E10A59B962 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 39943054D23B3B7CB70A494690FC60EA /* ParseUI.xcconfig */; + baseConfigurationReference = 8F4B1D49F33B5E34B800900D19CA98E3 /* SDWebImage.release.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ParseUI/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/ParseUI/ParseUI.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = ParseUI; + MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; + PRODUCT_MODULE_NAME = SDWebImage; + PRODUCT_NAME = SDWebImage; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - D2B5506D3D1A53D73B4579FFD636B171 /* Release */ = { + CA547D2C7E9A8A153DC2B27FBE00B112 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C3F6F352E4DEB45514F7E02EEBDB016E /* Unirest.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; + }; + CF5889134F93B4DBC3926DDBD180C95F /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 849E5A8317B6998E948A27507E902A90 /* Pods-FoodbLog.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Unirest/Unirest-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Unirest/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Unirest/Unirest.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Unirest; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - D7A56D7CC4B62F77D0936978260B77EE /* Debug */ = { + DA9EDB729F9EB20F25FDC5AF8A359308 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B7A94758BEFF018FDE24D7113BEAF994 /* Parse.xcconfig */; + baseConfigurationReference = 8B8FAEB0939BC673396EF39DB43C5723 /* FlatUIKit.release.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Parse/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FlatUIKit/FlatUIKit-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FlatUIKit/FlatUIKit-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Parse/Parse.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = Parse; + MODULEMAP_FILE = "Target Support Files/FlatUIKit/FlatUIKit.modulemap"; + PRODUCT_MODULE_NAME = FlatUIKit; + PRODUCT_NAME = FlatUIKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - F765CCA855E30884F75B655BD6290D54 /* Release */ = { + E64BC1A70B89068042A58AD86BFD95E8 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 39943054D23B3B7CB70A494690FC60EA /* ParseUI.xcconfig */; + baseConfigurationReference = 4BD4DB7C36686D11738734B18DF72463 /* IQKeyboardManager.release.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ParseUI/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManager/IQKeyboardManager-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/ParseUI/ParseUI.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = ParseUI; + MODULEMAP_FILE = "Target Support Files/IQKeyboardManager/IQKeyboardManager.modulemap"; + PRODUCT_MODULE_NAME = IQKeyboardManager; + PRODUCT_NAME = IQKeyboardManager; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - F7D3F2FB4F2AB4AF34184FA9FBCDE70C /* Release */ = { + EBA37623EE3EB2AAB64FA97FE5883854 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B7A94758BEFF018FDE24D7113BEAF994 /* Parse.xcconfig */; + baseConfigurationReference = 7AB05A9755C75CB37B4B278883D9ECBE /* AFNetworking.debug.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Parse/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFNetworking/AFNetworking-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Parse/Parse.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Parse; + MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; + PRODUCT_MODULE_NAME = AFNetworking; + PRODUCT_NAME = AFNetworking; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - FF2C416EB87B2990A72C6DFDFA5ACDD6 /* Release */ = { + F836CE25A5EADCDC1C73656BB667A944 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 569E0DFDD549E86512FD99D4120EFAA0 /* IQKeyboardManager.xcconfig */; + baseConfigurationReference = 3C1AC1660363A329A284E332A3E5298C /* ParseUI.release.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManager/IQKeyboardManager-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/IQKeyboardManager/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ParseUI/ParseUI-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/IQKeyboardManager/IQKeyboardManager.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = IQKeyboardManager; + MODULEMAP_FILE = "Target Support Files/ParseUI/ParseUI.modulemap"; + PRODUCT_MODULE_NAME = ParseUI; + PRODUCT_NAME = ParseUI; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -4316,106 +4571,106 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 006EAC57210788D5B6256A754B162997 /* Build configuration list for PBXNativeTarget "Parse" */ = { + 206CFF50794E2F033F8F7D1CA4B6D926 /* Build configuration list for PBXNativeTarget "ParseUI" */ = { isa = XCConfigurationList; buildConfigurations = ( - D7A56D7CC4B62F77D0936978260B77EE /* Debug */, - F7D3F2FB4F2AB4AF34184FA9FBCDE70C /* Release */, + 48A647147535E94A048A0C5CF01D4F30 /* Debug */, + F836CE25A5EADCDC1C73656BB667A944 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 21132C688AA5261B8ED9F7A691EF1EF6 /* Build configuration list for PBXNativeTarget "Pods" */ = { + 290794F1B7C30B95EDA1658C9F5C37E9 /* Build configuration list for PBXNativeTarget "IQKeyboardManager" */ = { isa = XCConfigurationList; buildConfigurations = ( - 324B88B070C2EF871C73D43F67CCECE4 /* Debug */, - 7034D331FE4897B9EAF9441363590CEC /* Release */, + 5AC3F337A5C43C8D86E64EB328D04643 /* Debug */, + E64BC1A70B89068042A58AD86BFD95E8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 240572BBF69462D0F27EBBD8B2F4B897 /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { + 45D24D7DA9B5391B128D06A688D5FFEB /* Build configuration list for PBXNativeTarget "Bolts" */ = { isa = XCConfigurationList; buildConfigurations = ( - 0DB657C564719542C1398349C2BB0B99 /* Debug */, - A7F837FFFC27E53B8DF18C13AA8C5F17 /* Release */, + 896E5365E81BD3F8C6C88FB93B68E518 /* Debug */, + BE81F1587DEF06899DC8A41C82965A3B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 5CE5176205D06FF3FFE3DDDA9291E44B /* Debug */, - 74857149DC1E0D599B8A01A78349A926 /* Release */, + 25AD9454612BF454A1E3DC4CD4FA8C6D /* Debug */, + CA547D2C7E9A8A153DC2B27FBE00B112 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5FB2967A6A20FE963247B4DAAAF6AB7D /* Build configuration list for PBXNativeTarget "Unirest" */ = { + 51A78600708B12200B7613A059F264AD /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1CA307BCF518928282A65E3BA03E511B /* Debug */, - D2B5506D3D1A53D73B4579FFD636B171 /* Release */, + 2ED5CD13F515BB46B86F73C5F9569190 /* Debug */, + C23C19FB5166B259C259D5E10A59B962 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 74EF3DD21DD17AECC1EDC763152044A7 /* Build configuration list for PBXNativeTarget "FlatUIKit" */ = { + 525EE82D6B4EC9040F2C31DA0640A839 /* Build configuration list for PBXNativeTarget "Pods-FoodbLog" */ = { isa = XCConfigurationList; buildConfigurations = ( - 04654CE287C14F1D2297FA455C706262 /* Debug */, - 73254ED15E1A472519E0CB6EF31239AC /* Release */, + CF5889134F93B4DBC3926DDBD180C95F /* Debug */, + 0D60DD6112F6671B16910B7B1747C274 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 902666324428AE8009C1F1B64BF2EF92 /* Build configuration list for PBXNativeTarget "ChameleonFramework" */ = { + 572543452275637D1FC81DC359D9A50C /* Build configuration list for PBXNativeTarget "FlatUIKit" */ = { isa = XCConfigurationList; buildConfigurations = ( - 78F3DF798ED35DC7BA774B6E596F98A8 /* Debug */, - 2C9A0CB8E3E3726B0344AC75149259F1 /* Release */, + 1A58A82F0ADB9BB12FD2E22EA42491CB /* Debug */, + DA9EDB729F9EB20F25FDC5AF8A359308 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 908E2BA7D177B512E6ED5E535DBE9FC3 /* Build configuration list for PBXNativeTarget "ParseUI" */ = { + 9C523E6143DB0C70A8B0FEB07F0A5E69 /* Build configuration list for PBXNativeTarget "Parse" */ = { isa = XCConfigurationList; buildConfigurations = ( - CC03F3DFC429B3595FC43661578AD3C5 /* Debug */, - F765CCA855E30884F75B655BD6290D54 /* Release */, + 3DCA5EA2D1CF284CFB76122F415EC323 /* Debug */, + ABC30FFB3EDCDFCAC5B1A78670EF35E3 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - DC2565CD7646AD5E276A24C4976C27A3 /* Build configuration list for PBXNativeTarget "IQKeyboardManager" */ = { + B61E8ABD6FC78810EA49DC0E9646BF83 /* Build configuration list for PBXNativeTarget "AFNetworking" */ = { isa = XCConfigurationList; buildConfigurations = ( - 6781CB7905CCF95C5B8684C9B6CDD7E4 /* Debug */, - FF2C416EB87B2990A72C6DFDFA5ACDD6 /* Release */, + EBA37623EE3EB2AAB64FA97FE5883854 /* Debug */, + 8E7C2EF045FC4D43603B34ED3A15D8D5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - DCFA04D9F87841983F47B020C3F295D0 /* Build configuration list for PBXNativeTarget "AFNetworking" */ = { + D8BDCAEAFB484664860383CA2CC9C8F8 /* Build configuration list for PBXNativeTarget "ChameleonFramework" */ = { isa = XCConfigurationList; buildConfigurations = ( - 4D7F81969953582F60CC9FD9646FEAEF /* Debug */, - 1660907A1054770CA58025AF2C9DDF20 /* Release */, + 1C5BBD4AB5852DA8628B9B0B467FC2D1 /* Debug */, + B1B099CA53143C14AB8ABB66233C5E16 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - EE1ADA34B931E600AF64DF5B88F4BD84 /* Build configuration list for PBXNativeTarget "Bolts" */ = { + EA7ABE50FB6EA7A4A6CAA4A5C5380BD6 /* Build configuration list for PBXNativeTarget "Unirest" */ = { isa = XCConfigurationList; buildConfigurations = ( - 45718902149EEB1BE54C424BDE8B29FE /* Debug */, - 8EE640E082CA32F6597FECA962AB4BDA /* Release */, + 18EA0B983E6EB47AF0ACD58C619C7056 /* Debug */, + BCF92E5B31213776C06023CF06FF4752 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; } diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/AFNetworking.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/AFNetworking.xcscheme deleted file mode 100644 index 2128132..0000000 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/AFNetworking.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/ChameleonFramework.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/ChameleonFramework.xcscheme deleted file mode 100644 index 1cd82c0..0000000 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/ChameleonFramework.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/FlatUIKit.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/FlatUIKit.xcscheme deleted file mode 100644 index f1aaaf0..0000000 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/FlatUIKit.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/IQKeyboardManager.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/IQKeyboardManager.xcscheme deleted file mode 100644 index 7c0ef62..0000000 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/IQKeyboardManager.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/SDWebImage.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/SDWebImage.xcscheme deleted file mode 100644 index 822d4ad..0000000 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/SDWebImage.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/Pods.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/AFNetworking.xcscheme similarity index 73% rename from FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/Pods.xcscheme rename to FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/AFNetworking.xcscheme index 5ad6e01..cc4be6f 100644 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/Pods.xcscheme +++ b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/AFNetworking.xcscheme @@ -1,36 +1,37 @@ + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + BuildableIdentifier = "primary" + BlueprintIdentifier = "0130B3724283586C0E9D2A112D4F2AA1" + BuildableName = "AFNetworking.framework" + BlueprintName = "AFNetworking" + ReferencedContainer = "container:Pods.xcodeproj"> - - + shouldUseLaunchSchemeArgsEnv = "YES"> + + - - + debugDocumentVersioning = "YES"> diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/Bolts.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Bolts.xcscheme similarity index 73% rename from FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/Bolts.xcscheme rename to FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Bolts.xcscheme index a2e41e2..538482e 100644 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/Bolts.xcscheme +++ b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Bolts.xcscheme @@ -1,36 +1,37 @@ + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + BuildableIdentifier = "primary" + BlueprintIdentifier = "42465A188431886AB035275F049824D3" + BuildableName = "Bolts.framework" + BlueprintName = "Bolts" + ReferencedContainer = "container:Pods.xcodeproj"> - - + shouldUseLaunchSchemeArgsEnv = "YES"> + + - - + debugDocumentVersioning = "YES"> diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/ChameleonFramework.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/ChameleonFramework.xcscheme new file mode 100644 index 0000000..38f48b7 --- /dev/null +++ b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/ChameleonFramework.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/FlatUIKit.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/FlatUIKit.xcscheme new file mode 100644 index 0000000..524990c --- /dev/null +++ b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/FlatUIKit.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/IQKeyboardManager.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/IQKeyboardManager.xcscheme new file mode 100644 index 0000000..0a86be4 --- /dev/null +++ b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/IQKeyboardManager.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/Parse.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Parse.xcscheme similarity index 73% rename from FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/Parse.xcscheme rename to FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Parse.xcscheme index 1ca9aed..4168595 100644 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/Parse.xcscheme +++ b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Parse.xcscheme @@ -1,36 +1,37 @@ + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + BuildableIdentifier = "primary" + BlueprintIdentifier = "7F3FE5658AEC4AF2B296EDA73A218182" + BuildableName = "Parse.framework" + BlueprintName = "Parse" + ReferencedContainer = "container:Pods.xcodeproj"> - - + shouldUseLaunchSchemeArgsEnv = "YES"> + + - - + debugDocumentVersioning = "YES"> diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/ParseUI.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/ParseUI.xcscheme similarity index 73% rename from FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/ParseUI.xcscheme rename to FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/ParseUI.xcscheme index bb06012..1575182 100644 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/ParseUI.xcscheme +++ b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/ParseUI.xcscheme @@ -1,36 +1,37 @@ + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + BuildableIdentifier = "primary" + BlueprintIdentifier = "96F971576D7B3914510B0B2FB38F43A2" + BuildableName = "ParseUI.framework" + BlueprintName = "ParseUI" + ReferencedContainer = "container:Pods.xcodeproj"> - - + shouldUseLaunchSchemeArgsEnv = "YES"> + + - - + debugDocumentVersioning = "YES"> diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Pods-FoodbLog.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Pods-FoodbLog.xcscheme new file mode 100644 index 0000000..4f3b7dc --- /dev/null +++ b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Pods-FoodbLog.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/SDWebImage.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/SDWebImage.xcscheme new file mode 100644 index 0000000..37ef74c --- /dev/null +++ b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/SDWebImage.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/Unirest.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Unirest.xcscheme similarity index 73% rename from FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/Unirest.xcscheme rename to FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Unirest.xcscheme index 7f6cc9a..8e9edd2 100644 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/Unirest.xcscheme +++ b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Unirest.xcscheme @@ -1,36 +1,37 @@ + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + BuildableIdentifier = "primary" + BlueprintIdentifier = "DD9AC66E330E40497F19A867C63FBAAA" + BuildableName = "Unirest.framework" + BlueprintName = "Unirest" + ReferencedContainer = "container:Pods.xcodeproj"> - - + shouldUseLaunchSchemeArgsEnv = "YES"> + + - - + debugDocumentVersioning = "YES"> diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/xcschememanagement.plist b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 51% rename from FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/xcschememanagement.plist rename to FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/xcschememanagement.plist index f0af157..b117633 100644 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/ayunavogel.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/xcschememanagement.plist @@ -39,7 +39,7 @@ isShown - Pods.xcscheme + Pods-FoodbLog.xcscheme isShown @@ -56,57 +56,6 @@ SuppressBuildableAutocreation - - 02BAF45DCD86C52CC44CF7BA784F8821 - - primary - - - 449BE13505657F8E1C2D26738417B4FD - - primary - - - 4878C70B21CA37D7CB8A476BF986741B - - primary - - - 5855D213D188EE14086C1F827DE7B1FF - - primary - - - 59A0C52286D680208602EBE33F4979AD - - primary - - - 708E01B006A9F88B3C13711562282B5E - - primary - - - AD0892BE565CA9D5A839B9137561277C - - primary - - - AE2762B37E506C0F5F264DA433F088C3 - - primary - - - B8A759F57254B6094CF99273E5ECEE8B - - primary - - - F710EAB41DD6932844C4A82A87A2628F - - primary - - - + diff --git a/FoodbLog/Pods/Target Support Files/AFNetworking/Info.plist b/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-Info.plist similarity index 92% rename from FoodbLog/Pods/Target Support Files/AFNetworking/Info.plist rename to FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-Info.plist index 4e21c5f..a0a9b99 100644 --- a/FoodbLog/Pods/Target Support Files/AFNetworking/Info.plist +++ b/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + ${PRODUCT_BUNDLE_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch b/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch index 1e116a3..9c25d83 100644 --- a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch +++ b/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch @@ -1,5 +1,13 @@ #ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif #endif #ifndef TARGET_OS_IOS diff --git a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-umbrella.h b/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-umbrella.h index 82a3f9d..acd0aca 100644 --- a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-umbrella.h +++ b/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-umbrella.h @@ -1,4 +1,14 @@ +#ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif #import "AFNetworking.h" #import "AFURLConnectionOperation.h" diff --git a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.debug.xcconfig b/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.debug.xcconfig new file mode 100644 index 0000000..f72265f --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.debug.xcconfig @@ -0,0 +1,12 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/AFNetworking +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.release.xcconfig b/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.release.xcconfig new file mode 100644 index 0000000..f72265f --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.release.xcconfig @@ -0,0 +1,12 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/AFNetworking +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig b/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig deleted file mode 100644 index 95fce75..0000000 --- a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/AFNetworking" "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" -PODS_ROOT = ${SRCROOT} -SKIP_INSTALL = YES \ No newline at end of file diff --git a/FoodbLog/Pods/Target Support Files/Bolts/Info.plist b/FoodbLog/Pods/Target Support Files/Bolts/Bolts-Info.plist similarity index 92% rename from FoodbLog/Pods/Target Support Files/Bolts/Info.plist rename to FoodbLog/Pods/Target Support Files/Bolts/Bolts-Info.plist index 8c485de..b6b2813 100644 --- a/FoodbLog/Pods/Target Support Files/Bolts/Info.plist +++ b/FoodbLog/Pods/Target Support Files/Bolts/Bolts-Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + ${PRODUCT_BUNDLE_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/FoodbLog/Pods/Target Support Files/Bolts/Bolts-prefix.pch b/FoodbLog/Pods/Target Support Files/Bolts/Bolts-prefix.pch index aa992a4..beb2a24 100644 --- a/FoodbLog/Pods/Target Support Files/Bolts/Bolts-prefix.pch +++ b/FoodbLog/Pods/Target Support Files/Bolts/Bolts-prefix.pch @@ -1,4 +1,12 @@ #ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif #endif diff --git a/FoodbLog/Pods/Target Support Files/Bolts/Bolts-umbrella.h b/FoodbLog/Pods/Target Support Files/Bolts/Bolts-umbrella.h index 5bea17e..b697538 100644 --- a/FoodbLog/Pods/Target Support Files/Bolts/Bolts-umbrella.h +++ b/FoodbLog/Pods/Target Support Files/Bolts/Bolts-umbrella.h @@ -1,4 +1,14 @@ +#ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif #import "BFCancellationToken.h" #import "BFCancellationTokenRegistration.h" diff --git a/FoodbLog/Pods/Target Support Files/Bolts/Bolts.debug.xcconfig b/FoodbLog/Pods/Target Support Files/Bolts/Bolts.debug.xcconfig new file mode 100644 index 0000000..feadecb --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/Bolts/Bolts.debug.xcconfig @@ -0,0 +1,11 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Bolts +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Bolts +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/Bolts/Bolts.release.xcconfig b/FoodbLog/Pods/Target Support Files/Bolts/Bolts.release.xcconfig new file mode 100644 index 0000000..feadecb --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/Bolts/Bolts.release.xcconfig @@ -0,0 +1,11 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Bolts +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Bolts +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/Bolts/Bolts.xcconfig b/FoodbLog/Pods/Target Support Files/Bolts/Bolts.xcconfig deleted file mode 100644 index 87d62af..0000000 --- a/FoodbLog/Pods/Target Support Files/Bolts/Bolts.xcconfig +++ /dev/null @@ -1,4 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Bolts" "${PODS_ROOT}/Headers/Public" -PODS_ROOT = ${SRCROOT} -SKIP_INSTALL = YES \ No newline at end of file diff --git a/FoodbLog/Pods/Target Support Files/ChameleonFramework/Info.plist b/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-Info.plist similarity index 92% rename from FoodbLog/Pods/Target Support Files/ChameleonFramework/Info.plist rename to FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-Info.plist index 70a770e..d13cf5d 100644 --- a/FoodbLog/Pods/Target Support Files/ChameleonFramework/Info.plist +++ b/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + ${PRODUCT_BUNDLE_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-prefix.pch b/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-prefix.pch index aa992a4..beb2a24 100644 --- a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-prefix.pch +++ b/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-prefix.pch @@ -1,4 +1,12 @@ #ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif #endif diff --git a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-umbrella.h b/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-umbrella.h index 315a97b..5b339aa 100644 --- a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-umbrella.h +++ b/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-umbrella.h @@ -1,10 +1,20 @@ +#ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif #import "Chameleon.h" -#import "Chameleon_.h" #import "ChameleonConstants.h" #import "ChameleonEnums.h" #import "ChameleonMacros.h" +#import "Chameleon_.h" #import "NSArray+Chameleon.h" #import "UIButton+Chameleon.h" #import "UIColor+Chameleon.h" @@ -15,10 +25,10 @@ #import "UIView+ChameleonPrivate.h" #import "UIViewController+Chameleon.h" #import "Chameleon.h" -#import "Chameleon_.h" #import "ChameleonConstants.h" #import "ChameleonEnums.h" #import "ChameleonMacros.h" +#import "Chameleon_.h" #import "NSArray+Chameleon.h" #import "UIButton+Chameleon.h" #import "UIColor+Chameleon.h" diff --git a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.debug.xcconfig b/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.debug.xcconfig new file mode 100644 index 0000000..f20df9b --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.debug.xcconfig @@ -0,0 +1,12 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "QuartzCore" -framework "UIKit" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/ChameleonFramework +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.release.xcconfig b/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.release.xcconfig new file mode 100644 index 0000000..f20df9b --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.release.xcconfig @@ -0,0 +1,12 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "QuartzCore" -framework "UIKit" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/ChameleonFramework +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.xcconfig b/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.xcconfig deleted file mode 100644 index bf6bd2b..0000000 --- a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/ChameleonFramework" "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = -framework "CoreGraphics" -framework "QuartzCore" -framework "UIKit" -PODS_ROOT = ${SRCROOT} -SKIP_INSTALL = YES \ No newline at end of file diff --git a/FoodbLog/Pods/Target Support Files/FlatUIKit/Info.plist b/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-Info.plist similarity index 92% rename from FoodbLog/Pods/Target Support Files/FlatUIKit/Info.plist rename to FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-Info.plist index 0cd2f89..1040bc4 100644 --- a/FoodbLog/Pods/Target Support Files/FlatUIKit/Info.plist +++ b/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + ${PRODUCT_BUNDLE_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-prefix.pch b/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-prefix.pch index aa992a4..beb2a24 100644 --- a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-prefix.pch +++ b/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-prefix.pch @@ -1,4 +1,12 @@ #ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif #endif diff --git a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-umbrella.h b/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-umbrella.h index 38f15e5..eb791ac 100644 --- a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-umbrella.h +++ b/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-umbrella.h @@ -1,4 +1,14 @@ +#ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif #import "FlatUIKit.h" #import "FUIAlertView.h" diff --git a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.debug.xcconfig b/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.debug.xcconfig new file mode 100644 index 0000000..2ff6734 --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.debug.xcconfig @@ -0,0 +1,12 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FlatUIKit +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "CoreText" -framework "QuartzCore" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/FlatUIKit +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.release.xcconfig b/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.release.xcconfig new file mode 100644 index 0000000..2ff6734 --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.release.xcconfig @@ -0,0 +1,12 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FlatUIKit +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "CoreText" -framework "QuartzCore" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/FlatUIKit +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.xcconfig b/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.xcconfig deleted file mode 100644 index 5860a83..0000000 --- a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FlatUIKit" "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = -framework "CoreText" -framework "QuartzCore" -PODS_ROOT = ${SRCROOT} -SKIP_INSTALL = YES \ No newline at end of file diff --git a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/Info.plist b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist similarity index 92% rename from FoodbLog/Pods/Target Support Files/IQKeyboardManager/Info.plist rename to FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist index 478a9bd..6791bb8 100644 --- a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/Info.plist +++ b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + ${PRODUCT_BUNDLE_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-prefix.pch b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-prefix.pch index aa992a4..beb2a24 100644 --- a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-prefix.pch +++ b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-prefix.pch @@ -1,4 +1,12 @@ #ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif #endif diff --git a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-umbrella.h b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-umbrella.h index 90fef23..3c0c2ec 100644 --- a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-umbrella.h +++ b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-umbrella.h @@ -1,4 +1,14 @@ +#ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif #import "IQNSArray+Sort.h" #import "IQUITextFieldView+Additions.h" diff --git a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.debug.xcconfig b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.debug.xcconfig new file mode 100644 index 0000000..1e6d6cd --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.debug.xcconfig @@ -0,0 +1,11 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/IQKeyboardManager +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.release.xcconfig b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.release.xcconfig new file mode 100644 index 0000000..1e6d6cd --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.release.xcconfig @@ -0,0 +1,11 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/IQKeyboardManager +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.xcconfig b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.xcconfig deleted file mode 100644 index 689335b..0000000 --- a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.xcconfig +++ /dev/null @@ -1,4 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/IQKeyboardManager" "${PODS_ROOT}/Headers/Public" -PODS_ROOT = ${SRCROOT} -SKIP_INSTALL = YES \ No newline at end of file diff --git a/FoodbLog/Pods/Target Support Files/Parse/Info.plist b/FoodbLog/Pods/Target Support Files/Parse/Parse-Info.plist similarity index 92% rename from FoodbLog/Pods/Target Support Files/Parse/Info.plist rename to FoodbLog/Pods/Target Support Files/Parse/Parse-Info.plist index 2f51fa5..62cf7b2 100644 --- a/FoodbLog/Pods/Target Support Files/Parse/Info.plist +++ b/FoodbLog/Pods/Target Support Files/Parse/Parse-Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + ${PRODUCT_BUNDLE_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/FoodbLog/Pods/Target Support Files/Parse/Parse-prefix.pch b/FoodbLog/Pods/Target Support Files/Parse/Parse-prefix.pch index aa992a4..beb2a24 100644 --- a/FoodbLog/Pods/Target Support Files/Parse/Parse-prefix.pch +++ b/FoodbLog/Pods/Target Support Files/Parse/Parse-prefix.pch @@ -1,4 +1,12 @@ #ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif #endif diff --git a/FoodbLog/Pods/Target Support Files/Parse/Parse-umbrella.h b/FoodbLog/Pods/Target Support Files/Parse/Parse-umbrella.h index 616d7c7..e57a250 100644 --- a/FoodbLog/Pods/Target Support Files/Parse/Parse-umbrella.h +++ b/FoodbLog/Pods/Target Support Files/Parse/Parse-umbrella.h @@ -1,4 +1,14 @@ +#ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif #import "Parse.h" #import "PFACL.h" diff --git a/FoodbLog/Pods/Target Support Files/Parse/Parse.debug.xcconfig b/FoodbLog/Pods/Target Support Files/Parse/Parse.debug.xcconfig new file mode 100644 index 0000000..46df157 --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/Parse/Parse.debug.xcconfig @@ -0,0 +1,13 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Parse +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "Bolts" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -weak_framework "Accounts" -weak_framework "Social" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Parse +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/Parse/Parse.release.xcconfig b/FoodbLog/Pods/Target Support Files/Parse/Parse.release.xcconfig new file mode 100644 index 0000000..46df157 --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/Parse/Parse.release.xcconfig @@ -0,0 +1,13 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Parse +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "Bolts" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -weak_framework "Accounts" -weak_framework "Social" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Parse +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/Parse/Parse.xcconfig b/FoodbLog/Pods/Target Support Files/Parse/Parse.xcconfig deleted file mode 100644 index d06e775..0000000 --- a/FoodbLog/Pods/Target Support Files/Parse/Parse.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Parse" "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -weak_framework "Accounts" -weak_framework "Social" -PODS_ROOT = ${SRCROOT} -SKIP_INSTALL = YES \ No newline at end of file diff --git a/FoodbLog/Pods/Target Support Files/ParseUI/Info.plist b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-Info.plist similarity index 92% rename from FoodbLog/Pods/Target Support Files/ParseUI/Info.plist rename to FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-Info.plist index 35ca206..c243c02 100644 --- a/FoodbLog/Pods/Target Support Files/ParseUI/Info.plist +++ b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + ${PRODUCT_BUNDLE_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-prefix.pch b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-prefix.pch index aa992a4..beb2a24 100644 --- a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-prefix.pch +++ b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-prefix.pch @@ -1,4 +1,12 @@ #ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif #endif diff --git a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-umbrella.h b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-umbrella.h index 81f5492..e831663 100644 --- a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-umbrella.h +++ b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-umbrella.h @@ -1,8 +1,18 @@ +#ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif #import "PFLogInView.h" -#import "PFLogInView_Private.h" #import "PFLogInViewController.h" +#import "PFLogInView_Private.h" #import "PFSignUpView.h" #import "PFSignUpViewController.h" #import "PFQueryTableViewController.h" diff --git a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.debug.xcconfig b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.debug.xcconfig new file mode 100644 index 0000000..072f025 --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.debug.xcconfig @@ -0,0 +1,13 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ParseUI +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" "${PODS_CONFIGURATION_BUILD_DIR}/Parse" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "AudioToolbox" -framework "Bolts" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "Foundation" -framework "Parse" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "Accounts" -weak_framework "Social" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/ParseUI +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.release.xcconfig b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.release.xcconfig new file mode 100644 index 0000000..072f025 --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.release.xcconfig @@ -0,0 +1,13 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ParseUI +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" "${PODS_CONFIGURATION_BUILD_DIR}/Parse" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "AudioToolbox" -framework "Bolts" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "Foundation" -framework "Parse" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "Accounts" -weak_framework "Social" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/ParseUI +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.xcconfig b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.xcconfig deleted file mode 100644 index 6d96aa1..0000000 --- a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/ParseUI" "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" -PODS_ROOT = ${SRCROOT} -SKIP_INSTALL = YES \ No newline at end of file diff --git a/FoodbLog/Pods/Target Support Files/Pods/Info.plist b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-Info.plist similarity index 92% rename from FoodbLog/Pods/Target Support Files/Pods/Info.plist rename to FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-Info.plist index 6974542..2243fe6 100644 --- a/FoodbLog/Pods/Target Support Files/Pods/Info.plist +++ b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + ${PRODUCT_BUNDLE_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/FoodbLog/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.markdown similarity index 99% rename from FoodbLog/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown rename to FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.markdown index bc22043..a9df48a 100644 --- a/FoodbLog/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown +++ b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.markdown @@ -208,4 +208,4 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Generated by CocoaPods - http://cocoapods.org +Generated by CocoaPods - https://cocoapods.org diff --git a/FoodbLog/Pods/Target Support Files/Pods/Pods-acknowledgements.plist b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.plist similarity index 95% rename from FoodbLog/Pods/Target Support Files/Pods/Pods-acknowledgements.plist rename to FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.plist index 9078129..9480957 100644 --- a/FoodbLog/Pods/Target Support Files/Pods/Pods-acknowledgements.plist +++ b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.plist @@ -14,7 +14,7 @@ FooterText - Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) + Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -34,6 +34,8 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + License + MIT Title AFNetworking Type @@ -71,6 +73,8 @@ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + License + BSD Title Bolts Type @@ -100,6 +104,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE > SOFTWARE. + License + MIT Title ChameleonFramework Type @@ -128,6 +134,8 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + License + MIT Title FlatUIKit Type @@ -160,6 +168,8 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + License + MIT Title IQKeyboardManager Type @@ -168,6 +178,8 @@ SOFTWARE. FooterText See https://www.parse.com/about/terms + License + Commercial Title Parse Type @@ -193,6 +205,8 @@ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + License + SDK Title ParseUI Type @@ -221,6 +235,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + License + MIT Title SDWebImage Type @@ -251,6 +267,8 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + License + MIT Title Unirest Type @@ -258,7 +276,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. FooterText - Generated by CocoaPods - http://cocoapods.org + Generated by CocoaPods - https://cocoapods.org Title Type diff --git a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-dummy.m b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-dummy.m new file mode 100644 index 0000000..16bfe18 --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_FoodbLog : NSObject +@end +@implementation PodsDummy_Pods_FoodbLog +@end diff --git a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-frameworks.sh b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-frameworks.sh new file mode 100755 index 0000000..4e09628 --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-frameworks.sh @@ -0,0 +1,202 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +BCSYMBOLMAP_DIR="BCSymbolMaps" + + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then + # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied + find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do + echo "Installing $f" + install_bcsymbolmap "$f" "$destination" + rm "$f" + done + rmdir "${source}/${BCSYMBOLMAP_DIR}" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + warn_missing_arch=${2:-true} + if [ -r "$source" ]; then + # Copy the dSYM into the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .dSYM "$source")" + binary_name="$(ls "$source/Contents/Resources/DWARF")" + binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" + + # Strip invalid architectures from the dSYM. + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then + strip_invalid_archs "$binary" "$warn_missing_arch" + fi + if [[ $STRIP_BINARY_RETVAL == 0 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + mkdir -p "${DWARF_DSYM_FOLDER_PATH}" + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" + fi + fi +} + +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + warn_missing_arch=${2:-true} + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + if [[ "$warn_missing_arch" == "true" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + fi + STRIP_BINARY_RETVAL=1 + return + fi + stripped="" + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi + STRIP_BINARY_RETVAL=0 +} + +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts/Bolts.framework" + install_framework "${BUILT_PRODUCTS_DIR}/ChameleonFramework/ChameleonFramework.framework" + install_framework "${BUILT_PRODUCTS_DIR}/FlatUIKit/FlatUIKit.framework" + install_framework "${BUILT_PRODUCTS_DIR}/IQKeyboardManager/IQKeyboardManager.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Parse/Parse.framework" + install_framework "${BUILT_PRODUCTS_DIR}/ParseUI/ParseUI.framework" + install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Unirest/Unirest.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts/Bolts.framework" + install_framework "${BUILT_PRODUCTS_DIR}/ChameleonFramework/ChameleonFramework.framework" + install_framework "${BUILT_PRODUCTS_DIR}/FlatUIKit/FlatUIKit.framework" + install_framework "${BUILT_PRODUCTS_DIR}/IQKeyboardManager/IQKeyboardManager.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Parse/Parse.framework" + install_framework "${BUILT_PRODUCTS_DIR}/ParseUI/ParseUI.framework" + install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Unirest/Unirest.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-umbrella.h b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-umbrella.h new file mode 100644 index 0000000..008023d --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_FoodbLogVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_FoodbLogVersionString[]; + diff --git a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.debug.xcconfig b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.debug.xcconfig new file mode 100644 index 0000000..6d41e44 --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.debug.xcconfig @@ -0,0 +1,12 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" "${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework" "${PODS_CONFIGURATION_BUILD_DIR}/FlatUIKit" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/Parse" "${PODS_CONFIGURATION_BUILD_DIR}/ParseUI" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/Unirest" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts/Bolts.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework/ChameleonFramework.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FlatUIKit/FlatUIKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager/IQKeyboardManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Parse/Parse.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ParseUI/ParseUI.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Unirest/Unirest.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "AFNetworking" -framework "AudioToolbox" -framework "Bolts" -framework "CFNetwork" -framework "ChameleonFramework" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreText" -framework "FlatUIKit" -framework "Foundation" -framework "IQKeyboardManager" -framework "ImageIO" -framework "MobileCoreServices" -framework "Parse" -framework "ParseUI" -framework "QuartzCore" -framework "SDWebImage" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -framework "Unirest" -weak_framework "Accounts" -weak_framework "Social" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.modulemap b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.modulemap new file mode 100644 index 0000000..f40c690 --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.modulemap @@ -0,0 +1,6 @@ +framework module Pods_FoodbLog { + umbrella header "Pods-FoodbLog-umbrella.h" + + export * + module * { export * } +} diff --git a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.release.xcconfig b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.release.xcconfig new file mode 100644 index 0000000..6d41e44 --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.release.xcconfig @@ -0,0 +1,12 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" "${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework" "${PODS_CONFIGURATION_BUILD_DIR}/FlatUIKit" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/Parse" "${PODS_CONFIGURATION_BUILD_DIR}/ParseUI" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/Unirest" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts/Bolts.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework/ChameleonFramework.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FlatUIKit/FlatUIKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager/IQKeyboardManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Parse/Parse.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ParseUI/ParseUI.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Unirest/Unirest.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "AFNetworking" -framework "AudioToolbox" -framework "Bolts" -framework "CFNetwork" -framework "ChameleonFramework" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreText" -framework "FlatUIKit" -framework "Foundation" -framework "IQKeyboardManager" -framework "ImageIO" -framework "MobileCoreServices" -framework "Parse" -framework "ParseUI" -framework "QuartzCore" -framework "SDWebImage" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -framework "Unirest" -weak_framework "Accounts" -weak_framework "Social" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/Pods/Pods-dummy.m b/FoodbLog/Pods/Target Support Files/Pods/Pods-dummy.m deleted file mode 100644 index ade64bd..0000000 --- a/FoodbLog/Pods/Target Support Files/Pods/Pods-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods : NSObject -@end -@implementation PodsDummy_Pods -@end diff --git a/FoodbLog/Pods/Target Support Files/Pods/Pods-frameworks.sh b/FoodbLog/Pods/Target Support Files/Pods/Pods-frameworks.sh deleted file mode 100755 index 442d7ca..0000000 --- a/FoodbLog/Pods/Target Support Files/Pods/Pods-frameworks.sh +++ /dev/null @@ -1,107 +0,0 @@ -#!/bin/sh -set -e - -echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" -mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - -SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" - -install_framework() -{ - if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then - local source="${BUILT_PRODUCTS_DIR}/$1" - elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then - local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" - elif [ -r "$1" ]; then - local source="$1" - fi - - local destination="${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - - if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink "${source}")" - fi - - # use filter instead of exclude so missing patterns dont' throw errors - echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" - - local basename - basename="$(basename -s .framework "$1")" - binary="${destination}/${basename}.framework/${basename}" - if ! [ -r "$binary" ]; then - binary="${destination}/${basename}" - fi - - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then - strip_invalid_archs "$binary" - fi - - # Resign the code if required by the build settings to avoid unstable apps - code_sign_if_enabled "${destination}/$(basename "$1")" - - # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. - if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then - local swift_runtime_libs - swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) - for lib in $swift_runtime_libs; do - echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" - rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" - code_sign_if_enabled "${destination}/${lib}" - done - fi -} - -# Signs a framework with the provided identity -code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then - # Use the current code_sign_identitiy - echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements \"$1\"" - /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements "$1" - fi -} - -# Strip invalid architectures -strip_invalid_archs() { - binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" - stripped="" - for arch in $archs; do - if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then - # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$binary" "$binary" || exit 1 - stripped="$stripped $arch" - fi - done - if [[ "$stripped" ]]; then - echo "Stripped $binary of architectures:$stripped" - fi -} - - -if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "Pods/AFNetworking.framework" - install_framework "Pods/Bolts.framework" - install_framework "Pods/ChameleonFramework.framework" - install_framework "Pods/FlatUIKit.framework" - install_framework "Pods/IQKeyboardManager.framework" - install_framework "Pods/Parse.framework" - install_framework "Pods/ParseUI.framework" - install_framework "Pods/SDWebImage.framework" - install_framework "Pods/Unirest.framework" -fi -if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "Pods/AFNetworking.framework" - install_framework "Pods/Bolts.framework" - install_framework "Pods/ChameleonFramework.framework" - install_framework "Pods/FlatUIKit.framework" - install_framework "Pods/IQKeyboardManager.framework" - install_framework "Pods/Parse.framework" - install_framework "Pods/ParseUI.framework" - install_framework "Pods/SDWebImage.framework" - install_framework "Pods/Unirest.framework" -fi diff --git a/FoodbLog/Pods/Target Support Files/Pods/Pods-resources.sh b/FoodbLog/Pods/Target Support Files/Pods/Pods-resources.sh deleted file mode 100755 index 16774fb..0000000 --- a/FoodbLog/Pods/Target Support Files/Pods/Pods-resources.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/sh -set -e - -mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - -RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt -> "$RESOURCES_TO_COPY" - -XCASSET_FILES=() - -realpath() { - DIRECTORY="$(cd "${1%/*}" && pwd)" - FILENAME="${1##*/}" - echo "$DIRECTORY/$FILENAME" -} - -install_resource() -{ - case $1 in - *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" - ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" - ;; - *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" - ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" - ;; - *.framework) - echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - ;; - *.xcdatamodel) - echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" - xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" - ;; - *.xcdatamodeld) - echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" - xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" - ;; - *.xcmappingmodel) - echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" - xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" - ;; - *.xcassets) - ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") - XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") - ;; - /*) - echo "$1" - echo "$1" >> "$RESOURCES_TO_COPY" - ;; - *) - echo "${PODS_ROOT}/$1" - echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" - ;; - esac -} - -mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then - mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi -rm -f "$RESOURCES_TO_COPY" - -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] -then - case "${TARGETED_DEVICE_FAMILY}" in - 1,2) - TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" - ;; - 1) - TARGET_DEVICE_ARGS="--target-device iphone" - ;; - 2) - TARGET_DEVICE_ARGS="--target-device ipad" - ;; - *) - TARGET_DEVICE_ARGS="--target-device mac" - ;; - esac - - # Find all other xcassets (this unfortunately includes those of path pods and other targets). - OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) - while read line; do - if [[ $line != "`realpath $PODS_ROOT`*" ]]; then - XCASSET_FILES+=("$line") - fi - done <<<"$OTHER_XCASSETS" - - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi diff --git a/FoodbLog/Pods/Target Support Files/Pods/Pods-umbrella.h b/FoodbLog/Pods/Target Support Files/Pods/Pods-umbrella.h deleted file mode 100644 index 21dcfd2..0000000 --- a/FoodbLog/Pods/Target Support Files/Pods/Pods-umbrella.h +++ /dev/null @@ -1,6 +0,0 @@ -#import - - -FOUNDATION_EXPORT double PodsVersionNumber; -FOUNDATION_EXPORT const unsigned char PodsVersionString[]; - diff --git a/FoodbLog/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/FoodbLog/Pods/Target Support Files/Pods/Pods.debug.xcconfig deleted file mode 100644 index a642cde..0000000 --- a/FoodbLog/Pods/Target Support Files/Pods/Pods.debug.xcconfig +++ /dev/null @@ -1,6 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$CONFIGURATION_BUILD_DIR/AFNetworking.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/Bolts.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/ChameleonFramework.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/FlatUIKit.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/IQKeyboardManager.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/Parse.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/ParseUI.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/SDWebImage.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/Unirest.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "AFNetworking" -framework "Bolts" -framework "ChameleonFramework" -framework "FlatUIKit" -framework "IQKeyboardManager" -framework "Parse" -framework "ParseUI" -framework "SDWebImage" -framework "Unirest" -PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods -PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/FoodbLog/Pods/Target Support Files/Pods/Pods.modulemap b/FoodbLog/Pods/Target Support Files/Pods/Pods.modulemap deleted file mode 100644 index 8413413..0000000 --- a/FoodbLog/Pods/Target Support Files/Pods/Pods.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pods { - umbrella header "Pods-umbrella.h" - - export * - module * { export * } -} diff --git a/FoodbLog/Pods/Target Support Files/Pods/Pods.release.xcconfig b/FoodbLog/Pods/Target Support Files/Pods/Pods.release.xcconfig deleted file mode 100644 index a642cde..0000000 --- a/FoodbLog/Pods/Target Support Files/Pods/Pods.release.xcconfig +++ /dev/null @@ -1,6 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$CONFIGURATION_BUILD_DIR/AFNetworking.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/Bolts.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/ChameleonFramework.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/FlatUIKit.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/IQKeyboardManager.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/Parse.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/ParseUI.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/SDWebImage.framework/Headers" -iquote "$CONFIGURATION_BUILD_DIR/Unirest.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "AFNetworking" -framework "Bolts" -framework "ChameleonFramework" -framework "FlatUIKit" -framework "IQKeyboardManager" -framework "Parse" -framework "ParseUI" -framework "SDWebImage" -framework "Unirest" -PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods -PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/FoodbLog/Pods/Target Support Files/SDWebImage/Info.plist b/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist similarity index 92% rename from FoodbLog/Pods/Target Support Files/SDWebImage/Info.plist rename to FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist index 1672e4c..4429822 100644 --- a/FoodbLog/Pods/Target Support Files/SDWebImage/Info.plist +++ b/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + ${PRODUCT_BUNDLE_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch b/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch index aa992a4..beb2a24 100644 --- a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch +++ b/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch @@ -1,4 +1,12 @@ #ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif #endif diff --git a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-umbrella.h b/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-umbrella.h index 5a051dd..01738a5 100644 --- a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-umbrella.h +++ b/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-umbrella.h @@ -1,4 +1,14 @@ +#ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif #import "NSData+ImageContentType.h" #import "SDImageCache.h" diff --git a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig b/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig new file mode 100644 index 0000000..f4625a7 --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig @@ -0,0 +1,12 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "ImageIO" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig b/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig new file mode 100644 index 0000000..f4625a7 --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig @@ -0,0 +1,12 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "ImageIO" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig b/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig deleted file mode 100644 index 5e7aea2..0000000 --- a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SDWebImage" "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = -framework "ImageIO" -PODS_ROOT = ${SRCROOT} -SKIP_INSTALL = YES \ No newline at end of file diff --git a/FoodbLog/Pods/Target Support Files/Unirest/Info.plist b/FoodbLog/Pods/Target Support Files/Unirest/Unirest-Info.plist similarity index 92% rename from FoodbLog/Pods/Target Support Files/Unirest/Info.plist rename to FoodbLog/Pods/Target Support Files/Unirest/Unirest-Info.plist index 622e79a..02abef5 100644 --- a/FoodbLog/Pods/Target Support Files/Unirest/Info.plist +++ b/FoodbLog/Pods/Target Support Files/Unirest/Unirest-Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + ${PRODUCT_BUNDLE_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/FoodbLog/Pods/Target Support Files/Unirest/Unirest-prefix.pch b/FoodbLog/Pods/Target Support Files/Unirest/Unirest-prefix.pch index aa992a4..beb2a24 100644 --- a/FoodbLog/Pods/Target Support Files/Unirest/Unirest-prefix.pch +++ b/FoodbLog/Pods/Target Support Files/Unirest/Unirest-prefix.pch @@ -1,4 +1,12 @@ #ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif #endif diff --git a/FoodbLog/Pods/Target Support Files/Unirest/Unirest-umbrella.h b/FoodbLog/Pods/Target Support Files/Unirest/Unirest-umbrella.h index c5e9fce..1c9af41 100644 --- a/FoodbLog/Pods/Target Support Files/Unirest/Unirest-umbrella.h +++ b/FoodbLog/Pods/Target Support Files/Unirest/Unirest-umbrella.h @@ -1,4 +1,14 @@ +#ifdef __OBJC__ #import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif #import "Base64.h" #import "UNIHTTPClientHelper.h" @@ -6,14 +16,14 @@ #import "UNIHTTPRequestWithBody.h" #import "UNIRest.h" #import "UNIUrlConnection.h" -#import "UNIBaseRequest.h" -#import "UNIBodyRequest.h" -#import "UNISimpleRequest.h" -#import "UNIHTTPBinaryResponse.h" -#import "UNIHTTPJsonResponse.h" -#import "UNIHTTPResponse.h" -#import "UNIHTTPStringResponse.h" -#import "UNIJsonNode.h" +#import "HttpRequest/UNIBaseRequest.h" +#import "HttpRequest/UNIBodyRequest.h" +#import "HttpRequest/UNISimpleRequest.h" +#import "HttpResponse/UNIHTTPBinaryResponse.h" +#import "HttpResponse/UNIHTTPJsonResponse.h" +#import "HttpResponse/UNIHTTPResponse.h" +#import "HttpResponse/UNIHTTPStringResponse.h" +#import "HttpResponse/UNIJsonNode.h" FOUNDATION_EXPORT double UnirestVersionNumber; FOUNDATION_EXPORT const unsigned char UnirestVersionString[]; diff --git a/FoodbLog/Pods/Target Support Files/Unirest/Unirest.debug.xcconfig b/FoodbLog/Pods/Target Support Files/Unirest/Unirest.debug.xcconfig new file mode 100644 index 0000000..a13dd26 --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/Unirest/Unirest.debug.xcconfig @@ -0,0 +1,11 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Unirest +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Unirest +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/Unirest/Unirest.release.xcconfig b/FoodbLog/Pods/Target Support Files/Unirest/Unirest.release.xcconfig new file mode 100644 index 0000000..a13dd26 --- /dev/null +++ b/FoodbLog/Pods/Target Support Files/Unirest/Unirest.release.xcconfig @@ -0,0 +1,11 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Unirest +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Unirest +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/Unirest/Unirest.xcconfig b/FoodbLog/Pods/Target Support Files/Unirest/Unirest.xcconfig deleted file mode 100644 index 9c70924..0000000 --- a/FoodbLog/Pods/Target Support Files/Unirest/Unirest.xcconfig +++ /dev/null @@ -1,4 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Unirest" "${PODS_ROOT}/Headers/Public" -PODS_ROOT = ${SRCROOT} -SKIP_INSTALL = YES \ No newline at end of file From 0d1444a1792d4d2ce53d5a8e8634c8f6147fc040 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Wed, 5 Apr 2023 08:22:05 +0100 Subject: [PATCH 02/29] add gitignore to project --- FoodbLog/.gitignore | 72 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 FoodbLog/.gitignore diff --git a/FoodbLog/.gitignore b/FoodbLog/.gitignore new file mode 100644 index 0000000..25681d9 --- /dev/null +++ b/FoodbLog/.gitignore @@ -0,0 +1,72 @@ +*.DS_Store + +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ +xcshareddata/ + +## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) +*.xcscmblueprint +*.xccheckout + +## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) +build/ +DerivedData/ +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +Pods/ + +# +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build/ + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output + +# Code Injection +# +# After new code Injection tools there's a generated folder /iOSInjectionProject +# https://github.com/johnno1962/injectionforxcode + +iOSInjectionProject/ \ No newline at end of file From 5238152f201c01fcaa629bc6c71065d3afcecf3b Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Wed, 5 Apr 2023 08:35:28 +0100 Subject: [PATCH 03/29] upgrade podfile version --- FoodbLog/Podfile | 4 ++-- FoodbLog/Podfile.lock | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/FoodbLog/Podfile b/FoodbLog/Podfile index 55dbe57..aee8674 100644 --- a/FoodbLog/Podfile +++ b/FoodbLog/Podfile @@ -4,10 +4,10 @@ use_frameworks! pod 'ChameleonFramework' pod 'Parse', '~> 1.9' -pod 'ParseUI', '~> 1.1' +pod 'ParseUI', '~> 1.2' pod 'AFNetworking', '~> 2.6' pod 'SDWebImage', '~> 3.7' -pod 'IQKeyboardManager', '~> 3.3' +pod 'IQKeyboardManager', '4.0.11' pod 'FlatUIKit' pod 'Unirest', '~> 1.1.4' diff --git a/FoodbLog/Podfile.lock b/FoodbLog/Podfile.lock index 5eed667..463da6c 100644 --- a/FoodbLog/Podfile.lock +++ b/FoodbLog/Podfile.lock @@ -25,12 +25,12 @@ PODS: - ChameleonFramework/Default (= 2.0.4) - ChameleonFramework/Default (2.0.4) - FlatUIKit (1.6.2) - - IQKeyboardManager (3.3.2) + - IQKeyboardManager (4.0.11) - Parse (1.9.0): - Bolts/Tasks (>= 1.3.0) - - ParseUI (1.1.6): - - Bolts/Tasks (~> 1.2) - - Parse (~> 1.8) + - ParseUI (1.2.0): + - Bolts/Tasks (~> 1.3) + - Parse (~> 1.9) - SDWebImage (3.7.3): - SDWebImage/Core (= 3.7.3) - SDWebImage/Core (3.7.3) @@ -40,9 +40,9 @@ DEPENDENCIES: - AFNetworking (~> 2.6) - ChameleonFramework - FlatUIKit - - IQKeyboardManager (~> 3.3) + - IQKeyboardManager (= 4.0.11) - Parse (~> 1.9) - - ParseUI (~> 1.1) + - ParseUI (~> 1.2) - SDWebImage (~> 3.7) - Unirest (~> 1.1.4) @@ -63,12 +63,12 @@ SPEC CHECKSUMS: Bolts: 805a4a87413e49d4a0c2b7d469084cbc46b09342 ChameleonFramework: 5abe69b1f2a6cc79c3c435fcd9d3d855748225ee FlatUIKit: 1b41f0d4952ce8d970d8479ce79df54a960242c4 - IQKeyboardManager: d863eb0bca424d1f6dad6bdd1f856af52664add8 + IQKeyboardManager: 83eae5318483a34eb2069ef413d195b97605232e Parse: 712efbc476d4f47b0f96b70db7e53101575753aa - ParseUI: a5e6d48f2e4fcc61f78c4f31a3252c0e7c0b2d79 + ParseUI: 2b37a0bc692a3e7666cf0c37b5521dfddd74a1af SDWebImage: 1d2b1a1efda1ade1b00b6f8498865f8ddedc8a84 Unirest: 5e4d93eaf32463bf619a4ecd3bbc8c32acf21eac -PODFILE CHECKSUM: 03d171a15bf65394dfd97b11c36be192765b3f6e +PODFILE CHECKSUM: 09b53eef3412218e3591c5319fce8435cc752a95 COCOAPODS: 1.11.3 From 0431890556a98a8d98829819c7340050eda22c41 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Wed, 5 Apr 2023 09:08:42 +0100 Subject: [PATCH 04/29] replace objective c app delegate to swift, https://medium.com/@kennethpoon/newbies-journey-on-cleaning-up-the-massive-appdelegate-comic-style-94008075e51d --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 54 ++++-- FoodbLog/FoodbLog/AppDelegate.h | 18 -- FoodbLog/FoodbLog/AppDelegate.m | 74 -------- FoodbLog/FoodbLog/AppDelegate.swift | 48 ++++++ FoodbLog/FoodbLog/Base.lproj/Main.storyboard | 163 +++++++++--------- FoodbLog/FoodbLog/ChemeleonAppDelegate.swift | 19 ++ FoodbLog/FoodbLog/CreateLogViewController.m | 2 +- .../FoodbLog/{FoodbLogObject.h => FoodLog.h} | 0 .../FoodbLog/{FoodbLogObject.m => FoodLog.m} | 2 +- .../FoodbLog/FoodLogDetailViewController.h | 2 +- FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h | 5 + .../FoodbLogCollectionViewController.h | 2 +- .../FoodbLogCollectionViewController.m | 2 +- FoodbLog/FoodbLog/ParseDBAppDelegate.swift | 31 ++++ FoodbLog/FoodbLog/main.m | 17 -- 15 files changed, 224 insertions(+), 215 deletions(-) delete mode 100644 FoodbLog/FoodbLog/AppDelegate.h delete mode 100644 FoodbLog/FoodbLog/AppDelegate.m create mode 100644 FoodbLog/FoodbLog/AppDelegate.swift create mode 100644 FoodbLog/FoodbLog/ChemeleonAppDelegate.swift rename FoodbLog/FoodbLog/{FoodbLogObject.h => FoodLog.h} (100%) rename FoodbLog/FoodbLog/{FoodbLogObject.m => FoodLog.m} (93%) create mode 100644 FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h create mode 100644 FoodbLog/FoodbLog/ParseDBAppDelegate.swift delete mode 100644 FoodbLog/FoodbLog/main.m diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index 4eb8168..59f2c9f 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -9,15 +9,13 @@ /* Begin PBXBuildFile section */ 298471A01BD406A8006282CC /* FoodLogDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2984719F1BD406A8006282CC /* FoodLogDetailViewController.m */; }; 298471A31BD4097A006282CC /* FoodFeedDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 298471A21BD4097A006282CC /* FoodFeedDetailViewController.m */; }; - 29E25D4A1BCAB8480015A16F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29E25D491BCAB8480015A16F /* main.m */; }; - 29E25D4D1BCAB8480015A16F /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 29E25D4C1BCAB8480015A16F /* AppDelegate.m */; }; 29E25D531BCAB8480015A16F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 29E25D511BCAB8480015A16F /* Main.storyboard */; }; 29E25D551BCAB8480015A16F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 29E25D541BCAB8480015A16F /* Assets.xcassets */; }; 29E25D631BCAB8490015A16F /* FoodbLogTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 29E25D621BCAB8490015A16F /* FoodbLogTests.m */; }; 29E25D6E1BCAB8490015A16F /* FoodbLogUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 29E25D6D1BCAB8490015A16F /* FoodbLogUITests.m */; }; 29E25D801BCAC9D50015A16F /* CreateLogViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 29E25D7F1BCAC9D50015A16F /* CreateLogViewController.m */; }; 29F703611BCB923F009B7A82 /* FoodbLogCustomCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 29F703601BCB923F009B7A82 /* FoodbLogCustomCell.m */; }; - 29F703A31BD08C5C009B7A82 /* FoodbLogObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 29F703A21BD08C5C009B7A82 /* FoodbLogObject.m */; }; + 29F703A31BD08C5C009B7A82 /* FoodLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 29F703A21BD08C5C009B7A82 /* FoodLog.m */; }; 507F55891BD965B10059C2B3 /* RecipeTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 507F55881BD965B10059C2B3 /* RecipeTableViewCell.m */; }; 50967FC71BD5C8F40029D6AB /* SignPainter-HouseScript.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 50967FC61BD5C8F40029D6AB /* SignPainter-HouseScript.ttf */; }; 50967FD11BD5E36F0029D6AB /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 50967FD01BD5E36F0029D6AB /* Launch Screen.storyboard */; }; @@ -30,7 +28,10 @@ 50F7C67E1BCB08BA00A969D1 /* FoodFeedCustomCVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F7C67D1BCB08BA00A969D1 /* FoodFeedCustomCVC.m */; }; 5D2957241BD3F8FE0029FD65 /* FoodFeedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D2957231BD3F8FE0029FD65 /* FoodFeedObject.m */; }; 5DAB1BE71BCDD7480088D08D /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DAB1BE61BCDD7480088D08D /* CoreLocation.framework */; }; - 98DA133F1216497FA2A9B319 /* BuildFile in Frameworks */ = {isa = PBXBuildFile; settings = {ATTRIBUTES = (Weak, ); }; }; + 7FB90DE929DD5E6600A50433 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */; }; + 7FB90DEB29DD630F00A50433 /* ParseDBAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */; }; + 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEC29DD635600A50433 /* ChemeleonAppDelegate.swift */; }; + 98DA133F1216497FA2A9B319 /* (null) in Frameworks */ = {isa = PBXBuildFile; settings = {ATTRIBUTES = (Weak, ); }; }; C3B336E8EF6CFBF4BDE8E605 /* Pods_FoodbLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFC92113A3941C665760DE31 /* Pods_FoodbLog.framework */; }; /* End PBXBuildFile section */ @@ -57,9 +58,6 @@ 298471A11BD4097A006282CC /* FoodFeedDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodFeedDetailViewController.h; sourceTree = ""; }; 298471A21BD4097A006282CC /* FoodFeedDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodFeedDetailViewController.m; sourceTree = ""; }; 29E25D451BCAB8480015A16F /* FoodbLog.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FoodbLog.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 29E25D491BCAB8480015A16F /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 29E25D4B1BCAB8480015A16F /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 29E25D4C1BCAB8480015A16F /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 29E25D521BCAB8480015A16F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 29E25D541BCAB8480015A16F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 29E25D591BCAB8480015A16F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -73,8 +71,8 @@ 29E25D7F1BCAC9D50015A16F /* CreateLogViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CreateLogViewController.m; sourceTree = ""; }; 29F7035F1BCB923F009B7A82 /* FoodbLogCustomCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodbLogCustomCell.h; sourceTree = ""; }; 29F703601BCB923F009B7A82 /* FoodbLogCustomCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodbLogCustomCell.m; sourceTree = ""; }; - 29F703A11BD08C5C009B7A82 /* FoodbLogObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodbLogObject.h; sourceTree = ""; }; - 29F703A21BD08C5C009B7A82 /* FoodbLogObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodbLogObject.m; sourceTree = ""; }; + 29F703A11BD08C5C009B7A82 /* FoodLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodLog.h; sourceTree = ""; }; + 29F703A21BD08C5C009B7A82 /* FoodLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodLog.m; sourceTree = ""; }; 507F55871BD965B10059C2B3 /* RecipeTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecipeTableViewCell.h; sourceTree = ""; }; 507F55881BD965B10059C2B3 /* RecipeTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecipeTableViewCell.m; sourceTree = ""; }; 50967FC61BD5C8F40029D6AB /* SignPainter-HouseScript.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SignPainter-HouseScript.ttf"; sourceTree = ""; }; @@ -97,6 +95,10 @@ 5D2957231BD3F8FE0029FD65 /* FoodFeedObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodFeedObject.m; sourceTree = ""; }; 5DAB1BE61BCDD7480088D08D /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; 69A81EF376647BA708026D38 /* Pods-FoodbLog.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FoodbLog.debug.xcconfig"; path = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog.debug.xcconfig"; sourceTree = ""; }; + 7FB90DE729DD5E6500A50433 /* FoodbLog-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FoodbLog-Bridging-Header.h"; sourceTree = ""; }; + 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseDBAppDelegate.swift; sourceTree = ""; }; + 7FB90DEC29DD635600A50433 /* ChemeleonAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChemeleonAppDelegate.swift; sourceTree = ""; }; AFC92113A3941C665760DE31 /* Pods_FoodbLog.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FoodbLog.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FCF5CA5CCBE07821CE7C4EE2 /* Pods-FoodbLog.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FoodbLog.release.xcconfig"; path = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -107,7 +109,7 @@ buildActionMask = 2147483647; files = ( 5DAB1BE71BCDD7480088D08D /* CoreLocation.framework in Frameworks */, - 98DA133F1216497FA2A9B319 /* BuildFile in Frameworks */, + 98DA133F1216497FA2A9B319 /* (null) in Frameworks */, C3B336E8EF6CFBF4BDE8E605 /* Pods_FoodbLog.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -141,8 +143,8 @@ 294C32BC1C93182200795520 /* Model */ = { isa = PBXGroup; children = ( - 29F703A11BD08C5C009B7A82 /* FoodbLogObject.h */, - 29F703A21BD08C5C009B7A82 /* FoodbLogObject.m */, + 29F703A11BD08C5C009B7A82 /* FoodLog.h */, + 29F703A21BD08C5C009B7A82 /* FoodLog.m */, 5D2957221BD3F8FE0029FD65 /* FoodFeedObject.h */, 5D2957231BD3F8FE0029FD65 /* FoodFeedObject.m */, ); @@ -275,9 +277,9 @@ 29E25D471BCAB8480015A16F /* FoodbLog */ = { isa = PBXGroup; children = ( + 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */, + 7FB90DE729DD5E6500A50433 /* FoodbLog-Bridging-Header.h */, 29E25D511BCAB8480015A16F /* Main.storyboard */, - 29E25D4B1BCAB8480015A16F /* AppDelegate.h */, - 29E25D4C1BCAB8480015A16F /* AppDelegate.m */, 294C32BC1C93182200795520 /* Model */, 294C32BD1C93183F00795520 /* Views */, 294C32BB1C93181400795520 /* Controllers */, @@ -293,7 +295,8 @@ isa = PBXGroup; children = ( 50967FC61BD5C8F40029D6AB /* SignPainter-HouseScript.ttf */, - 29E25D491BCAB8480015A16F /* main.m */, + 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */, + 7FB90DEC29DD635600A50433 /* ChemeleonAppDelegate.swift */, ); name = "Supporting Files"; sourceTree = ""; @@ -322,7 +325,6 @@ 69A81EF376647BA708026D38 /* Pods-FoodbLog.debug.xcconfig */, FCF5CA5CCBE07821CE7C4EE2 /* Pods-FoodbLog.release.xcconfig */, ); - name = Pods; path = Pods; sourceTree = ""; }; @@ -405,6 +407,7 @@ 29E25D441BCAB8480015A16F = { CreatedOnToolsVersion = 7.0.1; DevelopmentTeam = N48NM3R37Q; + LastSwiftMigration = 1420; }; 29E25D5D1BCAB8480015A16F = { CreatedOnToolsVersion = 7.0.1; @@ -423,6 +426,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -530,22 +534,23 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 7FB90DEB29DD630F00A50433 /* ParseDBAppDelegate.swift in Sources */, 50F7C6781BCAF72B00A969D1 /* InstagramImagePickerCustomCell.m in Sources */, 50D767B21BCC785000C82B8B /* FoodbLogCollectionViewController.m in Sources */, 50EC0D181BD0545C0045B513 /* RestaurantPickerTableViewController.m in Sources */, 50A3C2C41BCAE4AD0077F79B /* InstagramImagePicker.m in Sources */, + 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */, 5D2957241BD3F8FE0029FD65 /* FoodFeedObject.m in Sources */, 50967FD41BD6F6930029D6AB /* RecipeTableViewController.m in Sources */, - 29F703A31BD08C5C009B7A82 /* FoodbLogObject.m in Sources */, + 29F703A31BD08C5C009B7A82 /* FoodLog.m in Sources */, 29F703611BCB923F009B7A82 /* FoodbLogCustomCell.m in Sources */, 507F55891BD965B10059C2B3 /* RecipeTableViewCell.m in Sources */, 298471A31BD4097A006282CC /* FoodFeedDetailViewController.m in Sources */, - 29E25D4D1BCAB8480015A16F /* AppDelegate.m in Sources */, 50D767B81BCC895900C82B8B /* FoodFeedViewController.m in Sources */, 298471A01BD406A8006282CC /* FoodLogDetailViewController.m in Sources */, 50F7C67E1BCB08BA00A969D1 /* FoodFeedCustomCVC.m in Sources */, 29E25D801BCAC9D50015A16F /* CreateLogViewController.m in Sources */, - 29E25D4A1BCAB8480015A16F /* main.m in Sources */, + 7FB90DE929DD5E6600A50433 /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -678,6 +683,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; INFOPLIST_FILE = FoodbLog/Info.plist; @@ -685,6 +691,9 @@ PRODUCT_BUNDLE_IDENTIFIER = com.ayunavogel.FoodbLog; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; + SWIFT_OBJC_BRIDGING_HEADER = "FoodbLog/FoodbLog-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; }; name = Debug; }; @@ -694,6 +703,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; INFOPLIST_FILE = FoodbLog/Info.plist; @@ -701,12 +711,15 @@ PRODUCT_BUNDLE_IDENTIFIER = com.ayunavogel.FoodbLog; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; + SWIFT_OBJC_BRIDGING_HEADER = "FoodbLog/FoodbLog-Bridging-Header.h"; + SWIFT_VERSION = 5.0; }; name = Release; }; 29E25D761BCAB8490015A16F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; INFOPLIST_FILE = FoodbLogTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; @@ -719,6 +732,7 @@ 29E25D771BCAB8490015A16F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; INFOPLIST_FILE = FoodbLogTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; @@ -731,6 +745,7 @@ 29E25D791BCAB8490015A16F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; INFOPLIST_FILE = FoodbLogUITests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.ayunavogel.FoodbLogUITests; @@ -743,6 +758,7 @@ 29E25D7A1BCAB8490015A16F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; INFOPLIST_FILE = FoodbLogUITests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.ayunavogel.FoodbLogUITests; diff --git a/FoodbLog/FoodbLog/AppDelegate.h b/FoodbLog/FoodbLog/AppDelegate.h deleted file mode 100644 index 7b8d772..0000000 --- a/FoodbLog/FoodbLog/AppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AppDelegate.h -// FoodbLog -// -// Created by Ayuna Vogel on 10/11/15. -// Copyright © 2015 Ayuna Vogel. All rights reserved. -// - -#import -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - - -@end - diff --git a/FoodbLog/FoodbLog/AppDelegate.m b/FoodbLog/FoodbLog/AppDelegate.m deleted file mode 100644 index 0f2ea79..0000000 --- a/FoodbLog/FoodbLog/AppDelegate.m +++ /dev/null @@ -1,74 +0,0 @@ -// -// AppDelegate.m -// FoodbLog -// -// Created by Ayuna Vogel on 10/11/15. -// Copyright © 2015 Ayuna Vogel. All rights reserved. -// - -#import -#import - -#import "AppDelegate.h" -#import "FoodbLogObject.h" - -NSString * const parseApplicationId = @"rjpud8TLiUXDlfbMapE2epIj6lwTPafkhWQInPs3"; //@"YOUR_PARSE_APP_ID"; -NSString * const parseClientKey = @"je9HpthLghFr4MRHSvWTLlBBxJVb3udoZ8XmTisz"; //@"YOUR_PARSE_CLIENT_KEY"; - -@interface AppDelegate () - -@end - -@implementation AppDelegate - - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - - [self setParseDatabase]; - - [Chameleon setGlobalThemeUsingPrimaryColor:[UIColor flatOrangeColor] withContentStyle:UIContentStyleLight]; - - return YES; -} - -- (void)setParseDatabase { - - // [Optional] Power your app with Local Datastore. For more info, go to - // https://parse.com/docs/ios_guide#localdatastore/iOS - [Parse enableLocalDatastore]; - - // Initialize Parse. - [Parse setApplicationId:parseApplicationId - clientKey:parseClientKey]; - - [FoodLog registerSubclass]; - - // [Optional] Track statistics around application opens. - // This method should be inside the didFinishLaunchingWithOptions method. - //[PFAnalytics trackAppOpenedWithLaunchOptions:launchOptions]; - -} - -- (void)applicationWillResignActive:(UIApplication *)application { - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. -} - -- (void)applicationDidEnterBackground:(UIApplication *)application { - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. -} - -- (void)applicationWillEnterForeground:(UIApplication *)application { - // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. -} - -- (void)applicationDidBecomeActive:(UIApplication *)application { - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. -} - -- (void)applicationWillTerminate:(UIApplication *)application { - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. -} - -@end diff --git a/FoodbLog/FoodbLog/AppDelegate.swift b/FoodbLog/FoodbLog/AppDelegate.swift new file mode 100644 index 0000000..7a129fd --- /dev/null +++ b/FoodbLog/FoodbLog/AppDelegate.swift @@ -0,0 +1,48 @@ +// +// AppDelegate.swift +// FoodbLog +// +// Created by Ikmal Azman on 05/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + let services : [UIApplicationDelegate] = [ParseDBAppDelegate(), ChameleonAppDelegate()] + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + + for service in services { + _ = service.application?(application, didFinishLaunchingWithOptions: launchOptions) + } + + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground. + } +} diff --git a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard index b92ac1b..44af616 100644 --- a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard +++ b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard @@ -1,8 +1,10 @@ - - + + + - - + + + @@ -14,29 +16,29 @@ - + - + Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. - - + @@ -111,9 +113,9 @@ - + - + @@ -122,7 +124,7 @@ - + @@ -136,7 +138,6 @@ - @@ -157,7 +158,7 @@ - + @@ -166,7 +167,7 @@ - + @@ -177,12 +178,12 @@ - + - + - + @@ -191,7 +192,7 @@ - + @@ -213,7 +214,7 @@ @@ -236,7 +237,6 @@ - @@ -268,7 +268,7 @@ - + @@ -279,7 +279,7 @@ - + @@ -291,8 +291,8 @@ - - + + @@ -320,17 +320,17 @@ - + - + - + - + @@ -339,20 +339,20 @@ - + Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. - - + @@ -387,7 +387,7 @@ - + @@ -407,10 +407,10 @@ - + - + @@ -419,12 +419,12 @@ - + - + @@ -433,7 +433,7 @@ - + @@ -441,21 +441,21 @@ - - - + @@ -463,7 +463,7 @@ - + @@ -478,15 +478,15 @@ - + - + - + @@ -556,9 +556,9 @@ - + - + @@ -581,7 +581,6 @@ - @@ -610,29 +609,29 @@ - + - + - + - + - - - + + + - - + @@ -652,7 +651,7 @@ - + @@ -674,29 +673,29 @@ - + - + - + - + @@ -720,8 +719,8 @@ - - + + @@ -730,7 +729,7 @@ - + @@ -739,7 +738,7 @@ - + @@ -749,7 +748,7 @@ - + @@ -758,7 +757,7 @@ - + @@ -768,7 +767,7 @@ - + diff --git a/FoodbLog/FoodbLog/ChemeleonAppDelegate.swift b/FoodbLog/FoodbLog/ChemeleonAppDelegate.swift new file mode 100644 index 0000000..746f656 --- /dev/null +++ b/FoodbLog/FoodbLog/ChemeleonAppDelegate.swift @@ -0,0 +1,19 @@ +// +// ChemeleonAppDelegate.swift +// FoodbLog +// +// Created by Ikmal Azman on 05/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import UIKit +import ChameleonFramework + +final class ChameleonAppDelegate : NSObject, UIApplicationDelegate { + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + + Chameleon.setGlobalThemeUsingPrimaryColor(.flatOrange(), with: .light) + return true + } +} diff --git a/FoodbLog/FoodbLog/CreateLogViewController.m b/FoodbLog/FoodbLog/CreateLogViewController.m index 1e4b8eb..3a25460 100644 --- a/FoodbLog/FoodbLog/CreateLogViewController.m +++ b/FoodbLog/FoodbLog/CreateLogViewController.m @@ -14,7 +14,7 @@ #import #import -#import "FoodbLogObject.h" +#import "FoodLog.h" #import "FoodFeedObject.h" #import "CreateLogViewController.h" #import "InstagramImagePicker.h" diff --git a/FoodbLog/FoodbLog/FoodbLogObject.h b/FoodbLog/FoodbLog/FoodLog.h similarity index 100% rename from FoodbLog/FoodbLog/FoodbLogObject.h rename to FoodbLog/FoodbLog/FoodLog.h diff --git a/FoodbLog/FoodbLog/FoodbLogObject.m b/FoodbLog/FoodbLog/FoodLog.m similarity index 93% rename from FoodbLog/FoodbLog/FoodbLogObject.m rename to FoodbLog/FoodbLog/FoodLog.m index 994e798..2fb0f34 100644 --- a/FoodbLog/FoodbLog/FoodbLogObject.m +++ b/FoodbLog/FoodbLog/FoodLog.m @@ -8,7 +8,7 @@ #import -#import "FoodbLogObject.h" +#import "FoodLog.h" // setting up Parse database for FoodLog object diff --git a/FoodbLog/FoodbLog/FoodLogDetailViewController.h b/FoodbLog/FoodbLog/FoodLogDetailViewController.h index 70e89f5..6cd0dff 100644 --- a/FoodbLog/FoodbLog/FoodLogDetailViewController.h +++ b/FoodbLog/FoodbLog/FoodLogDetailViewController.h @@ -8,7 +8,7 @@ #import -#import "FoodbLogObject.h" +#import "FoodLog.h" @interface FoodLogDetailViewController : UIViewController diff --git a/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h b/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h new file mode 100644 index 0000000..9d61ec6 --- /dev/null +++ b/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h @@ -0,0 +1,5 @@ +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// + +#import "FoodLog.h" diff --git a/FoodbLog/FoodbLog/FoodbLogCollectionViewController.h b/FoodbLog/FoodbLog/FoodbLogCollectionViewController.h index 95f17fc..e912483 100644 --- a/FoodbLog/FoodbLog/FoodbLogCollectionViewController.h +++ b/FoodbLog/FoodbLog/FoodbLogCollectionViewController.h @@ -8,7 +8,7 @@ #import -#import "FoodbLogObject.h" +#import "FoodLog.h" #import "FoodbLogCustomCell.h" @interface FoodbLogCollectionViewController : UICollectionViewController diff --git a/FoodbLog/FoodbLog/FoodbLogCollectionViewController.m b/FoodbLog/FoodbLog/FoodbLogCollectionViewController.m index a1d2e13..b576f57 100644 --- a/FoodbLog/FoodbLog/FoodbLogCollectionViewController.m +++ b/FoodbLog/FoodbLog/FoodbLogCollectionViewController.m @@ -10,7 +10,7 @@ #import #import -#import "FoodbLogObject.h" +#import "FoodLog.h" #import "FoodbLogCollectionViewController.h" #import "FoodbLogCustomCell.h" #import "FoodLogDetailViewController.h" diff --git a/FoodbLog/FoodbLog/ParseDBAppDelegate.swift b/FoodbLog/FoodbLog/ParseDBAppDelegate.swift new file mode 100644 index 0000000..7dceb86 --- /dev/null +++ b/FoodbLog/FoodbLog/ParseDBAppDelegate.swift @@ -0,0 +1,31 @@ +// +// ParseDBAppDelegate.swift +// FoodbLog +// +// Created by Ikmal Azman on 05/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import UIKit +import Parse + +final class ParseDBAppDelegate : NSObject, UIApplicationDelegate { + private let parseApplicationId = "rjpud8TLiUXDlfbMapE2epIj6lwTPafkhWQInPs3" + private let parseClientKey = "je9HpthLghFr4MRHSvWTLlBBxJVb3udoZ8XmTisz" + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + + /// [Optional] Power your app with Local Datastore. For more info, go to + /// https://parse.com/docs/ios_guide#localdatastore/iOS + Parse.enableLocalDatastore() + /// Initialize Parse. + Parse.setApplicationId(parseApplicationId, clientKey: parseClientKey) + + // [Optional] Track statistics around application opens. + // This method should be inside the didFinishLaunchingWithOptions method. + //[PFAnalytics trackAppOpenedWithLaunchOptions:launchOptions]; + + FoodLog.registerSubclass() + return true + } +} diff --git a/FoodbLog/FoodbLog/main.m b/FoodbLog/FoodbLog/main.m deleted file mode 100644 index dff750c..0000000 --- a/FoodbLog/FoodbLog/main.m +++ /dev/null @@ -1,17 +0,0 @@ - -// -// main.m -// FoodbLog -// -// Created by Ayuna Vogel on 10/11/15. -// Copyright © 2015 Ayuna Vogel. All rights reserved. -// - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} From 69f60cf59434917fa1976b93c2cd8ec1aff8d7bf Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Wed, 5 Apr 2023 09:10:31 +0100 Subject: [PATCH 05/29] --- FoodbLog/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FoodbLog/.gitignore b/FoodbLog/.gitignore index 25681d9..94a3ff3 100644 --- a/FoodbLog/.gitignore +++ b/FoodbLog/.gitignore @@ -43,7 +43,7 @@ Pods/ # # Add this line if you want to avoid checking in source code from the Xcode workspace -# *.xcworkspace +*.xcworkspace # Carthage # From 7468f77b4c1cd12245ede148456079b05624cbd9 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Wed, 5 Apr 2023 10:08:38 +0100 Subject: [PATCH 06/29] replace storyboard based UITabBar and UINavigation to programmatically initialization --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 4 + FoodbLog/FoodbLog/AppDelegate.swift | 15 +- .../AppIcon.appiconset/Contents.json | 55 +- FoodbLog/FoodbLog/Base.lproj/Main.storyboard | 75 +- FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h | 2 + FoodbLog/FoodbLog/Info.plist | 2 - FoodbLog/FoodbLog/RootTabBarVC.swift | 64 + .../Categories/IQNSArray+Sort.h | 8 +- .../Categories/IQNSArray+Sort.m | 4 +- .../Categories/IQUITextFieldView+Additions.h | 4 +- .../Categories/IQUITextFieldView+Additions.m | 4 +- .../Categories/IQUIView+Hierarchy.h | 33 +- .../Categories/IQUIView+Hierarchy.m | 176 +- .../Categories/IQUIViewController+Additions.h | 10 +- .../Categories/IQUIViewController+Additions.m | 8 +- .../Categories/IQUIWindow+Hierarchy.h | 8 +- .../Categories/IQUIWindow+Hierarchy.m | 4 +- .../Constants/IQKeyboardManagerConstants.h | 169 +- .../IQKeyboardManagerConstantsInternal.h | 26 +- .../IQKeyBoardManager/IQKeyboardManager.h | 200 +- .../IQKeyBoardManager/IQKeyboardManager.m | 1854 ++++--- .../IQKeyboardReturnKeyHandler.h | 38 +- .../IQKeyboardReturnKeyHandler.m | 409 +- .../IQKeyBoardManager/IQTextView/IQTextView.h | 6 +- .../IQKeyBoardManager/IQTextView/IQTextView.m | 25 +- .../IQToolbar/IQBarButtonItem.h | 4 +- .../IQToolbar/IQBarButtonItem.m | 47 +- .../IQToolbar/IQTitleBarButtonItem.h | 47 +- .../IQToolbar/IQTitleBarButtonItem.m | 97 +- .../IQKeyBoardManager/IQToolbar/IQToolbar.h | 31 +- .../IQKeyBoardManager/IQToolbar/IQToolbar.m | 161 +- .../IQToolbar/IQUIView+IQKeyboardToolbar.h | 142 +- .../IQToolbar/IQUIView+IQKeyboardToolbar.m | 817 +-- FoodbLog/Pods/IQKeyboardManager/LICENSE.md | 2 +- FoodbLog/Pods/IQKeyboardManager/README.md | 389 +- FoodbLog/Pods/Manifest.lock | 18 +- .../Classes/Cells/PFCollectionViewCell.h | 22 +- .../Classes/Cells/PFPurchaseTableViewCell.h | 42 +- .../Classes/Cells/PFPurchaseTableViewCell.m | 4 +- .../ParseUI/Classes/Cells/PFTableViewCell.h | 18 +- ...FActivityIndicatorCollectionReusableView.h | 2 +- .../Cells/PFActivityIndicatorTableViewCell.h | 2 +- .../Internal/Extensions/PFUIAlertView.h | 46 +- .../Internal/Extensions/PFUIAlertView.m | 191 +- .../ParseUI/Classes/Internal/PFImageCache.h | 2 +- .../ParseUI/Classes/Internal/PFLocalization.h | 3 +- .../Internal/Views/Buttons/PFActionButton.m | 2 +- .../Classes/Internal/Views/PFLoadingView.h | 2 +- .../Classes/Internal/Views/PFLoadingView.m | 2 +- .../Classes/LogInViewController/PFLogInView.h | 128 +- .../Classes/LogInViewController/PFLogInView.m | 41 +- .../PFLogInViewController.h | 93 +- .../PFLogInViewController.m | 68 +- .../PFProductTableViewController.h | 12 +- .../PFProductTableViewController.m | 12 +- .../PFQueryCollectionViewController.h | 149 +- .../PFQueryCollectionViewController.m | 47 +- .../PFQueryTableViewController.h | 178 +- .../PFQueryTableViewController.m | 55 +- .../SignUpViewController/PFSignUpView.h | 102 +- .../SignUpViewController/PFSignUpView.m | 29 +- .../PFSignUpViewController.h | 81 +- .../PFSignUpViewController.m | 20 +- .../ParseUI/Classes/Views/PFImageView.h | 48 +- .../ParseUI/Classes/Views/PFImageView.m | 4 +- .../ParseUI/Classes/Views/PFTextField.h | 30 +- .../ParseUI/ParseUI/Generated/PFResources.h | 18 +- .../ParseUI/ParseUI/Other/ParseUIConstants.h | 32 - FoodbLog/Pods/Pods.xcodeproj/project.pbxproj | 4898 +++++++++-------- .../xcschemes/xcschememanagement.plist | 20 + .../IQKeyboardManager-Info.plist | 2 +- .../IQKeyboardManager-umbrella.h | 4 +- .../IQKeyboardManager.debug.xcconfig | 1 + .../IQKeyboardManager.release.xcconfig | 1 + .../ParseUI/ParseUI-Info.plist | 2 +- .../Pods-FoodbLog-acknowledgements.markdown | 2 +- .../Pods-FoodbLog-acknowledgements.plist | 2 +- 77 files changed, 6189 insertions(+), 5186 deletions(-) create mode 100644 FoodbLog/FoodbLog/RootTabBarVC.swift diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index 59f2c9f..d88deee 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -31,6 +31,7 @@ 7FB90DE929DD5E6600A50433 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */; }; 7FB90DEB29DD630F00A50433 /* ParseDBAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */; }; 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEC29DD635600A50433 /* ChemeleonAppDelegate.swift */; }; + 7FB90DF129DD668400A50433 /* RootTabBarVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DF029DD668400A50433 /* RootTabBarVC.swift */; }; 98DA133F1216497FA2A9B319 /* (null) in Frameworks */ = {isa = PBXBuildFile; settings = {ATTRIBUTES = (Weak, ); }; }; C3B336E8EF6CFBF4BDE8E605 /* Pods_FoodbLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFC92113A3941C665760DE31 /* Pods_FoodbLog.framework */; }; /* End PBXBuildFile section */ @@ -99,6 +100,7 @@ 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseDBAppDelegate.swift; sourceTree = ""; }; 7FB90DEC29DD635600A50433 /* ChemeleonAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChemeleonAppDelegate.swift; sourceTree = ""; }; + 7FB90DF029DD668400A50433 /* RootTabBarVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootTabBarVC.swift; sourceTree = ""; }; AFC92113A3941C665760DE31 /* Pods_FoodbLog.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FoodbLog.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FCF5CA5CCBE07821CE7C4EE2 /* Pods-FoodbLog.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FoodbLog.release.xcconfig"; path = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -287,6 +289,7 @@ 50967FD01BD5E36F0029D6AB /* Launch Screen.storyboard */, 29E25D591BCAB8480015A16F /* Info.plist */, 29E25D481BCAB8480015A16F /* Supporting Files */, + 7FB90DF029DD668400A50433 /* RootTabBarVC.swift */, ); path = FoodbLog; sourceTree = SOURCE_ROOT; @@ -534,6 +537,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 7FB90DF129DD668400A50433 /* RootTabBarVC.swift in Sources */, 7FB90DEB29DD630F00A50433 /* ParseDBAppDelegate.swift in Sources */, 50F7C6781BCAF72B00A969D1 /* InstagramImagePickerCustomCell.m in Sources */, 50D767B21BCC785000C82B8B /* FoodbLogCollectionViewController.m in Sources */, diff --git a/FoodbLog/FoodbLog/AppDelegate.swift b/FoodbLog/FoodbLog/AppDelegate.swift index 7a129fd..e8ece00 100644 --- a/FoodbLog/FoodbLog/AppDelegate.swift +++ b/FoodbLog/FoodbLog/AppDelegate.swift @@ -17,13 +17,16 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. + self.configureWindow() for service in services { _ = service.application?(application, didFinishLaunchingWithOptions: launchOptions) } return true } - +} + +extension AppDelegate { func applicationWillResignActive(_ application: UIApplication) { // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. @@ -46,3 +49,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground. } } + +private extension AppDelegate { + func configureWindow() { + let rootTabBarVC = RootTabBarVC() + + window = UIWindow(frame: UIScreen.main.bounds) + window?.rootViewController = rootTabBarVC + window?.makeKeyAndVisible() + } +} diff --git a/FoodbLog/FoodbLog/Assets.xcassets/AppIcon.appiconset/Contents.json b/FoodbLog/FoodbLog/Assets.xcassets/AppIcon.appiconset/Contents.json index 726a445..36e5e79 100644 --- a/FoodbLog/FoodbLog/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/FoodbLog/FoodbLog/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,44 +1,59 @@ { "images" : [ { - "size" : "29x29", "idiom" : "iphone", - "filename" : "icon58@2x.png", - "scale" : "2x" + "scale" : "2x", + "size" : "20x20" }, { - "size" : "29x29", "idiom" : "iphone", - "filename" : "icon87@3x.png", - "scale" : "3x" + "scale" : "3x", + "size" : "20x20" }, { - "size" : "40x40", + "filename" : "icon58@2x.png", "idiom" : "iphone", - "filename" : "icon80@2x.png", - "scale" : "2x" + "scale" : "2x", + "size" : "29x29" }, { - "size" : "40x40", + "filename" : "icon87@3x.png", "idiom" : "iphone", - "filename" : "icon120@3x.png", - "scale" : "3x" + "scale" : "3x", + "size" : "29x29" }, { - "size" : "60x60", + "filename" : "icon80@2x.png", "idiom" : "iphone", - "filename" : "icon120@2x.png", - "scale" : "2x" + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "icon120@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" }, { - "size" : "60x60", + "filename" : "icon120@2x.png", "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { "filename" : "icon180@3x.png", - "scale" : "3x" + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard index 44af616..444b605 100644 --- a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard +++ b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard @@ -1,5 +1,5 @@ - + @@ -16,7 +16,7 @@ - + @@ -111,7 +111,7 @@ - + @@ -172,7 +172,7 @@ - + @@ -192,7 +192,7 @@ - + @@ -291,7 +291,7 @@ - + @@ -387,7 +387,7 @@ - + @@ -407,7 +407,7 @@ - + @@ -712,69 +712,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h b/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h index 9d61ec6..81441ad 100644 --- a/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h +++ b/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h @@ -3,3 +3,5 @@ // #import "FoodLog.h" +#import "FoodbLogCollectionViewController.h" +#import "FoodFeedViewController.h" diff --git a/FoodbLog/FoodbLog/Info.plist b/FoodbLog/FoodbLog/Info.plist index a1ccf8c..f1f57df 100644 --- a/FoodbLog/FoodbLog/Info.plist +++ b/FoodbLog/FoodbLog/Info.plist @@ -37,8 +37,6 @@ UILaunchStoryboardName Launch Screen - UIMainStoryboardFile - Main UIRequiredDeviceCapabilities armv7 diff --git a/FoodbLog/FoodbLog/RootTabBarVC.swift b/FoodbLog/FoodbLog/RootTabBarVC.swift new file mode 100644 index 0000000..78ac5c9 --- /dev/null +++ b/FoodbLog/FoodbLog/RootTabBarVC.swift @@ -0,0 +1,64 @@ +// +// RootTabBarVC.swift +// FoodbLog +// +// Created by Ikmal Azman on 05/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import UIKit + +final class RootTabBarVC: UITabBarController { + + override func viewDidLoad() { + super.viewDidLoad() + setupVCs() + } + + func setupVCs() { + viewControllers = [ + firstTabBar(), + secondTabBar() + ] + } +} + +private extension RootTabBarVC { + func firstTabBar() -> UIViewController { + let vc = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "\(FoodbLogCollectionViewController.self)") as! FoodbLogCollectionViewController + + + return createNavigationController(for: vc, title: "Food bLog", image: UIImage(named: "Literature Filled-25")) + } + + func secondTabBar() -> UIViewController { + let vc = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "\(FoodFeedViewController.self)") + as! FoodFeedViewController + + return createNavigationController(for: vc, title: "Food Feed", image: UIImage(named: "Food Filled-25")) + } +} + +private extension RootTabBarVC { + + /// Generate UINavigationController for the VC in the tab bar + /// - Parameters: + /// - rootViewController: view controller of the tab bar + /// - title: title of navigation bar & tab bar + /// - image: image icon for tab bar + /// - Returns: View Controller that has UINavigationController + func createNavigationController( + for rootViewController : UIViewController, + title : String, + image : UIImage?, preferLargeTitles : Bool = false) -> UIViewController { + let navController = UINavigationController(rootViewController: rootViewController) + navController.tabBarItem.title = title + navController.tabBarItem.image = image + if #available(iOS 11.0, *) { + navController.navigationBar.prefersLargeTitles = preferLargeTitles + } + + rootViewController.navigationItem.title = title + return navController + } +} diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQNSArray+Sort.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQNSArray+Sort.h index 650b861..46191ee 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQNSArray+Sort.h +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQNSArray+Sort.h @@ -1,7 +1,7 @@ // -// NSArray+Sort.h +// IQNSArray+Sort.h // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -35,11 +35,11 @@ /** Returns the array by sorting the UIView's by their tag property. */ -- (NSArray*)sortedArrayByTag; +@property (nonatomic, readonly, copy) NSArray * _Nonnull sortedArrayByTag; /** Returns the array by sorting the UIView's by their tag property. */ -- (NSArray*)sortedArrayByPosition; +@property (nonatomic, readonly, copy) NSArray * _Nonnull sortedArrayByPosition; @end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQNSArray+Sort.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQNSArray+Sort.m index d57b0a3..39153d0 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQNSArray+Sort.m +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQNSArray+Sort.m @@ -1,7 +1,7 @@ // -// NSArray+Sort.m +// IQNSArray+Sort.m // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUITextFieldView+Additions.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUITextFieldView+Additions.h index 78114fb..c5b78e0 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUITextFieldView+Additions.h +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUITextFieldView+Additions.h @@ -1,7 +1,7 @@ // -// IQUITextFieldView+Additions.h +// IQUITextFieldView+Additions.h // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUITextFieldView+Additions.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUITextFieldView+Additions.m index 8ef55a8..c7a3495 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUITextFieldView+Additions.m +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUITextFieldView+Additions.m @@ -1,7 +1,7 @@ // -// IQUITextFieldView+Additions.m +// IQUITextFieldView+Additions.m // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIView+Hierarchy.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIView+Hierarchy.h index 2632f30..9ff9134 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIView+Hierarchy.h +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIView+Hierarchy.h @@ -1,7 +1,7 @@ // -// UIView+Hierarchy.h +// IQUIView+Hierarchy.h // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -31,15 +31,6 @@ */ @interface UIView (IQ_UIView_Hierarchy) -///------------------------------ -/// @name canBecomeFirstResponder -///------------------------------ - -/** - Returns YES if IQKeyboardManager asking for `canBecomeFirstResponder. Useful when doing custom work in `textFieldShouldBeginEditing:` delegate. - */ -@property (nonatomic, readonly) BOOL isAskingCanBecomeFirstResponder; - ///---------------------- /// @name viewControllers ///---------------------- @@ -47,12 +38,12 @@ /** Returns the UIViewController object that manages the receiver. */ -@property (nonatomic, readonly, strong) UIViewController *viewController; +@property (nullable, nonatomic, readonly, strong) UIViewController *viewController; /** Returns the topMost UIViewController object in hierarchy. */ -@property (nonatomic, readonly, strong) UIViewController *topMostController; +@property (nullable, nonatomic, readonly, strong) UIViewController *topMostController; ///----------------------------------- /// @name Superviews/Subviews/Siglings @@ -61,17 +52,17 @@ /** Returns the superView of provided class type. */ --(UIView*)superviewOfClassType:(Class)classType; +-(nullable UIView*)superviewOfClassType:(nonnull Class)classType; /** Returns all siblings of the receiver which canBecomeFirstResponder. */ -@property (nonatomic, readonly, copy) NSArray *responderSiblings; +@property (nonnull, nonatomic, readonly, copy) NSArray *responderSiblings; /** Returns all deep subViews of the receiver which canBecomeFirstResponder. */ -@property (nonatomic, readonly, copy) NSArray *deepResponderViews; +@property (nonnull, nonatomic, readonly, copy) NSArray *deepResponderViews; ///------------------------- /// @name Special TextFields @@ -94,7 +85,7 @@ /** Returns current view transform with respect to the 'toView'. */ --(CGAffineTransform)convertTransformToView:(UIView*)toView; +-(CGAffineTransform)convertTransformToView:(nullable UIView*)toView; ///----------------- /// @name Hierarchy @@ -103,17 +94,17 @@ /** Returns a string that represent the information about it's subview's hierarchy. You can use this method to debug the subview's positions. */ -@property (nonatomic, readonly, copy) NSString *subHierarchy; +@property (nonnull, nonatomic, readonly, copy) NSString *subHierarchy; /** Returns an string that represent the information about it's upper hierarchy. You can use this method to debug the superview's positions. */ -@property (nonatomic, readonly, copy) NSString *superHierarchy; +@property (nonnull, nonatomic, readonly, copy) NSString *superHierarchy; /** Returns an string that represent the information about it's frame positions. You can use this method to debug self positions. */ -@property (nonatomic, readonly, copy) NSString *debugHierarchy; +@property (nonnull, nonatomic, readonly, copy) NSString *debugHierarchy; @end @@ -126,6 +117,6 @@ /** Short description for logging purpose. */ -@property (nonatomic, readonly, copy) NSString *_IQDescription; +@property (nonnull, nonatomic, readonly, copy) NSString *_IQDescription; @end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIView+Hierarchy.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIView+Hierarchy.m index 76777c7..05b541b 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIView+Hierarchy.m +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIView+Hierarchy.m @@ -1,7 +1,7 @@ // -// UIView+Hierarchy.m +// IQUIView+Hierarchy.m // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -23,10 +23,8 @@ #import "IQUIView+Hierarchy.h" -#ifdef NSFoundationVersionNumber_iOS_5_1 #import -#endif - +#import #import #import #import @@ -36,42 +34,9 @@ #import -@implementation UIView (IQ_UIView_Hierarchy) - -//Special textFields,textViews,scrollViews -Class UIAlertSheetTextFieldClass; //UIAlertView -Class UIAlertSheetTextFieldClass_iOS8; //UIAlertView - -Class UITableViewCellScrollViewClass; //UITableViewCell -Class UITableViewWrapperViewClass; //UITableViewCell -Class UIQueuingScrollViewClass; //UIPageViewController - -Class UISearchBarTextFieldClass; //UISearchBar - -+(void)initialize -{ - [super initialize]; - - UIAlertSheetTextFieldClass = NSClassFromString(@"UIAlertSheetTextField"); - UIAlertSheetTextFieldClass_iOS8 = NSClassFromString(@"_UIAlertControllerTextField"); - - UITableViewCellScrollViewClass = NSClassFromString(@"UITableViewCellScrollView"); - UITableViewWrapperViewClass = NSClassFromString(@"UITableViewWrapperView"); - UIQueuingScrollViewClass = NSClassFromString(@"_UIQueuingScrollView"); +#import "IQNSArray+Sort.h" - UISearchBarTextFieldClass = NSClassFromString(@"UISearchBarTextField"); -} - --(void)_setIsAskingCanBecomeFirstResponder:(BOOL)isAskingCanBecomeFirstResponder -{ - objc_setAssociatedObject(self, @selector(isAskingCanBecomeFirstResponder), [NSNumber numberWithBool:isAskingCanBecomeFirstResponder], OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - --(BOOL)isAskingCanBecomeFirstResponder -{ - NSNumber *isAskingCanBecomeFirstResponder = objc_getAssociatedObject(self, @selector(isAskingCanBecomeFirstResponder)); - return [isAskingCanBecomeFirstResponder boolValue]; -} +@implementation UIView (IQ_UIView_Hierarchy) -(UIViewController*)viewController { @@ -126,14 +91,30 @@ -(UIView*)superviewOfClassType:(Class)classType while (superview) { - if ([superview isKindOfClass:classType] && - ([superview isKindOfClass:UITableViewCellScrollViewClass] == NO) && - ([superview isKindOfClass:UITableViewWrapperViewClass] == NO) && - ([superview isKindOfClass:UIQueuingScrollViewClass] == NO)) + if ([superview isKindOfClass:classType]) { - return superview; + //If it's UIScrollView, then validating for special cases + if ([superview isKindOfClass:[UIScrollView class]]) + { + NSString *classNameString = NSStringFromClass([superview class]); + + // If it's not UITableViewWrapperView class, this is internal class which is actually manage in UITableview. The speciality of this class is that it's superview is UITableView. + // If it's not UITableViewCellScrollView class, this is internal class which is actually manage in UITableviewCell. The speciality of this class is that it's superview is UITableViewCell. + //If it's not _UIQueuingScrollView class, actually we validate for _ prefix which usually used by Apple internal classes + if ([superview.superview isKindOfClass:[UITableView class]] == NO && + [superview.superview isKindOfClass:[UITableViewCell class]] == NO && + [classNameString hasPrefix:@"_"] == NO) + { + return superview; + } + } + else + { + return superview; + } } - else superview = superview.superview; + + superview = superview.superview; } return nil; @@ -141,23 +122,22 @@ -(UIView*)superviewOfClassType:(Class)classType -(BOOL)_IQcanBecomeFirstResponder { - [self _setIsAskingCanBecomeFirstResponder:YES]; - BOOL _IQcanBecomeFirstResponder = ([self canBecomeFirstResponder] && [self isUserInteractionEnabled] && ![self isHidden] && [self alpha]!=0.0 && ![self isAlertViewTextField] && ![self isSearchBarTextField]); + BOOL _IQcanBecomeFirstResponder = NO; + if ([self isKindOfClass:[UITextField class]]) + { + _IQcanBecomeFirstResponder = [(UITextField*)self isEnabled]; + } + else if ([self isKindOfClass:[UITextView class]]) + { + _IQcanBecomeFirstResponder = [(UITextView*)self isEditable]; + } + if (_IQcanBecomeFirstResponder == YES) { - if ([self isKindOfClass:[UITextField class]]) - { - _IQcanBecomeFirstResponder = [(UITextField*)self isEnabled]; - } - else if ([self isKindOfClass:[UITextView class]]) - { - _IQcanBecomeFirstResponder = [(UITextView*)self isEditable]; - } + _IQcanBecomeFirstResponder = ([self isUserInteractionEnabled] && ![self isHidden] && [self alpha]!=0.0 && ![self isAlertViewTextField] && ![self isSearchBarTextField]); } - [self _setIsAskingCanBecomeFirstResponder:NO]; - return _IQcanBecomeFirstResponder; } @@ -169,7 +149,7 @@ - (NSArray*)responderSiblings //Array of (UITextField/UITextView's). NSMutableArray *tempTextFields = [[NSMutableArray alloc] init]; - for (UITextField *textField in siblings) + for (UIView *textField in siblings) if ([textField _IQcanBecomeFirstResponder]) [tempTextFields addObject:textField]; @@ -180,13 +160,31 @@ - (NSArray*)deepResponderViews { NSMutableArray *textFields = [[NSMutableArray alloc] init]; - //subviews are returning in opposite order. So I sorted it according the frames 'y'. - NSArray *subViews = [self.subviews sortedArrayUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) { + for (UIView *textField in self.subviews) + { + if ([textField _IQcanBecomeFirstResponder]) + { + [textFields addObject:textField]; + } - CGFloat x1 = CGRectGetMinX(view1.frame); - CGFloat y1 = CGRectGetMinY(view1.frame); - CGFloat x2 = CGRectGetMinX(view2.frame); - CGFloat y2 = CGRectGetMinY(view2.frame); + //Sometimes there are hidden or disabled views and textField inside them still recorded, so we added some more validations here (Bug ID: #458) + //Uncommented else (Bug ID: #625) + if (textField.subviews.count && [textField isUserInteractionEnabled] && ![textField isHidden] && [textField alpha]!=0.0) + { + [textFields addObjectsFromArray:[textField deepResponderViews]]; + } + } + + //subviews are returning in incorrect order. Sorting according the frames 'y'. + return [textFields sortedArrayUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) { + + CGRect frame1 = [view1 convertRect:view1.bounds toView:self]; + CGRect frame2 = [view2 convertRect:view2.bounds toView:self]; + + CGFloat x1 = CGRectGetMinX(frame1); + CGFloat y1 = CGRectGetMinY(frame1); + CGFloat x2 = CGRectGetMinX(frame2); + CGFloat y2 = CGRectGetMinY(frame2); if (y1 < y2) return NSOrderedAscending; @@ -200,18 +198,6 @@ - (NSArray*)deepResponderViews else return NSOrderedSame; }]; - for (UITextField *textField in subViews) - { - if ([textField _IQcanBecomeFirstResponder]) - { - [textFields addObject:textField]; - } - else if (textField.subviews.count) - { - [textFields addObjectsFromArray:[textField deepResponderViews]]; - } - } - return textFields; } @@ -321,12 +307,44 @@ -(NSString *)debugHierarchy -(BOOL)isSearchBarTextField { - return ([self isKindOfClass:UISearchBarTextFieldClass] || [self isKindOfClass:[UISearchBar class]]); + UIResponder *searchBar = [self nextResponder]; + + BOOL isSearchBarTextField = NO; + while (searchBar && isSearchBarTextField == NO) + { + if ([searchBar isKindOfClass:[UISearchBar class]]) + { + isSearchBarTextField = YES; + break; + } + else if ([searchBar isKindOfClass:[UIViewController class]]) //If found viewcontroller but still not found UISearchBar then it's not the search bar textfield + { + break; + } + + searchBar = [searchBar nextResponder]; + } + + return isSearchBarTextField; } -(BOOL)isAlertViewTextField { - return ([self isKindOfClass:UIAlertSheetTextFieldClass] || [self isKindOfClass:UIAlertSheetTextFieldClass_iOS8]); + UIResponder *alertViewController = [self viewController]; + + BOOL isAlertViewTextField = NO; + while (alertViewController && isAlertViewTextField == NO) + { + if ([alertViewController isKindOfClass:[UIAlertController class]]) + { + isAlertViewTextField = YES; + break; + } + + alertViewController = [alertViewController nextResponder]; + } + + return isAlertViewTextField; } @end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIViewController+Additions.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIViewController+Additions.h index 5df6db9..916d81d 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIViewController+Additions.h +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIViewController+Additions.h @@ -1,7 +1,7 @@ // -// IQUIViewController+Additions.h +// IQUIViewController+Additions.h // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -25,13 +25,9 @@ @interface UIViewController (Additions) -#ifdef NSFoundationVersionNumber_iOS_5_1 - /** Top/Bottom Layout constraint which help library to manage keyboardTextField distance */ -@property(nonatomic, strong) IBOutlet NSLayoutConstraint *IQLayoutGuideConstraint; - -#endif +@property(nullable, nonatomic, strong) IBOutlet NSLayoutConstraint *IQLayoutGuideConstraint; @end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIViewController+Additions.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIViewController+Additions.m index 088fb95..67da273 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIViewController+Additions.m +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIViewController+Additions.m @@ -1,7 +1,7 @@ // -// IQUIViewController+Additions.m +// IQUIViewController+Additions.m // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -26,8 +26,6 @@ @implementation UIViewController (Additions) -#ifdef NSFoundationVersionNumber_iOS_5_1 - -(void)setIQLayoutGuideConstraint:(NSLayoutConstraint *)IQLayoutGuideConstraint { objc_setAssociatedObject(self, @selector(IQLayoutGuideConstraint), IQLayoutGuideConstraint, OBJC_ASSOCIATION_RETAIN_NONATOMIC); @@ -38,6 +36,4 @@ -(NSLayoutConstraint *)IQLayoutGuideConstraint return objc_getAssociatedObject(self, @selector(IQLayoutGuideConstraint)); } -#endif - @end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.h index 47c8da3..b759ab0 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.h +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.h @@ -1,7 +1,7 @@ // -// UIWindow+Hierarchy.h +// IQUIWindow+Hierarchy.h // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -37,12 +37,12 @@ /** Returns the current Top Most ViewController in hierarchy. */ -@property (nonatomic, readonly, strong) UIViewController *topMostController; +@property (nullable, nonatomic, readonly, strong) UIViewController *topMostController; /** Returns the topViewController in stack of topMostController. */ -@property (nonatomic, readonly, strong) UIViewController *currentViewController; +@property (nullable, nonatomic, readonly, strong) UIViewController *currentViewController; @end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.m index fe32214..266ae5e 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.m +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.m @@ -1,7 +1,7 @@ // -// UIWindow+Hierarchy.m +// IQUIWindow+Hierarchy.m // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Constants/IQKeyboardManagerConstants.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Constants/IQKeyboardManagerConstants.h index 07f372f..7123a2a 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Constants/IQKeyboardManagerConstants.h +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Constants/IQKeyboardManagerConstants.h @@ -1,7 +1,7 @@ // -// IQKeyboardManagerConstants.h +// IQKeyboardManagerConstants.h // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -26,14 +26,6 @@ #import -///---------------- -/// @name Debugging -///---------------- - -/** - Set IQKEYBOARDMANAGER_DEBUG=1 in preprocessor macros under build settings to enable debugging. - */ - ///----------------------------------- /// @name IQAutoToolbarManageBehaviour ///----------------------------------- @@ -48,19 +40,27 @@ `IQAutoToolbarByPosition` Creates Toolbar according to the y,x position of textField in it's superview coordinate. */ -#ifndef NS_ENUM -typedef enum IQAutoToolbarManageBehaviour { - IQAutoToolbarBySubviews, - IQAutoToolbarByTag, - IQAutoToolbarByPosition, -}IQAutoToolbarManageBehaviour; -#else typedef NS_ENUM(NSInteger, IQAutoToolbarManageBehaviour) { IQAutoToolbarBySubviews, IQAutoToolbarByTag, IQAutoToolbarByPosition, }; -#endif + +/** + `IQPreviousNextDisplayModeDefault` + Show NextPrevious when there are more than 1 textField otherwise hide. + + `IQPreviousNextDisplayModeAlwaysHide` + Do not show NextPrevious buttons in any case. + + `IQPreviousNextDisplayModeAlwaysShow` + Always show nextPrevious buttons, if there are more than 1 textField then both buttons will be visible but will be shown as disabled. + */ +typedef NS_ENUM(NSUInteger, IQPreviousNextDisplayMode) { + IQPreviousNextDisplayModeDefault, + IQPreviousNextDisplayModeAlwaysHide, + IQPreviousNextDisplayModeAlwaysShow, +}; ///------------------- /// @name Localization @@ -68,17 +68,6 @@ typedef NS_ENUM(NSInteger, IQAutoToolbarManageBehaviour) { #define IQLocalizedString(key, comment) [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"IQKeyboardManager" ofType:@"bundle"]] localizedStringForKey:(key) value:@"" table:@"IQKeyboardManager"] - -/* XCode 5.0 Compatibility for NS_DESIGNATED_INITIALIZER*/ -#ifndef NS_DESIGNATED_INITIALIZER - #if __has_attribute(objc_designated_initializer) - #define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) - #else - #define NS_DESIGNATED_INITIALIZER - #endif -#endif - - #endif /* @@ -88,68 +77,70 @@ typedef NS_ENUM(NSInteger, IQAutoToolbarManageBehaviour) { | iOS NSNotification Mechanism | /---------------------------------------------------------------------------------------------------\ \---------------------------------------------------------------------------------------------------/ + - 1) Begin Editing:- When TextField begin editing. - 2) End Editing:- When TextField end editing. - 3) Switch TextField:- When Keyboard Switch from a TextField to another TextField. - 3) Orientation Change:- When Device Orientation Change. - - - ---------------------------------------------------------------------------------------------------------------------------------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------------------------------------------------------------------------------------- - ============= - UITextField - ============= - - Begin Editing Begin Editing - -------------------------------------------- ---------------------------------- --------------------------------- - |UITextFieldTextDidBeginEditingNotification| --------> | UIKeyboardWillShowNotification | --------> | UIKeyboardDidShowNotification | - -------------------------------------------- ---------------------------------- --------------------------------- - ^ Switch TextField ^ Switch TextField - | | - | | - | Switch TextField | Orientation Change - | | - | | - | | - -------------------------------------------- | ---------------------------------- --------------------------------- - | UITextFieldTextDidEndEditingNotification | <-------- | UIKeyboardWillHideNotification | --------> | UIKeyboardDidHideNotification | - -------------------------------------------- ---------------------------------- --------------------------------- - | End Editing ^ - | | - |--------------------End Editing-------------------------------------------------------------| - + ------------------------------------------------------------ + When UITextField become first responder + ------------------------------------------------------------ + - UITextFieldTextDidBeginEditingNotification (UITextField) + - UIKeyboardWillShowNotification + - UIKeyboardDidShowNotification - ---------------------------------------------------------------------------------------------------------------------------------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------------------------------------------------------------------------------------- - ============= - UITextView - ============= - |-------------------Switch TextView--------------------------------------------------------------| - | |------------------Begin Editing-------------------------------------------------------------| | - | | | | - v | Begin Editing Switch TextView v | - -------------------------------------------- ---------------------------------- --------------------------------- - | UITextViewTextDidBeginEditingNotification| <-------- | UIKeyboardWillShowNotification | --------> | UIKeyboardDidShowNotification | - -------------------------------------------- ---------------------------------- --------------------------------- - ^ - | - |------------------------Switch TextView--------| - | | Orientation Change - | | - | | - | | - -------------------------------------------- | ---------------------------------- --------------------------------- - | UITextViewTextDidEndEditingNotification | <-------- | UIKeyboardWillHideNotification | | UIKeyboardDidHideNotification | - -------------------------------------------- ---------------------------------- --------------------------------- - | End Editing ^ - | | - |--------------------End Editing-------------------------------------------------------------| + ------------------------------------------------------------ + When UITextView become first responder + ------------------------------------------------------------ + - UIKeyboardWillShowNotification + - UITextViewTextDidBeginEditingNotification (UITextView) + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + When switching focus from UITextField to another UITextField + ------------------------------------------------------------ + - UITextFieldTextDidEndEditingNotification (UITextField1) + - UITextFieldTextDidBeginEditingNotification (UITextField2) + - UIKeyboardWillShowNotification + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + When switching focus from UITextView to another UITextView + ------------------------------------------------------------ + - UITextViewTextDidEndEditingNotification : (UITextView1) + - UIKeyboardWillShowNotification + - UITextViewTextDidBeginEditingNotification : (UITextView2) + - UIKeyboardDidShowNotification + ------------------------------------------------------------ + When switching focus from UITextField to UITextView + ------------------------------------------------------------ + - UITextFieldTextDidEndEditingNotification (UITextField) + - UIKeyboardWillShowNotification + - UITextViewTextDidBeginEditingNotification (UITextView) + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + When switching focus from UITextView to UITextField + ------------------------------------------------------------ + - UITextViewTextDidEndEditingNotification (UITextView) + - UITextFieldTextDidBeginEditingNotification (UITextField) + - UIKeyboardWillShowNotification + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + When opening/closing UIKeyboard Predictive bar + ------------------------------------------------------------ + - UIKeyboardWillShowNotification + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + On orientation change + ------------------------------------------------------------ + - UIApplicationWillChangeStatusBarOrientationNotification + - UIKeyboardWillHideNotification + - UIKeyboardDidHideNotification + - UIApplicationDidChangeStatusBarOrientationNotification + - UIKeyboardWillShowNotification + - UIKeyboardDidShowNotification + - UIKeyboardWillShowNotification + - UIKeyboardDidShowNotification - ---------------------------------------------------------------------------------------------------------------------------------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ---------------------------------------------------------------------------------------------------------------------------------------------- */ diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Constants/IQKeyboardManagerConstantsInternal.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Constants/IQKeyboardManagerConstantsInternal.h index 7618951..0e428bf 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Constants/IQKeyboardManagerConstantsInternal.h +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Constants/IQKeyboardManagerConstantsInternal.h @@ -1,7 +1,7 @@ // -// IQKeyboardManagerConstantsInternal.h +// IQKeyboardManagerConstantsInternal.h // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -39,32 +39,18 @@ `IQLayoutGuidePositionBottom` If provided IQLayoutGuideConstraint is associated with with viewController bottomLayoutGuide */ -#ifndef NS_ENUM -typedef enum IQLayoutGuidePosition { - IQLayoutGuidePositionNone, - IQLayoutGuidePositionTop, - IQLayoutGuidePositionBottom, -}IQLayoutGuidePosition; -#else typedef NS_ENUM(NSInteger, IQLayoutGuidePosition) { IQLayoutGuidePositionNone, IQLayoutGuidePositionTop, IQLayoutGuidePositionBottom, }; -#endif -//Xcode 5 compatibility check -#ifdef NSFoundationVersionNumber_iOS_6_1 - #define IQ_IS_IOS7_OR_GREATER (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) +//Xcode 8 compatibility check +#ifdef NSFoundationVersionNumber_iOS_9_x_Max + #define IQ_IS_IOS10_OR_GREATER (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_9_x_Max) #else - #define IQ_IS_IOS7_OR_GREATER NO + #define IQ_IS_IOS10_OR_GREATER NO #endif -//Xcode 6 compatibility check -#ifdef NSFoundationVersionNumber_iOS_7_1 - #define IQ_IS_IOS8_OR_GREATER (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_7_1) -#else - #define IQ_IS_IOS8_OR_GREATER NO -#endif #endif diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardManager.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardManager.h index d538bfb..26912af 100755 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardManager.h +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardManager.h @@ -1,7 +1,7 @@ // // IQKeyboardManager.h // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -31,10 +31,6 @@ #import #import -#if !(__has_feature(objc_instancetype)) -#define instancetype id -#endif - @class UIFont; ///--------------------- @@ -54,7 +50,7 @@ extern NSInteger const kIQPreviousNextButtonToolbarTag; /** - Codeless drop-in universal library allows to prevent issues of keyboard sliding up and cover UITextField/UITextView. Neither need to write any code nor any setup required and much more. A generic version of KeyboardManagement. https://developer.apple.com/Library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html + Codeless drop-in universal library allows to prevent issues of keyboard sliding up and cover UITextField/UITextView. Neither need to write any code nor any setup required and much more. A generic version of KeyboardManagement. https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html */ @interface IQKeyboardManager : NSObject @@ -65,7 +61,7 @@ extern NSInteger const kIQPreviousNextButtonToolbarTag; /** Returns the default singleton instance. */ -+ (instancetype)sharedManager; ++ (nonnull instancetype)sharedManager; /** Enable/disable managing distance between keyboard and textField. Default is YES(Enabled when class loads in `+(void)load` method). @@ -82,52 +78,81 @@ extern NSInteger const kIQPreviousNextButtonToolbarTag; */ @property(nonatomic, assign) BOOL preventShowingBottomBlankSpace; +/** + Refreshes textField/textView position if any external changes is explicitly made by user. + */ +- (void)reloadLayoutIfNeeded; + +/** + Boolean to know if keyboard is showing. + */ +@property(nonatomic, assign, readonly, getter = isKeyboardShowing) BOOL keyboardShowing; + +/** + moved distance to the top used to maintain distance between keyboard and textField. Most of the time this will be a positive value. + */ +@property(nonatomic, assign, readonly) CGFloat movedDistance; + + ///------------------------- /// @name IQToolbar handling ///------------------------- /** - Automatic add the IQToolbar functionality. Default is YES. + Automatic add IQToolbar functionality. Default is YES. */ @property(nonatomic, assign, getter = isEnableAutoToolbar) BOOL enableAutoToolbar; /** - AutoToolbar managing behaviour. Default is IQAutoToolbarBySubviews. - */ + IQAutoToolbarBySubviews: Creates Toolbar according to subview's hirarchy of Textfield's in view. + IQAutoToolbarByTag: Creates Toolbar according to tag property of TextField's. + IQAutoToolbarByPosition: Creates Toolbar according to the y,x position of textField in it's superview coordinate. + + Default is IQAutoToolbarBySubviews. +*/ @property(nonatomic, assign) IQAutoToolbarManageBehaviour toolbarManageBehaviour; -#ifdef NSFoundationVersionNumber_iOS_6_1 /** If YES, then uses textField's tintColor property for IQToolbar, otherwise tint color is black. Default is NO. */ @property(nonatomic, assign) BOOL shouldToolbarUsesTextFieldTintColor; -#endif /** - If YES, then it add the textField's placeholder text on IQToolbar. Default is YES. + This is used for toolbar.tintColor when textfield.keyboardAppearance is UIKeyboardAppearanceDefault. If shouldToolbarUsesTextFieldTintColor is YES then this property is ignored. Default is nil and uses black color. */ -@property(nonatomic, assign) BOOL shouldShowTextFieldPlaceholder; +@property(nullable, nonatomic, strong) UIColor *toolbarTintColor; /** - Placeholder Font. Default is nil. + IQPreviousNextDisplayModeDefault: Show NextPrevious when there are more than 1 textField otherwise hide. + IQPreviousNextDisplayModeAlwaysHide: Do not show NextPrevious buttons in any case. + IQPreviousNextDisplayModeAlwaysShow: Always show nextPrevious buttons, if there are more than 1 textField then both buttons will be visible but will be shown as disabled. */ -@property(nonatomic, strong) UIFont *placeholderFont; +@property(nonatomic, assign) IQPreviousNextDisplayMode previousNextDisplayMode; -///-------------------------- -/// @name UITextView handling -///-------------------------- +/** + Toolbar done button icon, If nothing is provided then check toolbarDoneBarButtonItemText to draw done button. + */ +@property(nullable, nonatomic, strong) UIImage *toolbarDoneBarButtonItemImage; /** - Adjust textView's frame when it is too big in height. Default is NO. + Toolbar done button text, If nothing is provided then system default 'UIBarButtonSystemItemDone' will be used. */ -@property(nonatomic, assign) BOOL canAdjustTextView; +@property(nullable, nonatomic, strong) NSString *toolbarDoneBarButtonItemText; -#ifdef NSFoundationVersionNumber_iOS_6_1 /** - Adjust textView's contentInset to fix a bug. for iOS 7.0.x - http://stackoverflow.com/questions/18966675/uitextview-in-ios7-clips-the-last-line-of-text-string Default is YES. + If YES, then it add the textField's placeholder text on IQToolbar. Default is YES. + */ +@property(nonatomic, assign) BOOL shouldShowTextFieldPlaceholder; + +/** + Placeholder Font. Default is nil. */ -@property(nonatomic, assign) BOOL shouldFixTextViewClip; -#endif +@property(nullable, nonatomic, strong) UIFont *placeholderFont; + +/** + Reload all toolbar buttons on the fly. + */ +- (void)reloadInputViews; ///--------------------------------------- /// @name UIKeyboard appearance overriding @@ -143,9 +168,9 @@ extern NSInteger const kIQPreviousNextButtonToolbarTag; */ @property(nonatomic, assign) UIKeyboardAppearance keyboardAppearance; -///--------------------------------------------- +///----------------------------------------------------------- /// @name UITextField/UITextView Next/Previous/Resign handling -///--------------------------------------------- +///----------------------------------------------------------- /** Resigns Keyboard on touching outside of UITextField/View. Default is NO. @@ -177,21 +202,12 @@ extern NSInteger const kIQPreviousNextButtonToolbarTag; */ - (BOOL)goNext; -///---------------------------- -/// @name UIScrollView handling -///---------------------------- - -/** - Restore scrollViewContentOffset when resigning from scrollView. Default is NO. - */ -@property(nonatomic, assign) BOOL shouldRestoreScrollViewContentOffset; - -///------------------------------------------------ +///----------------------- /// @name UISound handling -///------------------------------------------------ +///----------------------- /** - If YES, then it plays inputClick sound on next/previous/done click. + If YES, then it plays inputClick sound on next/previous/done click. Default is YES. */ @property(nonatomic, assign) BOOL shouldPlayInputClicks; @@ -200,98 +216,104 @@ extern NSInteger const kIQPreviousNextButtonToolbarTag; ///--------------------------- /** - If YES, then uses keyboard default animation curve style to move view, otherwise uses UIViewAnimationOptionCurveEaseInOut animation style. Default is YES. - - @warning Sometimes strange animations may be produced if uses default curve style animation in iOS 7 and changing the textFields very frequently. + If YES, then calls 'setNeedsLayout' and 'layoutIfNeeded' on any frame update of to viewController's view. */ -@property(nonatomic, assign) BOOL shouldAdoptDefaultKeyboardAnimation; +@property(nonatomic, assign) BOOL layoutIfNeededOnUpdate; + +///----------------------------------------------- +/// @name InteractivePopGestureRecognizer handling +///----------------------------------------------- /** - If YES, then calls 'setNeedsLayout' and 'layoutIfNeeded' on any frame update of to viewController's view. + If YES, then always consider UINavigationController.view begin point as {0,0}, this is a workaround to fix a bug #464 because there are no notification mechanism exist when UINavigationController.view.frame gets changed internally. */ -@property(nonatomic, assign) BOOL layoutIfNeededOnUpdate; +@property(nonatomic, assign) BOOL shouldFixInteractivePopGestureRecognizer; -///------------------------------------ -/// @name Class Level disabling methods -///------------------------------------ +///--------------------------------------------- +/// @name Class Level enabling/disabling methods +///--------------------------------------------- /** - Disable adjusting view in disabledClass - - @param disabledClass Class in which library should not adjust view to show textField. + Disable distance handling within the scope of disabled distance handling viewControllers classes. Within this scope, 'enabled' property is ignored. Class should be kind of UIViewController. Default is [UITableViewController, UIAlertController, _UIAlertControllerTextFieldViewController]. */ --(void)disableInViewControllerClass:(Class)disabledClass; +@property(nonatomic, strong, nonnull, readonly) NSMutableSet *disabledDistanceHandlingClasses; /** - Re-enable adjusting textField in disabledClass - - @param disabledClass Class in which library should re-enable adjust view to show textField. + Enable distance handling within the scope of enabled distance handling viewControllers classes. Within this scope, 'enabled' property is ignored. Class should be kind of UIViewController. Default is []. */ --(void)removeDisableInViewControllerClass:(Class)disabledClass; +@property(nonatomic, strong, nonnull, readonly) NSMutableSet *enabledDistanceHandlingClasses; /** - Returns YES if ViewController class is disabled for library, otherwise returns NO. - - @param disabledClass Class which is to check for it's disability. + Disable automatic toolbar creation within the scope of disabled toolbar viewControllers classes. Within this scope, 'enableAutoToolbar' property is ignored. Class should be kind of UIViewController. Default is [UIAlertController, _UIAlertControllerTextFieldViewController]. */ --(BOOL)isDisableInViewControllerClass:(Class)disabledClass; +@property(nonatomic, strong, nonnull, readonly) NSMutableSet *disabledToolbarClasses; /** - Disable automatic toolbar creation in in toolbarDisabledClass - - @param toolbarDisabledClass Class in which library should not add toolbar over textField. + Enable automatic toolbar creation within the scope of enabled toolbar viewControllers classes. Within this scope, 'enableAutoToolbar' property is ignored. Class should be kind of UIViewController. Default is []. */ --(void)disableToolbarInViewControllerClass:(Class)toolbarDisabledClass; +@property(nonatomic, strong, nonnull, readonly) NSMutableSet *enabledToolbarClasses; /** - Re-enable automatic toolbar creation in in toolbarDisabledClass - - @param toolbarDisabledClass Class in which library should re-enable automatic toolbar creation over textField. + Allowed subclasses of UIView to add all inner textField, this will allow to navigate between textField contains in different superview. Class should be kind of UIView. Default is [UITableView, UICollectionView, IQPreviousNextView]. */ --(void)removeDisableToolbarInViewControllerClass:(Class)toolbarDisabledClass; +@property(nonatomic, strong, nonnull, readonly) NSMutableSet *toolbarPreviousNextAllowedClasses; /** - Returns YES if toolbar is disabled in ViewController class, otherwise returns NO. - - @param toolbarDisabledClass Class which is to check for toolbar disability. + Disabled classes to ignore 'shouldResignOnTouchOutside' property, Class should be kind of UIViewController. Default is [UIAlertController, UIAlertControllerTextFieldViewController] */ --(BOOL)isDisableToolbarInViewControllerClass:(Class)toolbarDisabledClass; +@property(nonatomic, strong, nonnull, readonly) NSMutableSet *disabledTouchResignedClasses; /** - Consider provided customView class as superView of all inner textField for calculating next/previous button logic. - - @param toolbarPreviousNextConsideredClass Custom UIView subclass Class in which library should consider all inner textField as siblings and add next/previous accordingly. + Enabled classes to forcefully enable 'shouldResignOnTouchOutsite' property. Class should be kind of UIViewController. Default is []. */ --(void)considerToolbarPreviousNextInViewClass:(Class)toolbarPreviousNextConsideredClass; +@property(nonatomic, strong, nonnull, readonly) NSMutableSet *enabledTouchResignedClasses; /** - Remove Consideration for provided customView class as superView of all inner textField for calculating next/previous button logic. - - @param toolbarPreviousNextConsideredClass Custom UIView subclass Class in which library should remove consideration for all inner textField as superView. + if shouldResignOnTouchOutside is enabled then you can customise the behaviour to not recognise gesture touches on some specific view subclasses. Class should be kind of UIView. Default is [UIControl, UINavigationBar] */ --(void)removeConsiderToolbarPreviousNextInViewClass:(Class)toolbarPreviousNextConsideredClass; +@property(nonatomic, strong, nonnull, readonly) NSMutableSet *touchResignedGestureIgnoreClasses; + +///------------------------------------------- +/// @name Third Party Library support +/// Add TextField/TextView Notifications customised NSNotifications. For example while using YYTextView https://github.com/ibireme/YYText +///------------------------------------------- /** - Returns YES if inner hierarchy is considered for previous/next in class, otherwise returns NO. - - @param toolbarPreviousNextConsideredClass Class which is to check for previous next consideration + Add/Remove customised Notification for third party customised TextField/TextView. Please be aware that the NSNotification object must be idential to UITextField/UITextView NSNotification objects and customised TextField/TextView support must be idential to UITextField/UITextView. + @param didBeginEditingNotificationName This should be identical to UITextViewTextDidBeginEditingNotification + @param didEndEditingNotificationName This should be identical to UITextViewTextDidEndEditingNotification */ --(BOOL)isConsiderToolbarPreviousNextInViewClass:(Class)toolbarPreviousNextConsideredClass; +-(void)registerTextFieldViewClass:(nonnull Class)aClass + didBeginEditingNotificationName:(nonnull NSString *)didBeginEditingNotificationName + didEndEditingNotificationName:(nonnull NSString *)didEndEditingNotificationName; +-(void)unregisterTextFieldViewClass:(nonnull Class)aClass + didBeginEditingNotificationName:(nonnull NSString *)didBeginEditingNotificationName + didEndEditingNotificationName:(nonnull NSString *)didEndEditingNotificationName; + +///---------------------------------------- +/// @name Debugging & Developer options +///---------------------------------------- + +@property(nonatomic, assign) BOOL enableDebugging; +/** + @warning Use below methods to completely enable/disable notifications registered by library internally. Please keep in mind that library is totally dependent on NSNotification of UITextField, UITextField, Keyboard etc. If you do unregisterAllNotifications then library will not work at all. You should only use below methods if you want to completedly disable all library functions. You should use below methods at your own risk. + */ +-(void)registerAllNotifications; +-(void)unregisterAllNotifications; ///---------------------------------------- /// @name Must not be used for subclassing. ///---------------------------------------- /** - Should create only one instance of class. Should not call init. + Unavailable. Please use sharedManager method */ -- (instancetype)init __attribute__((unavailable("init is not available in IQKeyboardManager, Use sharedManager"))) NS_DESIGNATED_INITIALIZER; +-(nonnull instancetype)init NS_UNAVAILABLE; /** - Should create only one instance of class. Should not call new. + Unavailable. Please use sharedManager method */ -+ (instancetype)new __attribute__((unavailable("new is not available in IQKeyboardManager, Use sharedManager"))); ++ (nonnull instancetype)new NS_UNAVAILABLE; @end - diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardManager.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardManager.m index 17881d5..a28005c 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardManager.m +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardManager.m @@ -1,7 +1,7 @@ // // IQKeyboardManager.m // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -29,8 +29,10 @@ #import "IQToolbar.h" #import "IQBarButtonItem.h" #import "IQKeyboardManagerConstantsInternal.h" +#import "IQUIScrollView+Additions.h" #import "IQUITextFieldView+Additions.h" #import "IQUIViewController+Additions.h" +#import "IQPreviousNextView.h" #import #import @@ -41,87 +43,98 @@ #import #import -#ifdef NSFoundationVersionNumber_iOS_5_1 +#import + #import #import -#endif + +#import NSInteger const kIQDoneButtonToolbarTag = -1002; NSInteger const kIQPreviousNextButtonToolbarTag = -1005; -void _IQShowLog(NSString *logString); - @interface IQKeyboardManager() -// Private helper methods -- (void)adjustFrame; +/*******************************************/ + +/** used to adjust contentInset of UITextView. */ +@property(nonatomic, assign) UIEdgeInsets startingTextViewContentInsets; + +/** used to adjust scrollIndicatorInsets of UITextView. */ +@property(nonatomic, assign) UIEdgeInsets startingTextViewScrollIndicatorInsets; + +/** used with textView to detect a textFieldView contentInset is changed or not. (Bug ID: #92)*/ +@property(nonatomic, assign) BOOL isTextViewContentInsetChanged; + +/*******************************************/ + +/** To save UITextField/UITextView object voa textField/textView notifications. */ +@property(nonatomic, weak) UIView *textFieldView; + +/** To save rootViewController.view.frame. */ +@property(nonatomic, assign) CGRect topViewBeginRect; + +/** To save rootViewController */ +@property(nonatomic, weak) UIViewController *rootViewController; + +/** To save topBottomLayoutConstraint original constant */ +@property(nonatomic, assign) CGFloat layoutGuideConstraintInitialConstant; + +/** To save topBottomLayoutConstraint original constraint reference */ +@property(nonatomic, weak) NSLayoutConstraint *layoutGuideConstraint; + + +/*******************************************/ + +/** TapGesture to resign keyboard on view's touch. */ +@property(nonatomic, strong) UITapGestureRecognizer *tapGesture; + +/*******************************************/ + +/** Variable to save lastScrollView that was scrolled. */ +@property(nonatomic, weak) UIScrollView *lastScrollView; + +/** LastScrollView's initial contentInsets. */ +@property(nonatomic, assign) UIEdgeInsets startingContentInsets; + +/** LastScrollView's initial scrollIndicatorInsets. */ +@property(nonatomic, assign) UIEdgeInsets startingScrollIndicatorInsets; + +/** LastScrollView's initial contentOffset. */ +@property(nonatomic, assign) CGPoint startingContentOffset; + +/*******************************************/ + +/** To save keyboard animation duration. */ +@property(nonatomic, assign) CGFloat animationDuration; -// Private function to manipulate RootViewController's frame with animation. -- (void)setRootViewFrame:(CGRect)frame; +/** To mimic the keyboard animation */ +@property(nonatomic, assign) NSInteger animationCurve; -// Keyboard Notification methods -- (void)keyboardWillShow:(NSNotification*)aNotification; -- (void)keyboardWillHide:(NSNotification*)aNotification; -- (void)keyboardDidHide:(NSNotification*)aNotification; +/*******************************************/ -// UITextField/UITextView Notification methods -- (void)textFieldViewDidBeginEditing:(NSNotification*)notification; -- (void)textFieldViewDidEndEditing:(NSNotification*)notification; -- (void)textFieldViewDidChange:(NSNotification*)notification; +@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *registeredClasses; -// Rotation notification -- (void)willChangeStatusBarOrientation:(NSNotification*)aNotification; +@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *disabledDistanceHandlingClasses; +@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *enabledDistanceHandlingClasses; -// Tap Recognizer -- (void)tapRecognized:(UITapGestureRecognizer*)gesture; +@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *disabledToolbarClasses; +@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *enabledToolbarClasses; -// Next/Previous/Done methods -- (void)previousAction:(id)segmentedControl; -- (void)nextAction:(id)segmentedControl; -- (void)doneAction:(IQBarButtonItem*)barButton; +@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *toolbarPreviousNextAllowedClasses; -// Adding Removing IQToolbar methods -- (NSArray*)responderViews; -- (void)addToolbarIfRequired; -- (void)removeToolbarIfRequired; +@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *disabledTouchResignedClasses; +@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *enabledTouchResignedClasses; +@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *touchResignedGestureIgnoreClasses; + +/*******************************************/ @end @implementation IQKeyboardManager { @package - /*******************************************/ - /** To save UITextField/UITextView object voa textField/textView notifications. */ - __weak UIView *_textFieldView; - - /** used with canAdjustTextView boolean. */ - __block CGRect _textFieldViewIntialFrame; - - /** To save rootViewController.view.frame. */ - CGRect _topViewBeginRect; - - /** To save rootViewController */ - __weak UIViewController *_rootViewController; - -#ifdef NSFoundationVersionNumber_iOS_5_1 - /** To save topBottomLayoutConstraint original constant */ - CGFloat _layoutGuideConstraintInitialConstant; -#endif - /*******************************************/ - - /** Variable to save lastScrollView that was scrolled. */ - __weak UIScrollView *_lastScrollView; - - /** LastScrollView's initial contentInsets. */ - UIEdgeInsets _startingContentInsets; - - /** LastScrollView's initial scrollIndicatorInsets. */ - UIEdgeInsets _startingScrollIndicatorInsets; - - /** LastScrollView's initial contentOffset. */ - CGPoint _startingContentOffset; - /*******************************************/ /** To save keyboardWillShowNotification. Needed for enable keyboard functionality. */ @@ -130,43 +143,10 @@ @implementation IQKeyboardManager /** To save keyboard size. */ CGSize _kbSize; - /** To save keyboard animation duration. */ - CGFloat _animationDuration; - - /** To mimic the keyboard animation */ - NSInteger _animationCurve; + /** To save Status Bar size. */ + CGRect _statusBarFrame; /*******************************************/ - - /** TapGesture to resign keyboard on view's touch. */ - UITapGestureRecognizer *_tapGesture; - - /*******************************************/ - - /** Default toolbar tintColor to be used within the project. Default is black. */ - UIColor *_defaultToolbarTintColor; - - /*******************************************/ - - /** Set of restricted classes for library */ - NSMutableSet *_disabledClasses; - - /** Set of restricted classes for adding toolbar */ - NSMutableSet *_disabledToolbarClasses; - - /** Set of permitted classes to add all inner textField as siblings */ - NSMutableSet *_toolbarPreviousNextConsideredClass; - - /*******************************************/ - - struct { - /** used with canAdjustTextView to detect a textFieldView frame is changes or not. (Bug ID: #92)*/ - unsigned int isTextFieldViewFrameChanged:1; - - /** Boolean to maintain keyboard is showing or it is hide. To solve rootViewController.view.frame calculations. */ - unsigned int isKeyboardShowing:1; - - } _keyboardManagerFlags; } //UIKeyboard handling @@ -182,20 +162,12 @@ @implementation IQKeyboardManager @synthesize enableAutoToolbar = _enableAutoToolbar; @synthesize toolbarManageBehaviour = _toolbarManageBehaviour; -#ifdef NSFoundationVersionNumber_iOS_6_1 @synthesize shouldToolbarUsesTextFieldTintColor = _shouldToolbarUsesTextFieldTintColor; -#endif +@synthesize toolbarTintColor = _toolbarTintColor; @synthesize shouldShowTextFieldPlaceholder = _shouldShowTextFieldPlaceholder; @synthesize placeholderFont = _placeholderFont; -//TextView handling -@synthesize canAdjustTextView = _canAdjustTextView; - -#ifdef NSFoundationVersionNumber_iOS_6_1 -@synthesize shouldFixTextViewClip = _shouldFixTextViewClip; -#endif - //Resign handling @synthesize shouldResignOnTouchOutside = _shouldResignOnTouchOutside; @@ -203,20 +175,15 @@ @implementation IQKeyboardManager @synthesize shouldPlayInputClicks = _shouldPlayInputClicks; //Animation handling -@synthesize shouldAdoptDefaultKeyboardAnimation = _shouldAdoptDefaultKeyboardAnimation; @synthesize layoutIfNeededOnUpdate = _layoutIfNeededOnUpdate; -//ScrollView handling -@synthesize shouldRestoreScrollViewContentOffset= _shouldRestoreScrollViewContentOffset; #pragma mark - Initializing functions /** Override +load method to enable KeyboardManager when class loader load IQKeyboardManager. Enabling when app starts (No need to write any code) */ +(void)load { - [super load]; - - //Enabling IQKeyboardManager. - [[IQKeyboardManager sharedManager] setEnable:YES]; + //Enabling IQKeyboardManager. Loading asynchronous on main thread + [self performSelectorOnMainThread:@selector(sharedManager) withObject:nil waitUntilDone:NO]; } /* Singleton Object Initialization. */ @@ -224,72 +191,67 @@ -(instancetype)init { if (self = [super init]) { + __weak typeof(self) weakSelf = self; + static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - // Registering for keyboard notification. - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil]; - - // Registering for textField notification. - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldViewDidBeginEditing:) name:UITextFieldTextDidBeginEditingNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldViewDidEndEditing:) name:UITextFieldTextDidEndEditingNotification object:nil]; - - // Registering for textView notification. - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldViewDidBeginEditing:) name:UITextViewTextDidBeginEditingNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldViewDidEndEditing:) name:UITextViewTextDidEndEditingNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldViewDidChange:) name:UITextViewTextDidChangeNotification object:nil]; - - // Registering for orientation changes notification - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willChangeStatusBarOrientation:) name:UIApplicationWillChangeStatusBarOrientationNotification object:nil]; - + __strong typeof(self) strongSelf = weakSelf; + + strongSelf.registeredClasses = [[NSMutableSet alloc] init]; + + [strongSelf registerAllNotifications]; + //Creating gesture for @shouldResignOnTouchOutside. (Enhancement ID: #14) - _tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)]; - [_tapGesture setDelegate:self]; - _tapGesture.enabled = _shouldResignOnTouchOutside; + strongSelf.tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)]; + strongSelf.tapGesture.cancelsTouchesInView = NO; + [strongSelf.tapGesture setDelegate:self]; + strongSelf.tapGesture.enabled = strongSelf.shouldResignOnTouchOutside; //Setting it's initial values - _enable = NO; //This enables in +(void)load method. - _animationDuration = 0.25; - _animationCurve = UIViewAnimationCurveEaseInOut; + strongSelf.animationDuration = 0.25; + strongSelf.animationCurve = UIViewAnimationCurveEaseInOut; + [self setEnable:YES]; [self setKeyboardDistanceFromTextField:10.0]; - _defaultToolbarTintColor = [UIColor blackColor]; - [self setCanAdjustTextView:NO]; - [self setShouldPlayInputClicks:NO]; + [self setShouldPlayInputClicks:YES]; [self setShouldResignOnTouchOutside:NO]; [self setOverrideKeyboardAppearance:NO]; [self setKeyboardAppearance:UIKeyboardAppearanceDefault]; [self setEnableAutoToolbar:YES]; [self setPreventShowingBottomBlankSpace:YES]; [self setShouldShowTextFieldPlaceholder:YES]; - [self setShouldAdoptDefaultKeyboardAnimation:YES]; - [self setShouldRestoreScrollViewContentOffset:NO]; [self setToolbarManageBehaviour:IQAutoToolbarBySubviews]; [self setLayoutIfNeededOnUpdate:NO]; - + [self setShouldFixInteractivePopGestureRecognizer:YES]; + + //Loading IQToolbar, IQTitleBarButtonItem, IQBarButtonItem to fix first time keyboard appearance delay (Bug ID: #550) + { + UITextField *view = [[UITextField alloc] init]; + [view addDoneOnKeyboardWithTarget:nil action:nil]; + [view addPreviousNextDoneOnKeyboardWithTarget:nil previousAction:nil nextAction:nil doneAction:nil]; + } + //Initializing disabled classes Set. - _disabledClasses = [[NSMutableSet alloc] initWithObjects:[UITableViewController class], nil]; - _disabledToolbarClasses = [[NSMutableSet alloc] init]; - -#ifdef NSFoundationVersionNumber_iOS_6_1 - [self setShouldToolbarUsesTextFieldTintColor:NO]; - [self setShouldFixTextViewClip:YES]; -#endif + strongSelf.disabledDistanceHandlingClasses = [[NSMutableSet alloc] initWithObjects:[UITableViewController class],[UIAlertController class], nil]; + strongSelf.enabledDistanceHandlingClasses = [[NSMutableSet alloc] init]; -#ifdef NSFoundationVersionNumber_iOS_5_1 - _toolbarPreviousNextConsideredClass = [[NSMutableSet alloc] initWithObjects:[UITableView class],[UICollectionView class], nil]; -#else - _toolbarPreviousNextConsideredClass = [[NSMutableSet alloc] initWithObjects:[UITableView class], nil]; -#endif - + strongSelf.disabledToolbarClasses = [[NSMutableSet alloc] initWithObjects:[UIAlertController class], nil]; + strongSelf.enabledToolbarClasses = [[NSMutableSet alloc] init]; + + strongSelf.toolbarPreviousNextAllowedClasses = [[NSMutableSet alloc] initWithObjects:[UITableView class],[UICollectionView class],[IQPreviousNextView class], nil]; + + strongSelf.disabledTouchResignedClasses = [[NSMutableSet alloc] initWithObjects:[UIAlertController class], nil]; + strongSelf.enabledTouchResignedClasses = [[NSMutableSet alloc] init]; + strongSelf.touchResignedGestureIgnoreClasses = [[NSMutableSet alloc] initWithObjects:[UIControl class],[UINavigationBar class], nil]; + + [self setShouldToolbarUsesTextFieldTintColor:NO]; }); } return self; } /* Automatically called from the `+(void)load` method. */ -+ (instancetype)sharedManager ++ (IQKeyboardManager*)sharedManager { //Singleton instance static IQKeyboardManager *kbManager; @@ -317,7 +279,8 @@ -(void)dealloc -(void)setEnable:(BOOL)enable { // If not enabled, enable it. - if (enable == YES && _enable == NO) + if (enable == YES && + _enable == NO) { //Setting NO to _enable. _enable = enable; @@ -325,10 +288,11 @@ -(void)setEnable:(BOOL)enable //If keyboard is currently showing. Sending a fake notification for keyboardWillShow to adjust view according to keyboard. if (_kbShowNotification) [self keyboardWillShow:_kbShowNotification]; - _IQShowLog(IQLocalizedString(@"enabled", nil)); + [self showLog:IQLocalizedString(@"enabled", nil)]; } //If not disable, desable it. - else if (enable == NO && _enable == YES) + else if (enable == NO && + _enable == YES) { //Sending a fake notification for keyboardWillHide to retain view's original frame. [self keyboardWillHide:nil]; @@ -336,38 +300,140 @@ -(void)setEnable:(BOOL)enable //Setting NO to _enable. _enable = enable; - _IQShowLog(IQLocalizedString(@"disabled", nil)); + [self showLog:IQLocalizedString(@"disabled", nil)]; } //If already disabled. - else if (enable == NO && _enable == NO) + else if (enable == NO && + _enable == NO) { - _IQShowLog(IQLocalizedString(@"already disabled", nil)); + [self showLog:IQLocalizedString(@"already disabled", nil)]; } //If already enabled. - else if (enable == YES && _enable == YES) + else if (enable == YES && + _enable == YES) { - _IQShowLog(IQLocalizedString(@"already enabled", nil)); + [self showLog:IQLocalizedString(@"already enabled", nil)]; } } +-(BOOL)privateIsEnabled +{ + BOOL enable = _enable; + + UIViewController *textFieldViewController = [_textFieldView viewController]; + + if (textFieldViewController) + { + if (enable == NO) + { + //If viewController is kind of enable viewController class, then assuming it's enabled. + for (Class enabledClass in _enabledDistanceHandlingClasses) + { + if ([textFieldViewController isKindOfClass:enabledClass]) + { + enable = YES; + break; + } + } + } + + if (enable) + { + //If viewController is kind of disable viewController class, then assuming it's disable. + for (Class disabledClass in _disabledDistanceHandlingClasses) + { + if ([textFieldViewController isKindOfClass:disabledClass]) + { + enable = NO; + break; + } + } + + //Special Controllers + if (enable == YES) + { + NSString *classNameString = NSStringFromClass([textFieldViewController class]); + + //_UIAlertControllerTextFieldViewController + if ([classNameString containsString:@"UIAlertController"] && [classNameString hasSuffix:@"TextFieldViewController"]) + { + enable = NO; + } + } + } + } + + return enable; +} + // Setting keyboard distance from text field. -(void)setKeyboardDistanceFromTextField:(CGFloat)keyboardDistanceFromTextField { //Can't be less than zero. Minimum is zero. _keyboardDistanceFromTextField = MAX(keyboardDistanceFromTextField, 0); - _IQShowLog([NSString stringWithFormat:@"keyboardDistanceFromTextField: %.2f",_keyboardDistanceFromTextField]); + [self showLog:[NSString stringWithFormat:@"keyboardDistanceFromTextField: %.2f",_keyboardDistanceFromTextField]]; } /** Enabling/disable gesture on touching. */ -(void)setShouldResignOnTouchOutside:(BOOL)shouldResignOnTouchOutside { - _IQShowLog([NSString stringWithFormat:@"shouldResignOnTouchOutside: %@",shouldResignOnTouchOutside?@"Yes":@"No"]); + [self showLog:[NSString stringWithFormat:@"shouldResignOnTouchOutside: %@",shouldResignOnTouchOutside?@"Yes":@"No"]]; _shouldResignOnTouchOutside = shouldResignOnTouchOutside; //Enable/Disable gesture recognizer (Enhancement ID: #14) - [_tapGesture setEnabled:_shouldResignOnTouchOutside]; + [_tapGesture setEnabled:[self privateShouldResignOnTouchOutside]]; +} + +-(BOOL)privateShouldResignOnTouchOutside +{ + BOOL shouldResignOnTouchOutside = _shouldResignOnTouchOutside; + + UIViewController *textFieldViewController = [_textFieldView viewController]; + + if (textFieldViewController) + { + if (shouldResignOnTouchOutside == NO) + { + //If viewController is kind of enable viewController class, then assuming shouldResignOnTouchOutside is enabled. + for (Class enabledClass in _enabledTouchResignedClasses) + { + if ([textFieldViewController isKindOfClass:enabledClass]) + { + shouldResignOnTouchOutside = YES; + break; + } + } + } + + if (shouldResignOnTouchOutside) + { + //If viewController is kind of disable viewController class, then assuming shouldResignOnTouchOutside is disable. + for (Class disabledClass in _disabledTouchResignedClasses) + { + if ([textFieldViewController isKindOfClass:disabledClass]) + { + shouldResignOnTouchOutside = NO; + break; + } + } + + //Special Controllers + if (shouldResignOnTouchOutside == YES) + { + NSString *classNameString = NSStringFromClass([textFieldViewController class]); + + //_UIAlertControllerTextFieldViewController + if ([classNameString containsString:@"UIAlertController"] && [classNameString hasSuffix:@"TextFieldViewController"]) + { + shouldResignOnTouchOutside = NO; + } + } + } + } + + return shouldResignOnTouchOutside; } /** Enable/disable autotoolbar. Adding and removing toolbar if required. */ @@ -375,10 +441,10 @@ -(void)setEnableAutoToolbar:(BOOL)enableAutoToolbar { _enableAutoToolbar = enableAutoToolbar; - _IQShowLog([NSString stringWithFormat:@"enableAutoToolbar: %@",enableAutoToolbar?@"Yes":@"No"]); + [self showLog:[NSString stringWithFormat:@"enableAutoToolbar: %@",enableAutoToolbar?@"Yes":@"No"]]; //If enabled then adding toolbar. - if (_enableAutoToolbar == YES) + if ([self privateIsEnableAutoToolbar] == YES) { [self addToolbarIfRequired]; } @@ -389,6 +455,57 @@ -(void)setEnableAutoToolbar:(BOOL)enableAutoToolbar } } +-(BOOL)privateIsEnableAutoToolbar +{ + BOOL enableAutoToolbar = _enableAutoToolbar; + + UIViewController *textFieldViewController = [_textFieldView viewController]; + + if (textFieldViewController) + { + if (enableAutoToolbar == NO) + { + //If found any toolbar enabled classes then return. + for (Class enabledToolbarClass in _enabledToolbarClasses) + { + if ([textFieldViewController isKindOfClass:enabledToolbarClass]) + { + enableAutoToolbar = YES; + break; + } + } + } + + if (enableAutoToolbar) + { + //If found any toolbar disabled classes then return. + for (Class disabledToolbarClass in _disabledToolbarClasses) + { + if ([textFieldViewController isKindOfClass:disabledToolbarClass]) + { + enableAutoToolbar = NO; + break; + } + } + + + //Special Controllers + if (enableAutoToolbar == YES) + { + NSString *classNameString = NSStringFromClass([textFieldViewController class]); + + //_UIAlertControllerTextFieldViewController + if ([classNameString containsString:@"UIAlertController"] && [classNameString hasSuffix:@"TextFieldViewController"]) + { + enableAutoToolbar = NO; + } + } + } + } + + return enableAutoToolbar; +} + #pragma mark - Private Methods /** Getting keyWindow. */ @@ -406,7 +523,11 @@ -(UIWindow *)keyWindow UIWindow *originalKeyWindow = [[UIApplication sharedApplication] keyWindow]; //If original key window is not nil and the cached keywindow is also not original keywindow then changing keywindow. - if (originalKeyWindow != nil && _keyWindow != originalKeyWindow) _keyWindow = originalKeyWindow; + if (originalKeyWindow != nil && + _keyWindow != originalKeyWindow) + { + _keyWindow = originalKeyWindow; + } return _keyWindow; } @@ -420,29 +541,31 @@ -(void)setRootViewFrame:(CGRect)frame if (controller == nil) controller = [[self keyWindow] topMostController]; //frame size needs to be adjusted on iOS8 due to orientation API changes. - if (IQ_IS_IOS8_OR_GREATER) - { - frame.size = controller.view.frame.size; - } + frame.size = controller.view.frame.size; // If can't get rootViewController then printing warning to user. if (controller == nil) - _IQShowLog(IQLocalizedString(@"You must set UIWindow.rootViewController in your AppDelegate to work with IQKeyboardManager", nil)); + [self showLog:(IQLocalizedString(@"You must set UIWindow.rootViewController in your AppDelegate to work with IQKeyboardManager", nil))]; + + __weak typeof(self) weakSelf = self; //Used UIViewAnimationOptionBeginFromCurrentState to minimize strange animations. [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ + + __strong typeof(self) strongSelf = weakSelf; + // Setting it's new frame [controller.view setFrame:frame]; //Animating content if needed (Bug ID: #204) - if (_layoutIfNeededOnUpdate) + if (strongSelf.layoutIfNeededOnUpdate) { //Animating content (Bug ID: #160) [controller.view setNeedsLayout]; [controller.view layoutIfNeeded]; } - _IQShowLog([NSString stringWithFormat:@"Set %@ frame to : %@",[controller _IQDescription],NSStringFromCGRect(frame)]); + [self showLog:[NSString stringWithFormat:@"Set %@ frame to : %@",[controller _IQDescription],NSStringFromCGRect(frame)]]; } completion:NULL]; } @@ -452,11 +575,9 @@ -(void)adjustFrame // We are unable to get textField object while keyboard showing on UIWebView's textField. (Bug ID: #11) if (_textFieldView == nil) return; - _IQShowLog([NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]); + CFTimeInterval startTime = CACurrentMediaTime(); + [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; - // Boolean to know keyboard is showing/hiding - _keyboardManagerFlags.isKeyboardShowing = YES; - // Getting KeyWindow object. UIWindow *keyWindow = [self keyWindow]; @@ -464,58 +585,44 @@ -(void)adjustFrame UIViewController *rootController = [_textFieldView topMostController]; if (rootController == nil) rootController = [keyWindow topMostController]; -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - //If it's iOS8 then we should do calculations according to portrait orientations. // (Bug ID: #64, #66) - UIInterfaceOrientation interfaceOrientation = IQ_IS_IOS8_OR_GREATER ? UIInterfaceOrientationPortrait : [rootController interfaceOrientation]; -#pragma GCC diagnostic pop - // Converting Rectangle according to window bounds. CGRect textFieldViewRect = [[_textFieldView superview] convertRect:_textFieldView.frame toView:keyWindow]; // Getting RootViewRect. CGRect rootViewRect = [[rootController view] frame]; //Getting statusBarFrame - CGFloat topLayoutGuide = 0; + //Maintain keyboardDistanceFromTextField - CGFloat keyboardDistanceFromTextField = (_textFieldView.keyboardDistanceFromTextField == kIQUseDefaultKeyboardDistance)?_keyboardDistanceFromTextField:_textFieldView.keyboardDistanceFromTextField; - CGSize kbSize = _kbSize; + CGFloat specialKeyboardDistanceFromTextField = _textFieldView.keyboardDistanceFromTextField; + + if (_textFieldView.isSearchBarTextField) + { + UISearchBar *searchBar = (UISearchBar*)[_textFieldView superviewOfClassType:[UISearchBar class]]; + specialKeyboardDistanceFromTextField = searchBar.keyboardDistanceFromTextField; + } + CGFloat keyboardDistanceFromTextField = (specialKeyboardDistanceFromTextField == kIQUseDefaultKeyboardDistance)?_keyboardDistanceFromTextField:specialKeyboardDistanceFromTextField; + CGSize kbSize = _kbSize; + kbSize.height += keyboardDistanceFromTextField; + CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame]; // (Bug ID: #250) IQLayoutGuidePosition layoutGuidePosition = IQLayoutGuidePositionNone; -#ifdef NSFoundationVersionNumber_iOS_5_1 - - NSLayoutConstraint *constraint = [[_textFieldView viewController] IQLayoutGuideConstraint]; - //If topLayoutGuide constraint - if (constraint && (constraint.firstItem == [[_textFieldView viewController] topLayoutGuide] || constraint.secondItem == [[_textFieldView viewController] topLayoutGuide])) + if (_layoutGuideConstraint && (_layoutGuideConstraint.firstItem == [[_textFieldView viewController] topLayoutGuide] || + _layoutGuideConstraint.secondItem == [[_textFieldView viewController] topLayoutGuide])) { layoutGuidePosition = IQLayoutGuidePositionTop; } //If bottomLayoutGuice constraint - else if (constraint && (constraint.firstItem == [[_textFieldView viewController] bottomLayoutGuide] || constraint.secondItem == [[_textFieldView viewController] bottomLayoutGuide])) + else if (_layoutGuideConstraint && (_layoutGuideConstraint.firstItem == [[_textFieldView viewController] bottomLayoutGuide] || + _layoutGuideConstraint.secondItem == [[_textFieldView viewController] bottomLayoutGuide])) { layoutGuidePosition = IQLayoutGuidePositionBottom; } -#endif - switch (interfaceOrientation) - { - case UIInterfaceOrientationLandscapeLeft: - case UIInterfaceOrientationLandscapeRight: - topLayoutGuide = CGRectGetWidth(statusBarFrame); - kbSize.width += keyboardDistanceFromTextField; - break; - case UIInterfaceOrientationPortrait: - case UIInterfaceOrientationPortraitUpsideDown: - topLayoutGuide = CGRectGetHeight(statusBarFrame); - kbSize.height += keyboardDistanceFromTextField; - break; - default: - break; - } + CGFloat topLayoutGuide = CGRectGetHeight(statusBarFrame); CGFloat move = 0; // +Move positive = textField is hidden. @@ -525,50 +632,33 @@ -(void)adjustFrame if (layoutGuidePosition == IQLayoutGuidePositionBottom) { // Calculating move position. - switch (interfaceOrientation) - { - case UIInterfaceOrientationLandscapeLeft: - move = CGRectGetMaxX(textFieldViewRect)-(CGRectGetWidth(keyWindow.frame)-kbSize.width); - break; - case UIInterfaceOrientationLandscapeRight: - move = kbSize.width-CGRectGetMinX(textFieldViewRect); - break; - case UIInterfaceOrientationPortrait: - move = CGRectGetMaxY(textFieldViewRect)-(CGRectGetHeight(keyWindow.frame)-kbSize.height); - break; - case UIInterfaceOrientationPortraitUpsideDown: - move = kbSize.height-CGRectGetMinY(textFieldViewRect); - break; - default: - break; - } + move = CGRectGetMaxY(textFieldViewRect)-(CGRectGetHeight(keyWindow.frame)-kbSize.height); } else { // Calculating move position. Common for both normal and special cases. - switch (interfaceOrientation) - { - case UIInterfaceOrientationLandscapeLeft: - move = MIN(CGRectGetMinX(textFieldViewRect)-(topLayoutGuide+5), CGRectGetMaxX(textFieldViewRect)-(CGRectGetWidth(keyWindow.frame)-kbSize.width)); - break; - case UIInterfaceOrientationLandscapeRight: - move = MIN(CGRectGetWidth(keyWindow.frame)-CGRectGetMaxX(textFieldViewRect)-(topLayoutGuide+5), kbSize.width-CGRectGetMinX(textFieldViewRect)); - break; - case UIInterfaceOrientationPortrait: - move = MIN(CGRectGetMinY(textFieldViewRect)-(topLayoutGuide+5), CGRectGetMaxY(textFieldViewRect)-(CGRectGetHeight(keyWindow.frame)-kbSize.height)); - break; - case UIInterfaceOrientationPortraitUpsideDown: - move = MIN(CGRectGetHeight(keyWindow.frame)-CGRectGetMaxY(textFieldViewRect)-(topLayoutGuide+5), kbSize.height-CGRectGetMinY(textFieldViewRect)); - break; - default: - break; - } + move = MIN(CGRectGetMinY(textFieldViewRect)-(topLayoutGuide+5), CGRectGetMaxY(textFieldViewRect)-(CGRectGetHeight(keyWindow.frame)-kbSize.height)); } - _IQShowLog([NSString stringWithFormat:@"Need to move: %.2f",move]); + [self showLog:[NSString stringWithFormat:@"Need to move: %.2f",move]]; + + UIScrollView *superScrollView = nil; + UIScrollView *superView = (UIScrollView*)[_textFieldView superviewOfClassType:[UIScrollView class]]; - // Getting it's superScrollView. // (Enhancement ID: #21, #24) - UIScrollView *superScrollView = (UIScrollView*)[_textFieldView superviewOfClassType:[UIScrollView class]]; + //Getting UIScrollView whose scrolling is enabled. // (Bug ID: #285) + while (superView) + { + if (superView.isScrollEnabled) + { + superScrollView = superView; + break; + } + else + { + // Getting it's superScrollView. // (Enhancement ID: #21, #24) + superView = (UIScrollView*)[superView superviewOfClassType:[UIScrollView class]]; + } + } //If there was a lastScrollView. // (Bug ID: #34) if (_lastScrollView) @@ -576,14 +666,19 @@ -(void)adjustFrame //If we can't find current superScrollView, then setting lastScrollView to it's original form. if (superScrollView == nil) { - _IQShowLog([NSString stringWithFormat:@"Restoring %@ contentInset to : %@ and contentOffset to : %@",[_lastScrollView _IQDescription],NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]); + [self showLog:[NSString stringWithFormat:@"Restoring %@ contentInset to : %@ and contentOffset to : %@",[_lastScrollView _IQDescription],NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]]; + + __weak typeof(self) weakSelf = self; [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - [_lastScrollView setContentInset:_startingContentInsets]; - _lastScrollView.scrollIndicatorInsets = _startingScrollIndicatorInsets; + + __strong typeof(self) strongSelf = weakSelf; + + [strongSelf.lastScrollView setContentInset:strongSelf.startingContentInsets]; + strongSelf.lastScrollView.scrollIndicatorInsets = strongSelf.startingScrollIndicatorInsets; } completion:NULL]; - if (_shouldRestoreScrollViewContentOffset) + if (_lastScrollView.shouldRestoreScrollViewContentOffset) { [_lastScrollView setContentOffset:_startingContentOffset animated:YES]; } @@ -596,14 +691,19 @@ -(void)adjustFrame //If both scrollView's are different, then reset lastScrollView to it's original frame and setting current scrollView as last scrollView. else if (superScrollView != _lastScrollView) { - _IQShowLog([NSString stringWithFormat:@"Restoring %@ contentInset to : %@ and contentOffset to : %@",[_lastScrollView _IQDescription],NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]); + [self showLog:[NSString stringWithFormat:@"Restoring %@ contentInset to : %@ and contentOffset to : %@",[_lastScrollView _IQDescription],NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]]; + + __weak typeof(self) weakSelf = self; [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - [_lastScrollView setContentInset:_startingContentInsets]; - _lastScrollView.scrollIndicatorInsets = _startingScrollIndicatorInsets; + + __strong typeof(self) strongSelf = weakSelf; + + [strongSelf.lastScrollView setContentInset:strongSelf.startingContentInsets]; + strongSelf.lastScrollView.scrollIndicatorInsets = strongSelf.startingScrollIndicatorInsets; } completion:NULL]; - if (_shouldRestoreScrollViewContentOffset) + if (_lastScrollView.shouldRestoreScrollViewContentOffset) { [_lastScrollView setContentOffset:_startingContentOffset animated:YES]; } @@ -613,7 +713,7 @@ -(void)adjustFrame _startingScrollIndicatorInsets = superScrollView.scrollIndicatorInsets; _startingContentOffset = superScrollView.contentOffset; - _IQShowLog([NSString stringWithFormat:@"Saving New %@ contentInset: %@ and contentOffset : %@",[_lastScrollView _IQDescription],NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]); + [self showLog:[NSString stringWithFormat:@"Saving New %@ contentInset: %@ and contentOffset : %@",[_lastScrollView _IQDescription],NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]]; } //Else the case where superScrollView == lastScrollView means we are on same scrollView after switching to different textField. So doing nothing } @@ -623,9 +723,9 @@ -(void)adjustFrame _lastScrollView = superScrollView; _startingContentInsets = superScrollView.contentInset; _startingContentOffset = superScrollView.contentOffset; - _startingScrollIndicatorInsets = superScrollView.contentInset; + _startingScrollIndicatorInsets = superScrollView.scrollIndicatorInsets; - _IQShowLog([NSString stringWithFormat:@"Saving %@ contentInset: %@ and contentOffset : %@",[_lastScrollView _IQDescription],NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]); + [self showLog:[NSString stringWithFormat:@"Saving %@ contentInset: %@ and contentOffset : %@",[_lastScrollView _IQDescription],NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]]; } // Special case for ScrollView. @@ -638,8 +738,27 @@ -(void)adjustFrame UIScrollView *superScrollView = _lastScrollView; //Looping in upper hierarchy until we don't found any scrollView in it's upper hirarchy till UIWindow object. - while (superScrollView && (move>0?(move > (-superScrollView.contentOffset.y-superScrollView.contentInset.top)):superScrollView.contentOffset.y>0) ) + while (superScrollView && + (move>0?(move > (-superScrollView.contentOffset.y-superScrollView.contentInset.top)):superScrollView.contentOffset.y>0) ) { + UIScrollView *nextScrollView = nil; + UIScrollView *tempScrollView = (UIScrollView*)[superScrollView superviewOfClassType:[UIScrollView class]]; + + //Getting UIScrollView whose scrolling is enabled. // (Bug ID: #285) + while (tempScrollView) + { + if (tempScrollView.isScrollEnabled) + { + nextScrollView = tempScrollView; + break; + } + else + { + // Getting it's superScrollView. // (Enhancement ID: #21, #24) + tempScrollView = (UIScrollView*)[tempScrollView superviewOfClassType:[UIScrollView class]]; + } + } + //Getting lastViewRect. CGRect lastViewRect = [[lastView superview] convertRect:lastView.frame toView:superScrollView]; @@ -652,42 +771,25 @@ -(void)adjustFrame //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type //[superScrollView superviewOfClassType:[UIScrollView class]] == nil If processing scrollView is last scrollView in upper hierarchy (there is no other scrollView upper hierrchy.) //shouldOffsetY >= 0 shouldOffsetY must be greater than in order to keep distance from navigationBar (Bug ID: #92) - if ([_textFieldView isKindOfClass:[UITextView class]] && [superScrollView superviewOfClassType:[UIScrollView class]] == nil && (shouldOffsetY >= 0)) + if ([_textFieldView isKindOfClass:[UITextView class]] && + nextScrollView == nil && + (shouldOffsetY >= 0)) { CGFloat maintainTopLayout = 0; //When uncommenting this, each calculation goes to well, but don't know why scrollView doesn't adjusting it's contentOffset at bottom -#ifdef NSFoundationVersionNumber_iOS_5_1 // if ([_textFieldView.viewController respondsToSelector:@selector(topLayoutGuide)]) // maintainTopLayout = [_textFieldView.viewController.topLayoutGuide length]; // else -#endif maintainTopLayout = CGRectGetMaxY(_textFieldView.viewController.navigationController.navigationBar.frame); maintainTopLayout+= 10; //For good UI // Converting Rectangle according to window bounds. CGRect currentTextFieldViewRect = [[_textFieldView superview] convertRect:_textFieldView.frame toView:keyWindow]; - CGFloat expectedFixDistance = shouldOffsetY; //Calculating expected fix distance which needs to be managed from navigation bar - switch (interfaceOrientation) - { - case UIInterfaceOrientationLandscapeLeft: - expectedFixDistance = CGRectGetMinX(currentTextFieldViewRect) - maintainTopLayout; - break; - case UIInterfaceOrientationLandscapeRight: - expectedFixDistance = (CGRectGetWidth(keyWindow.frame)-CGRectGetMaxX(currentTextFieldViewRect)) - maintainTopLayout; - break; - case UIInterfaceOrientationPortrait: - expectedFixDistance = CGRectGetMinY(currentTextFieldViewRect) - maintainTopLayout; - break; - case UIInterfaceOrientationPortraitUpsideDown: - expectedFixDistance = (CGRectGetHeight(keyWindow.frame)-CGRectGetMaxY(currentTextFieldViewRect)) - maintainTopLayout; - break; - default: - break; - } + CGFloat expectedFixDistance = CGRectGetMinY(currentTextFieldViewRect) - maintainTopLayout; //Now if expectedOffsetY (superScrollView.contentOffset.y + expectedFixDistance) is lower than current shouldOffsetY, which means we're in a position where navigationBar up and hide, then reducing shouldOffsetY with expectedOffsetY (superScrollView.contentOffset.y + expectedFixDistance) shouldOffsetY = MIN(shouldOffsetY, superScrollView.contentOffset.y + expectedFixDistance); @@ -705,8 +807,8 @@ -(void)adjustFrame //Getting problem while using `setContentOffset:animated:`, So I used animation API. [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - _IQShowLog([NSString stringWithFormat:@"Adjusting %.2f to %@ ContentOffset",(superScrollView.contentOffset.y-shouldOffsetY),[superScrollView _IQDescription]]); - _IQShowLog([NSString stringWithFormat:@"Remaining Move: %.2f",move]); + [self showLog:[NSString stringWithFormat:@"Adjusting %.2f to %@ ContentOffset",(superScrollView.contentOffset.y-shouldOffsetY),[superScrollView _IQDescription]]]; + [self showLog:[NSString stringWithFormat:@"Remaining Move: %.2f",move]]; superScrollView.contentOffset = CGPointMake(superScrollView.contentOffset.x, shouldOffsetY); @@ -714,134 +816,119 @@ -(void)adjustFrame // Getting next lastView & superScrollView. lastView = superScrollView; - superScrollView = (UIScrollView*)[lastView superviewOfClassType:[UIScrollView class]]; + superScrollView = nextScrollView; } //Updating contentInset { - CGFloat bottom = 0; - CGRect lastScrollViewRect = [[_lastScrollView superview] convertRect:_lastScrollView.frame toView:keyWindow]; - switch (interfaceOrientation) - { - case UIInterfaceOrientationLandscapeLeft: - bottom = kbSize.width-(CGRectGetWidth(keyWindow.frame)-CGRectGetMaxX(lastScrollViewRect)); - break; - case UIInterfaceOrientationLandscapeRight: - bottom = kbSize.width-CGRectGetMinX(lastScrollViewRect); - break; - case UIInterfaceOrientationPortrait: - bottom = kbSize.height-(CGRectGetHeight(keyWindow.frame)-CGRectGetMaxY(lastScrollViewRect)); - break; - case UIInterfaceOrientationPortraitUpsideDown: - bottom = kbSize.height-CGRectGetMinY(lastScrollViewRect); - break; - default: - break; - } + CGFloat bottom = kbSize.height-keyboardDistanceFromTextField-(CGRectGetHeight(keyWindow.frame)-CGRectGetMaxY(lastScrollViewRect)); // Update the insets so that the scroll vew doesn't shift incorrectly when the offset is near the bottom of the scroll view. UIEdgeInsets movedInsets = _lastScrollView.contentInset; movedInsets.bottom = MAX(_startingContentInsets.bottom, bottom); - _IQShowLog([NSString stringWithFormat:@"%@ old ContentInset : %@",[_lastScrollView _IQDescription], NSStringFromUIEdgeInsets(_lastScrollView.contentInset)]); + [self showLog:[NSString stringWithFormat:@"%@ old ContentInset : %@",[_lastScrollView _IQDescription], NSStringFromUIEdgeInsets(_lastScrollView.contentInset)]]; + __weak typeof(self) weakSelf = self; + [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - _lastScrollView.contentInset = movedInsets; - UIEdgeInsets newInset = _lastScrollView.scrollIndicatorInsets; - newInset.bottom = movedInsets.bottom - 10; - _lastScrollView.scrollIndicatorInsets = newInset; + __strong typeof(self) strongSelf = weakSelf; + + strongSelf.lastScrollView.contentInset = movedInsets; + + UIEdgeInsets newInset = strongSelf.lastScrollView.scrollIndicatorInsets; + newInset.bottom = movedInsets.bottom; + strongSelf.lastScrollView.scrollIndicatorInsets = newInset; } completion:NULL]; - //Maintaining contentSize - if (_lastScrollView.contentSize.height<_lastScrollView.frame.size.height) - { - CGSize contentSize = _lastScrollView.contentSize; - contentSize.height = _lastScrollView.frame.size.height; - _lastScrollView.contentSize = contentSize; - } - - _IQShowLog([NSString stringWithFormat:@"%@ new ContentInset : %@",[_lastScrollView _IQDescription], NSStringFromUIEdgeInsets(_lastScrollView.contentInset)]); + [self showLog:[NSString stringWithFormat:@"%@ new ContentInset : %@",[_lastScrollView _IQDescription], NSStringFromUIEdgeInsets(_lastScrollView.contentInset)]]; } } //Going ahead. No else if. } -#ifdef NSFoundationVersionNumber_iOS_5_1 - if (layoutGuidePosition == IQLayoutGuidePositionTop) { - CGFloat constant = MIN(_layoutGuideConstraintInitialConstant, constraint.constant-move); + CGFloat constant = MIN(_layoutGuideConstraintInitialConstant, _layoutGuideConstraint.constant-move); - [UIView animateWithDuration:_animationDuration delay:0 options:(7<<16|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - constraint.constant = constant; - [_rootViewController.view setNeedsLayout]; - [_rootViewController.view layoutIfNeeded]; - } completion:^(BOOL finished) { - }]; + __weak typeof(self) weakSelf = self; + + [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ + + __strong typeof(self) strongSelf = weakSelf; + + weakSelf.layoutGuideConstraint.constant = constant; + [strongSelf.rootViewController.view setNeedsLayout]; + [strongSelf.rootViewController.view layoutIfNeeded]; + } completion:NULL]; } //If bottomLayoutGuice constraint else if (layoutGuidePosition == IQLayoutGuidePositionBottom) { - CGFloat constant = MAX(_layoutGuideConstraintInitialConstant, constraint.constant+move); + CGFloat constant = MAX(_layoutGuideConstraintInitialConstant, _layoutGuideConstraint.constant+move); - [UIView animateWithDuration:_animationDuration delay:0 options:(7<<16|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - constraint.constant = constant; - [_rootViewController.view setNeedsLayout]; - [_rootViewController.view layoutIfNeeded]; - } completion:^(BOOL finished) { - }]; + __weak typeof(self) weakSelf = self; + + [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ + + __strong typeof(self) strongSelf = weakSelf; + + weakSelf.layoutGuideConstraint.constant = constant; + [strongSelf.rootViewController.view setNeedsLayout]; + [strongSelf.rootViewController.view layoutIfNeeded]; + } completion:NULL]; } //If not constraint else -#endif { - //Special case for UITextView(Readjusting the move variable when textView hight is too big to fit on screen) - //_canAdjustTextView If we have permission to adjust the textView, then let's do it on behalf of user (Enhancement ID: #15) + //Special case for UITextView(Readjusting textView.contentInset when textView hight is too big to fit on screen) //_lastScrollView If not having inside any scrollView, (now contentInset manages the full screen textView. //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type - //_isTextFieldViewFrameChanged If frame is not change by library in past (Bug ID: #92) - if (_canAdjustTextView && (_lastScrollView == nil) && [_textFieldView isKindOfClass:[UITextView class]] && _keyboardManagerFlags.isTextFieldViewFrameChanged == NO) + if ([_textFieldView isKindOfClass:[UITextView class]]) { - CGFloat textViewHeight = CGRectGetHeight(_textFieldView.frame); + UITextView *textView = (UITextView*)_textFieldView; + + CGFloat textViewHeight = MIN(CGRectGetHeight(_textFieldView.frame), (CGRectGetHeight(keyWindow.frame)-kbSize.height-(topLayoutGuide))); - switch (interfaceOrientation) + if (_textFieldView.frame.size.height-textView.contentInset.bottom>textViewHeight) { - case UIInterfaceOrientationLandscapeLeft: - case UIInterfaceOrientationLandscapeRight: - textViewHeight = MIN(textViewHeight, (CGRectGetWidth(keyWindow.frame)-kbSize.width-(topLayoutGuide+5))); - break; - case UIInterfaceOrientationPortrait: - case UIInterfaceOrientationPortraitUpsideDown: - textViewHeight = MIN(textViewHeight, (CGRectGetHeight(keyWindow.frame)-kbSize.height-(topLayoutGuide+5))); - break; - default: - break; - } - - [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ + __weak typeof(self) weakSelf = self; - _IQShowLog([NSString stringWithFormat:@"%@ Old Frame : %@",[_textFieldView _IQDescription], NSStringFromCGRect(_textFieldView.frame)]); - - CGRect textFieldViewRect = _textFieldView.frame; - textFieldViewRect.size.height = textViewHeight; - _textFieldView.frame = textFieldViewRect; - _keyboardManagerFlags.isTextFieldViewFrameChanged = YES; - - _IQShowLog([NSString stringWithFormat:@"%@ New Frame : %@",[_textFieldView _IQDescription], NSStringFromCGRect(_textFieldView.frame)]); - - } completion:NULL]; + [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ + + __strong typeof(self) strongSelf = weakSelf; + + [self showLog:[NSString stringWithFormat:@"%@ Old UITextView.contentInset : %@",[strongSelf.textFieldView _IQDescription], NSStringFromUIEdgeInsets(textView.contentInset)]]; + + //_isTextViewContentInsetChanged, If frame is not change by library in past, then saving user textView properties (Bug ID: #92) + if (_isTextViewContentInsetChanged == NO) + { + _startingTextViewContentInsets = textView.contentInset; + _startingTextViewScrollIndicatorInsets = textView.scrollIndicatorInsets; + } + + UIEdgeInsets newContentInset = textView.contentInset; + newContentInset.bottom = _textFieldView.frame.size.height-textViewHeight; + textView.contentInset = newContentInset; + textView.scrollIndicatorInsets = newContentInset; + strongSelf.isTextViewContentInsetChanged = YES; + + [self showLog:[NSString stringWithFormat:@"%@ New UITextView.contentInset : %@",[strongSelf.textFieldView _IQDescription], NSStringFromUIEdgeInsets(textView.contentInset)]]; + + } completion:NULL]; + } } // Special case for iPad modalPresentationStyle. if ([rootController modalPresentationStyle] == UIModalPresentationFormSheet || [rootController modalPresentationStyle] == UIModalPresentationPageSheet) { - _IQShowLog([NSString stringWithFormat:@"Found Special case for Model Presentation Style: %ld",(long)(rootController.modalPresentationStyle)]); + [self showLog:[NSString stringWithFormat:@"Found Special case for Model Presentation Style: %ld",(long)(rootController.modalPresentationStyle)]]; // +Positive or zero. if (move>=0) @@ -852,25 +939,15 @@ -(void)adjustFrame // From now prevent keyboard manager to slide up the rootView to more than keyboard height. (Bug ID: #93) if (_preventShowingBottomBlankSpace == YES) { - CGFloat minimumY = 0; - - switch (interfaceOrientation) - { - case UIInterfaceOrientationLandscapeLeft: - case UIInterfaceOrientationLandscapeRight: - minimumY = CGRectGetWidth(keyWindow.frame)-rootViewRect.size.height-topLayoutGuide-(kbSize.width-keyboardDistanceFromTextField); break; - case UIInterfaceOrientationPortrait: - case UIInterfaceOrientationPortraitUpsideDown: - minimumY = (CGRectGetHeight(keyWindow.frame)-rootViewRect.size.height-topLayoutGuide)/2-(kbSize.height-keyboardDistanceFromTextField); break; - default: break; - } + CGFloat minimumY = (CGRectGetHeight(keyWindow.frame)-rootViewRect.size.height-topLayoutGuide)/2-(kbSize.height-keyboardDistanceFromTextField); rootViewRect.origin.y = MAX(rootViewRect.origin.y, minimumY); } - _IQShowLog(@"Moving Upward"); + [self showLog:@"Moving Upward"]; // Setting adjusted rootViewRect [self setRootViewFrame:rootViewRect]; + _movedDistance = (_topViewBeginRect.origin.y-rootViewRect.origin.y); } // -Negative else @@ -885,9 +962,10 @@ -(void)adjustFrame // We should only manipulate y. rootViewRect.origin.y -= MAX(move, disturbDistance); - _IQShowLog(@"Moving Downward"); + [self showLog:@"Moving Downward"]; // Setting adjusted rootViewRect [self setRootViewFrame:rootViewRect]; + _movedDistance = (_topViewBeginRect.origin.y-rootViewRect.origin.y); } } } @@ -897,77 +975,58 @@ -(void)adjustFrame // +Positive or zero. if (move>=0) { - switch (interfaceOrientation) - { - case UIInterfaceOrientationLandscapeLeft: rootViewRect.origin.x -= move; break; - case UIInterfaceOrientationLandscapeRight: rootViewRect.origin.x += move; break; - case UIInterfaceOrientationPortrait: rootViewRect.origin.y -= move; break; - case UIInterfaceOrientationPortraitUpsideDown: rootViewRect.origin.y += move; break; - default: break; - } + rootViewRect.origin.y -= move; // From now prevent keyboard manager to slide up the rootView to more than keyboard height. (Bug ID: #93) if (_preventShowingBottomBlankSpace == YES) { - switch (interfaceOrientation) - { - case UIInterfaceOrientationLandscapeLeft: rootViewRect.origin.x = MAX(rootViewRect.origin.x, MIN(0,-kbSize.width+keyboardDistanceFromTextField)); break; - case UIInterfaceOrientationLandscapeRight: rootViewRect.origin.x = MIN(rootViewRect.origin.x, +kbSize.width-keyboardDistanceFromTextField); break; - case UIInterfaceOrientationPortrait: rootViewRect.origin.y = MAX(rootViewRect.origin.y, MIN(0, -kbSize.height+keyboardDistanceFromTextField)); break; - case UIInterfaceOrientationPortraitUpsideDown: rootViewRect.origin.y = MIN(rootViewRect.origin.y, +kbSize.height-keyboardDistanceFromTextField); break; - default: break; - } + rootViewRect.origin.y = MAX(rootViewRect.origin.y, MIN(0, -kbSize.height+keyboardDistanceFromTextField)); } - _IQShowLog(@"Moving Upward"); + [self showLog:@"Moving Upward"]; // Setting adjusted rootViewRect [self setRootViewFrame:rootViewRect]; + _movedDistance = (_topViewBeginRect.origin.y-rootViewRect.origin.y); } // -Negative else { - CGFloat disturbDistance = 0; - - switch (interfaceOrientation) - { - case UIInterfaceOrientationLandscapeLeft: - disturbDistance = CGRectGetMinX(rootViewRect)-CGRectGetMinX(_topViewBeginRect); - break; - case UIInterfaceOrientationLandscapeRight: - disturbDistance = CGRectGetMinX(_topViewBeginRect)-CGRectGetMinX(rootViewRect); - break; - case UIInterfaceOrientationPortrait: - disturbDistance = CGRectGetMinY(rootViewRect)-CGRectGetMinY(_topViewBeginRect); - break; - case UIInterfaceOrientationPortraitUpsideDown: - disturbDistance = CGRectGetMinY(_topViewBeginRect)-CGRectGetMinY(rootViewRect); - break; - default: - break; - } + CGFloat disturbDistance = CGRectGetMinY(rootViewRect)-CGRectGetMinY(_topViewBeginRect); // disturbDistance Negative = frame disturbed. Pull Request #3 // disturbDistance positive = frame not disturbed. if(disturbDistance<0) { - switch (interfaceOrientation) - { - case UIInterfaceOrientationLandscapeLeft: rootViewRect.origin.x -= MAX(move, disturbDistance); break; - case UIInterfaceOrientationLandscapeRight: rootViewRect.origin.x += MAX(move, disturbDistance); break; - case UIInterfaceOrientationPortrait: rootViewRect.origin.y -= MAX(move, disturbDistance); break; - case UIInterfaceOrientationPortraitUpsideDown: rootViewRect.origin.y += MAX(move, disturbDistance); break; - default: break; - } + rootViewRect.origin.y -= MAX(move, disturbDistance); - _IQShowLog(@"Moving Downward"); + [self showLog:@"Moving Downward"]; // Setting adjusted rootViewRect [self setRootViewFrame:rootViewRect]; + _movedDistance = (_topViewBeginRect.origin.y-rootViewRect.origin.y); } } } } - _IQShowLog([NSString stringWithFormat:@"****** %@ ended ******",NSStringFromSelector(_cmd)]); + CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; + [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime]]; +} + +#pragma mark - Public Methods + +/* Refreshes textField/textView position if any external changes is explicitly made by user. */ +- (void)reloadLayoutIfNeeded +{ + if ([self privateIsEnabled] == YES) + { + if (_textFieldView != nil && + _keyboardShowing == YES && + CGRectEqualToRect(_topViewBeginRect, CGRectZero) == false && + [_textFieldView isAlertViewTextField] == NO) + { + [self adjustFrame]; + } + } } #pragma mark - UIKeyboad Notification methods @@ -976,41 +1035,15 @@ -(void)keyboardWillShow:(NSNotification*)aNotification { _kbShowNotification = aNotification; - if (_enable == NO) return; - - _IQShowLog([NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]); - - //Due to orientation callback we need to resave it's original frame. // (Bug ID: #46) - //Added _isTextFieldViewFrameChanged check. Saving textFieldView current frame to use it with canAdjustTextView if textViewFrame has already not been changed. (Bug ID: #92) - if (_keyboardManagerFlags.isTextFieldViewFrameChanged == NO && _textFieldView) - { - _textFieldViewIntialFrame = _textFieldView.frame; - _IQShowLog([NSString stringWithFormat:@"Saving %@ Initial frame :%@",[_textFieldView _IQDescription],NSStringFromCGRect(_textFieldViewIntialFrame)]); - } + // Boolean to know keyboard is showing/hiding + _keyboardShowing = YES; - if (CGRectEqualToRect(_topViewBeginRect, CGRectZero)) // (Bug ID: #5) - { - // keyboard is not showing(At the beginning only). We should save rootViewRect. - _rootViewController = [_textFieldView topMostController]; - if (_rootViewController == nil) _rootViewController = [[self keyWindow] topMostController]; - - _topViewBeginRect = _rootViewController.view.frame; - _IQShowLog([NSString stringWithFormat:@"Saving %@ beginning Frame: %@",[_rootViewController _IQDescription] ,NSStringFromCGRect(_topViewBeginRect)]); - } - - if (_shouldAdoptDefaultKeyboardAnimation) - { - // Getting keyboard animation. - _animationCurve = [[[aNotification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] integerValue]; - _animationCurve = _animationCurve<<16; - } - else - { - _animationCurve = UIViewAnimationOptionCurveEaseOut; - } + // Getting keyboard animation. + NSInteger curve = [[aNotification userInfo][UIKeyboardAnimationCurveUserInfoKey] integerValue]; + _animationCurve = curve<<16; // Getting keyboard animation duration - CGFloat duration = [[[aNotification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]; + CGFloat duration = [[aNotification userInfo][UIKeyboardAnimationDurationUserInfoKey] floatValue]; //Saving animation duration if (duration != 0.0) _animationDuration = duration; @@ -1018,39 +1051,93 @@ -(void)keyboardWillShow:(NSNotification*)aNotification CGSize oldKBSize = _kbSize; // Getting UIKeyboardSize. - CGRect kbFrame = [[[aNotification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; - _kbSize = kbFrame.size; - - _IQShowLog([NSString stringWithFormat:@"UIKeyboard Size : %@",NSStringFromCGSize(_kbSize)]); + CGRect kbFrame = [[aNotification userInfo][UIKeyboardFrameEndUserInfoKey] CGRectValue]; + + CGRect screenSize = [[UIScreen mainScreen] bounds]; + + //Calculating actual keyboard displayed size, keyboard frame may be different when hardware keyboard is attached (Bug ID: #469) (Bug ID: #381) + CGRect intersectRect = CGRectIntersection(kbFrame, screenSize); + + if (CGRectIsNull(intersectRect)) + { + _kbSize = CGSizeMake(screenSize.size.width, 0); + } + else + { + _kbSize = intersectRect.size; + } + + if ([self privateIsEnabled] == NO) return; + + CFTimeInterval startTime = CACurrentMediaTime(); + [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; + + if (_textFieldView != nil && CGRectEqualToRect(_topViewBeginRect, CGRectZero)) // (Bug ID: #5) + { + // keyboard is not showing(At the beginning only). We should save rootViewRect and _layoutGuideConstraintInitialConstant. + _layoutGuideConstraint = [[_textFieldView viewController] IQLayoutGuideConstraint]; + _layoutGuideConstraintInitialConstant = [_layoutGuideConstraint constant]; + + // keyboard is not showing(At the beginning only). We should save rootViewRect. + _rootViewController = [_textFieldView topMostController]; + if (_rootViewController == nil) _rootViewController = [[self keyWindow] topMostController]; + + _topViewBeginRect = _rootViewController.view.frame; + + if (_shouldFixInteractivePopGestureRecognizer && + [_rootViewController isKindOfClass:[UINavigationController class]] && + [_rootViewController modalPresentationStyle] != UIModalPresentationFormSheet && + [_rootViewController modalPresentationStyle] != UIModalPresentationPageSheet) + { + _topViewBeginRect.origin = CGPointMake(0, [self keyWindow].frame.size.height-_rootViewController.view.frame.size.height); + } + + [self showLog:[NSString stringWithFormat:@"Saving %@ beginning Frame: %@",[_rootViewController _IQDescription] ,NSStringFromCGRect(_topViewBeginRect)]]; + } //If last restored keyboard size is different(any orientation accure), then refresh. otherwise not. if (!CGSizeEqualToSize(_kbSize, oldKBSize)) { //If _textFieldView is inside UIAlertView then do nothing. (Bug ID: #37, #74, #76) - //See notes:- https://developer.apple.com/Library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html. If it is UIAlertView textField then do not affect anything (Bug ID: #70). - if (_textFieldView != nil && [_textFieldView isAlertViewTextField] == NO) + //See notes:- https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html If it is UIAlertView textField then do not affect anything (Bug ID: #70). + if (_keyboardShowing == YES && + _textFieldView != nil && + [_textFieldView isAlertViewTextField] == NO) { - UIViewController *textFieldViewController = [_textFieldView viewController]; - - BOOL shouldIgnore = NO; - - for (Class disabledClass in _disabledClasses) - { - if ([textFieldViewController isKindOfClass:disabledClass]) - { - shouldIgnore = YES; - break; - } - } - - if (shouldIgnore == NO) - { - [self adjustFrame]; - } + [self adjustFrame]; } } - _IQShowLog([NSString stringWithFormat:@"****** %@ ended ******",NSStringFromSelector(_cmd)]); + CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; + [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime]]; +} + +/* UIKeyboardDidShowNotification. */ +- (void)keyboardDidShow:(NSNotification*)aNotification +{ + if ([self privateIsEnabled] == NO) return; + + CFTimeInterval startTime = CACurrentMediaTime(); + [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; + + // Getting topMost ViewController. + UIViewController *controller = [_textFieldView topMostController]; + if (controller == nil) controller = [[self keyWindow] topMostController]; + + //If _textFieldView viewController is presented as formSheet, then adjustFrame again because iOS internally update formSheet frame on keyboardShown. (Bug ID: #37, #74, #76) + if (_keyboardShowing == YES && + _textFieldView != nil && + (controller.modalPresentationStyle == UIModalPresentationFormSheet || controller.modalPresentationStyle == UIModalPresentationPageSheet) && + [_textFieldView isAlertViewTextField] == NO) + { + //In case of form sheet or page sheet, we'll add adjustFrame call in main queue to perform it when UI thread will do all framing updation so adjustFrame will be executed after all internal operations. + [[NSOperationQueue mainQueue] addOperationWithBlock:^{ + [self adjustFrame]; + }]; + } + + CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; + [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime]]; } /* UIKeyboardWillHideNotification. So setting rootViewController to it's default frame. */ @@ -1059,43 +1146,49 @@ - (void)keyboardWillHide:(NSNotification*)aNotification //If it's not a fake notification generated by [self setEnable:NO]. if (aNotification != nil) _kbShowNotification = nil; - //If not enabled then do nothing. - if (_enable == NO) return; - - _IQShowLog([NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]); - - //Commented due to #56. Added all the conditions below to handle UIWebView's textFields. (Bug ID: #56) - // We are unable to get textField object while keyboard showing on UIWebView's textField. (Bug ID: #11) -// if (_textFieldView == nil) return; - // Boolean to know keyboard is showing/hiding - _keyboardManagerFlags.isKeyboardShowing = NO; + _keyboardShowing = NO; // Getting keyboard animation duration - CGFloat aDuration = [[[aNotification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]; + CGFloat aDuration = [[aNotification userInfo][UIKeyboardAnimationDurationUserInfoKey] floatValue]; if (aDuration!= 0.0f) { _animationDuration = aDuration; } + //If not enabled then do nothing. + if ([self privateIsEnabled] == NO) return; + + CFTimeInterval startTime = CACurrentMediaTime(); + [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; + + //Commented due to #56. Added all the conditions below to handle UIWebView's textFields. (Bug ID: #56) + // We are unable to get textField object while keyboard showing on UIWebView's textField. (Bug ID: #11) +// if (_textFieldView == nil) return; + //Restoring the contentOffset of the lastScrollView if (_lastScrollView) { + __weak typeof(self) weakSelf = self; + [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - _lastScrollView.contentInset = _startingContentInsets; - _lastScrollView.scrollIndicatorInsets = _startingScrollIndicatorInsets; - if (_shouldRestoreScrollViewContentOffset) + __strong typeof(self) strongSelf = weakSelf; + + strongSelf.lastScrollView.contentInset = strongSelf.startingContentInsets; + strongSelf.lastScrollView.scrollIndicatorInsets = strongSelf.startingScrollIndicatorInsets; + + if (strongSelf.lastScrollView.shouldRestoreScrollViewContentOffset) { - _lastScrollView.contentOffset = _startingContentOffset; + strongSelf.lastScrollView.contentOffset = strongSelf.startingContentOffset; } - _IQShowLog([NSString stringWithFormat:@"Restoring %@ contentInset to : %@ and contentOffset to : %@",[_lastScrollView _IQDescription],NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]); + [self showLog:[NSString stringWithFormat:@"Restoring %@ contentInset to : %@ and contentOffset to : %@",[strongSelf.lastScrollView _IQDescription],NSStringFromUIEdgeInsets(strongSelf.startingContentInsets),NSStringFromCGPoint(strongSelf.startingContentOffset)]]; // TODO: restore scrollView state // This is temporary solution. Have to implement the save and restore scrollView state - UIScrollView *superscrollView = _lastScrollView; - while ((superscrollView = (UIScrollView*)[superscrollView superviewOfClassType:[UIScrollView class]])) + UIScrollView *superscrollView = strongSelf.lastScrollView; + do { CGSize contentSize = CGSizeMake(MAX(superscrollView.contentSize.width, CGRectGetWidth(superscrollView.frame)), MAX(superscrollView.contentSize.height, CGRectGetHeight(superscrollView.frame))); @@ -1105,59 +1198,71 @@ - (void)keyboardWillHide:(NSNotification*)aNotification { superscrollView.contentOffset = CGPointMake(superscrollView.contentOffset.x, minimumY); - _IQShowLog([NSString stringWithFormat:@"Restoring %@ contentOffset to : %@",[superscrollView _IQDescription],NSStringFromCGPoint(superscrollView.contentOffset)]); + [self showLog:[NSString stringWithFormat:@"Restoring %@ contentOffset to : %@",[superscrollView _IQDescription],NSStringFromCGPoint(superscrollView.contentOffset)]]; } - } + } while ((superscrollView = (UIScrollView*)[superscrollView superviewOfClassType:[UIScrollView class]])); } completion:NULL]; } // Setting rootViewController frame to it's original position. // (Bug ID: #18) - if (!CGRectEqualToRect(_topViewBeginRect, CGRectZero) && _rootViewController) + if (!CGRectEqualToRect(_topViewBeginRect, CGRectZero) && + _rootViewController) { //frame size needs to be adjusted on iOS8 due to orientation API changes. - if (IQ_IS_IOS8_OR_GREATER) - { - _topViewBeginRect.size = _rootViewController.view.frame.size; - } + _topViewBeginRect.size = _rootViewController.view.frame.size; + __weak typeof(self) weakSelf = self; + //Used UIViewAnimationOptionBeginFromCurrentState to minimize strange animations. [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ -#ifdef NSFoundationVersionNumber_iOS_5_1 + __strong typeof(self) strongSelf = weakSelf; - NSLayoutConstraint *constraint = [[_textFieldView viewController] IQLayoutGuideConstraint]; - //If done LayoutGuide tweak - if (constraint && - ((constraint.firstItem == [[_textFieldView viewController] topLayoutGuide] || constraint.secondItem == [[_textFieldView viewController] topLayoutGuide]) || - (constraint.firstItem == [[_textFieldView viewController] bottomLayoutGuide] || constraint.secondItem == [[_textFieldView viewController] bottomLayoutGuide]))) + if (weakSelf.layoutGuideConstraint) { - constraint.constant = _layoutGuideConstraintInitialConstant; - [_rootViewController.view setNeedsLayout]; - [_rootViewController.view layoutIfNeeded]; + weakSelf.layoutGuideConstraint.constant = strongSelf.layoutGuideConstraintInitialConstant; + [strongSelf.rootViewController.view setNeedsLayout]; + [strongSelf.rootViewController.view layoutIfNeeded]; } else -#endif { - _IQShowLog([NSString stringWithFormat:@"Restoring %@ frame to : %@",[_rootViewController _IQDescription],NSStringFromCGRect(_topViewBeginRect)]); + [self showLog:[NSString stringWithFormat:@"Restoring %@ frame to : %@",[strongSelf.rootViewController _IQDescription],NSStringFromCGRect(strongSelf.topViewBeginRect)]]; // Setting it's new frame - [_rootViewController.view setFrame:_topViewBeginRect]; - + [strongSelf.rootViewController.view setFrame:strongSelf.topViewBeginRect]; + _movedDistance = 0; + //Animating content if needed (Bug ID: #204) - if (_layoutIfNeededOnUpdate) + if (strongSelf.layoutIfNeededOnUpdate) { //Animating content (Bug ID: #160) - [_rootViewController.view setNeedsLayout]; - [_rootViewController.view layoutIfNeeded]; + [strongSelf.rootViewController.view setNeedsLayout]; + [strongSelf.rootViewController.view layoutIfNeeded]; } } } completion:NULL]; _rootViewController = nil; } + //If done LayoutGuide tweak + else if (_layoutGuideConstraint) + { + __weak typeof(self) weakSelf = self; + + //Used UIViewAnimationOptionBeginFromCurrentState to minimize strange animations. + [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ + __strong typeof(self) strongSelf = weakSelf; + + weakSelf.layoutGuideConstraint.constant = strongSelf.layoutGuideConstraintInitialConstant; + [strongSelf.rootViewController.view setNeedsLayout]; + [strongSelf.rootViewController.view layoutIfNeeded]; + } completion:NULL]; + } //Reset all values + _layoutGuideConstraint = nil; + _layoutGuideConstraintInitialConstant = 0; _lastScrollView = nil; _kbSize = CGSizeZero; _startingContentInsets = UIEdgeInsetsZero; @@ -1165,24 +1270,29 @@ - (void)keyboardWillHide:(NSNotification*)aNotification _startingContentOffset = CGPointZero; // topViewBeginRect = CGRectZero; //Commented due to #82 - _IQShowLog([NSString stringWithFormat:@"****** %@ ended ******",NSStringFromSelector(_cmd)]); + CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; + [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime]]; } /* UIKeyboardDidHideNotification. So topViewBeginRect can be set to CGRectZero. */ - (void)keyboardDidHide:(NSNotification*)aNotification { - _IQShowLog([NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]); + CFTimeInterval startTime = CACurrentMediaTime(); + [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; _topViewBeginRect = CGRectZero; + _kbSize = CGSizeZero; - _IQShowLog([NSString stringWithFormat:@"****** %@ ended ******",NSStringFromSelector(_cmd)]); + CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; + [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime]]; } #pragma mark - UITextFieldView Delegate methods /** UITextFieldTextDidBeginEditingNotification, UITextViewTextDidBeginEditingNotification. Fetching UITextFieldView object. */ -(void)textFieldViewDidBeginEditing:(NSNotification*)notification { - _IQShowLog([NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]); + CFTimeInterval startTime = CACurrentMediaTime(); + [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; // Getting object _textFieldView = notification.object; @@ -1191,44 +1301,35 @@ -(void)textFieldViewDidBeginEditing:(NSNotification*)notification { UITextField *textField = (UITextField*)_textFieldView; - //If keyboard appearance is not like the provided appearance - if (textField.keyboardAppearance != _keyboardAppearance) + if ([textField respondsToSelector:@selector(keyboardAppearance)]) { - //Setting textField keyboard appearance and reloading inputViews. - textField.keyboardAppearance = _keyboardAppearance; - [textField reloadInputViews]; + //If keyboard appearance is not like the provided appearance + if (textField.keyboardAppearance != _keyboardAppearance) + { + //Setting textField keyboard appearance and reloading inputViews. + textField.keyboardAppearance = _keyboardAppearance; + [textField reloadInputViews]; + } } } - // Saving textFieldView current frame to use it with canAdjustTextView if textViewFrame has already not been changed. - //Added _isTextFieldViewFrameChanged check. (Bug ID: #92) - if (_keyboardManagerFlags.isTextFieldViewFrameChanged == NO && _textFieldView) - { - _textFieldViewIntialFrame = _textFieldView.frame; - _IQShowLog([NSString stringWithFormat:@"Saving %@ Initial frame :%@",[_textFieldView _IQDescription],NSStringFromCGRect(_textFieldViewIntialFrame)]); - } - //If autoToolbar enable, then add toolbar on all the UITextField/UITextView's if required. - if (_enableAutoToolbar) + if ([self privateIsEnableAutoToolbar]) { - _IQShowLog(@"adding UIToolbars if required"); - //UITextView special case. Keyboard Notification is firing before textView notification so we need to reload it's inputViews. - if ([_textFieldView isKindOfClass:[UITextView class]] && _textFieldView.inputAccessoryView == nil) + if ([_textFieldView isKindOfClass:[UITextView class]] && + _textFieldView.inputAccessoryView == nil) { + __weak typeof(self) weakSelf = self; + [UIView animateWithDuration:0.00001 delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ [self addToolbarIfRequired]; } completion:^(BOOL finished) { - //RestoringTextView before reloading inputViews - if (_keyboardManagerFlags.isTextFieldViewFrameChanged) - { - _keyboardManagerFlags.isTextFieldViewFrameChanged = NO; - _textFieldView.frame = _textFieldViewIntialFrame; - } - + __strong typeof(self) strongSelf = weakSelf; + //On textView toolbar didn't appear on first time, so forcing textView to reload it's inputViews. - [_textFieldView reloadInputViews]; + [strongSelf.textFieldView reloadInputViews]; }]; } //Else adding toolbar @@ -1237,80 +1338,92 @@ -(void)textFieldViewDidBeginEditing:(NSNotification*)notification [self addToolbarIfRequired]; } } - - if (_enable == NO) + else { - _IQShowLog([NSString stringWithFormat:@"****** %@ ended ******",NSStringFromSelector(_cmd)]); - return; + [self removeToolbarIfRequired]; } //Adding Geture recognizer to window (Enhancement ID: #14) + [_tapGesture setEnabled:[self privateShouldResignOnTouchOutside]]; [_textFieldView.window addGestureRecognizer:_tapGesture]; - - if (_keyboardManagerFlags.isKeyboardShowing == NO) // (Bug ID: #5) - { -#ifdef NSFoundationVersionNumber_iOS_5_1 - - // keyboard is not showing(At the beginning only). We should save rootViewRect and _layoutGuideConstraintInitialConstant. - _layoutGuideConstraintInitialConstant = [[[_textFieldView viewController] IQLayoutGuideConstraint] constant]; -#endif - - _rootViewController = [_textFieldView topMostController]; - if (_rootViewController == nil) _rootViewController = [[self keyWindow] topMostController]; - - _topViewBeginRect = _rootViewController.view.frame; - _IQShowLog([NSString stringWithFormat:@"Saving %@ beginning Frame: %@",[_rootViewController _IQDescription], NSStringFromCGRect(_topViewBeginRect)]); - } - - //If _textFieldView is inside UIAlertView then do nothing. (Bug ID: #37, #74, #76) - //See notes:- https://developer.apple.com/Library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html. If it is UIAlertView textField then do not affect anything (Bug ID: #70). - if (_textFieldView != nil && [_textFieldView isAlertViewTextField] == NO) + if ([self privateIsEnabled] == YES) { - //Getting textField viewController - UIViewController *textFieldViewController = [_textFieldView viewController]; - - BOOL shouldIgnore = NO; - - for (Class disabledClass in _disabledClasses) + if (CGRectEqualToRect(_topViewBeginRect, CGRectZero)) // (Bug ID: #5) { - //If viewController is kind of disabled viewController class, then ignoring to adjust view. - if ([textFieldViewController isKindOfClass:disabledClass]) + // keyboard is not showing(At the beginning only). We should save rootViewRect and _layoutGuideConstraintInitialConstant. + _layoutGuideConstraint = [[_textFieldView viewController] IQLayoutGuideConstraint]; + _layoutGuideConstraintInitialConstant = [_layoutGuideConstraint constant]; + + _rootViewController = [_textFieldView topMostController]; + if (_rootViewController == nil) _rootViewController = [[self keyWindow] topMostController]; + + _topViewBeginRect = _rootViewController.view.frame; + + if (_shouldFixInteractivePopGestureRecognizer && + [_rootViewController isKindOfClass:[UINavigationController class]] && + [_rootViewController modalPresentationStyle] != UIModalPresentationFormSheet && + [_rootViewController modalPresentationStyle] != UIModalPresentationPageSheet) { - shouldIgnore = YES; - break; + _topViewBeginRect.origin = CGPointMake(0, [self keyWindow].frame.size.height-_rootViewController.view.frame.size.height); } + + [self showLog:[NSString stringWithFormat:@"Saving %@ beginning Frame: %@",[_rootViewController _IQDescription], NSStringFromCGRect(_topViewBeginRect)]]; } - //If shouldn't ignore. - if (shouldIgnore == NO) + //If _textFieldView is inside UIAlertView then do nothing. (Bug ID: #37, #74, #76) + //See notes:- https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html If it is UIAlertView textField then do not affect anything (Bug ID: #70). + if (_keyboardShowing == YES && + _textFieldView != nil && + [_textFieldView isAlertViewTextField] == NO) { // keyboard is already showing. adjust frame. [self adjustFrame]; } } + +// if ([_textFieldView isKindOfClass:[UITextField class]]) +// { +// [(UITextField*)_textFieldView addTarget:self action:@selector(editingDidEndOnExit:) forControlEvents:UIControlEventEditingDidEndOnExit]; +// } - _IQShowLog([NSString stringWithFormat:@"****** %@ ended ******",NSStringFromSelector(_cmd)]); + CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; + [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime]]; } /** UITextFieldTextDidEndEditingNotification, UITextViewTextDidEndEditingNotification. Removing fetched object. */ -(void)textFieldViewDidEndEditing:(NSNotification*)notification { - _IQShowLog([NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]); + CFTimeInterval startTime = CACurrentMediaTime(); + [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; //Removing gesture recognizer (Enhancement ID: #14) [_textFieldView.window removeGestureRecognizer:_tapGesture]; +// if ([_textFieldView isKindOfClass:[UITextField class]]) +// { +// [(UITextField*)_textFieldView removeTarget:self action:@selector(editingDidEndOnExit:) forControlEvents:UIControlEventEditingDidEndOnExit]; +// } + // We check if there's a change in original frame or not. - if(_keyboardManagerFlags.isTextFieldViewFrameChanged == YES) + if(_isTextViewContentInsetChanged == YES && + [_textFieldView isKindOfClass:[UITextView class]]) { + UITextView *textView = (UITextView*)_textFieldView; + + __weak typeof(self) weakSelf = self; + [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - _keyboardManagerFlags.isTextFieldViewFrameChanged = NO; + + __strong typeof(self) strongSelf = weakSelf; - _IQShowLog([NSString stringWithFormat:@"Restoring %@ frame to : %@",[_textFieldView _IQDescription],NSStringFromCGRect(_textFieldViewIntialFrame)]); + strongSelf.isTextViewContentInsetChanged = NO; - //Setting textField to it's initial frame - _textFieldView.frame = _textFieldViewIntialFrame; + [self showLog:[NSString stringWithFormat:@"Restoring %@ textView.contentInset to : %@",[strongSelf.textFieldView _IQDescription],NSStringFromUIEdgeInsets(strongSelf.startingTextViewContentInsets)]]; + + //Setting textField to it's initial contentInset + textView.contentInset = strongSelf.startingTextViewContentInsets; + textView.scrollIndicatorInsets = strongSelf.startingTextViewScrollIndicatorInsets; } completion:NULL]; } @@ -1318,57 +1431,90 @@ -(void)textFieldViewDidEndEditing:(NSNotification*)notification //Setting object to nil _textFieldView = nil; - _IQShowLog([NSString stringWithFormat:@"****** %@ ended ******",NSStringFromSelector(_cmd)]); + CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; + [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime]]; } -/** UITextViewTextDidChangeNotificationBug, fix for iOS 7.0.x - http://stackoverflow.com/questions/18966675/uitextview-in-ios7-clips-the-last-line-of-text-string */ --(void)textFieldViewDidChange:(NSNotification*)notification // (Bug ID: #18) -{ -#ifdef NSFoundationVersionNumber_iOS_6_1 - if (_shouldFixTextViewClip == YES) - { - UITextView *textView = (UITextView *)notification.object; - CGRect line = [textView caretRectForPosition: textView.selectedTextRange.start]; - CGFloat overflow = CGRectGetMaxY(line) - (textView.contentOffset.y + CGRectGetHeight(textView.bounds) - textView.contentInset.bottom - textView.contentInset.top); - - //Added overflow conditions (Bug ID: 95) - if ( overflow > 0 && overflow < FLT_MAX) - { - // We are at the bottom of the visible text and introduced a line feed, scroll down (iOS 7 does not do it) - // Scroll caret to visible area - CGPoint offset = textView.contentOffset; - offset.y += overflow + 7; // leave 7 pixels margin - - // Cannot animate with setContentOffset:animated: or caret will not appear - [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - [textView setContentOffset:offset]; - } completion:NULL]; - } - } -#endif -} +//-(void)editingDidEndOnExit:(UITextField*)textField +//{ +// [self showLog:[NSString stringWithFormat:@"ReturnKey %@",NSStringFromSelector(_cmd)]]; +//} -#pragma mark - UIInterfaceOrientation Change notification methods +#pragma mark - UIStatusBar Notification methods /** UIApplicationWillChangeStatusBarOrientationNotification. Need to set the textView to it's original position. If any frame changes made. (Bug ID: #92)*/ - (void)willChangeStatusBarOrientation:(NSNotification*)aNotification { - _IQShowLog([NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]); + CFTimeInterval startTime = CACurrentMediaTime(); + [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; - //If textFieldViewInitialRect is saved then restore it.(UITextView case @canAdjustTextView) - if (_keyboardManagerFlags.isTextFieldViewFrameChanged == YES) + //If textViewContentInsetChanged is changed then restore it. + if (_isTextViewContentInsetChanged == YES && + [_textFieldView isKindOfClass:[UITextView class]]) { + UITextView *textView = (UITextView*)_textFieldView; + + __weak typeof(self) weakSelf = self; + //Due to orientation callback we need to set it's original position. [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - _keyboardManagerFlags.isTextFieldViewFrameChanged = NO; + + __strong typeof(self) strongSelf = weakSelf; - _IQShowLog([NSString stringWithFormat:@"Restoring %@ frame to : %@",[_textFieldView _IQDescription],NSStringFromCGRect(_textFieldViewIntialFrame)]); + strongSelf.isTextViewContentInsetChanged = NO; - //Setting textField to it's initial frame - _textFieldView.frame = _textFieldViewIntialFrame; + [self showLog:[NSString stringWithFormat:@"Restoring %@ textView.contentInset to : %@",[strongSelf.textFieldView _IQDescription],NSStringFromUIEdgeInsets(strongSelf.startingTextViewContentInsets)]]; + + //Setting textField to it's initial contentInset + textView.contentInset = strongSelf.startingTextViewContentInsets; + textView.scrollIndicatorInsets = strongSelf.startingTextViewScrollIndicatorInsets; } completion:NULL]; } - _IQShowLog([NSString stringWithFormat:@"****** %@ ended ******",NSStringFromSelector(_cmd)]); + CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; + [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime]]; +} + +/** UIApplicationDidChangeStatusBarFrameNotification. Need to refresh view position and update _topViewBeginRect. (Bug ID: #446)*/ +- (void)didChangeStatusBarFrame:(NSNotification*)aNotification +{ + CGRect oldStatusBarFrame = _statusBarFrame; + + // Getting UIStatusBarFrame + _statusBarFrame = [[aNotification userInfo][UIApplicationStatusBarFrameUserInfoKey] CGRectValue]; + + if ([self privateIsEnabled] == NO) return; + + CFTimeInterval startTime = CACurrentMediaTime(); + [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; + + if (_rootViewController && + !CGRectEqualToRect(_topViewBeginRect, _rootViewController.view.frame)) + { + _topViewBeginRect = _rootViewController.view.frame; + + if (_shouldFixInteractivePopGestureRecognizer && + [_rootViewController isKindOfClass:[UINavigationController class]] && + [_rootViewController modalPresentationStyle] != UIModalPresentationFormSheet && + [_rootViewController modalPresentationStyle] != UIModalPresentationPageSheet) + { + _topViewBeginRect.origin = CGPointMake(0, [self keyWindow].frame.size.height-_rootViewController.view.frame.size.height); + } + + [self showLog:[NSString stringWithFormat:@"Saving %@ beginning Frame: %@",[_rootViewController _IQDescription] ,NSStringFromCGRect(_topViewBeginRect)]]; + } + + //If _textFieldView is inside UIAlertView then do nothing. (Bug ID: #37, #74, #76) + //See notes:- https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html If it is UIAlertView textField then do not affect anything (Bug ID: #70). + if (_keyboardShowing == YES && + _textFieldView != nil && + CGSizeEqualToSize(_statusBarFrame.size, oldStatusBarFrame.size) == NO && + [_textFieldView isAlertViewTextField] == NO) + { + [self adjustFrame]; + } + + CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; + [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime]]; } #pragma mark AutoResign methods @@ -1393,7 +1539,15 @@ - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecogni -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { // Should not recognize gesture if the clicked view is either UIControl or UINavigationBar( 0) + if (index != NSNotFound && + index > 0) { return YES; } @@ -1454,7 +1609,8 @@ -(BOOL)canGoNext NSUInteger index = [textFields indexOfObject:_textFieldView]; //If it is not last textField. then it's next object becomeFirstResponder. - if (index != NSNotFound && index < textFields.count-1) + if (index != NSNotFound && + index < textFields.count-1) { return YES; } @@ -1474,9 +1630,10 @@ -(BOOL)goPrevious NSUInteger index = [textFields indexOfObject:_textFieldView]; //If it is not first textField. then it's previous object becomeFirstResponder. - if (index != NSNotFound && index > 0) + if (index != NSNotFound && + index > 0) { - UITextField *nextTextField = [textFields objectAtIndex:index-1]; + UITextField *nextTextField = textFields[index-1]; // Retaining textFieldView UIView *textFieldRetain = _textFieldView; @@ -1489,7 +1646,7 @@ -(BOOL)goPrevious //If next field refuses to become first responder then restoring old textField as first responder. [textFieldRetain becomeFirstResponder]; - _IQShowLog([NSString stringWithFormat:@"Refuses to become first responder: %@",[nextTextField _IQDescription]]); + [self showLog:[NSString stringWithFormat:@"Refuses to become first responder: %@",[nextTextField _IQDescription]]]; } return isAcceptAsFirstResponder; @@ -1510,9 +1667,10 @@ -(BOOL)goNext NSUInteger index = [textFields indexOfObject:_textFieldView]; //If it is not last textField. then it's next object becomeFirstResponder. - if (index != NSNotFound && index < textFields.count-1) + if (index != NSNotFound && + index < textFields.count-1) { - UITextField *nextTextField = [textFields objectAtIndex:index+1]; + UITextField *nextTextField = textFields[index+1]; // Retaining textFieldView UIView *textFieldRetain = _textFieldView; @@ -1525,7 +1683,7 @@ -(BOOL)goNext //If next field refuses to become first responder then restoring old textField as first responder. [textFieldRetain becomeFirstResponder]; - _IQShowLog([NSString stringWithFormat:@"Refuses to become first responder: %@",[nextTextField _IQDescription]]); + [self showLog:[NSString stringWithFormat:@"Refuses to become first responder: %@",[nextTextField _IQDescription]]]; } return isAcceptAsFirstResponder; @@ -1544,7 +1702,7 @@ -(NSArray*)responderViews UIView *superConsideredView; //If find any consider responderView in it's upper hierarchy then will get deepResponderView. - for (Class consideredClass in _toolbarPreviousNextConsideredClass) + for (Class consideredClass in _toolbarPreviousNextAllowedClasses) { superConsideredView = [_textFieldView superviewOfClassType:consideredClass]; @@ -1589,90 +1747,142 @@ -(NSArray*)responderViews /** Add toolbar if it is required to add on textFields and it's siblings. */ -(void)addToolbarIfRequired { - UIViewController *textFieldViewController = [_textFieldView viewController]; - - //If found any toolbar disabled classes then return. Will not add any toolbar. - for (Class disabledToolbarClass in _disabledToolbarClasses) - if ([textFieldViewController isKindOfClass:disabledToolbarClass]) - { - [self removeToolbarIfRequired]; - return; - } + CFTimeInterval startTime = CACurrentMediaTime(); + [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; // Getting all the sibling textFields. NSArray *siblings = [self responderViews]; + [self showLog:[NSString stringWithFormat:@"Found %lu responder sibling(s)",(unsigned long)siblings.count]]; + // If only one object is found, then adding only Done button. - if (siblings.count==1) + if ((siblings.count==1 && self.previousNextDisplayMode == IQPreviousNextDisplayModeDefault) || self.previousNextDisplayMode == IQPreviousNextDisplayModeAlwaysHide) { - UITextField *textField = nil; - - if ([siblings count]) - textField = [siblings objectAtIndex:0]; //Not using firstObject method because iOS5 doesn't not support 'firstObject' method. + UITextField *textField = (UITextField*)_textFieldView; //Either there is no inputAccessoryView or if accessoryView is not appropriate for current situation(There is Previous/Next/Done toolbar). - if (![textField inputAccessoryView] || ([[textField inputAccessoryView] tag] == kIQPreviousNextButtonToolbarTag)) + //setInputAccessoryView: check (Bug ID: #307) + if ([textField respondsToSelector:@selector(setInputAccessoryView:)]) { - static UIView *doneToolbar = nil; - - if (doneToolbar == nil) + BOOL needReload = NO; + + if (![textField inputAccessoryView] || [[textField inputAccessoryView] tag] == kIQPreviousNextButtonToolbarTag) { - //Now adding textField placeholder text as title of IQToolbar (Enhancement ID: #27) - [textField addDoneOnKeyboardWithTarget:self action:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; - doneToolbar = textField.inputAccessoryView; - doneToolbar.tag = kIQDoneButtonToolbarTag; // (Bug ID: #78) + //Supporting Custom Done button image (Enhancement ID: #366) + if (_toolbarDoneBarButtonItemImage) + { + [textField addRightButtonOnKeyboardWithImage:_toolbarDoneBarButtonItemImage target:self action:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; + needReload = YES; + } + //Supporting Custom Done button text (Enhancement ID: #209, #411, Bug ID: #376) + else if (_toolbarDoneBarButtonItemText) + { + [textField addRightButtonOnKeyboardWithText:_toolbarDoneBarButtonItemText target:self action:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; + needReload = YES; + } + else + { + //Now adding textField placeholder text as title of IQToolbar (Enhancement ID: #27) + [textField addDoneOnKeyboardWithTarget:self action:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; + needReload = YES; + } + textField.inputAccessoryView.tag = kIQDoneButtonToolbarTag; // (Bug ID: #78) } - else + else if ([[textField inputAccessoryView] isKindOfClass:[IQToolbar class]] && + ([[textField inputAccessoryView] tag] == kIQDoneButtonToolbarTag)) + { + IQToolbar *toolbar = (IQToolbar*)[textField inputAccessoryView]; + + //Supporting Custom Done button image (Enhancement ID: #366) + if (_toolbarDoneBarButtonItemImage) + { + if ([toolbar.doneImage isEqual:_toolbarDoneBarButtonItemImage] == NO) + { + [textField addRightButtonOnKeyboardWithImage:_toolbarDoneBarButtonItemImage target:self action:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; + needReload = YES; + } + } + //Supporting Custom Done button text (Enhancement ID: #209, #411, Bug ID: #376) + else if (_toolbarDoneBarButtonItemText && + [toolbar.doneTitle isEqualToString:_toolbarDoneBarButtonItemText] == NO) + { + if ([toolbar.doneTitle isEqualToString:_toolbarDoneBarButtonItemText] == NO) + { + [textField addRightButtonOnKeyboardWithText:_toolbarDoneBarButtonItemText target:self action:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; + needReload = YES; + } + } + else if ((_toolbarDoneBarButtonItemText == nil && toolbar.doneTitle) || + (_toolbarDoneBarButtonItemImage == nil && toolbar.doneImage)) + { + //Now adding textField placeholder text as title of IQToolbar (Enhancement ID: #27) + [textField addDoneOnKeyboardWithTarget:self action:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; + needReload = YES; + } + textField.inputAccessoryView.tag = kIQDoneButtonToolbarTag; // (Bug ID: #78) + } + + if (needReload) { - textField.inputAccessoryView = doneToolbar; + [textField reloadInputViews]; } } - if ([textField.inputAccessoryView isKindOfClass:[IQToolbar class]] && textField.inputAccessoryView.tag == kIQDoneButtonToolbarTag) + if ([textField.inputAccessoryView isKindOfClass:[IQToolbar class]] && + textField.inputAccessoryView.tag == kIQDoneButtonToolbarTag) { IQToolbar *toolbar = (IQToolbar*)[textField inputAccessoryView]; //Bar style according to keyboard appearance - if (IQ_IS_IOS7_OR_GREATER && [textField respondsToSelector:@selector(keyboardAppearance)]) + if ([textField respondsToSelector:@selector(keyboardAppearance)]) { switch ([(UITextField*)textField keyboardAppearance]) { case UIKeyboardAppearanceAlert: { toolbar.barStyle = UIBarStyleBlack; - if ([toolbar respondsToSelector:@selector(tintColor)]) - [toolbar setTintColor:[UIColor whiteColor]]; + [toolbar setTintColor:[UIColor whiteColor]]; } break; default: { toolbar.barStyle = UIBarStyleDefault; -#ifdef NSFoundationVersionNumber_iOS_6_1 - if ([toolbar respondsToSelector:@selector(tintColor)]) - [toolbar setTintColor:_shouldToolbarUsesTextFieldTintColor?[textField tintColor]:_defaultToolbarTintColor]; -#endif + //Setting toolbar tintColor // (Enhancement ID: #30) + if (_shouldToolbarUsesTextFieldTintColor) + { + toolbar.tintColor = [textField tintColor]; + } + else if (_toolbarTintColor) + { + toolbar.tintColor = _toolbarTintColor; + } + else + { + toolbar.tintColor = [UIColor blackColor]; + } } break; } } //If need to show placeholder - if (_shouldShowTextFieldPlaceholder && textField.shouldHideTitle == NO) + if (_shouldShowTextFieldPlaceholder && + textField.shouldHidePlaceholderText == NO) { - //Updating placeholder //(Bug ID: #148) - if ([textField respondsToSelector:@selector(placeholder)]) + //Updating placeholder //(Bug ID: #148, #272) + if (toolbar.title == nil || + [toolbar.title isEqualToString:textField.drawingPlaceholderText] == NO) { - if (toolbar.title == nil || [toolbar.title isEqualToString:textField.placeholder] == NO) - [toolbar setTitle:textField.placeholder]; + [toolbar setTitle:textField.drawingPlaceholderText]; } - //If doesn't recognised 'placeholder' method, then setting it's title to nil //(Bug ID: #272) - else - [toolbar setTitle:nil]; //Setting toolbar title font. // (Enhancement ID: #30) - if (_placeholderFont && [_placeholderFont isKindOfClass:[UIFont class]]) + if (_placeholderFont && + [_placeholderFont isKindOfClass:[UIFont class]]) + { [toolbar setTitleFont:_placeholderFont]; + } } else { @@ -1681,66 +1891,134 @@ -(void)addToolbarIfRequired } } } - else if(siblings.count) + else if ((siblings.count && self.previousNextDisplayMode == IQPreviousNextDisplayModeDefault) || self.previousNextDisplayMode == IQPreviousNextDisplayModeAlwaysShow) { // If more than 1 textField is found. then adding previous/next/done buttons on it. for (UITextField *textField in siblings) { //Either there is no inputAccessoryView or if accessoryView is not appropriate for current situation(There is Done toolbar). - if (![textField inputAccessoryView] || [[textField inputAccessoryView] tag] == kIQDoneButtonToolbarTag) + //setInputAccessoryView: check (Bug ID: #307) + if ([textField respondsToSelector:@selector(setInputAccessoryView:)]) { - //Now adding textField placeholder text as title of IQToolbar (Enhancement ID: #27) - [textField addPreviousNextDoneOnKeyboardWithTarget:self previousAction:@selector(previousAction:) nextAction:@selector(nextAction:) doneAction:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; - textField.inputAccessoryView.tag = kIQPreviousNextButtonToolbarTag; // (Bug ID: #78) + BOOL needReload = NO; + + if ((![textField inputAccessoryView] || + [[textField inputAccessoryView] tag] == kIQDoneButtonToolbarTag)) + { + //Supporting Custom Done button image (Enhancement ID: #366) + if (_toolbarDoneBarButtonItemImage) + { + [textField addPreviousNextRightOnKeyboardWithTarget:self rightButtonImage:_toolbarDoneBarButtonItemImage previousAction:@selector(previousAction:) nextAction:@selector(nextAction:) rightButtonAction:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; + needReload = YES; + } + //Supporting Custom Done button text (Enhancement ID: #209, #411, Bug ID: #376) + else if (_toolbarDoneBarButtonItemText) + { + [textField addPreviousNextRightOnKeyboardWithTarget:self rightButtonTitle:_toolbarDoneBarButtonItemText previousAction:@selector(previousAction:) nextAction:@selector(nextAction:) rightButtonAction:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; + needReload = YES; + } + else + { + //Now adding textField placeholder text as title of IQToolbar (Enhancement ID: #27) + [textField addPreviousNextDoneOnKeyboardWithTarget:self previousAction:@selector(previousAction:) nextAction:@selector(nextAction:) doneAction:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; + needReload = YES; + } + textField.inputAccessoryView.tag = kIQPreviousNextButtonToolbarTag; // (Bug ID: #78) + } + else if ([[textField inputAccessoryView] isKindOfClass:[IQToolbar class]] && + ([[textField inputAccessoryView] tag] == kIQPreviousNextButtonToolbarTag)) + { + IQToolbar *toolbar = (IQToolbar*)[textField inputAccessoryView]; + + //Supporting Custom Done button image (Enhancement ID: #366) + if (_toolbarDoneBarButtonItemImage) + { + if ([toolbar.doneImage isEqual:_toolbarDoneBarButtonItemImage] == NO) + { + [textField addPreviousNextRightOnKeyboardWithTarget:self rightButtonImage:_toolbarDoneBarButtonItemImage previousAction:@selector(previousAction:) nextAction:@selector(nextAction:) rightButtonAction:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; + needReload = YES; + } + } + //Supporting Custom Done button text (Enhancement ID: #209, #411, Bug ID: #376) + else if (_toolbarDoneBarButtonItemText) + { + if ([toolbar.doneTitle isEqualToString:_toolbarDoneBarButtonItemText] == NO) + { + [textField addPreviousNextRightOnKeyboardWithTarget:self rightButtonTitle:_toolbarDoneBarButtonItemText previousAction:@selector(previousAction:) nextAction:@selector(nextAction:) rightButtonAction:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; + needReload = YES; + } + } + else if ((_toolbarDoneBarButtonItemText == nil && toolbar.doneTitle) || + (_toolbarDoneBarButtonItemImage == nil && toolbar.doneImage)) + { + //Now adding textField placeholder text as title of IQToolbar (Enhancement ID: #27) + [textField addPreviousNextDoneOnKeyboardWithTarget:self previousAction:@selector(previousAction:) nextAction:@selector(nextAction:) doneAction:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; + needReload = YES; + } + textField.inputAccessoryView.tag = kIQPreviousNextButtonToolbarTag; // (Bug ID: #78) + } + + if (needReload) + { + [textField reloadInputViews]; + } } - if ([textField.inputAccessoryView isKindOfClass:[IQToolbar class]] && textField.inputAccessoryView.tag == kIQPreviousNextButtonToolbarTag) + if ([textField.inputAccessoryView isKindOfClass:[IQToolbar class]] && + textField.inputAccessoryView.tag == kIQPreviousNextButtonToolbarTag) { IQToolbar *toolbar = (IQToolbar*)[textField inputAccessoryView]; //Bar style according to keyboard appearance - if (IQ_IS_IOS7_OR_GREATER && [textField respondsToSelector:@selector(keyboardAppearance)]) + if ([textField respondsToSelector:@selector(keyboardAppearance)]) { switch ([(UITextField*)textField keyboardAppearance]) { case UIKeyboardAppearanceAlert: { toolbar.barStyle = UIBarStyleBlack; - if ([toolbar respondsToSelector:@selector(tintColor)]) - [toolbar setTintColor:[UIColor whiteColor]]; + [toolbar setTintColor:[UIColor whiteColor]]; } break; default: { toolbar.barStyle = UIBarStyleDefault; -#ifdef NSFoundationVersionNumber_iOS_6_1 //Setting toolbar tintColor // (Enhancement ID: #30) - if ([toolbar respondsToSelector:@selector(tintColor)]) - [toolbar setTintColor:_shouldToolbarUsesTextFieldTintColor?[textField tintColor]:_defaultToolbarTintColor]; -#endif - + if (_shouldToolbarUsesTextFieldTintColor) + { + toolbar.tintColor = [textField tintColor]; + } + else if (_toolbarTintColor) + { + toolbar.tintColor = _toolbarTintColor; + } + else + { + toolbar.tintColor = [UIColor blackColor]; + } } break; } } //If need to show placeholder - if (_shouldShowTextFieldPlaceholder && textField.shouldHideTitle == NO) + if (_shouldShowTextFieldPlaceholder && + textField.shouldHidePlaceholderText == NO) { - //Updating placeholder //(Bug ID: #148) - if ([textField respondsToSelector:@selector(placeholder)]) + //Updating placeholder //(Bug ID: #148, #272) + if (toolbar.title == nil || + [toolbar.title isEqualToString:textField.drawingPlaceholderText] == NO) { - if (toolbar.title == nil || [toolbar.title isEqualToString:textField.placeholder] == NO) - [toolbar setTitle:textField.placeholder]; + [toolbar setTitle:textField.drawingPlaceholderText]; } - //If doesn't recognised 'placeholder' method, then setting it's title to nil //(Bug ID: #272) - else - [toolbar setTitle:nil]; //Setting toolbar title font. // (Enhancement ID: #30) - if (_placeholderFont && [_placeholderFont isKindOfClass:[UIFont class]]) + if (_placeholderFont && + [_placeholderFont isKindOfClass:[UIFont class]]) + { [toolbar setTitleFont:_placeholderFont]; + } } else { @@ -1750,9 +2028,16 @@ -(void)addToolbarIfRequired //In case of UITableView (Special), the next/previous buttons has to be refreshed everytime. (Bug ID: #56) // If firstTextField, then previous should not be enabled. - if ([siblings objectAtIndex:0] == textField) + if (siblings[0] == textField) { - [textField setEnablePrevious:NO next:YES]; + if (siblings.count == 1) + { + [textField setEnablePrevious:NO next:NO]; + } + else + { + [textField setEnablePrevious:NO next:YES]; + } } // If lastTextField then next should not be enaled. else if ([siblings lastObject] == textField) @@ -1766,29 +2051,57 @@ -(void)addToolbarIfRequired } } } + + CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; + [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime]]; } /** Remove any toolbar if it is IQToolbar. */ -(void)removeToolbarIfRequired // (Bug ID: #18) { + CFTimeInterval startTime = CACurrentMediaTime(); + [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; + // Getting all the sibling textFields. NSArray *siblings = [self responderViews]; + [self showLog:[NSString stringWithFormat:@"Found %lu responder sibling(s)",(unsigned long)siblings.count]]; + for (UITextField *textField in siblings) { UIView *toolbar = [textField inputAccessoryView]; // (Bug ID: #78) - if ([toolbar isKindOfClass:[IQToolbar class]] && (toolbar.tag == kIQDoneButtonToolbarTag || toolbar.tag == kIQPreviousNextButtonToolbarTag)) + //setInputAccessoryView: check (Bug ID: #307) + if ([textField respondsToSelector:@selector(setInputAccessoryView:)] && + ([toolbar isKindOfClass:[IQToolbar class]] && (toolbar.tag == kIQDoneButtonToolbarTag || toolbar.tag == kIQPreviousNextButtonToolbarTag))) { textField.inputAccessoryView = nil; } } + + CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; + [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime]]; +} + +/** reloadInputViews to reload toolbar buttons enable/disable state on the fly Enhancement ID #434. */ +- (void)reloadInputViews +{ + //If enabled then adding toolbar. + if ([self privateIsEnableAutoToolbar] == YES) + { + [self addToolbarIfRequired]; + } + //Else removing toolbar. + else + { + [self removeToolbarIfRequired]; + } } #pragma mark previous/next/done functionality /** previousAction. */ --(void)previousAction:(id)segmentedControl +-(void)previousAction:(IQBarButtonItem*)barButton { //If user wants to play input Click sound. Then Play Input Click Sound. if (_shouldPlayInputClicks) @@ -1802,7 +2115,8 @@ -(void)previousAction:(id)segmentedControl BOOL isAcceptAsFirstResponder = [self goPrevious]; - if (isAcceptAsFirstResponder == YES && textFieldRetain.previousInvocation) + if (isAcceptAsFirstResponder == YES && + textFieldRetain.previousInvocation) { [textFieldRetain.previousInvocation invoke]; } @@ -1810,7 +2124,7 @@ -(void)previousAction:(id)segmentedControl } /** nextAction. */ --(void)nextAction:(id)segmentedControl +-(void)nextAction:(IQBarButtonItem*)barButton { //If user wants to play input Click sound. Then Play Input Click Sound. if (_shouldPlayInputClicks) @@ -1824,7 +2138,8 @@ -(void)nextAction:(id)segmentedControl BOOL isAcceptAsFirstResponder = [self goNext]; - if (isAcceptAsFirstResponder == YES && textFieldRetain.nextInvocation) + if (isAcceptAsFirstResponder == YES && + textFieldRetain.nextInvocation) { [textFieldRetain.nextInvocation invoke]; } @@ -1844,74 +2159,97 @@ -(void)doneAction:(IQBarButtonItem*)barButton BOOL isResignedFirstResponder = [self resignFirstResponder]; - if (isResignedFirstResponder == YES && textFieldRetain.doneInvocation) + if (isResignedFirstResponder == YES && + textFieldRetain.doneInvocation) { [textFieldRetain.doneInvocation invoke]; } } -#pragma mark - Tracking untracking - -/** Disable adjusting view in disabledClass */ --(void)disableInViewControllerClass:(Class)disabledClass -{ - [_disabledClasses addObject:disabledClass]; -} - -/** Re-enable adjusting textField in disabledClass */ --(void)removeDisableInViewControllerClass:(Class)disabledClass -{ - [_disabledClasses removeObject:disabledClass]; -} - -/** Returns YES if ViewController class is disabled for library, otherwise returns NO. */ --(BOOL)isDisableInViewControllerClass:(Class)disabledClass -{ - return [_disabledClasses containsObject:disabledClass]; -} - -/** Disable automatic toolbar creation in in toolbarDisabledClass */ --(void)disableToolbarInViewControllerClass:(Class)toolbarDisabledClass -{ - [_disabledToolbarClasses addObject:toolbarDisabledClass]; -} +#pragma mark - Customised textField/textView support. -/** Re-enable automatic toolbar creation in in toolbarDisabledClass */ --(void)removeDisableToolbarInViewControllerClass:(Class)toolbarDisabledClass +/** + Add customised Notification for third party customised TextField/TextView. + */ +-(void)registerTextFieldViewClass:(nonnull Class)aClass + didBeginEditingNotificationName:(nonnull NSString *)didBeginEditingNotificationName + didEndEditingNotificationName:(nonnull NSString *)didEndEditingNotificationName { - [_disabledToolbarClasses removeObject:toolbarDisabledClass]; + [_registeredClasses addObject:aClass]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldViewDidBeginEditing:) name:didBeginEditingNotificationName object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldViewDidEndEditing:) name:didEndEditingNotificationName object:nil]; } -/** Returns YES if toolbar is disabled in ViewController class, otherwise returns NO. */ --(BOOL)isDisableToolbarInViewControllerClass:(Class)toolbarDisabledClass +/** + Remove customised Notification for third party customised TextField/TextView. + */ +-(void)unregisterTextFieldViewClass:(nonnull Class)aClass + didBeginEditingNotificationName:(nonnull NSString *)didBeginEditingNotificationName + didEndEditingNotificationName:(nonnull NSString *)didEndEditingNotificationName { - return [_disabledToolbarClasses containsObject:toolbarDisabledClass]; + [_registeredClasses removeObject:aClass]; + + [[NSNotificationCenter defaultCenter] removeObserver:self name:didBeginEditingNotificationName object:nil]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:didEndEditingNotificationName object:nil]; } -/** Consider provided customView class as superView of all inner textField for calculating next/previous button logic. */ --(void)considerToolbarPreviousNextInViewClass:(Class)toolbarPreviousNextConsideredClass +-(void)registerAllNotifications { - [_toolbarPreviousNextConsideredClass addObject:toolbarPreviousNextConsideredClass]; + // Registering for keyboard notification. + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil]; + + // Registering for UITextField notification. + [self registerTextFieldViewClass:[UITextField class] + didBeginEditingNotificationName:UITextFieldTextDidBeginEditingNotification + didEndEditingNotificationName:UITextFieldTextDidEndEditingNotification]; + + // Registering for UITextView notification. + [self registerTextFieldViewClass:[UITextView class] + didBeginEditingNotificationName:UITextViewTextDidBeginEditingNotification + didEndEditingNotificationName:UITextViewTextDidEndEditingNotification]; + + // Registering for orientation changes notification + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willChangeStatusBarOrientation:) name:UIApplicationWillChangeStatusBarOrientationNotification object:[UIApplication sharedApplication]]; + + // Registering for status bar frame change notification + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didChangeStatusBarFrame:) name:UIApplicationDidChangeStatusBarFrameNotification object:[UIApplication sharedApplication]]; } -/** Remove Consideration for provided customView class as superView of all inner textField for calculating next/previous button logic. */ --(void)removeConsiderToolbarPreviousNextInViewClass:(Class)toolbarPreviousNextConsideredClass +-(void)unregisterAllNotifications { - [_toolbarPreviousNextConsideredClass removeObject:toolbarPreviousNextConsideredClass]; + // Unregistering for keyboard notification. + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil]; + + // Unregistering for UITextField notification. + [self unregisterTextFieldViewClass:[UITextField class] + didBeginEditingNotificationName:UITextFieldTextDidBeginEditingNotification + didEndEditingNotificationName:UITextFieldTextDidEndEditingNotification]; + + // Unregistering for UITextView notification. + [self unregisterTextFieldViewClass:[UITextView class] + didBeginEditingNotificationName:UITextViewTextDidBeginEditingNotification + didEndEditingNotificationName:UITextViewTextDidEndEditingNotification]; + + // Unregistering for orientation changes notification + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillChangeStatusBarOrientationNotification object:[UIApplication sharedApplication]]; + + // Unregistering for status bar frame change notification + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidChangeStatusBarFrameNotification object:[UIApplication sharedApplication]]; } -/** Returns YES if inner hierarchy is considered for previous/next in class, otherwise returns NO. */ --(BOOL)isConsiderToolbarPreviousNextInViewClass:(Class)toolbarPreviousNextConsideredClass +-(void)showLog:(NSString*)logString { - return [_toolbarPreviousNextConsideredClass containsObject:toolbarPreviousNextConsideredClass]; + if (_enableDebugging) + { + NSLog(@"IQKeyboardManager: %@",logString); + } } @end - - -void _IQShowLog(NSString *logString) -{ -#if IQKEYBOARDMANAGER_DEBUG - NSLog(@"IQKeyboardManager: %@",logString); -#endif -} diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardReturnKeyHandler.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardReturnKeyHandler.h index e99e4ca..64eb1aa 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardReturnKeyHandler.h +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardReturnKeyHandler.h @@ -1,7 +1,7 @@ // -// IQKeyboardReturnKeyHandler.h +// IQKeyboardReturnKeyHandler.h // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -29,10 +29,6 @@ #import #import -#if !(__has_feature(objc_instancetype)) - #define instancetype id -#endif - @class UITextField,UIView, UIViewController; /** @@ -47,7 +43,12 @@ /** Add all the textFields available in UIViewController's view. */ --(instancetype)initWithViewController:(UIViewController*)controller NS_DESIGNATED_INITIALIZER; +-(nonnull instancetype)initWithViewController:(nullable UIViewController*)controller NS_DESIGNATED_INITIALIZER; + +/** + Unavailable. Please use initWithViewController: or init method + */ +-(nonnull instancetype)initWithCoder:(nullable NSCoder *)aDecoder NS_UNAVAILABLE; ///--------------- /// @name Settings @@ -56,12 +57,7 @@ /** Delegate of textField/textView. */ -@property(nonatomic, weak) id delegate; - -/** - It help to choose the lastTextField instance from sibling responderViews. Default is IQAutoToolbarBySubviews. - */ -@property(nonatomic, assign) IQAutoToolbarManageBehaviour toolbarManageBehaviour; +@property(nullable, nonatomic, weak) id delegate; /** Set the last textfield return key type. Default is UIReturnKeyDefault. @@ -73,31 +69,31 @@ ///---------------------------------------------- /** - Should pass UITextField/UITextView intance. Assign textFieldView delegate to self, change it's returnKeyType. + Should pass UITextField/UITextView instance. Assign textFieldView delegate to self, change it's returnKeyType. @param textFieldView UITextField/UITextView object to register. */ --(void)addTextFieldView:(UIView*)textFieldView; +-(void)addTextFieldView:(nonnull UIView*)textFieldView; /** - Should pass UITextField/UITextView intance. Restore it's textFieldView delegate and it's returnKeyType. + Should pass UITextField/UITextView instance. Restore it's textFieldView delegate and it's returnKeyType. @param textFieldView UITextField/UITextView object to unregister. */ --(void)removeTextFieldView:(UIView*)textFieldView; +-(void)removeTextFieldView:(nonnull UIView*)textFieldView; /** Add all the UITextField/UITextView responderView's. - @param UIView object to register all it's responder subviews. + @param view object to register all it's responder subviews. */ --(void)addResponderFromView:(UIView*)view; +-(void)addResponderFromView:(nonnull UIView*)view; /** Remove all the UITextField/UITextView responderView's. - @param UIView object to unregister all it's responder subviews. + @param view object to unregister all it's responder subviews. */ --(void)removeResponderFromView:(UIView*)view; +-(void)removeResponderFromView:(nonnull UIView*)view; @end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardReturnKeyHandler.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardReturnKeyHandler.m index 4b8c57d..408e01e 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardReturnKeyHandler.m +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardReturnKeyHandler.m @@ -1,7 +1,7 @@ // -// IQKeyboardReturnKeyHandler.m +// IQKeyboardReturnKeyHandler.m // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -22,7 +22,7 @@ // THE SOFTWARE. #import "IQKeyboardReturnKeyHandler.h" - +#import "IQKeyboardManager.h" #import "IQUIView+Hierarchy.h" #import "IQNSArray+Sort.h" @@ -30,13 +30,8 @@ #import #import -#import #import -#ifdef NSFoundationVersionNumber_iOS_5_1 -#import -#endif - NSString *const kIQTextField = @"kIQTextField"; NSString *const kIQTextFieldDelegate = @"kIQTextFieldDelegate"; NSString *const kIQTextFieldReturnKeyType = @"kIQTextFieldReturnKeyType"; @@ -54,7 +49,6 @@ @implementation IQKeyboardReturnKeyHandler } @synthesize lastTextFieldReturnKeyType = _lastTextFieldReturnKeyType; -@synthesize toolbarManageBehaviour = _toolbarManageBehaviour; @synthesize delegate = _delegate; - (instancetype)init @@ -63,23 +57,27 @@ - (instancetype)init return self; } --(instancetype)initWithViewController:(UIViewController*)controller +-(instancetype)initWithViewController:(nullable UIViewController*)controller { self = [super init]; if (self) { textFieldInfoCache = [[NSMutableSet alloc] init]; - [self addResponderFromView:controller.view]; + + if (controller.view) + { + [self addResponderFromView:controller.view]; + } } return self; } --(NSDictionary*)textFieldCachedInfo:(UITextField*)textField +-(NSDictionary*)textFieldViewCachedInfo:(UIView*)textField { for (NSDictionary *infoDict in textFieldInfoCache) - if ([infoDict objectForKey:kIQTextField] == textField) return infoDict; + if (infoDict[kIQTextField] == textField) return infoDict; return nil; } @@ -89,70 +87,68 @@ -(void)addResponderFromView:(UIView*)view { NSArray *textFields = [view deepResponderViews]; - for (UITextField *textField in textFields) [self addTextFieldView:textField]; + for (UIView *textField in textFields) [self addTextFieldView:textField]; } -(void)removeResponderFromView:(UIView*)view { NSArray *textFields = [view deepResponderViews]; - for (UITextField *textField in textFields) [self removeTextFieldView:textField]; + for (UIView *textField in textFields) [self removeTextFieldView:textField]; } --(void)removeTextFieldView:(UITextField*)textField +-(void)removeTextFieldView:(UIView*)view { - NSDictionary *dict = [self textFieldCachedInfo:textField]; + NSDictionary *dict = [self textFieldViewCachedInfo:view]; if (dict) { - textField.keyboardType = [[dict objectForKey:kIQTextFieldReturnKeyType] integerValue]; - textField.delegate = [dict objectForKey:kIQTextFieldDelegate]; + if ([view isKindOfClass:[UITextField class]] || [view isKindOfClass:[UITextView class]]) + { + UITextField *textField = (UITextField*)view; + textField.returnKeyType = (UIReturnKeyType)[dict[kIQTextFieldReturnKeyType] integerValue]; + textField.delegate = dict[kIQTextFieldDelegate]; + } [textFieldInfoCache removeObject:dict]; } } --(void)addTextFieldView:(UITextField*)textField +-(void)addTextFieldView:(UIView*)view { - NSMutableDictionary *dictInfo = [[NSMutableDictionary alloc] init]; - - [dictInfo setObject:textField forKey:kIQTextField]; - [dictInfo setObject:[NSNumber numberWithInteger:textField.returnKeyType] forKey:kIQTextFieldReturnKeyType]; + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; - if (textField.delegate) [dictInfo setObject:textField.delegate forKey:kIQTextFieldDelegate]; - - [textField setDelegate:self]; - - [textFieldInfoCache addObject:dictInfo]; -} - -#pragma mark - Overriding lastTextFieldReturnKeyType --(void)setLastTextFieldReturnKeyType:(UIReturnKeyType)lastTextFieldReturnKeyType -{ - _lastTextFieldReturnKeyType = lastTextFieldReturnKeyType; + dict[kIQTextField] = view; - for (NSDictionary *infoDict in textFieldInfoCache) + if ([view isKindOfClass:[UITextField class]] || [view isKindOfClass:[UITextView class]]) { - UITextField *textField = [infoDict objectForKey:kIQTextField]; - - [self updateReturnKeyTypeOnTextField:textField]; + UITextField *textField = (UITextField*)view; + dict[kIQTextFieldReturnKeyType] = @(textField.returnKeyType); + if (textField.delegate) dict[kIQTextFieldDelegate] = textField.delegate; + [textField setDelegate:self]; } + + [textFieldInfoCache addObject:dict]; } -(void)updateReturnKeyTypeOnTextField:(UIView*)textField { - UIView *tableView = [textField superviewOfClassType:[UITableView class]]; + UIView *superConsideredView; -#ifdef NSFoundationVersionNumber_iOS_5_1 - if (tableView == nil) tableView = [textField superviewOfClassType:[UICollectionView class]]; -#endif - + //If find any consider responderView in it's upper hierarchy then will get deepResponderView. (Bug ID: #347) + for (Class consideredClass in [[IQKeyboardManager sharedManager] toolbarPreviousNextAllowedClasses]) + { + superConsideredView = [textField superviewOfClassType:consideredClass]; + + if (superConsideredView != nil) + break; + } NSArray *textFields = nil; //If there is a tableView in view's hierarchy, then fetching all it's subview that responds. No sorting for tableView, it's by subView position. - if (tableView) // // (Enhancement ID: #22) + if (superConsideredView) // // (Enhancement ID: #22) { - textFields = [tableView deepResponderViews]; + textFields = [superConsideredView deepResponderViews]; } //Otherwise fetching all the siblings else @@ -160,7 +156,7 @@ -(void)updateReturnKeyTypeOnTextField:(UIView*)textField textFields = [textField responderSiblings]; //Sorting textFields according to behaviour - switch (_toolbarManageBehaviour) + switch ([[IQKeyboardManager sharedManager] toolbarManageBehaviour]) { //If needs to sort it by tag case IQAutoToolbarByTag: @@ -183,19 +179,25 @@ -(void)updateReturnKeyTypeOnTextField:(UIView*)textField #pragma mark - Goto next or Resign. --(void)goToNextResponderOrResign:(UIView*)textField +-(BOOL)goToNextResponderOrResign:(UIView*)textField { - UIView *tableView = [textField superviewOfClassType:[UITableView class]]; -#ifdef NSFoundationVersionNumber_iOS_5_1 - if (tableView == nil) tableView = [textField superviewOfClassType:[UICollectionView class]]; -#endif + UIView *superConsideredView; + + //If find any consider responderView in it's upper hierarchy then will get deepResponderView. (Bug ID: #347) + for (Class consideredClass in [[IQKeyboardManager sharedManager] toolbarPreviousNextAllowedClasses]) + { + superConsideredView = [textField superviewOfClassType:consideredClass]; + + if (superConsideredView != nil) + break; + } NSArray *textFields = nil; //If there is a tableView in view's hierarchy, then fetching all it's subview that responds. No sorting for tableView, it's by subView position. - if (tableView) // // (Enhancement ID: #22) + if (superConsideredView) // // (Enhancement ID: #22) { - textFields = [tableView deepResponderViews]; + textFields = [superConsideredView deepResponderViews]; } //Otherwise fetching all the siblings else @@ -203,7 +205,7 @@ -(void)goToNextResponderOrResign:(UIView*)textField textFields = [textField responderSiblings]; //Sorting textFields according to behaviour - switch (_toolbarManageBehaviour) + switch ([[IQKeyboardManager sharedManager] toolbarManageBehaviour]) { //If needs to sort it by tag case IQAutoToolbarByTag: @@ -224,14 +226,31 @@ -(void)goToNextResponderOrResign:(UIView*)textField NSUInteger index = [textFields indexOfObject:textField]; //If it is not last textField. then it's next object becomeFirstResponder. - (index != NSNotFound && index < textFields.count-1) ? [[textFields objectAtIndex:index+1] becomeFirstResponder] : [textField resignFirstResponder]; + if (index != NSNotFound && index < textFields.count-1) + { + [textFields[index+1] becomeFirstResponder]; + return NO; + } + else + { + [textField resignFirstResponder]; + return YES; + } } #pragma mark - TextField delegate - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { - if ([self.delegate respondsToSelector:@selector(textFieldShouldBeginEditing:)]) - return [self.delegate textFieldShouldBeginEditing:textField]; + id delegate = self.delegate; + + if (delegate == nil) + { + NSDictionary *dict = [self textFieldViewCachedInfo:textField]; + delegate = dict[kIQTextFieldDelegate]; + } + + if ([delegate respondsToSelector:@selector(textFieldShouldBeginEditing:)]) + return [delegate textFieldShouldBeginEditing:textField]; else return YES; } @@ -240,69 +259,157 @@ - (void)textFieldDidBeginEditing:(UITextField *)textField { [self updateReturnKeyTypeOnTextField:textField]; - if ([self.delegate respondsToSelector:@selector(textFieldDidBeginEditing:)]) - [self.delegate textFieldDidBeginEditing:textField]; + id delegate = self.delegate; + + if (delegate == nil) + { + NSDictionary *dict = [self textFieldViewCachedInfo:textField]; + delegate = dict[kIQTextFieldDelegate]; + } + + if ([delegate respondsToSelector:@selector(textFieldDidBeginEditing:)]) + [delegate textFieldDidBeginEditing:textField]; } - (BOOL)textFieldShouldEndEditing:(UITextField *)textField { - if ([self.delegate respondsToSelector:@selector(textFieldShouldEndEditing:)]) - return [self.delegate textFieldShouldEndEditing:textField]; + id delegate = self.delegate; + + if (delegate == nil) + { + NSDictionary *dict = [self textFieldViewCachedInfo:textField]; + delegate = dict[kIQTextFieldDelegate]; + } + + if ([delegate respondsToSelector:@selector(textFieldShouldEndEditing:)]) + return [delegate textFieldShouldEndEditing:textField]; else return YES; } - (void)textFieldDidEndEditing:(UITextField *)textField { - if ([self.delegate respondsToSelector:@selector(textFieldDidEndEditing:)]) - [self.delegate textFieldDidEndEditing:textField]; + id delegate = self.delegate; + + if (delegate == nil) + { + NSDictionary *dict = [self textFieldViewCachedInfo:textField]; + delegate = dict[kIQTextFieldDelegate]; + } + + if ([delegate respondsToSelector:@selector(textFieldDidEndEditing:)]) + [delegate textFieldDidEndEditing:textField]; +} + +//Xcode8, compile validation +#ifdef NSFoundationVersionNumber_iOS_9_x_Max + +- (void)textFieldDidEndEditing:(UITextField *)textField reason:(UITextFieldDidEndEditingReason)reason +{ + id delegate = self.delegate; + + if (delegate == nil) + { + NSDictionary *dict = [self textFieldViewCachedInfo:textField]; + delegate = dict[kIQTextFieldDelegate]; + } + + if ([delegate respondsToSelector:@selector(textFieldDidEndEditing:reason:)]) + [delegate textFieldDidEndEditing:textField reason:reason]; } +#endif + + - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { - if ([self.delegate respondsToSelector:@selector(textField:shouldChangeCharactersInRange:replacementString:)]) - return [self.delegate textField:textField shouldChangeCharactersInRange:range replacementString:string]; + id delegate = self.delegate; + + if (delegate == nil) + { + NSDictionary *dict = [self textFieldViewCachedInfo:textField]; + delegate = dict[kIQTextFieldDelegate]; + } + + if ([delegate respondsToSelector:@selector(textField:shouldChangeCharactersInRange:replacementString:)]) + return [delegate textField:textField shouldChangeCharactersInRange:range replacementString:string]; else return YES; } - (BOOL)textFieldShouldClear:(UITextField *)textField { - if ([self.delegate respondsToSelector:@selector(textFieldShouldClear:)]) - return [self.delegate textFieldShouldClear:textField]; + id delegate = self.delegate; + + if (delegate == nil) + { + NSDictionary *dict = [self textFieldViewCachedInfo:textField]; + delegate = dict[kIQTextFieldDelegate]; + } + + if ([delegate respondsToSelector:@selector(textFieldShouldClear:)]) + return [delegate textFieldShouldClear:textField]; else return YES; } -(BOOL)textFieldShouldReturn:(UITextField *)textField { - BOOL shouldReturn = YES; - - if ([self.delegate respondsToSelector:@selector(textFieldShouldReturn:)]) - shouldReturn = [self.delegate textFieldShouldReturn:textField]; - - if (shouldReturn) + id delegate = self.delegate; + + if (delegate == nil) { - [self goToNextResponderOrResign:textField]; + NSDictionary *dict = [self textFieldViewCachedInfo:textField]; + delegate = dict[kIQTextFieldDelegate]; } - return shouldReturn; + if ([delegate respondsToSelector:@selector(textFieldShouldReturn:)]) + { + BOOL shouldReturn = [delegate textFieldShouldReturn:textField]; + + if (shouldReturn) + { + shouldReturn = [self goToNextResponderOrResign:textField]; + } + + return shouldReturn; + } + else + { + return [self goToNextResponderOrResign:textField]; + } } #pragma mark - TextView delegate - (BOOL)textViewShouldBeginEditing:(UITextView *)textView { - if ([self.delegate respondsToSelector:@selector(textViewShouldBeginEditing:)]) - return [self.delegate textViewShouldBeginEditing:textView]; + id delegate = self.delegate; + + if (delegate == nil) + { + NSDictionary *dict = [self textFieldViewCachedInfo:textView]; + delegate = dict[kIQTextFieldDelegate]; + } + + if ([delegate respondsToSelector:@selector(textViewShouldBeginEditing:)]) + return [delegate textViewShouldBeginEditing:textView]; else return YES; } - (BOOL)textViewShouldEndEditing:(UITextView *)textView { - if ([self.delegate respondsToSelector:@selector(textViewShouldEndEditing:)]) - return [self.delegate textViewShouldEndEditing:textView]; + id delegate = self.delegate; + + if (delegate == nil) + { + NSDictionary *dict = [self textFieldViewCachedInfo:textView]; + delegate = dict[kIQTextFieldDelegate]; + } + + if ([delegate respondsToSelector:@selector(textViewShouldEndEditing:)]) + return [delegate textViewShouldEndEditing:textView]; else return YES; } @@ -311,26 +418,50 @@ - (void)textViewDidBeginEditing:(UITextView *)textView { [self updateReturnKeyTypeOnTextField:textView]; - if ([self.delegate respondsToSelector:@selector(textViewDidBeginEditing:)]) - [self.delegate textViewDidBeginEditing:textView]; + id delegate = self.delegate; + + if (delegate == nil) + { + NSDictionary *dict = [self textFieldViewCachedInfo:textView]; + delegate = dict[kIQTextFieldDelegate]; + } + + if ([delegate respondsToSelector:@selector(textViewDidBeginEditing:)]) + [delegate textViewDidBeginEditing:textView]; } - (void)textViewDidEndEditing:(UITextView *)textView { - if ([self.delegate respondsToSelector:@selector(textViewDidEndEditing:)]) - [self.delegate textViewDidEndEditing:textView]; + id delegate = self.delegate; + + if (delegate == nil) + { + NSDictionary *dict = [self textFieldViewCachedInfo:textView]; + delegate = dict[kIQTextFieldDelegate]; + } + + if ([delegate respondsToSelector:@selector(textViewDidEndEditing:)]) + [delegate textViewDidEndEditing:textView]; } - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { + id delegate = self.delegate; + + if (delegate == nil) + { + NSDictionary *dict = [self textFieldViewCachedInfo:textView]; + delegate = dict[kIQTextFieldDelegate]; + } + BOOL shouldReturn = YES; - if ([self.delegate respondsToSelector:@selector(textView:shouldChangeTextInRange:replacementText:)]) - shouldReturn = [self.delegate textView:textView shouldChangeTextInRange:range replacementText:text]; + if ([delegate respondsToSelector:@selector(textView:shouldChangeTextInRange:replacementText:)]) + shouldReturn = [delegate textView:textView shouldChangeTextInRange:range replacementText:text]; if (shouldReturn && [text isEqualToString:@"\n"]) { - [self goToNextResponderOrResign:textView]; + shouldReturn = [self goToNextResponderOrResign:textView]; } return shouldReturn; @@ -338,43 +469,119 @@ - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range r - (void)textViewDidChange:(UITextView *)textView { - if ([self.delegate respondsToSelector:@selector(textViewDidChange:)]) - [self.delegate textViewDidChange:textView]; + id delegate = self.delegate; + + if (delegate == nil) + { + NSDictionary *dict = [self textFieldViewCachedInfo:textView]; + delegate = dict[kIQTextFieldDelegate]; + } + + if ([delegate respondsToSelector:@selector(textViewDidChange:)]) + [delegate textViewDidChange:textView]; } - (void)textViewDidChangeSelection:(UITextView *)textView { - if ([self.delegate respondsToSelector:@selector(textViewDidChangeSelection:)]) - [self.delegate textViewDidChangeSelection:textView]; + id delegate = self.delegate; + + if (delegate == nil) + { + NSDictionary *dict = [self textFieldViewCachedInfo:textView]; + delegate = dict[kIQTextFieldDelegate]; + } + + if ([delegate respondsToSelector:@selector(textViewDidChangeSelection:)]) + [delegate textViewDidChangeSelection:textView]; } -#ifdef NSFoundationVersionNumber_iOS_6_1 +//Xcode8, compile validation +#ifdef NSFoundationVersionNumber_iOS_9_x_Max -- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange +- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange interaction:(UITextItemInteraction)interaction { - if ([self.delegate respondsToSelector:@selector(textView:shouldInteractWithURL:inRange:)]) - return [self.delegate textView:textView shouldInteractWithURL:URL inRange:characterRange]; + id delegate = self.delegate; + + if (delegate == nil) + { + NSDictionary *dict = [self textFieldViewCachedInfo:textView]; + delegate = dict[kIQTextFieldDelegate]; + } + + if ([delegate respondsToSelector:@selector(textView:shouldInteractWithURL:inRange:interaction:)]) + return [delegate textView:textView shouldInteractWithURL:URL inRange:characterRange interaction:interaction]; else return YES; } -- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange +- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange interaction:(UITextItemInteraction)interaction { - if ([self.delegate respondsToSelector:@selector(textView:shouldInteractWithTextAttachment:inRange:)]) - return [self.delegate textView:textView shouldInteractWithTextAttachment:textAttachment inRange:characterRange]; + id delegate = self.delegate; + + if (delegate == nil) + { + NSDictionary *dict = [self textFieldViewCachedInfo:textView]; + delegate = dict[kIQTextFieldDelegate]; + } + + if ([delegate respondsToSelector:@selector(textView:shouldInteractWithTextAttachment:inRange:interaction:)]) + return [delegate textView:textView shouldInteractWithTextAttachment:textAttachment inRange:characterRange interaction:interaction]; else return YES; } #endif +- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange +{ + id delegate = self.delegate; + + if (delegate == nil) + { + NSDictionary *dict = [self textFieldViewCachedInfo:textView]; + delegate = dict[kIQTextFieldDelegate]; + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + if ([delegate respondsToSelector:@selector(textView:shouldInteractWithURL:inRange:)]) + return [delegate textView:textView shouldInteractWithURL:URL inRange:characterRange]; +#pragma clang diagnostic pop + else + return YES; +} + +- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange +{ + id delegate = self.delegate; + + if (delegate == nil) + { + NSDictionary *dict = [self textFieldViewCachedInfo:textView]; + delegate = dict[kIQTextFieldDelegate]; + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + if ([delegate respondsToSelector:@selector(textView:shouldInteractWithTextAttachment:inRange:)]) + return [delegate textView:textView shouldInteractWithTextAttachment:textAttachment inRange:characterRange]; +#pragma clang diagnostic pop + else + return YES; +} + -(void)dealloc { for (NSDictionary *dict in textFieldInfoCache) { - UITextField *textField = [dict objectForKey:kIQTextField]; - textField.keyboardType = [[dict objectForKey:kIQTextFieldReturnKeyType] integerValue]; - textField.delegate = [dict objectForKey:kIQTextFieldDelegate]; + UIView *view = dict[kIQTextField]; + + if ([view isKindOfClass:[UITextField class]] || [view isKindOfClass:[UITextView class]]) + { + UITextField *textField = (UITextField*)view; + textField.returnKeyType = (UIReturnKeyType)[dict[kIQTextFieldReturnKeyType] integerValue]; + textField.delegate = dict[kIQTextFieldDelegate]; + } } [textFieldInfoCache removeAllObjects]; diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQTextView/IQTextView.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQTextView/IQTextView.h index b2b5715..c8ec931 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQTextView/IQTextView.h +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQTextView/IQTextView.h @@ -1,7 +1,7 @@ // -// IQTextView.h +// IQTextView.h // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -33,7 +33,7 @@ /** Set textView's placeholder text. Default is nil. */ -@property(nonatomic,copy) NSString *placeholder; +@property(nullable, nonatomic,copy) IBInspectable NSString *placeholder; @end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQTextView/IQTextView.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQTextView/IQTextView.m index 42a4a7d..053037f 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQTextView/IQTextView.m +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQTextView/IQTextView.m @@ -1,7 +1,7 @@ // -// IQTextView.m +// IQTextView.m // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -26,15 +26,6 @@ #import #import -#if !(__has_feature(objc_instancetype)) - #define instancetype id -#endif - -//Xcode 4.5 compatibility check -#ifndef NSFoundationVersionNumber_iOS_5_1 - #define NSLineBreakByWordWrapping UILineBreakModeWordWrap -#endif - @interface IQTextView () -(void)refreshPlaceholder; @@ -103,12 +94,21 @@ -(void)setFont:(UIFont *)font [self layoutIfNeeded]; } +-(void)setTextAlignment:(NSTextAlignment)textAlignment +{ + [super setTextAlignment:textAlignment]; + placeHolderLabel.textAlignment = textAlignment; + + [self setNeedsLayout]; + [self layoutIfNeeded]; +} + -(void)layoutSubviews { [super layoutSubviews]; [placeHolderLabel sizeToFit]; - placeHolderLabel.frame = CGRectMake(8, 8, CGRectGetWidth(self.frame)-16, CGRectGetHeight(placeHolderLabel.frame)); + placeHolderLabel.frame = CGRectMake(4, 8, CGRectGetWidth(self.frame)-16, CGRectGetHeight(placeHolderLabel.frame)); } -(void)setPlaceholder:(NSString *)placeholder @@ -122,6 +122,7 @@ -(void)setPlaceholder:(NSString *)placeholder placeHolderLabel.lineBreakMode = NSLineBreakByWordWrapping; placeHolderLabel.numberOfLines = 0; placeHolderLabel.font = self.font; + placeHolderLabel.textAlignment = self.textAlignment; placeHolderLabel.backgroundColor = [UIColor clearColor]; placeHolderLabel.textColor = [UIColor colorWithWhite:0.7 alpha:1.0]; placeHolderLabel.alpha = 0; diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQBarButtonItem.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQBarButtonItem.h index 3374716..a8a7799 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQBarButtonItem.h +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQBarButtonItem.h @@ -1,7 +1,7 @@ // -// IQBarButtonItem.h +// IQBarButtonItem.h // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQBarButtonItem.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQBarButtonItem.m index 4f68b27..3f68575 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQBarButtonItem.m +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQBarButtonItem.m @@ -1,7 +1,7 @@ // -// IQBarButtonItem.m +// IQBarButtonItem.m // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -22,21 +22,60 @@ // THE SOFTWARE. #import "IQBarButtonItem.h" -#import "IQToolbar.h" +#import "IQKeyboardManagerConstantsInternal.h" @implementation IQBarButtonItem +(void)initialize { [super initialize]; - + + //Tint color [[self appearance] setTintColor:nil]; + + //Title + [[self appearance] setTitlePositionAdjustment:UIOffsetZero forBarMetrics:UIBarMetricsDefault]; [[self appearance] setTitleTextAttributes:nil forState:UIControlStateNormal]; [[self appearance] setTitleTextAttributes:nil forState:UIControlStateHighlighted]; [[self appearance] setTitleTextAttributes:nil forState:UIControlStateDisabled]; [[self appearance] setTitleTextAttributes:nil forState:UIControlStateSelected]; [[self appearance] setTitleTextAttributes:nil forState:UIControlStateApplication]; [[self appearance] setTitleTextAttributes:nil forState:UIControlStateReserved]; + + //Background Image + [[self appearance] setBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackgroundImage:nil forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackgroundImage:nil forState:UIControlStateDisabled barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackgroundImage:nil forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackgroundImage:nil forState:UIControlStateApplication barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackgroundImage:nil forState:UIControlStateReserved barMetrics:UIBarMetricsDefault]; + + [[self appearance] setBackgroundImage:nil forState:UIControlStateNormal style:UIBarButtonItemStyleDone barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackgroundImage:nil forState:UIControlStateHighlighted style:UIBarButtonItemStyleDone barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackgroundImage:nil forState:UIControlStateDisabled style:UIBarButtonItemStyleDone barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackgroundImage:nil forState:UIControlStateSelected style:UIBarButtonItemStyleDone barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackgroundImage:nil forState:UIControlStateApplication style:UIBarButtonItemStyleDone barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackgroundImage:nil forState:UIControlStateReserved style:UIBarButtonItemStyleDone barMetrics:UIBarMetricsDefault]; + + [[self appearance] setBackgroundImage:nil forState:UIControlStateNormal style:UIBarButtonItemStylePlain barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackgroundImage:nil forState:UIControlStateHighlighted style:UIBarButtonItemStylePlain barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackgroundImage:nil forState:UIControlStateDisabled style:UIBarButtonItemStylePlain barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackgroundImage:nil forState:UIControlStateSelected style:UIBarButtonItemStylePlain barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackgroundImage:nil forState:UIControlStateApplication style:UIBarButtonItemStylePlain barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackgroundImage:nil forState:UIControlStateReserved style:UIBarButtonItemStylePlain barMetrics:UIBarMetricsDefault]; + + [[self appearance] setBackgroundVerticalPositionAdjustment:0 forBarMetrics:UIBarMetricsDefault]; + + //Back Button + [[self appearance] setBackButtonBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackButtonBackgroundImage:nil forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackButtonBackgroundImage:nil forState:UIControlStateDisabled barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackButtonBackgroundImage:nil forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackButtonBackgroundImage:nil forState:UIControlStateApplication barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackButtonBackgroundImage:nil forState:UIControlStateReserved barMetrics:UIBarMetricsDefault]; + + [[self appearance] setBackButtonTitlePositionAdjustment:UIOffsetZero forBarMetrics:UIBarMetricsDefault]; + [[self appearance] setBackButtonBackgroundVerticalPositionAdjustment:0 forBarMetrics:UIBarMetricsDefault]; } @end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.h index d49e13e..9e31cd9 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.h +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.h @@ -1,7 +1,7 @@ // -// IQTitleBarButtonItem.h +// IQTitleBarButtonItem.h // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -25,11 +25,6 @@ #import "IQKeyboardManagerConstants.h" #import "IQBarButtonItem.h" -#if !(__has_feature(objc_instancetype)) - #define instancetype id -#endif - - /** BarButtonItem with title text. */ @@ -38,14 +33,46 @@ /** Font to be used in bar button. Default is (system font 12.0 bold). */ -@property(nonatomic, strong) UIFont *font; +@property(nullable, nonatomic, strong) UIFont *font; + +/** + selectableTextColor to be used for displaying button text when button is enabled. + */ +@property(nullable, nonatomic, strong) UIColor *selectableTextColor; /** Initialize with frame and title. - @param frame Initial frame of barButtonItem @param title Title of barButtonItem. */ --(instancetype)initWithFrame:(CGRect)frame title:(NSString *)title; +-(nonnull instancetype)initWithTitle:(nullable NSString *)title NS_DESIGNATED_INITIALIZER; + +/** + Optional target & action to behave toolbar title button as clickable button + + @param target Target object. + @param action Target Selector. + */ +-(void)setTitleTarget:(nullable id)target action:(nullable SEL)action; + +/** + Customized Invocation to be called on title button action. titleInvocation is internally created using setTitleTarget:action: method. + */ +@property (nullable, strong, nonatomic) NSInvocation *titleInvocation; + +/** + Unavailable. Please use initWithFrame:title: method + */ +-(nonnull instancetype)init NS_UNAVAILABLE; + +/** + Unavailable. Please use initWithFrame:title: method + */ +-(nonnull instancetype)initWithCoder:(nullable NSCoder *)aDecoder NS_UNAVAILABLE; + +/** + Unavailable. Please use initWithFrame:title: method + */ ++ (nonnull instancetype)new NS_UNAVAILABLE; @end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.m index 325f930..8f372fe 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.m +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.m @@ -1,7 +1,7 @@ // -// IQTitleBarButtonItem.m +// IQTitleBarButtonItem.m // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -25,48 +25,37 @@ #import "IQKeyboardManagerConstants.h" #import "IQKeyboardManagerConstantsInternal.h" #import - -#ifndef NSFoundationVersionNumber_iOS_5_1 - #define NSTextAlignmentCenter UITextAlignmentCenter -#endif +#import @implementation IQTitleBarButtonItem { UIView *_titleView; - UILabel *_titleLabel; + UIButton *_titleButton; } @synthesize font = _font; --(instancetype)initWithFrame:(CGRect)frame title:(NSString *)title +-(nonnull instancetype)initWithTitle:(nullable NSString *)title { - self = [self initWithTitle:nil style:UIBarButtonItemStylePlain target:nil action:nil]; + self = [super init]; if (self) { - _titleView = [[UIView alloc] initWithFrame:frame]; + _titleView = [[UIView alloc] init]; _titleView.backgroundColor = [UIColor clearColor]; - _titleView.autoresizingMask = UIViewAutoresizingFlexibleWidth; + _titleView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - _titleLabel = [[UILabel alloc] initWithFrame:_titleView.bounds]; - - if (IQ_IS_IOS7_OR_GREATER) - { - [_titleLabel setTextColor:[UIColor lightGrayColor]]; - } - else - { - [_titleLabel setTextColor:[UIColor whiteColor]]; - } - - [_titleLabel setBackgroundColor:[UIColor clearColor]]; - [_titleLabel setTextAlignment:NSTextAlignmentCenter]; - [_titleLabel setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; + _titleButton = [UIButton buttonWithType:UIButtonTypeSystem]; + _titleButton.enabled = NO; + _titleButton.titleLabel.numberOfLines = 3; + [_titleButton setTitleColor:[UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:1.0] forState:UIControlStateNormal]; + [_titleButton setTitleColor:[UIColor lightGrayColor] forState:UIControlStateDisabled]; + [_titleButton setBackgroundColor:[UIColor clearColor]]; + [_titleButton.titleLabel setTextAlignment:NSTextAlignmentCenter]; + _titleButton.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; [self setTitle:title]; - [self setFont:[UIFont boldSystemFontOfSize:12.0]]; - [_titleView addSubview:_titleLabel]; - + [self setFont:[UIFont systemFontOfSize:13.0]]; + [_titleView addSubview:_titleButton]; self.customView = _titleView; - self.enabled = NO; } return self; } @@ -74,13 +63,59 @@ -(instancetype)initWithFrame:(CGRect)frame title:(NSString *)title -(void)setFont:(UIFont *)font { _font = font; - [_titleLabel setFont:font]; + + if (font) + { + _titleButton.titleLabel.font = font; + } + else + { + _titleButton.titleLabel.font = [UIFont systemFontOfSize:13]; + } } -(void)setTitle:(NSString *)title { [super setTitle:title]; - _titleLabel.text = title; + [_titleButton setTitle:title forState:UIControlStateNormal]; +} + +-(void)setSelectableTextColor:(UIColor*)selectableTextColor +{ + _selectableTextColor = selectableTextColor; + [_titleButton setTitleColor:_selectableTextColor forState:UIControlStateNormal]; +} + +-(void)setTitleTarget:(nullable id)target action:(nullable SEL)action +{ + NSInvocation *invocation = nil; + + if (target && action) + { + invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:action]]; + invocation.target = target; + invocation.selector = action; + } + + self.titleInvocation = invocation; +} + +-(void)setTitleInvocation:(NSInvocation*)invocation +{ + _titleInvocation = invocation; + + if (_titleInvocation.target == nil || _titleInvocation.selector == NULL) + { + self.enabled = NO; + _titleButton.enabled = NO; + [_titleButton removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside]; + } + else + { + self.enabled = YES; + _titleButton.enabled = YES; + [_titleButton addTarget:_titleInvocation.target action:_titleInvocation.selector forControlEvents:UIControlEventTouchUpInside]; + } } @end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQToolbar.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQToolbar.h index b0f9da7..c9d27b7 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQToolbar.h +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQToolbar.h @@ -1,7 +1,7 @@ // -// IQToolbar.h +// IQToolbar.h // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -31,12 +31,35 @@ /** Title font for toolbar. */ -@property(nonatomic, strong) UIFont *titleFont; +@property(nullable, nonatomic, strong) UIFont *titleFont; + +/** + Toolbar done title + */ +@property(nullable, nonatomic, strong) NSString *doneTitle; + +/** + Toolbar done image + */ +@property(nullable, nonatomic, strong) UIImage *doneImage; /** Toolbar title */ -@property(nonatomic, strong) NSString *title; +@property(nullable, nonatomic, strong) NSString *title; + +/** + Optional target & action to behave toolbar title button as clickable button + + @param target Target object. + @param action Target Selector. + */ +-(void)setTitleTarget:(nullable id)target action:(nullable SEL)action; + +/** + Customized Invocation to be called on title button action. titleInvocation is internally created using setTitleTarget:action: method. + */ +@property (nullable, strong, nonatomic) NSInvocation *titleInvocation; @end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQToolbar.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQToolbar.m index 2c0d1eb..b9d6b8c 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQToolbar.m +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQToolbar.m @@ -1,7 +1,7 @@ // -// IQToolbar.m +// IQToolbar.m // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -28,11 +28,6 @@ #import -#if !(__has_feature(objc_instancetype)) - #define instancetype id -#endif - - @implementation IQToolbar @synthesize titleFont = _titleFont; @synthesize title = _title; @@ -40,16 +35,25 @@ @implementation IQToolbar +(void)initialize { [super initialize]; - + + //Tint Color [[self appearance] setTintColor:nil]; + + [[self appearance] setBarTintColor:nil]; -#ifdef NSFoundationVersionNumber_iOS_6_1 - if ([[self appearance] respondsToSelector:@selector(setBarTintColor:)]) - { - [[self appearance] setBarTintColor:nil]; - } -#endif + //Background image + [[self appearance] setBackgroundImage:nil forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackgroundImage:nil forToolbarPosition:UIBarPositionBottom barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackgroundImage:nil forToolbarPosition:UIBarPositionTop barMetrics:UIBarMetricsDefault]; + [[self appearance] setBackgroundImage:nil forToolbarPosition:UIBarPositionTopAttached barMetrics:UIBarMetricsDefault]; + //Shadow image + [[self appearance] setShadowImage:nil forToolbarPosition:UIBarPositionAny]; + [[self appearance] setShadowImage:nil forToolbarPosition:UIBarPositionBottom]; + [[self appearance] setShadowImage:nil forToolbarPosition:UIBarPositionTop]; + [[self appearance] setShadowImage:nil forToolbarPosition:UIBarPositionTopAttached]; + + //Background color [[self appearance] setBackgroundColor:nil]; } @@ -57,15 +61,8 @@ -(void)initialize { [self sizeToFit]; self.autoresizingMask = UIViewAutoresizingFlexibleWidth;// | UIViewAutoresizingFlexibleHeight; - - if (IQ_IS_IOS7_OR_GREATER) - { - [self setTintColor:[UIColor blackColor]]; - } - else - { - [self setBarStyle:UIBarStyleBlackTranslucent]; - } + self.translucent = YES; + [self setTintColor:[UIColor blackColor]]; } - (instancetype)initWithFrame:(CGRect)frame @@ -97,6 +94,28 @@ -(CGSize)sizeThatFits:(CGSize)size return sizeThatFit; } +-(void)setBarStyle:(UIBarStyle)barStyle +{ + [super setBarStyle:barStyle]; + + for (UIBarButtonItem *item in self.items) + { + if ([item isKindOfClass:[IQTitleBarButtonItem class]]) + { + if (barStyle == UIBarStyleDefault) + { + [(IQTitleBarButtonItem*)item setSelectableTextColor:[UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:1.0]]; + } + else + { + [(IQTitleBarButtonItem*)item setSelectableTextColor:[UIColor yellowColor]]; + } + + break; + } + } +} + -(void)setTintColor:(UIColor *)tintColor { [super setTintColor:tintColor]; @@ -116,6 +135,7 @@ -(void)setTitleFont:(UIFont *)titleFont if ([item isKindOfClass:[IQTitleBarButtonItem class]]) { [(IQTitleBarButtonItem*)item setFont:titleFont]; + break; } } } @@ -129,6 +149,101 @@ -(void)setTitle:(NSString *)title if ([item isKindOfClass:[IQTitleBarButtonItem class]]) { [(IQTitleBarButtonItem*)item setTitle:title]; + break; + } + } +} + +-(void)setTitleTarget:(nullable id)target action:(nullable SEL)action +{ + NSInvocation *invocation = nil; + + if (target && action) + { + invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:action]]; + invocation.target = target; + invocation.selector = action; + } + + self.titleInvocation = invocation; +} + +-(void)setTitleInvocation:(NSInvocation*)invocation +{ + _titleInvocation = invocation; + + for (UIBarButtonItem *item in self.items) + { + if ([item isKindOfClass:[IQTitleBarButtonItem class]]) + { + [(IQTitleBarButtonItem*)item setTitleInvocation:_titleInvocation]; + break; + } + } +} + +-(void)layoutSubviews +{ + [super layoutSubviews]; + + CGRect leftRect = CGRectNull; + CGRect rightRect = CGRectNull; + + BOOL isTitleBarButtonFound = NO; + + NSArray *subviews = [self.subviews sortedArrayUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) { + + CGFloat x1 = CGRectGetMinX(view1.frame); + CGFloat y1 = CGRectGetMinY(view1.frame); + CGFloat x2 = CGRectGetMinX(view2.frame); + CGFloat y2 = CGRectGetMinY(view2.frame); + + if (x1 < x2) return NSOrderedAscending; + + else if (x1 > x2) return NSOrderedDescending; + + //Else both y are same so checking for x positions + else if (y1 < y2) return NSOrderedAscending; + + else if (y1 > y2) return NSOrderedDescending; + + else return NSOrderedSame; + }]; + + for (UIView *barButtonItemView in subviews) + { + if (isTitleBarButtonFound == YES) + { + rightRect = barButtonItemView.frame; + break; + } + else if ([barButtonItemView isMemberOfClass:[UIView class]]) + { + isTitleBarButtonFound = YES; + } + //If it's UIToolbarButton or UIToolbarTextButton (which actually UIBarButtonItem) + else if ([barButtonItemView isKindOfClass:[UIControl class]]) + { + leftRect = barButtonItemView.frame; + } + } + + CGFloat x = 16; + + if (CGRectIsNull(leftRect) == false) + { + x = CGRectGetMaxX(leftRect) + 16; + } + + CGFloat width = CGRectGetWidth(self.frame) - 32 - (CGRectIsNull(leftRect)?0:CGRectGetMaxX(leftRect)) - (CGRectIsNull(rightRect)?0:CGRectGetWidth(self.frame)-CGRectGetMinX(rightRect)); + + for (UIBarButtonItem *item in self.items) + { + if ([item isKindOfClass:[IQTitleBarButtonItem class]]) + { + CGRect titleRect = CGRectMake(x, 0, width, self.frame.size.height); + item.customView.frame = titleRect; + break; } } } diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h index 3bf8d71..c39f7fa 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h @@ -1,7 +1,7 @@ // -// UIView+IQToolbar.h +// IQUIView+IQKeyboardToolbar.h // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -37,9 +37,32 @@ ///------------------------- /** - If shouldHideTitle is YES, then title will not be added to the toolbar. Default to NO. + If `shouldHidePlaceholderText` is YES, then title will not be added to the toolbar. Default to NO. */ -@property (assign, nonatomic) BOOL shouldHideTitle; +@property (assign, nonatomic) BOOL shouldHidePlaceholderText; + +/** + `placeholderText` to override default `placeholder` text when drawing text on toolbar. + */ +@property (nullable, strong, nonatomic) NSString* placeholderText; + +/** + `drawingPlaceholderText` will be actual text used to draw on toolbar. This would either `placeholder` or `placeholderText`. + */ +@property (nullable, strong, nonatomic, readonly) NSString* drawingPlaceholderText; + +/** + Optional target & action to behave toolbar title button as clickable button + + @param target Target object. + @param action Target Selector. + */ +-(void)setTitleTarget:(nullable id)target action:(nullable SEL)action; + +/** + Customized Invocation to be called on title button action. titleInvocation is internally created using setTitleTarget:action: method. + */ +@property (nullable, strong, nonatomic) NSInvocation *titleInvocation; ///----------------------------------------- @@ -52,7 +75,7 @@ @param target Target object. @param action Target Selector. */ --(void)setCustomPreviousTarget:(id)target action:(SEL)action; +-(void)setCustomPreviousTarget:(nullable id)target action:(nullable SEL)action; /** Additional target & action to do get callback action. Note that setting custom `next` selector doesn't affect native `next` functionality, this is just used to notifiy user to do additional work according to need. @@ -60,7 +83,7 @@ @param target Target object. @param action Target Selector. */ --(void)setCustomNextTarget:(id)target action:(SEL)action; +-(void)setCustomNextTarget:(nullable id)target action:(nullable SEL)action; /** Additional target & action to do get callback action. Note that setting custom `done` selector doesn't affect native `done` functionality, this is just used to notifiy user to do additional work according to need. @@ -68,22 +91,22 @@ @param target Target object. @param action Target Selector. */ --(void)setCustomDoneTarget:(id)target action:(SEL)action; +-(void)setCustomDoneTarget:(nullable id)target action:(nullable SEL)action; /** - Customized Invocation to be called on previous arrow action. previousInvocation is internally created using setCustomPreviousTarget: method. + Customized Invocation to be called on previous arrow action. previousInvocation is internally created using setCustomPreviousTarget:action: method. */ -@property (strong, nonatomic) NSInvocation *previousInvocation; +@property (nullable, strong, nonatomic) NSInvocation *previousInvocation; /** - Customized Invocation to be called on next arrow action. nextInvocation is internally created using setCustomNextTarget: method. + Customized Invocation to be called on next arrow action. nextInvocation is internally created using setCustomNextTarget:action: method. */ -@property (strong, nonatomic) NSInvocation *nextInvocation; +@property (nullable, strong, nonatomic) NSInvocation *nextInvocation; /** - Customized Invocation to be called on done action. doneInvocation is internally created using setCustomDoneTarget: method. + Customized Invocation to be called on done action. doneInvocation is internally created using setCustomDoneTarget:action: method. */ -@property (strong, nonatomic) NSInvocation *doneInvocation; +@property (nullable, strong, nonatomic) NSInvocation *doneInvocation; ///------------ /// @name Done @@ -95,7 +118,7 @@ @param target Target object for selector. @param action Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. */ -- (void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action; +- (void)addDoneOnKeyboardWithTarget:(nullable id)target action:(nullable SEL)action; /** Helper function to add Done button on keyboard. @@ -104,7 +127,7 @@ @param action Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. @param titleText text to show as title in IQToolbar'. */ -- (void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action titleText:(NSString*)titleText; +- (void)addDoneOnKeyboardWithTarget:(nullable id)target action:(nullable SEL)action titleText:(nullable NSString*)titleText; /** Helper function to add Done button on keyboard. @@ -113,7 +136,7 @@ @param action Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. */ -- (void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; +- (void)addDoneOnKeyboardWithTarget:(nullable id)target action:(nullable SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; ///------------ /// @name Right @@ -126,7 +149,7 @@ @param target Target object for selector. @param action Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. */ -- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action; +- (void)addRightButtonOnKeyboardWithText:(nullable NSString*)text target:(nullable id)target action:(nullable SEL)action; /** Helper function to add Right button on keyboard. @@ -136,7 +159,7 @@ @param action Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. @param titleText text to show as title in IQToolbar'. */ -- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action titleText:(NSString*)titleText; +- (void)addRightButtonOnKeyboardWithText:(nullable NSString*)text target:(nullable id)target action:(nullable SEL)action titleText:(nullable NSString*)titleText; /** Helper function to add Right button on keyboard. @@ -146,7 +169,27 @@ @param action Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. */ -- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; +- (void)addRightButtonOnKeyboardWithText:(nullable NSString*)text target:(nullable id)target action:(nullable SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; + +/** + Helper function to add Right button on keyboard. + + @param image Image icon to use as right button. + @param target Target object for selector. + @param action Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. + */ +- (void)addRightButtonOnKeyboardWithImage:(nullable UIImage*)image target:(nullable id)target action:(nullable SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; + +/** + Helper function to add Right button on keyboard. + + @param image Image icon to use as right button. + @param target Target object for selector. + @param action Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. + @param titleText text to show as title in IQToolbar'. + */ +- (void)addRightButtonOnKeyboardWithImage:(nullable UIImage*)image target:(nullable id)target action:(nullable SEL)action titleText:(nullable NSString*)titleText; ///------------------ /// @name Cancel/Done @@ -159,7 +202,7 @@ @param cancelAction Cancel button action name. Usually 'cancelAction:(IQBarButtonItem*)item'. @param doneAction Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. */ -- (void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAction doneAction:(SEL)doneAction; +- (void)addCancelDoneOnKeyboardWithTarget:(nullable id)target cancelAction:(nullable SEL)cancelAction doneAction:(nullable SEL)doneAction; /** Helper function to add Cancel and Done button on keyboard. @@ -169,7 +212,7 @@ @param doneAction Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. @param titleText text to show as title in IQToolbar'. */ -- (void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAction doneAction:(SEL)doneAction titleText:(NSString*)titleText; +- (void)addCancelDoneOnKeyboardWithTarget:(nullable id)target cancelAction:(nullable SEL)cancelAction doneAction:(nullable SEL)doneAction titleText:(nullable NSString*)titleText; /** Helper function to add Cancel and Done button on keyboard. @@ -179,7 +222,7 @@ @param doneAction Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. */ -- (void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAction doneAction:(SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; +- (void)addCancelDoneOnKeyboardWithTarget:(nullable id)target cancelAction:(nullable SEL)cancelAction doneAction:(nullable SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; ///----------------- /// @name Right/Left @@ -194,7 +237,7 @@ @param leftButtonAction Left button action name. Usually 'cancelAction:(IQBarButtonItem*)item'. @param rightButtonAction Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. */ -- (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)leftButtonTitle rightButtonTitle:(NSString*)rightButtonTitle leftButtonAction:(SEL)leftButtonAction rightButtonAction:(SEL)rightButtonAction; +- (void)addLeftRightOnKeyboardWithTarget:(nullable id)target leftButtonTitle:(nullable NSString*)leftButtonTitle rightButtonTitle:(nullable NSString*)rightButtonTitle leftButtonAction:(nullable SEL)leftButtonAction rightButtonAction:(nullable SEL)rightButtonAction; /** Helper function to add Left and Right button on keyboard. @@ -206,7 +249,7 @@ @param rightButtonAction Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. @param titleText text to show as title in IQToolbar'. */ -- (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)leftButtonTitle rightButtonTitle:(NSString*)rightButtonTitle leftButtonAction:(SEL)leftButtonAction rightButtonAction:(SEL)rightButtonAction titleText:(NSString*)titleText; +- (void)addLeftRightOnKeyboardWithTarget:(nullable id)target leftButtonTitle:(nullable NSString*)leftButtonTitle rightButtonTitle:(nullable NSString*)rightButtonTitle leftButtonAction:(nullable SEL)leftButtonAction rightButtonAction:(nullable SEL)rightButtonAction titleText:(nullable NSString*)titleText; /** Helper function to add Left and Right button on keyboard. @@ -218,24 +261,24 @@ @param rightButtonAction Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. */ -- (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)leftButtonTitle rightButtonTitle:(NSString*)rightButtonTitle leftButtonAction:(SEL)leftButtonAction rightButtonAction:(SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; +- (void)addLeftRightOnKeyboardWithTarget:(nullable id)target leftButtonTitle:(nullable NSString*)leftButtonTitle rightButtonTitle:(nullable NSString*)rightButtonTitle leftButtonAction:(nullable SEL)leftButtonAction rightButtonAction:(nullable SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; ///------------------------- /// @name Previous/Next/Done ///------------------------- /** - Helper function to add SegmentedNextPrevious/ArrowNextPrevious and Done button on keyboard. + Helper function to add ArrowNextPrevious and Done button on keyboard. @param target Target object for selector. @param previousAction Previous button action name. Usually 'previousAction:(id)item'. @param nextAction Next button action name. Usually 'nextAction:(id)item'. @param doneAction Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. */ -- (void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction doneAction:(SEL)doneAction; +- (void)addPreviousNextDoneOnKeyboardWithTarget:(nullable id)target previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction doneAction:(nullable SEL)doneAction; /** - Helper function to add SegmentedNextPrevious/ArrowNextPrevious and Done button on keyboard. + Helper function to add ArrowNextPrevious and Done button on keyboard. @param target Target object for selector. @param previousAction Previous button action name. Usually 'previousAction:(id)item'. @@ -243,10 +286,10 @@ @param doneAction Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. @param titleText text to show as title in IQToolbar'. */ -- (void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction doneAction:(SEL)doneAction titleText:(NSString*)titleText; +- (void)addPreviousNextDoneOnKeyboardWithTarget:(nullable id)target previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction doneAction:(nullable SEL)doneAction titleText:(nullable NSString*)titleText; /** - Helper function to add SegmentedNextPrevious/ArrowNextPrevious and Done button on keyboard. + Helper function to add ArrowNextPrevious and Done button on keyboard. @param target Target object for selector. @param previousAction Previous button action name. Usually 'previousAction:(id)item'. @@ -254,14 +297,14 @@ @param doneAction Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. */ -- (void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction doneAction:(SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; +- (void)addPreviousNextDoneOnKeyboardWithTarget:(nullable id)target previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction doneAction:(nullable SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; ///-------------------------- /// @name Previous/Next/Right ///-------------------------- /** - Helper function to add SegmentedNextPrevious/ArrowNextPrevious and Right button on keyboard. + Helper function to add ArrowNextPrevious and Right button on keyboard. @param target Target object for selector. @param rightButtonTitle Title for rightBarButtonItem, usually 'Done'. @@ -269,10 +312,10 @@ @param nextAction Next button action name. Usually 'nextAction:(id)item'. @param rightButtonAction RightBarButton action name. Usually 'doneAction:(IQBarButtonItem*)item'. */ -- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction; +- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonTitle:(nullable NSString*)rightButtonTitle previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction; /** - Helper function to add SegmentedNextPrevious/ArrowNextPrevious and Right button on keyboard. + Helper function to add ArrowNextPrevious and Right button on keyboard. @param target Target object for selector. @param rightButtonTitle Title for rightBarButtonItem, usually 'Done'. @@ -281,10 +324,10 @@ @param rightButtonAction RightBarButton action name. Usually 'doneAction:(IQBarButtonItem*)item'. @param titleText text to show as title in IQToolbar'. */ -- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction titleText:(NSString*)titleText; +- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonTitle:(nullable NSString*)rightButtonTitle previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction titleText:(nullable NSString*)titleText; /** - Helper function to add SegmentedNextPrevious/ArrowNextPrevious and Right button on keyboard. + Helper function to add ArrowNextPrevious and Right button on keyboard. @param target Target object for selector. @param rightButtonTitle Title for rightBarButtonItem, usually 'Done'. @@ -293,7 +336,32 @@ @param rightButtonAction RightBarButton action name. Usually 'doneAction:(IQBarButtonItem*)item'. @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. */ -- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; +- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonTitle:(nullable NSString*)rightButtonTitle previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; + +/** + Helper function to add ArrowNextPrevious and Right button on keyboard. + + @param target Target object for selector. + @param rightButtonImage Image icon to use as rightBarButtonItem. + @param previousAction Previous button action name. Usually 'previousAction:(id)item'. + @param nextAction Next button action name. Usually 'nextAction:(id)item'. + @param rightButtonAction RightBarButton action name. Usually 'doneAction:(IQBarButtonItem*)item'. + @param titleText text to show as title in IQToolbar'. + */ +- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonImage:(nullable UIImage*)rightButtonImage previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction titleText:(nullable NSString*)titleText; + +/** + Helper function to add ArrowNextPrevious and Right button on keyboard. + + @param target Target object for selector. + @param rightButtonImage Image icon to use as rightBarButtonItem. + @param previousAction Previous button action name. Usually 'previousAction:(id)item'. + @param nextAction Next button action name. Usually 'nextAction:(id)item'. + @param rightButtonAction RightBarButton action name. Usually 'doneAction:(IQBarButtonItem*)item'. + @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. + */ +- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonImage:(nullable UIImage*)rightButtonImage previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; + ///----------------------------------- /// @name Enable/Disable Previous/Next diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m index ede54de..09bda28 100644 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m +++ b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m @@ -1,7 +1,7 @@ // -// UIView+IQToolbar.m +// IQUIView+IQKeyboardToolbar.m // https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. +// Copyright (c) 2013-16 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -23,7 +23,6 @@ #import "IQUIView+IQKeyboardToolbar.h" -#import "IQSegmentedNextPrevious.h" #import "IQToolbar.h" #import "IQTitleBarButtonItem.h" #import "IQKeyboardManagerConstantsInternal.h" @@ -31,56 +30,146 @@ #import "IQKeyboardManager.h" #import #import +#import #import /*UIKeyboardToolbar Category implementation*/ @implementation UIView (IQToolbarAddition) --(void)setShouldHideTitle:(BOOL)shouldHideTitle +-(void)setShouldHidePlaceholderText:(BOOL)shouldHidePlaceholderText { - objc_setAssociatedObject(self, @selector(shouldHideTitle), [NSNumber numberWithBool:shouldHideTitle], OBJC_ASSOCIATION_RETAIN_NONATOMIC); + objc_setAssociatedObject(self, @selector(shouldHidePlaceholderText), @(shouldHidePlaceholderText), OBJC_ASSOCIATION_RETAIN_NONATOMIC); if ([self respondsToSelector:@selector(placeholder)] && [self.inputAccessoryView respondsToSelector:@selector(setTitle:)]) { UITextField *textField = (UITextField*)self; IQToolbar *toolbar = (IQToolbar*)[self inputAccessoryView]; - toolbar.title = textField.placeholder; + toolbar.title = textField.drawingPlaceholderText; } } --(BOOL)shouldHideTitle +-(BOOL)shouldHidePlaceholderText { - NSNumber *shouldHideTitle = objc_getAssociatedObject(self, @selector(shouldHideTitle)); - return [shouldHideTitle boolValue]; + NSNumber *shouldHidePlaceholderText = objc_getAssociatedObject(self, @selector(shouldHidePlaceholderText)); + return [shouldHidePlaceholderText boolValue]; } +-(void)setPlaceholderText:(NSString*)placeholderText +{ + objc_setAssociatedObject(self, @selector(placeholderText), placeholderText, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + + if ([self respondsToSelector:@selector(placeholder)] && [self.inputAccessoryView respondsToSelector:@selector(setTitle:)]) + { + UITextField *textField = (UITextField*)self; + IQToolbar *toolbar = (IQToolbar*)[self inputAccessoryView]; + toolbar.title = textField.drawingPlaceholderText; + } +} + +-(NSString*)placeholderText +{ + NSString *placeholderText = objc_getAssociatedObject(self, @selector(placeholderText)); + return placeholderText; +} + +-(NSString*)drawingPlaceholderText +{ + if (self.shouldHidePlaceholderText) + { + return nil; + } + else if (self.placeholderText.length != 0) + { + return self.placeholderText; + } + else if ([self respondsToSelector:@selector(placeholder)]) + { + return [(UITextField*)self placeholder]; + } + else + { + return nil; + } +} + +-(void)setTitleTarget:(nullable id)target action:(nullable SEL)action +{ + NSInvocation *invocation = nil; + + if (target && action) + { + invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:action]]; + invocation.target = target; + invocation.selector = action; + UIView *selfObject = self; + [invocation setArgument:&selfObject atIndex:2]; + } + + self.titleInvocation = invocation; +} + +-(void)setTitleInvocation:(NSInvocation *)titleInvocation +{ + objc_setAssociatedObject(self, @selector(titleInvocation), titleInvocation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + + if ([self.inputAccessoryView isKindOfClass:[IQToolbar class]]) + { + IQToolbar *toolbar = (IQToolbar*)[self inputAccessoryView]; + toolbar.titleInvocation = titleInvocation; + } +} + +-(NSInvocation *)titleInvocation +{ + return objc_getAssociatedObject(self, @selector(titleInvocation)); +} + + -(void)setCustomPreviousTarget:(id)target action:(SEL)action { - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:action]]; - invocation.target = target; - invocation.selector = action; - UIView *selfObject = self; - [invocation setArgument:&selfObject atIndex:2]; + NSInvocation *invocation = nil; + + if (target && action) + { + invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:action]]; + invocation.target = target; + invocation.selector = action; + UIView *selfObject = self; + [invocation setArgument:&selfObject atIndex:2]; + } + self.previousInvocation = invocation; } -(void)setCustomNextTarget:(id)target action:(SEL)action { - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:action]]; - invocation.target = target; - invocation.selector = action; - UIView *selfObject = self; - [invocation setArgument:&selfObject atIndex:2]; + NSInvocation *invocation = nil; + + if (target && action) + { + invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:action]]; + invocation.target = target; + invocation.selector = action; + UIView *selfObject = self; + [invocation setArgument:&selfObject atIndex:2]; + } + self.nextInvocation = invocation; } -(void)setCustomDoneTarget:(id)target action:(SEL)action { - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:action]]; - invocation.target = target; - invocation.selector = action; - UIView *selfObject = self; - [invocation setArgument:&selfObject atIndex:2]; + NSInvocation *invocation = nil; + + if (target && action) + { + invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:action]]; + invocation.target = target; + invocation.selector = action; + UIView *selfObject = self; + [invocation setArgument:&selfObject atIndex:2]; + } + self.doneInvocation = invocation; } @@ -114,17 +203,32 @@ -(NSInvocation *)doneInvocation return objc_getAssociatedObject(self, @selector(doneInvocation)); } +#pragma mark - Private helper + ++(UIBarButtonItem*)flexibleBarButtonItem +{ + static IQBarButtonItem *nilButton = nil; + + if (nilButton == nil) + { + nilButton = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; + } + + return nilButton; +} #pragma mark - Toolbar on UIKeyboard -- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action titleText:(NSString*)titleText +- (void)addRightButtonOnKeyboardWithImage:(UIImage*)image target:(id)target action:(SEL)action titleText:(NSString*)titleText { // If can't set InputAccessoryView. Then return if (![self respondsToSelector:@selector(setInputAccessoryView:)]) return; // Creating a toolBar for keyboard IQToolbar *toolbar = [[IQToolbar alloc] init]; - if (IQ_IS_IOS7_OR_GREATER && [self respondsToSelector:@selector(keyboardAppearance)]) + toolbar.doneImage = image; + + if ([self respondsToSelector:@selector(keyboardAppearance)]) { switch ([(UITextField*)self keyboardAppearance]) { @@ -133,37 +237,66 @@ - (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target actio } } - NSMutableArray *items = [[NSMutableArray alloc] init]; + NSMutableArray *items = [[NSMutableArray alloc] init]; + + //Title button + IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithTitle:self.shouldHidePlaceholderText?nil:titleText]; + [items addObject:title]; + + //Flexible space + [items addObject:[[self class] flexibleBarButtonItem]]; + + //Right button + IQBarButtonItem *doneButton = [[IQBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleDone target:target action:action]; + doneButton.accessibilityLabel = @"Toolbar Done Button"; + [items addObject:doneButton]; + // Adding button to toolBar. + [toolbar setItems:items]; + + toolbar.titleInvocation = self.titleInvocation; + // Setting toolbar to textFieldPhoneNumber keyboard. + [(UITextField*)self setInputAccessoryView:toolbar]; +} + +- (void)addRightButtonOnKeyboardWithImage:(UIImage*)image target:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder +{ + NSString *title = nil; + + if (shouldShowPlaceholder) + title = [self drawingPlaceholderText]; + + [self addRightButtonOnKeyboardWithImage:image target:target action:action titleText:title]; +} + +- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action titleText:(NSString*)titleText +{ + // If can't set InputAccessoryView. Then return + if (![self respondsToSelector:@selector(setInputAccessoryView:)]) return; + + // Creating a toolBar for keyboard + IQToolbar *toolbar = [[IQToolbar alloc] init]; + toolbar.doneTitle = text; + + if ([self respondsToSelector:@selector(keyboardAppearance)]) { - CGRect buttonFrame; - - if (IQ_IS_IOS7_OR_GREATER) - { - /* - 50 done button frame. - 24 distance maintenance - */ - buttonFrame = CGRectMake(0, 0, toolbar.frame.size.width-50.0-24, 44); - } - else + switch ([(UITextField*)self keyboardAppearance]) { - /* - 64 done button frame. - 16 distance maintenance - */ - buttonFrame = CGRectMake(0, 0, toolbar.frame.size.width-64.0-16, 44); + case UIKeyboardAppearanceAlert: toolbar.barStyle = UIBarStyleBlack; break; + default: toolbar.barStyle = UIBarStyleDefault; break; } - - IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithFrame:buttonFrame title:self.shouldHideTitle?nil:titleText]; - [items addObject:title]; } - // Create a fake button to maintain flexibleSpace between doneButton and nilButton. (Actually it moves done button to right side. - IQBarButtonItem *nilButton =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; - [items addObject:nilButton]; + NSMutableArray *items = [[NSMutableArray alloc] init]; + + //Title button + IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithTitle:self.shouldHidePlaceholderText?nil:titleText]; + [items addObject:title]; + + //Flexible space + [items addObject:[[self class] flexibleBarButtonItem]]; - // Create a done button to show on keyboard to resign it. Adding a selector to resign it. + //Right button IQBarButtonItem *doneButton =[[IQBarButtonItem alloc] initWithTitle:text style:UIBarButtonItemStyleDone target:target action:action]; [items addObject:doneButton]; @@ -171,14 +304,16 @@ - (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target actio [toolbar setItems:items]; // Setting toolbar to textFieldPhoneNumber keyboard. + toolbar.titleInvocation = self.titleInvocation; [(UITextField*)self setInputAccessoryView:toolbar]; } -- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)showPlaceholder +- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder { - NSString *title; + NSString *title = nil; - if (showPlaceholder && [self respondsToSelector:@selector(placeholder)]) title = [(UITextField*)self placeholder]; + if (shouldShowPlaceholder) + title = [self drawingPlaceholderText]; [self addRightButtonOnKeyboardWithText:text target:target action:action titleText:title]; } @@ -196,7 +331,8 @@ - (void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action titleText:(NSS // Creating a toolBar for keyboard IQToolbar *toolbar = [[IQToolbar alloc] init]; - if (IQ_IS_IOS7_OR_GREATER && [self respondsToSelector:@selector(keyboardAppearance)]) + + if ([self respondsToSelector:@selector(keyboardAppearance)]) { switch ([(UITextField*)self keyboardAppearance]) { @@ -206,36 +342,15 @@ - (void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action titleText:(NSS } NSMutableArray *items = [[NSMutableArray alloc] init]; + + //Title button + IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithTitle:self.shouldHidePlaceholderText?nil:titleText]; + [items addObject:title]; - { - CGRect buttonFrame; - - if (IQ_IS_IOS7_OR_GREATER) - { - /* - 50 done button frame. - 8 distance maintenance - */ - buttonFrame = CGRectMake(0, 0, toolbar.frame.size.width-64.0-12.0, 44); - } - else - { - /* - 64 done button frame. - 16 distance maintenance - */ - buttonFrame = CGRectMake(0, 0, toolbar.frame.size.width-64.0-16, 44); - } - - IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithFrame:buttonFrame title:self.shouldHideTitle?nil:titleText]; - [items addObject:title]; - } - - // Create a fake button to maintain flexibleSpace between doneButton and nilButton. (Actually it moves done button to right side. - IQBarButtonItem *nilButton =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; - [items addObject:nilButton]; + //Flexible space + [items addObject:[[self class] flexibleBarButtonItem]]; - // Create a done button to show on keyboard to resign it. Adding a selector to resign it. + //Done button IQBarButtonItem *doneButton = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:target action:action]; [items addObject:doneButton]; @@ -243,14 +358,16 @@ - (void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action titleText:(NSS [toolbar setItems:items]; // Setting toolbar to textFieldPhoneNumber keyboard. + toolbar.titleInvocation = self.titleInvocation; [(UITextField*)self setInputAccessoryView:toolbar]; } --(void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)showPlaceholder +-(void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder { - NSString *title; + NSString *title = nil; - if (showPlaceholder && [self respondsToSelector:@selector(placeholder)]) title = [(UITextField*)self placeholder]; + if (shouldShowPlaceholder) + title = [self drawingPlaceholderText]; [self addDoneOnKeyboardWithTarget:target action:action titleText:title]; } @@ -267,7 +384,9 @@ - (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)l // Creating a toolBar for keyboard IQToolbar *toolbar = [[IQToolbar alloc] init]; - if (IQ_IS_IOS7_OR_GREATER && [self respondsToSelector:@selector(keyboardAppearance)]) + toolbar.doneTitle = rightTitle; + + if ([self respondsToSelector:@selector(keyboardAppearance)]) { switch ([(UITextField*)self keyboardAppearance]) { @@ -278,56 +397,38 @@ - (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)l NSMutableArray *items = [[NSMutableArray alloc] init]; - // Create a cancel button to show on keyboard to resign it. Adding a selector to resign it. + //Left button IQBarButtonItem *cancelButton =[[IQBarButtonItem alloc] initWithTitle:leftTitle style:UIBarButtonItemStylePlain target:target action:leftAction]; [items addObject:cancelButton]; - { - CGRect buttonFrame; - - if (IQ_IS_IOS7_OR_GREATER) - { - /* - 66 Cancel button maximum x. - 50 done button frame. - 8+8 distance maintenance - */ - buttonFrame = CGRectMake(0, 0, toolbar.frame.size.width-66-50.0-16, 44); - } - else - { - /* - 66 Cancel button maximum x. - 57 done button frame. - 8+8 distance maintenance - */ - buttonFrame = CGRectMake(0, 0, toolbar.frame.size.width-66-57.0-16, 44); - } - - IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithFrame:buttonFrame title:self.shouldHideTitle?nil:titleText]; - [items addObject:title]; - } + //Flexible space + [items addObject:[[self class] flexibleBarButtonItem]]; + + //Title button + IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithTitle:self.shouldHidePlaceholderText?nil:titleText]; + [items addObject:title]; - // Create a fake button to maintain flexibleSpace between doneButton and nilButton. (Actually it moves done button to right side. - IQBarButtonItem *nilButton =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; - [items addObject:nilButton]; + //Flexible space + [items addObject:[[self class] flexibleBarButtonItem]]; - // Create a done button to show on keyboard to resign it. Adding a selector to resign it. - IQBarButtonItem *doneButton =[[IQBarButtonItem alloc] initWithTitle:rightTitle style:UIBarButtonItemStylePlain target:target action:rightAction]; + //Right button + IQBarButtonItem *doneButton =[[IQBarButtonItem alloc] initWithTitle:rightTitle style:UIBarButtonItemStyleDone target:target action:rightAction]; [items addObject:doneButton]; // Adding button to toolBar. [toolbar setItems:items]; // Setting toolbar to keyboard. + toolbar.titleInvocation = self.titleInvocation; [(UITextField*)self setInputAccessoryView:toolbar]; } -- (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)leftTitle rightButtonTitle:(NSString*)rightTitle leftButtonAction:(SEL)leftAction rightButtonAction:(SEL)rightAction shouldShowPlaceholder:(BOOL)showPlaceholder +- (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)leftTitle rightButtonTitle:(NSString*)rightTitle leftButtonAction:(SEL)leftAction rightButtonAction:(SEL)rightAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder { - NSString *title; + NSString *title = nil; - if (showPlaceholder && [self respondsToSelector:@selector(placeholder)]) title = [(UITextField*)self placeholder]; + if (shouldShowPlaceholder) + title = [self drawingPlaceholderText]; [self addLeftRightOnKeyboardWithTarget:target leftButtonTitle:leftTitle rightButtonTitle:rightTitle leftButtonAction:leftAction rightButtonAction:rightAction titleText:title]; } @@ -344,7 +445,7 @@ - (void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAct // Creating a toolBar for keyboard IQToolbar *toolbar = [[IQToolbar alloc] init]; - if (IQ_IS_IOS7_OR_GREATER && [self respondsToSelector:@selector(keyboardAppearance)]) + if ([self respondsToSelector:@selector(keyboardAppearance)]) { switch ([(UITextField*)self keyboardAppearance]) { @@ -355,41 +456,21 @@ - (void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAct NSMutableArray *items = [[NSMutableArray alloc] init]; - // Create a cancel button to show on keyboard to resign it. Adding a selector to resign it. + //Cancel button IQBarButtonItem *cancelButton =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:target action:cancelAction]; [items addObject:cancelButton]; - { - CGRect buttonFrame; - - if (IQ_IS_IOS7_OR_GREATER) - { - /* - 66 Cancel button maximum x. - 50 done button frame. - 8+8 distance maintenance - */ - buttonFrame = CGRectMake(0, 0, toolbar.frame.size.width-66-50.0-16, 44); - } - else - { - /* - 66 Cancel button maximum x. - 57 done button frame. - 8+8 distance maintenance - */ - buttonFrame = CGRectMake(0, 0, toolbar.frame.size.width-66-57.0-16, 44); - } - - IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithFrame:buttonFrame title:self.shouldHideTitle?nil:titleText]; - [items addObject:title]; - } + //Flexible space + [items addObject:[[self class] flexibleBarButtonItem]]; + + //Title button + IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithTitle:self.shouldHidePlaceholderText?nil:titleText]; + [items addObject:title]; - // Create a fake button to maintain flexibleSpace between doneButton and nilButton. (Actually it moves done button to right side. - IQBarButtonItem *nilButton =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; - [items addObject:nilButton]; + //Flexible space + [items addObject:[[self class] flexibleBarButtonItem]]; - // Create a done button to show on keyboard to resign it. Adding a selector to resign it. + //Done button IQBarButtonItem *doneButton =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:target action:doneAction]; [items addObject:doneButton]; @@ -397,14 +478,16 @@ - (void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAct [toolbar setItems:items]; // Setting toolbar to keyboard. + toolbar.titleInvocation = self.titleInvocation; [(UITextField*)self setInputAccessoryView:toolbar]; } --(void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAction doneAction:(SEL)doneAction shouldShowPlaceholder:(BOOL)showPlaceholder +-(void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAction doneAction:(SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder { - NSString *title; + NSString *title = nil; - if (showPlaceholder && [self respondsToSelector:@selector(placeholder)]) title = [(UITextField*)self placeholder]; + if (shouldShowPlaceholder) + title = [self drawingPlaceholderText]; [self addCancelDoneOnKeyboardWithTarget:target cancelAction:cancelAction doneAction:doneAction titleText:title]; } @@ -421,7 +504,7 @@ - (void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)p // Creating a toolBar for phoneNumber keyboard IQToolbar *toolbar = [[IQToolbar alloc] init]; - if (IQ_IS_IOS7_OR_GREATER && [self respondsToSelector:@selector(keyboardAppearance)]) + if ([self respondsToSelector:@selector(keyboardAppearance)]) { switch ([(UITextField*)self keyboardAppearance]) { @@ -432,104 +515,87 @@ - (void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)p NSMutableArray *items = [[NSMutableArray alloc] init]; - // Create a done button to show on keyboard to resign it. Adding a selector to resign it. - IQBarButtonItem *doneButton =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:target action:doneAction]; - - if (IQ_IS_IOS7_OR_GREATER) + // UIBarButtonItem *prev = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:105 target:target action:previousAction]; + // UIBarButtonItem *next = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:106 target:target action:nextAction]; + + // Get the top level "bundle" which may actually be the framework + NSBundle *mainBundle = [NSBundle bundleForClass:[IQKeyboardManager class]]; + + // Check to see if the resource bundle exists inside the top level bundle + NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"IQKeyboardManager" ofType:@"bundle"]]; + + if (resourcesBundle == nil) { + resourcesBundle = mainBundle; + } + + UIImage *imageLeftArrow = nil; + UIImage *imageRightArrow = nil; + + if (IQ_IS_IOS10_OR_GREATER) { - // UIBarButtonItem *prev = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:105 target:target action:previousAction]; - // UIBarButtonItem *next = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:106 target:target action:nextAction]; - - UIImage *imageLeftArrow; - UIImage *imageRightArrow; - - //Xcode Compilation check -#ifdef NSFoundationVersionNumber_iOS_7_1 - - if (IQ_IS_IOS8_OR_GREATER) - { - // Get the top level "bundle" which may actually be the framework - NSBundle *mainBundle = [NSBundle bundleForClass:[IQKeyboardManager class]]; - - // Check to see if the resource bundle exists inside the top level bundle - NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"IQKeyboardManager" ofType:@"bundle"]]; - - if (resourcesBundle == nil) { - resourcesBundle = mainBundle; - } - - imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowLeft" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; - imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowRight" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; - } - else -#endif - { - imageLeftArrow = [UIImage imageNamed:@"IQKeyboardManager.bundle/IQButtonBarArrowLeft"]; - imageRightArrow = [UIImage imageNamed:@"IQKeyboardManager.bundle/IQButtonBarArrowRight"]; - } - - IQBarButtonItem *prev = [[IQBarButtonItem alloc] initWithImage:imageLeftArrow style:UIBarButtonItemStylePlain target:target action:previousAction]; - IQBarButtonItem *fixed =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; - [fixed setWidth:23]; - IQBarButtonItem *next = [[IQBarButtonItem alloc] initWithImage:imageRightArrow style:UIBarButtonItemStylePlain target:target action:nextAction]; - [items addObject:prev]; - [items addObject:fixed]; - [items addObject:next]; - } - else - { - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wdeprecated-declarations" - // Create a next/previous button to switch between TextFieldViews. - IQSegmentedNextPrevious *segControl = [[IQSegmentedNextPrevious alloc] initWithTarget:target previousAction:previousAction nextAction:nextAction]; - #pragma GCC diagnostic pop - IQBarButtonItem *segButton = [[IQBarButtonItem alloc] initWithCustomView:segControl]; - [items addObject:segButton]; - } - + imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowUp" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; + imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowDown" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; + } + else { - CGRect buttonFrame; - - if (IQ_IS_IOS7_OR_GREATER) - { - /* - 72.5 next/previous maximum x. - 50 done button frame. - 8+8 distance maintenance - */ - buttonFrame = CGRectMake(0, 0, toolbar.frame.size.width-72.5-50.0-16, 44); - } - else - { - /* - 135 next/previous maximum x. - 64 done button frame. - 8+8 distance maintenance - */ - buttonFrame = CGRectMake(0, 0, toolbar.frame.size.width-135-64.0-16, 44); - } - - IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithFrame:buttonFrame title:self.shouldHideTitle?nil:titleText]; - [items addObject:title]; + imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowLeft" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; + imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowRight" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; + } + + //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) + if ([UIImage instancesRespondToSelector:@selector(imageFlippedForRightToLeftLayoutDirection)]) + { + imageLeftArrow = [imageLeftArrow imageFlippedForRightToLeftLayoutDirection]; + imageRightArrow = [imageRightArrow imageFlippedForRightToLeftLayoutDirection]; + } + + //Previous button + IQBarButtonItem *prev = [[IQBarButtonItem alloc] initWithImage:imageLeftArrow style:UIBarButtonItemStylePlain target:target action:previousAction]; + prev.accessibilityLabel = @"Toolbar Previous Button"; + [items addObject:prev]; + + //Fixed space + IQBarButtonItem *fixed =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; + if (IQ_IS_IOS10_OR_GREATER) { + [fixed setWidth:6]; + } else { + [fixed setWidth:20]; } + [items addObject:fixed]; - IQBarButtonItem *nilButton =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; + //Next button + IQBarButtonItem *next = [[IQBarButtonItem alloc] initWithImage:imageRightArrow style:UIBarButtonItemStylePlain target:target action:nextAction]; + next.accessibilityLabel = @"Toolbar Next Button"; + [items addObject:next]; + + //Flexible space + [items addObject:[[self class] flexibleBarButtonItem]]; + + //Title button + IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithTitle:self.shouldHidePlaceholderText?nil:titleText]; + [items addObject:title]; - [items addObject:nilButton]; + //Flexible space + [items addObject:[[self class] flexibleBarButtonItem]]; + + //Done button + IQBarButtonItem *doneButton =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:target action:doneAction]; [items addObject:doneButton]; // Adding button to toolBar. [toolbar setItems:items]; // Setting toolbar to keyboard. + toolbar.titleInvocation = self.titleInvocation; [(UITextField*)self setInputAccessoryView:toolbar]; } --(void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction doneAction:(SEL)doneAction shouldShowPlaceholder:(BOOL)showPlaceholder +-(void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction doneAction:(SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder { - NSString *title; + NSString *title = nil; - if (showPlaceholder && [self respondsToSelector:@selector(placeholder)]) title = [(UITextField*)self placeholder]; + if (shouldShowPlaceholder) + title = [self drawingPlaceholderText]; [self addPreviousNextDoneOnKeyboardWithTarget:target previousAction:previousAction nextAction:nextAction doneAction:doneAction titleText:title]; } @@ -539,14 +605,16 @@ -(void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)pr [self addPreviousNextDoneOnKeyboardWithTarget:target previousAction:previousAction nextAction:nextAction doneAction:doneAction titleText:nil]; } -- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction titleText:(NSString*)titleText +- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonImage:(UIImage*)rightButtonImage previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction titleText:(NSString*)titleText { //If can't set InputAccessoryView. Then return if (![self respondsToSelector:@selector(setInputAccessoryView:)]) return; // Creating a toolBar for phoneNumber keyboard IQToolbar *toolbar = [[IQToolbar alloc] init]; - if (IQ_IS_IOS7_OR_GREATER && [self respondsToSelector:@selector(keyboardAppearance)]) + toolbar.doneImage = rightButtonImage; + + if ([self respondsToSelector:@selector(keyboardAppearance)]) { switch ([(UITextField*)self keyboardAppearance]) { @@ -557,104 +625,187 @@ - (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NS NSMutableArray *items = [[NSMutableArray alloc] init]; - // Create a done button to show on keyboard to resign it. Adding a selector to resign it. - IQBarButtonItem *doneButton =[[IQBarButtonItem alloc] initWithTitle:rightButtonTitle style:UIBarButtonItemStyleDone target:target action:rightButtonAction]; + // UIBarButtonItem *prev = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:105 target:target action:previousAction]; + // UIBarButtonItem *next = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:106 target:target action:nextAction]; - if (IQ_IS_IOS7_OR_GREATER) - { - // UIBarButtonItem *prev = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:105 target:target action:previousAction]; - // UIBarButtonItem *next = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:106 target:target action:nextAction]; - - UIImage *imageLeftArrow; - UIImage *imageRightArrow; - - //Xcode Compilation check -#ifdef NSFoundationVersionNumber_iOS_7_1 - - if (IQ_IS_IOS8_OR_GREATER) - { - // Get the top level "bundle" which may actually be the framework - NSBundle *mainBundle = [NSBundle bundleForClass:[IQKeyboardManager class]]; - - // Check to see if the resource bundle exists inside the top level bundle - NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"IQKeyboardManager" ofType:@"bundle"]]; - - if (resourcesBundle == nil) { - resourcesBundle = mainBundle; - } - - imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowLeft" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; - imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowRight" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; - } - else -#endif - { - imageLeftArrow = [UIImage imageNamed:@"IQKeyboardManager.bundle/IQButtonBarArrowLeft"]; - imageRightArrow = [UIImage imageNamed:@"IQKeyboardManager.bundle/IQButtonBarArrowRight"]; - } - - IQBarButtonItem *prev = [[IQBarButtonItem alloc] initWithImage:imageLeftArrow style:UIBarButtonItemStylePlain target:target action:previousAction]; - IQBarButtonItem *fixed =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; - [fixed setWidth:23]; - IQBarButtonItem *next = [[IQBarButtonItem alloc] initWithImage:imageRightArrow style:UIBarButtonItemStylePlain target:target action:nextAction]; - [items addObject:prev]; - [items addObject:fixed]; - [items addObject:next]; + // Get the top level "bundle" which may actually be the framework + NSBundle *mainBundle = [NSBundle bundleForClass:[IQKeyboardManager class]]; + + // Check to see if the resource bundle exists inside the top level bundle + NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"IQKeyboardManager" ofType:@"bundle"]]; + + if (resourcesBundle == nil) { + resourcesBundle = mainBundle; } - else + + UIImage *imageLeftArrow = nil; + UIImage *imageRightArrow = nil; + + if (IQ_IS_IOS10_OR_GREATER) { + imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowUp" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; + imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowDown" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; + } else { + imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowLeft" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; + imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowRight" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; + } + + //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) + if ([UIImage instancesRespondToSelector:@selector(imageFlippedForRightToLeftLayoutDirection)]) { -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - // Create a next/previous button to switch between TextFieldViews. - IQSegmentedNextPrevious *segControl = [[IQSegmentedNextPrevious alloc] initWithTarget:target previousAction:previousAction nextAction:nextAction]; -#pragma GCC diagnostic pop - IQBarButtonItem *segButton = [[IQBarButtonItem alloc] initWithCustomView:segControl]; - [items addObject:segButton]; + imageLeftArrow = [imageLeftArrow imageFlippedForRightToLeftLayoutDirection]; + imageRightArrow = [imageRightArrow imageFlippedForRightToLeftLayoutDirection]; + } + + //Previous button + IQBarButtonItem *prev = [[IQBarButtonItem alloc] initWithImage:imageLeftArrow style:UIBarButtonItemStylePlain target:target action:previousAction]; + prev.accessibilityLabel = @"Toolbar Previous Button"; + [items addObject:prev]; + + //Fixed space + IQBarButtonItem *fixed =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; + if (IQ_IS_IOS10_OR_GREATER) { + [fixed setWidth:6]; + } else { + [fixed setWidth:20]; } + [items addObject:fixed]; + //Next button + IQBarButtonItem *next = [[IQBarButtonItem alloc] initWithImage:imageRightArrow style:UIBarButtonItemStylePlain target:target action:nextAction]; + next.accessibilityLabel = @"Toolbar Next Button"; + [items addObject:next]; + + //Flexible space + [items addObject:[[self class] flexibleBarButtonItem]]; + + //Title button + IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithTitle:self.shouldHidePlaceholderText?nil:titleText]; + [items addObject:title]; + + //Flexible space + [items addObject:[[self class] flexibleBarButtonItem]]; + + //Right button + IQBarButtonItem *doneButton = [[IQBarButtonItem alloc] initWithImage:rightButtonImage style:UIBarButtonItemStyleDone target:target action:rightButtonAction]; + doneButton.accessibilityLabel = @"Toolbar Done Button"; + [items addObject:doneButton]; + + // Adding button to toolBar. + [toolbar setItems:items]; + + // Setting toolbar to keyboard. + toolbar.titleInvocation = self.titleInvocation; + [(UITextField*)self setInputAccessoryView:toolbar]; +} + +- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonImage:(nullable UIImage*)rightButtonImage previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder +{ + NSString *title = nil; + + if (shouldShowPlaceholder) + title = [self drawingPlaceholderText]; + + [self addPreviousNextRightOnKeyboardWithTarget:target rightButtonImage:rightButtonImage previousAction:previousAction nextAction:nextAction rightButtonAction:rightButtonAction titleText:title]; +} + +- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction titleText:(NSString*)titleText +{ + //If can't set InputAccessoryView. Then return + if (![self respondsToSelector:@selector(setInputAccessoryView:)]) return; + + // Creating a toolBar for phoneNumber keyboard + IQToolbar *toolbar = [[IQToolbar alloc] init]; + toolbar.doneTitle = rightButtonTitle; + + if ([self respondsToSelector:@selector(keyboardAppearance)]) { - CGRect buttonFrame; - - if (IQ_IS_IOS7_OR_GREATER) - { - /* - 72.5 next/previous maximum x. - 50 done button frame. - 8+8 distance maintenance - */ - buttonFrame = CGRectMake(0, 0, toolbar.frame.size.width-72.5-50.0-16, 44); - } - else + switch ([(UITextField*)self keyboardAppearance]) { - /* - 135 next/previous maximum x. - 64 done button frame. - 8+8 distance maintenance - */ - buttonFrame = CGRectMake(0, 0, toolbar.frame.size.width-135-64.0-16, 44); + case UIKeyboardAppearanceAlert: toolbar.barStyle = UIBarStyleBlack; break; + default: toolbar.barStyle = UIBarStyleDefault; break; } - - IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithFrame:buttonFrame title:self.shouldHideTitle?nil:titleText]; - [items addObject:title]; } - IQBarButtonItem *nilButton =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; + NSMutableArray *items = [[NSMutableArray alloc] init]; + + // UIBarButtonItem *prev = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:105 target:target action:previousAction]; + // UIBarButtonItem *next = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:106 target:target action:nextAction]; + + // Get the top level "bundle" which may actually be the framework + NSBundle *mainBundle = [NSBundle bundleForClass:[IQKeyboardManager class]]; + + // Check to see if the resource bundle exists inside the top level bundle + NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"IQKeyboardManager" ofType:@"bundle"]]; + + if (resourcesBundle == nil) { + resourcesBundle = mainBundle; + } + + UIImage *imageLeftArrow = nil; + UIImage *imageRightArrow = nil; - [items addObject:nilButton]; + if (IQ_IS_IOS10_OR_GREATER) { + imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowUp" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; + imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowDown" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; + } else { + imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowLeft" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; + imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowRight" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; + } + + //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) + if ([UIImage instancesRespondToSelector:@selector(imageFlippedForRightToLeftLayoutDirection)]) + { + imageLeftArrow = [imageLeftArrow imageFlippedForRightToLeftLayoutDirection]; + imageRightArrow = [imageRightArrow imageFlippedForRightToLeftLayoutDirection]; + } + + //Previous button + IQBarButtonItem *prev = [[IQBarButtonItem alloc] initWithImage:imageLeftArrow style:UIBarButtonItemStylePlain target:target action:previousAction]; + prev.accessibilityLabel = @"Toolbar Previous Button"; + [items addObject:prev]; + + //Fixed space + IQBarButtonItem *fixed =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; + if (IQ_IS_IOS10_OR_GREATER) { + [fixed setWidth:6]; + } else { + [fixed setWidth:20]; + } + [items addObject:fixed]; + + //Next button + IQBarButtonItem *next = [[IQBarButtonItem alloc] initWithImage:imageRightArrow style:UIBarButtonItemStylePlain target:target action:nextAction]; + next.accessibilityLabel = @"Toolbar Next Button"; + [items addObject:next]; + + //Flexible space + [items addObject:[[self class] flexibleBarButtonItem]]; + + //Title button + IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithTitle:self.shouldHidePlaceholderText?nil:titleText]; + [items addObject:title]; + + //Flexible space + [items addObject:[[self class] flexibleBarButtonItem]]; + + //Right button + IQBarButtonItem *doneButton =[[IQBarButtonItem alloc] initWithTitle:rightButtonTitle style:UIBarButtonItemStyleDone target:target action:rightButtonAction]; [items addObject:doneButton]; // Adding button to toolBar. [toolbar setItems:items]; // Setting toolbar to keyboard. + toolbar.titleInvocation = self.titleInvocation; [(UITextField*)self setInputAccessoryView:toolbar]; } -- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction shouldShowPlaceholder:(BOOL)showPlaceholder +- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder { - NSString *title; + NSString *title = nil; - if (showPlaceholder && [self respondsToSelector:@selector(placeholder)]) title = [(UITextField*)self placeholder]; + if (shouldShowPlaceholder) + title = [self drawingPlaceholderText]; [self addPreviousNextRightOnKeyboardWithTarget:target rightButtonTitle:rightButtonTitle previousAction:previousAction nextAction:nextAction rightButtonAction:rightButtonAction titleText:title]; } @@ -672,11 +823,11 @@ -(void)setEnablePrevious:(BOOL)isPreviousEnabled next:(BOOL)isNextEnabled // If it is IQToolbar and it's items are greater than zero. if ([inputAccessoryView isKindOfClass:[IQToolbar class]] && [[inputAccessoryView items] count]>0) { - if (IQ_IS_IOS7_OR_GREATER && [[inputAccessoryView items] count]>3) + if ([[inputAccessoryView items] count]>3) { // Getting first item from inputAccessoryView. - IQBarButtonItem *prevButton = (IQBarButtonItem*)[[inputAccessoryView items] objectAtIndex:0]; - IQBarButtonItem *nextButton = (IQBarButtonItem*)[[inputAccessoryView items] objectAtIndex:2]; + IQBarButtonItem *prevButton = (IQBarButtonItem*)[inputAccessoryView items][0]; + IQBarButtonItem *nextButton = (IQBarButtonItem*)[inputAccessoryView items][2]; // If it is UIBarButtonItem and it's customView is not nil. if ([prevButton isKindOfClass:[IQBarButtonItem class]] && [nextButton isKindOfClass:[IQBarButtonItem class]]) @@ -687,36 +838,6 @@ -(void)setEnablePrevious:(BOOL)isPreviousEnabled next:(BOOL)isNextEnabled [nextButton setEnabled:isNextEnabled]; } } - else - { - // Getting first item from inputAccessoryView. - IQBarButtonItem *barButtonItem = (IQBarButtonItem*)[[inputAccessoryView items] objectAtIndex:0]; - - // If it is IQBarButtonItem and it's customView is not nil. - if ([barButtonItem isKindOfClass:[IQBarButtonItem class]] && [barButtonItem customView] != nil) - { - // Getting it's customView. - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wdeprecated-declarations" - IQSegmentedNextPrevious *segmentedControl = (IQSegmentedNextPrevious*)[barButtonItem customView]; - // If its customView is IQSegmentedNextPrevious and has 2 segments - if ([segmentedControl isKindOfClass:[IQSegmentedNextPrevious class]] && [segmentedControl numberOfSegments]==2) - #pragma GCC diagnostic pop - { - if ([segmentedControl isEnabledForSegmentAtIndex:0] != isPreviousEnabled) - { - // Setting it's first segment enable/disable. - [segmentedControl setEnabled:isPreviousEnabled forSegmentAtIndex:0]; - } - - if ([segmentedControl isEnabledForSegmentAtIndex:1] != isNextEnabled) - { - // Setting it's second segment enable/disable. - [segmentedControl setEnabled:isNextEnabled forSegmentAtIndex:1]; - } - } - } - } } } diff --git a/FoodbLog/Pods/IQKeyboardManager/LICENSE.md b/FoodbLog/Pods/IQKeyboardManager/LICENSE.md index a8ce439..37a8455 100644 --- a/FoodbLog/Pods/IQKeyboardManager/LICENSE.md +++ b/FoodbLog/Pods/IQKeyboardManager/LICENSE.md @@ -3,7 +3,7 @@ IQKeyboardManager license The MIT License (MIT) -Copyright (c) 2013-14 Iftekhar Qurashi +Copyright (c) 2013-16 Iftekhar Qurashi Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/FoodbLog/Pods/IQKeyboardManager/README.md b/FoodbLog/Pods/IQKeyboardManager/README.md index f3745c2..dee503d 100644 --- a/FoodbLog/Pods/IQKeyboardManager/README.md +++ b/FoodbLog/Pods/IQKeyboardManager/README.md @@ -2,12 +2,25 @@ Icon

IQKeyboardManager

+

+ GitHub license + + +[![Build Status](https://travis-ci.org/hackiftekhar/IQKeyboardManager.svg)](https://travis-ci.org/hackiftekhar/IQKeyboardManager) +[![Coverage Status](http://img.shields.io/coveralls/hackiftekhar/IQKeyboardManager/master.svg)](https://coveralls.io/r/hackiftekhar/IQKeyboardManager?branch=master) +[![Code Health](https://landscape.io/github/hackiftekhar/IQKeyboardManager/master/landscape.svg?style=flat)](https://landscape.io/github/hackiftekhar/IQKeyboardManager/master) + Often while developing an app, We ran into an issues where the iPhone keyboard slide up and cover the `UITextField/UITextView`. `IQKeyboardManager` allows you to prevent issues of the keyboard sliding up and cover `UITextField/UITextView` without needing you to enter any code and no additional setup required. To use `IQKeyboardManager` you simply need to add source files to your project. -####Key Features -1) `**CODELESS**, Zero Line Of Code` +#### Key Features + +[![Issue Stats](http://issuestats.com/github/hackiftekhar/iqkeyboardmanager/badge/pr?style=flat)](http://issuestats.com/github/hackiftekhar/iqkeyboardmanager) +[![Issue Stats](http://issuestats.com/github/hackiftekhar/iqkeyboardmanager/badge/issue?style=flat)](http://issuestats.com/github/hackiftekhar/iqkeyboardmanager) + +1) `**CODELESS**, Zero Lines Of Code` 2) `Works Automatically` @@ -21,6 +34,7 @@ Often while developing an app, We ran into an issues where the iPhone keyboard s `IQKeyboardManager` works on all orientations, and with the toolbar. There are also nice optional features allowing you to customize the distance from the text field, add the next/previous done button as a keyboard UIToolbar, play sounds when the user navigations through the form and more. + ## Screenshot [![IQKeyboardManager](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/IQKeyboardManagerScreenshot.png)](http://youtu.be/6nhLw6hju2A) [![Settings](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/IQKeyboardManagerSettings.png)](http://youtu.be/6nhLw6hju2A) @@ -30,78 +44,79 @@ Often while developing an app, We ran into an issues where the iPhone keyboard s ## Video -IQKeyboardManager Demo Video ## Warning -- **If you're planning to build SDK/library/framework and wants to handle UITextField/UITextView with IQKeyboardManager then you're totally going on wrong way.** I would never suggest to add IQKeyboardManager as dependency/adding/shipping with any third-party library, instead of adding IQKeyboardManager you should implement your custom solution to achieve same result. IQKeyboardManager is totally designed for projects to help developers for their convenience, it's not designed for adding/dependency/shipping with any third-party library, because **doing this could block adoption by other developers for their projects as well(who are not using IQKeyboardManager and implemented their custom solution to handle UITextField/UITextView throught the project).** +- **If you're planning to build SDK/library/framework and wants to handle UITextField/UITextView with IQKeyboardManager then you're totally going on wrong way.** I would never suggest to add IQKeyboardManager as dependency/adding/shipping with any third-party library, instead of adding IQKeyboardManager you should implement your custom solution to achieve same result. IQKeyboardManager is totally designed for projects to help developers for their convenience, it's not designed for adding/dependency/shipping with any third-party library, because **doing this could block adoption by other developers for their projects as well(who are not using IQKeyboardManager and implemented their custom solution to handle UITextField/UITextView thought the project).** - If IQKeybaordManager conflicts with other third-party library, then it's developer responsibility to enable/disable IQKeyboardManager when presenting/dismissing third-party library UI. Third-party libraries are not responsible to handle IQKeyboardManager. ## Requirements +[![Platform iOS](https://img.shields.io/badge/Platform-iOS-blue.svg?style=fla)]() #### IQKeyboardManager:- +[![Objective-c](https://img.shields.io/badge/Language-Objective C-blue.svg?style=flat)](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html) -Minimum iOS Target: iOS 5.0 +Minimum iOS Target: iOS 8.0 -Minimum Xcode Version: Xcode 4.2 +Minimum Xcode Version: Xcode 6.0.1 #### IQKeyboardManagerSwift:- +[![Swift 3.1 compatible](https://img.shields.io/badge/Language-Swift3-blue.svg?style=flat)](https://developer.apple.com/swift) Minimum iOS Target: iOS 8.0 -Minimum Xcode Version: Xcode 6.3 +Minimum Xcode Version: Xcode 8.0 #### Demo Project:- -Minimum Xcode Version: Xcode 6.3 +Minimum Xcode Version: Xcode 8.3.2 Installation ========================== -#### Cocoapod Method:- +#### Installation with Cocoapod:- + +[![CocoaPods](https://img.shields.io/cocoapods/v/IQKeyboardManager.svg)](http://cocoadocs.org/docsets/IQKeyboardManager) + +**Note:-** +- 3.3.7 is the last iOS 7 supported version. ***IQKeyboardManager (Objective-C):-*** IQKeyboardManager is available through [CocoaPods](http://cocoapods.org), to install it simply add the following line to your Podfile: ([#9](https://github.com/hackiftekhar/IQKeyboardManager/issues/9)) -`pod 'IQKeyboardManager'` +*iOS8 and later* `pod 'IQKeyboardManager'` + +*iOS7* `pod 'IQKeyboardManagerSwift', '3.3.7'` ***IQKeyboardManager (Swift):-*** IQKeyboardManagerSwift is available through [CocoaPods](http://cocoapods.org), to install it simply add the following line to your Podfile: ([#236](https://github.com/hackiftekhar/IQKeyboardManager/issues/236)) -`pod 'IQKeyboardManagerSwift'` - -In AppDelegate.swift, just import IQKeyboardManagerSwift framework and enable IQKeyboardManager. - -``` -import IQKeyboardManagerSwift +*Swift 3.1 (Xcode 8.0)* -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - - var window: UIWindow? +`pod 'IQKeyboardManagerSwift'` - func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { +*Or* - IQKeyboardManager.sharedManager().enable = true +`pod 'IQKeyboardManagerSwift', '4.0.10'` - return true - } -} -``` +*Swift 3.1 (Xcode 8.3)* `pod 'IQKeyboardManagerSwift', '4.0.10'` +*Swift 3.0(3.0.2) (Xcode 8.2)* `pod 'IQKeyboardManagerSwift', '4.0.8'` +*Swift 2.2 or 2.3 (Xcode 7.3)* `pod 'IQKeyboardManagerSwift', '4.0.5'` -#### Source Code Method:- +*Swift 2.1.1 (Xcode 7.2)* `pod 'IQKeyboardManagerSwift', '4.0.0'` -***IQKeyboardManager (Objective-C):-*** Just ***drag and drop*** `IQKeyBoardManager` directory from demo project to your project. That's it. +*Swift 2.0 (Xcode 7.0)* `pod 'IQKeyboardManagerSwift', '3.3.3.1'` -***IQKeyboardManager (Swift):-*** ***Drag and drop*** `IQKeyBoardManagerSwift` directory from demo project to your project +In AppDelegate.swift, just import IQKeyboardManagerSwift framework and enable IQKeyboardManager. -In AppDelegate.swift, just enable IQKeyboardManager. +```swift +import IQKeyboardManagerSwift -``` @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { @@ -109,324 +124,83 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { - IQKeyboardManager.sharedManager().enable = true + IQKeyboardManager.sharedManager().enable = true - return true + return true } } ``` +#### Installation with Carthage -## Known Issues:- - -![Known Issue 1](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/IQKeyboardManagerKnownIssue1.png) - -####1) Keyboard does not appear in iOS Simulator ([#62](https://github.com/hackiftekhar/IQKeyboardManager/issues/62), [#72](https://github.com/hackiftekhar/IQKeyboardManager/issues/72), [#75](https://github.com/hackiftekhar/IQKeyboardManager/issues/75), [#90](https://github.com/hackiftekhar/IQKeyboardManager/issues/90), [#100](https://github.com/hackiftekhar/IQKeyboardManager/issues/100)) - -If keyboard does not appear in iOS Simulator and only toolbar is appearing over it (if enableAutoToolbar = YES), then check this setting - -***Xcode 6:-*** Goto ***iOS Simulator->Menu->Hardware->Keyboard->Connect Hardware Keyboard***, and deselect that. +[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. -***Xcode 5 and earlier:-*** Goto ***iOS Simulator->Menu->Hardware->Simulate Hardware Keyboard***, and deselect that. - -####2) setEnable = NO doesn't disable automatic UIToolbar ([#117](https://github.com/hackiftekhar/IQKeyboardManager/issues/117), [#136](https://github.com/hackiftekhar/IQKeyboardManager/issues/136), [#147](https://github.com/hackiftekhar/IQKeyboardManager/issues/147)) +You can install Carthage with [Homebrew](http://brew.sh/) using the following command: -If you set ***[[IQKeyboardManager sharedManager] setEnable:NO]*** and still automatic toolbar appears on textFields? Probably you haven't heard about ***@property enableAutoToolbar***. - -***@property enable :*** It enable/disable managing distance between keyboard and textField, and doesn't affect autoToolbar feature. - -***@property enableAutoToolbar :*** It enable/disable automatic creation of toolbar, please set enableAutoToolbar to NO if you don't want to add automatic toolbar. - -####3) Not working when pinning textfield from TopLayoutguide ([#124](https://github.com/hackiftekhar/IQKeyboardManager/issues/124), [#137](https://github.com/hackiftekhar/IQKeyboardManager/issues/137), [#160](https://github.com/hackiftekhar/IQKeyboardManager/issues/160), [#206](https://github.com/hackiftekhar/IQKeyboardManager/issues/206)) - -Now IQKeyboardManager can work with topLayoutConstraint and bottomLayoutConstraint with a bit of manual management. Please check below ***Manual Management->Working with TopLayoutGuide and BottomLayoutGuide*** section. - -## Known Issues (Swift):- - -####1) Manually enable IQKeyboardManager Swift Version. - -From Swift 1.2, compiler no longer allows to override `class func load()` method, so you need to manually enable IQKeyboardManager using below line of code in AppDelegate. - -``` - IQKeyboardManager.sharedManager().enable = true +```bash +$ brew update +$ brew install carthage ``` +To integrate `IQKeyboardManger` or `IQKeyboardManagerSwift` into your Xcode project using Carthage, specify it in your `Cartfile`: -Manual Management:- ---- - -#### UINavigationBar:- - - If you don't want to hide the default UINavigationBar of UINavigationController when keyboardManager slides up the view, then just change the UIView class to UIScrollView from the storyboard or xib.([#21](https://github.com/hackiftekhar/IQKeyboardManager/issues/21), [#24](https://github.com/hackiftekhar/IQKeyboardManager/issues/24)) - -![image](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/UINavigationBarExample.jpg) - - - If you are not using storyboard or xib and creating your view programmatically. Then you need to override '-(void)loadView' method of UIViewController, and need to set an UIScrollView instance to self.view. - - -(void)loadView - { - UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.view = scrollView; - } - -#### Working with TopLayoutGuide and BottomLayoutGuide:- - - Technically IQKeyboardManager moves upwards/downwards of currently presentedViewController's view. So if you're pinning your UITextfield/UITextView with TopLayoutGuide/BottomLayoutGuide then you're saying **Keep x distance from screen top(I don't care about where is self.view)**'. In this case your view is moved upwards but textField remains at same position and keeping x distance from screen top. - - To fix it, just let IQKeyboardManager know the constraint which is pinned with **TopLayoutGuide/BottomLayoutGuide**, just map **TopLayoutGuide/BottomLayoutGuide** constraint with **IQLayoutGuideConstraint**. Here is the screenshot:- -![image](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/TopLayoutGuideDirectMapping.jpg) - - If your textFields are inside any UIView and your UIView is pinned with **TopLayoutGuide/BotomLayoutGuide** then also you can map **TopLayoutGuide/BottomLayoutGuide** constraint with **IQLayoutGuideConstraint**. here are the screenshots:- -![image](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/TopLayoutGuideIndirectMapping.jpg) -![image](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/BottomLayoutGuideIndirectMapping.jpg) - -#### Disable for a ViewController:- - - If you would like to disable `IQKeyboardManager` for a particular ViewController then register ViewController with `-(void)disableInViewControllerClass:(Class)disabledClass` method in AppDelegate.([#117](https://github.com/hackiftekhar/IQKeyboardManager/issues/117),[#139](https://github.com/hackiftekhar/IQKeyboardManager/issues/139)) - -``` -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - [[IQKeyboardManager sharedManager] disableInViewControllerClass:[ViewController class]]; - return YES; -} +```ogdl +github "hackiftekhar/IQKeyboardManager" ``` -#### Disable toolbar for a ViewController:- +Run `carthage` to build the frameworks and drag the appropriate framework (`IQKeyboardManager.framework` or `IQKeyboardManagerSwift.framework`) into your Xcode project according to your need. Make sure to add only one framework and not both. -If you would like to disable `Auto Toolbar` for a particular ViewController then register ViewController with `-(void)disableToolbarInViewControllerClass:(Class)disabledClass` method in AppDelegate. -``` -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - [[IQKeyboardManager sharedManager] disableToolbarInViewControllerClass:[ViewController class]]; - return YES; -} -``` +#### Installation with Source Code:- -#### Considering Previous/Next buttons for textField inside customViews:- +[![Github tag](https://img.shields.io/github/tag/hackiftekhar/iqkeyboardmanager.svg)]() -If your textFields are on different customView and do not show previous/next to navigate between textField. Then you should create a SpecialView subclass of UIView, then put all customView inside SpecialView, then register SpecialView class using `-(void)considerToolbarPreviousNextInViewClass:(Class)toolbarPreviousNextConsideredClass` method in AppDelegate.([#154](https://github.com/hackiftekhar/IQKeyboardManager/issues/154), [#179](https://github.com/hackiftekhar/IQKeyboardManager/issues/179)) -``` -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - [[IQKeyboardManager sharedManager] considerToolbarPreviousNextInViewClass:[SpecialView class]]; - return YES; -} -``` -#### Keyboard Return Key Handling:- - If you would like to implement keyboard **Return Key** as **Next/Done** button, then you can use **IQKeyboardReturnKeyHandler**.([#38](https://github.com/hackiftekhar/IQKeyboardManager/issues/38), [#63](https://github.com/hackiftekhar/IQKeyboardManager/issues/63)) - - 1) Create an instance variable of `IQKeyboardReturnKeyHandler` and instantiate it in `viewDidLoad` with ViewController object like this:- - -``` -@implementation ViewController -{ - IQKeyboardReturnKeyHandler *returnKeyHandler; -} +***IQKeyboardManager (Objective-C):-*** Just ***drag and drop*** `IQKeyboardManager` directory from demo project to your project. That's it. -- (void)viewDidLoad -{ - [super viewDidLoad]; - - returnKeyHandler = [[IQKeyboardReturnKeyHandler alloc] initWithViewController:self]; -} -``` - It assign all the responderView delegates to self, and change keybord Return Key to Next key. - -2) set instance variable to nil in `dealloc` method. - -``` --(void)dealloc -{ - returnKeyHandler = nil; -} -``` - - -#### UIToolbar(IQToolbar):- - -1) If you don't want to add automatic toolbar over keyboard for a specific textField then you should add a UIView as it's toolbar like this:-([#89](https://github.com/hackiftekhar/IQKeyboardManager/issues/89)) -``` -textField.inputAccessoryView = [[UIView alloc] init]; -``` - -2) If you need your own control over the previous/next/done button then you should use the UIView category methods to add toolbar over your textField. The UIView category methods are defined in `IQUIView+IQKeyboardToolbar.h` file. You can use them like this:-([#40](https://github.com/hackiftekhar/IQKeyboardManager/issues/40)) -``` --(void)viewDidLoad -{ - [super viewDidLoad]; - - //Adding done button for textField1 - [textField1 addDoneOnKeyboardWithTarget:self action:@selector(doneAction:)]; - - //Adding previous/next/done button for textField2 - [textField2 addPreviousNextDoneOnKeyboardWithTarget:self previousAction:@selector(previousAction:) nextAction:@selector(nextAction:) doneAction:@selector(doneAction:)]; - - //Adding cancel/done button for textField3 - [textField3 addCancelDoneOnKeyboardWithTarget:self cancelAction:@selector(cancelAction:) doneAction:@selector(doneAction:)]; -} - -/*! previousAction. */ --(void)previousAction:(id)button -{ - //previousAction -} +***IQKeyboardManager (Swift):-*** ***Drag and drop*** `IQKeyboardManagerSwift` directory from demo project to your project -/*! nextAction. */ --(void)nextAction:(id)button -{ - //nextAction -} - -/*! doneAction. */ --(void)doneAction:(UIBarButtonItem*)barButton -{ - //doneAction -} - -/*! cancelAction. */ --(void)cancelAction:(UIBarButtonItem*)barButton -{ - //cancelAction -} - -``` +In AppDelegate.swift, just enable IQKeyboardManager. -#### Doing custom work on textField with returning NO in `textFieldShouldBeginEditing:` delegate:- +```swift +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { -Generally if developer need to perform some custom task on a particular textField click, then usually developer write their custom code inside ***textFieldShouldBeginEditing:*** and returning NO for that textField. But if you are using IQKeyboardManager, then IQKeyboardManager also asks textField to recognize it can become first responder or not using ***canBecomeFirstResponder*** in `IQUIView+Hierarchy` category, and textField asks it's delegate to respond from `textFieldShouldBeginEditing:`, so this method is called for each textField everytime when a textField becomeFirstResponder. Unintentionally custom code runs multiple times even when we do not touch the textField to become it as first responder. To overcome this situation please use ***isAskingCanBecomeFirstResponder*** BOOL property to check that the delegate is called by IQKeyboardManager or not. ([#88](https://github.com/hackiftekhar/IQKeyboardManager/issues/88)) + var window: UIWindow? -1) You may need to import `IQUIView+Hierarchy` category -``` -#import "IQUIView+Hierarchy.h" -``` + func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { -2) check for ***isAskingCanBecomeFirstResponder*** in `textFieldShouldBeginEditing:` delegate. + IQKeyboardManager.sharedManager().enable = true -``` --(BOOL)textFieldShouldBeginEditing:(UITextField *)textField -{ - if (textField == customWorkTextField) - { - if (textField.isAskingCanBecomeFirstResponder == NO) - { - //Do your work on tapping textField. - [[[UIAlertView alloc] initWithTitle:@"IQKeyboardManager" message:@"Do your custom work here" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show]; - } - - return NO; + return true } - else return YES; } ``` -## Control Flow Diagram -[![IQKeyboardManager CFD](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/IQKeyboardManagerCFD.jpg)](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/IQKeyboardManagerCFD.jpg) - - -##Properties and functions usage:- - - -####UIKeyboard handling - -***+(instancetype)sharedManager :*** -Returns the default singleton instance. - -***@property BOOL enable :*** -Use this to enable/disable managing distance between keyboard & textField/textView). - -***@property CGFloat keyboardDistanceFromTextField :*** -Set Distance between keyboard & textField. Can't be less than zero. Default is 10. - -***@property BOOL preventShowingBottomBlankSpace :*** -Prevent to show bottom blanck area when keyboard slide up the view. Default is YES. ([#93](https://github.com/hackiftekhar/IQKeyboardManager/issues/93)). - -####IQToolbar handling - -***@property BOOL enableAutoToolbar :*** -Enable autoToolbar behaviour. If It is set to NO. You have to manually create UIToolbar for keyboard. Default is YES. - -***@property IQAutoToolbarManageBehaviour toolbarManageBehaviour :*** -Setting toolbar behaviour to IQAutoToolbarBySubviews to manage previous/next according to UITextField's hierarchy in it's SuperView. Set it to IQAutoToolbarByTag to manage previous/next according to UITextField's tag property in increasing order. Default is IQAutoToolbarBySubviews. - -***@property BOOL shouldToolbarUsesTextFieldTintColor :*** -If YES, then uses textField's tintColor property for IQToolbar, otherwise tintColor is black. Default is NO. ([#27](https://github.com/hackiftekhar/IQKeyboardManager/issues/27)) - -***@property BOOL shouldShowTextFieldPlaceholder :*** -If YES, then it add the textField's placeholder text on IQToolbar. Default is YES. ([#27](https://github.com/hackiftekhar/IQKeyboardManager/issues/27)) - -***@property UIFont *placeholderFont :*** -placeholder Font. Default is nil. ([#27](https://github.com/hackiftekhar/IQKeyboardManager/issues/27)) - - -####UITextView handling - -***@property BOOL canAdjustTextView :*** -Giving permission to modify TextView's frame. Adjust textView's frame when it is too big in height. Default is NO. ([#30](https://github.com/hackiftekhar/IQKeyboardManager/issues/30)) - -***@property BOOL shouldFixTextViewClip :*** -Adjust textView's contentInset to fix fix for iOS 7.0.x -([#Stackoverflow](http://stackoverflow.com/questions/18966675/uitextview-in-ios7-clips-the-last-line-of-text-string)). Default is YES. - - -####UIKeyboard Appearance overriding - -***@property BOOL overrideKeyboardAppearance :*** -Override the keyboardAppearance for all textField/textView. Default is NO. - -***@property UIKeyboardAppearance keyboardAppearance :*** -If overrideKeyboardAppearance is YES, then all the textField keyboardAppearance is set using this property. - - -####UITextField/UITextView Resign handling - -***@property BOOL shouldResignOnTouchOutside :*** -Resign textField if touched outside of UITextField/UITextView. ([#14](https://github.com/hackiftekhar/IQKeyboardManager/issues/14)) - -***-(void)resignFirstResponder :*** -Resigns currently first responder field. - -####UISound handling - -***@property BOOL shouldPlayInputClicks :*** -If YES, then it plays inputClick sound on next/previous/done click. Default is NO. +## Known Issues:- -####UIAnimation handling +You can find known issues list [here](https://github.com/hackiftekhar/IQKeyboardManager/blob/master/KNOWN%20ISSUES.md). -***@property BOOL shouldAdoptDefaultKeyboardAnimation :*** -If YES, then uses keyboard default animation curve style to move view, otherwise uses UIViewAnimationOptionCurveEaseOut animation style. Default is YES. +Manual Management:- +--- +You can find some manual management tweaks & examples [here](https://github.com/hackiftekhar/IQKeyboardManager/blob/master/MANUAL%20MANAGEMENT.md). -## Feature:- - 1) Support Device Orientation. - - 2) Enable/Disable Keyboard Manager when needed with `enable` boolean. +## Flow Diagram +[![IQKeyboardManager CFD](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/master/Screenshot/IQKeyboardManagerFlowDiagram.jpg)](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/master/Screenshot/IQKeyboardManagerFlowDiagram.jpg) - 3) Easiest integration. +If you would like to see detailed Flow diagram then see [here](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/IQKeyboardManagerCFD.jpg). - 4) AutoHandle UIToolbar as a accessoryInputView of textField/textView with `enableAutoToolbar` boolean. - 5) AutoHandle UIToolbar can be manged by superview's hierarchy or can be managed by tag property of textField/textView using `toolbarManageBehaviour` enum. - 6) `UIView` Category for easily adding Next/Previous and Done button as Keyboard UIToolBar, even automatic with `enableAutoToolbar` boolean. +## Properties and functions usage:- - 7) Enable/Disable Next/Previous buttons with Category methods, even automatic with `enableAutoToolbar` boolean. +You can find some documentation about properties, methods and their uses [here](https://github.com/hackiftekhar/IQKeyboardManager/blob/master/PROPERTIES%20%26%20FUNCTIONS.md). - 8) Set keyboard distance from textFields using `keyboardDistanceFromTextField`. - - 9) Resign keyboard on touching outside using `shouldResignOnTouchOutside`. - - 10) Manage UITextView's frame when it's hight is too large to fit on screen with `canAdjustTextView` boolean. - - 11) Can manage `UITextField/UITextView` inside `UITableView/UIScrollView`. - - 12) Can play input sound on Next/Previous/Done click. LICENSE --- @@ -439,6 +213,3 @@ Any contribution is more than welcome! You can contribute through pull requests Author --- If you wish to contact me, email at: hack.iftekhar@gmail.com - -[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/hackiftekhar/iqkeyboardmanager/trend.png)](https://bitdeli.com/free "Bitdeli Badge") - diff --git a/FoodbLog/Pods/Manifest.lock b/FoodbLog/Pods/Manifest.lock index 5eed667..463da6c 100644 --- a/FoodbLog/Pods/Manifest.lock +++ b/FoodbLog/Pods/Manifest.lock @@ -25,12 +25,12 @@ PODS: - ChameleonFramework/Default (= 2.0.4) - ChameleonFramework/Default (2.0.4) - FlatUIKit (1.6.2) - - IQKeyboardManager (3.3.2) + - IQKeyboardManager (4.0.11) - Parse (1.9.0): - Bolts/Tasks (>= 1.3.0) - - ParseUI (1.1.6): - - Bolts/Tasks (~> 1.2) - - Parse (~> 1.8) + - ParseUI (1.2.0): + - Bolts/Tasks (~> 1.3) + - Parse (~> 1.9) - SDWebImage (3.7.3): - SDWebImage/Core (= 3.7.3) - SDWebImage/Core (3.7.3) @@ -40,9 +40,9 @@ DEPENDENCIES: - AFNetworking (~> 2.6) - ChameleonFramework - FlatUIKit - - IQKeyboardManager (~> 3.3) + - IQKeyboardManager (= 4.0.11) - Parse (~> 1.9) - - ParseUI (~> 1.1) + - ParseUI (~> 1.2) - SDWebImage (~> 3.7) - Unirest (~> 1.1.4) @@ -63,12 +63,12 @@ SPEC CHECKSUMS: Bolts: 805a4a87413e49d4a0c2b7d469084cbc46b09342 ChameleonFramework: 5abe69b1f2a6cc79c3c435fcd9d3d855748225ee FlatUIKit: 1b41f0d4952ce8d970d8479ce79df54a960242c4 - IQKeyboardManager: d863eb0bca424d1f6dad6bdd1f856af52664add8 + IQKeyboardManager: 83eae5318483a34eb2069ef413d195b97605232e Parse: 712efbc476d4f47b0f96b70db7e53101575753aa - ParseUI: a5e6d48f2e4fcc61f78c4f31a3252c0e7c0b2d79 + ParseUI: 2b37a0bc692a3e7666cf0c37b5521dfddd74a1af SDWebImage: 1d2b1a1efda1ade1b00b6f8498865f8ddedc8a84 Unirest: 5e4d93eaf32463bf619a4ecd3bbc8c32acf21eac -PODFILE CHECKSUM: 03d171a15bf65394dfd97b11c36be192765b3f6e +PODFILE CHECKSUM: 09b53eef3412218e3591c5319fce8435cc752a95 COCOAPODS: 1.11.3 diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h index 71b3642..9abb31e 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h @@ -23,39 +23,39 @@ #import -PFUI_ASSUME_NONNULL_BEGIN +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 -/*! - @abstract A simple lazy-loaded label for the collection view cell. +/** + A simple lazy-loaded label for the collection view cell. */ @property (nonatomic, strong, readonly) UILabel *textLabel; -/*! - @abstract The lazy-loaded imageView of the collection view cell. +/** + The lazy-loaded imageView of the collection view cell. @see PFImageView */ @property (nonatomic, strong, readonly) PFImageView *imageView; -/*! - @abstract This method should update all the relevant information inside a subclass of `PFCollectionViewCell`. +/** + This method should update all the relevant information inside a subclass of `PFCollectionViewCell`. - @discussion This method is automatically called by whenever the cell + 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:(PFUI_NULLABLE PFObject *)object; +- (void)updateFromObject:(nullable PFObject *)object; @end -PFUI_ASSUME_NONNULL_END +NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h index eb80487..88e0e85 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h @@ -24,45 +24,45 @@ #import #import -PFUI_ASSUME_NONNULL_BEGIN +NS_ASSUME_NONNULL_BEGIN -/*! - An enum that represents states of the PFPurchaseTableViewCell. - @see PFPurchaseTableViewCell +/** + An enum that represents states of the `PFPurchaseTableViewCell`. + @see `PFPurchaseTableViewCell` */ typedef NS_ENUM(uint8_t, PFPurchaseTableViewCellState) { - /*! Normal state of the cell. */ + /** Normal state of the cell. */ PFPurchaseTableViewCellStateNormal = 0, - /*! Downloading state of the cell. */ + /** Downloading state of the cell. */ PFPurchaseTableViewCellStateDownloading, - /*! State of the cell, when the product was downloaded. */ + /** State of the cell, when the product was downloaded. */ PFPurchaseTableViewCellStateDownloaded }; -/*! - `PFPurchaseTableViewCell` is a subclass that is used to show - products in a . +/** + `PFPurchaseTableViewCell` is a subclass `PFTableViewCell` that is used to show + products in a `PFProductTableViewController`. - @see PFProductTableViewController + @see `PFProductTableViewController` */ @interface PFPurchaseTableViewCell : PFTableViewCell -/*! - @abstract State of the cell. - @see PFPurchaseTableViewCellState +/** + State of the cell. + @see `PFPurchaseTableViewCellState` */ @property (nonatomic, assign) PFPurchaseTableViewCellState state; -/*! - @abstract Label where price of the product is displayed. +/** + Label where price of the product is displayed. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UILabel *priceLabel; +@property (nullable, nonatomic, strong, readonly) UILabel *priceLabel; -/*! - @abstract Progress view that is shown, when the product is downloading. +/** + Progress view that is shown, when the product is downloading. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIProgressView *progressView; +@property (nullable, nonatomic, strong, readonly) UIProgressView *progressView; @end -PFUI_ASSUME_NONNULL_END +NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.m index 4a7968b..6ff164c 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.m +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.m @@ -125,7 +125,7 @@ - (void)setState:(PFPurchaseTableViewCellState)state { { 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 = NSLocalizedString(@"DOWNLOADING", @"DOWNLOADING"); + NSString *downloadingText = PFLocalizedString(@"DOWNLOADING", @"DOWNLOADING"); self.priceLabel.text = [NSString stringWithFormat:@" %@ ", downloadingText]; self.priceLabel.textColor = [UIColor whiteColor]; self.priceLabel.shadowColor = [UIColor blackColor]; @@ -136,7 +136,7 @@ - (void)setState:(PFPurchaseTableViewCellState)state { case PFPurchaseTableViewCellStateDownloaded: { self.detailTextLabel.numberOfLines = 2; - NSString *installedText = NSLocalizedString(@"INSTALLED", @"INSTALLED"); + NSString *installedText = PFLocalizedString(@"INSTALLED", @"INSTALLED"); self.priceLabel.text = [NSString stringWithFormat:@" %@ ", installedText]; self.priceLabel.textColor = [UIColor whiteColor]; self.priceLabel.shadowColor = [UIColor blackColor]; diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h index 9238d99..fe62c78 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h @@ -24,23 +24,23 @@ #import #import -PFUI_ASSUME_NONNULL_BEGIN +NS_ASSUME_NONNULL_BEGIN -/*! +/** The `PFTableViewCell` class represents a table view cell which can download and display remote images stored on Parse. - When used in a - downloading and displaying of the remote images - are automatically managed by the . + When used in a `PFQueryTableViewController` - downloading and + displaying of the remote images are automatically managed by the controller. */ @interface PFTableViewCell : UITableViewCell -/*! - @abstract The imageView of the table view cell. +/** + The imageView of the table view cell. - @see PFImageView + @see `PFImageView` */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFImageView *imageView; +@property (nullable, nonatomic, strong, readonly) PFImageView *imageView; @end -PFUI_ASSUME_NONNULL_END +NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h index 91f15fa..4400449 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h @@ -21,7 +21,7 @@ #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 . diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h index fea50a7..e1cd474 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h @@ -23,7 +23,7 @@ #import -/*! +/** The `PFActivityIndicatorTableViewCell` class represents a table view cell that displays UIActivityIndicatorView as the accessory view. */ diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.h index 3478c95..f6742b3 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.h @@ -21,14 +21,44 @@ #import -@interface PFUIAlertView : UIAlertView +NS_ASSUME_NONNULL_BEGIN -+ (void)showAlertViewWithTitle:(NSString *)title - error:(NSError *)error; -+ (void)showAlertViewWithTitle:(NSString *)title - message:(NSString *)message; -+ (void)showAlertViewWithTitle:(NSString *)title - message:(NSString *)message - cancelButtonTitle:(NSString *)cancelButtonTitle; +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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.m index e958829..155f70d 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.m +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.m @@ -23,34 +23,191 @@ #import "PFLocalization.h" +@interface PFUIAlertView () + +@property (nonatomic, copy) PFUIAlertViewCompletion completion; + +@end + @implementation PFUIAlertView -+ (void)showAlertViewWithTitle:(NSString *)title error:(NSError *)error { +///-------------------------------------- +#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]; + message = [error.userInfo[@"originalError"] localizedDescription]; } if (!message) { - message = [error localizedDescription]; + message = [error localizedDescription]; } - [self showAlertViewWithTitle:title message:message]; + [self presentAlertInViewController:viewController withTitle:title message:message]; } -+ (void)showAlertViewWithTitle:(NSString *)title message:(NSString *)message { - [self showAlertViewWithTitle:title - message:message - cancelButtonTitle:NSLocalizedString(@"OK", @"OK")]; ++ (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]; } -+ (void)showAlertViewWithTitle:(NSString *)title - message:(NSString *)message - cancelButtonTitle:(NSString *)cancelButtonTitle { - UIAlertView *alertView = [[self alloc] initWithTitle:title - message:message - delegate:nil - cancelButtonTitle:cancelButtonTitle - otherButtonTitles:nil]; - [alertView show]; +#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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.h index 36c2337..38c184e 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.h @@ -21,7 +21,7 @@ #import -/*! +/** A memory cache for UIImage, based on NSCache */ @interface PFImageCache : NSCache diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/PFLocalization.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/PFLocalization.h index 8477d8f..7c0258b 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/PFLocalization.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/PFLocalization.h @@ -22,8 +22,7 @@ #ifndef ParseUI_PFLocalization_h #define ParseUI_PFLocalization_h -#undef NSLocalizedString -#define NSLocalizedString(key, comment) \ +#define PFLocalizedString(key, comment) \ [[NSBundle bundleForClass:[self class]] localizedStringForKey:key value:nil table:@"ParseUI"] #endif diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m index f741d35..76d2191 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m @@ -57,7 +57,7 @@ - (instancetype)initWithConfiguration:(PFActionButtonConfiguration *)configurati if (!self) return nil; _buttonStyle = buttonStyle; - _configuration = configuration; + configuration = configuration; self.backgroundColor = [UIColor clearColor]; self.titleLabel.font = [UIFont systemFontOfSize:16.0f]; diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.h index 02b2a90..2663181 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.h @@ -21,7 +21,7 @@ #import -/*! +/** A loading view that is used to show users that data is being loaded before any data is available. */ @interface PFLoadingView : UIView diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.m index a9b7688..0e511e3 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.m +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.m @@ -43,7 +43,7 @@ - (instancetype)initWithFrame:(CGRect)frame { [self addSubview:_activityIndicator]; _loadingLabel = [[UILabel alloc] initWithFrame:CGRectZero]; - _loadingLabel.text = NSLocalizedString(@"Loading...", @"Loading message of PFQueryTableViewController"); + _loadingLabel.text = PFLocalizedString(@"Loading...", @"Loading message of PFQueryTableViewController"); _loadingLabel.backgroundColor = [UIColor clearColor]; _loadingLabel.shadowOffset = CGSizeMake(0.0f, 1.0f); _loadingLabel.shadowColor = [UIColor whiteColor]; diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h index ee71b02..a2bce3d 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h @@ -23,33 +23,33 @@ #import -PFUI_ASSUME_NONNULL_BEGIN +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. */ + /** No fields. */ PFLogInFieldsNone = 0, - /*! Username and password fields. */ + /** Username and password fields. */ PFLogInFieldsUsernameAndPassword = 1 << 0, - /*! Forgot password button. */ + /** Forgot password button. */ PFLogInFieldsPasswordForgotten = 1 << 1, - /*! Login button. */ + /** Login button. */ PFLogInFieldsLogInButton = 1 << 2, - /*! Button to login with Facebook. */ + /** Button to login with Facebook. */ PFLogInFieldsFacebook = 1 << 3, - /*! Button to login with Twitter. */ + /** Button to login with Twitter. */ PFLogInFieldsTwitter = 1 << 4, - /*! Signup Button. */ + /** Signup Button. */ PFLogInFieldsSignUpButton = 1 << 5, - /*! Dismiss Button. */ + /** Dismiss Button. */ PFLogInFieldsDismissButton = 1 << 6, - /*! Default value. Combines Username, Password, Login, Signup, Forgot Password and Dismiss buttons. */ + /** Default value. Combines Username, Password, Login, Signup, Forgot Password and Dismiss buttons. */ PFLogInFieldsDefault = (PFLogInFieldsUsernameAndPassword | PFLogInFieldsLogInButton | PFLogInFieldsSignUpButton | @@ -57,10 +57,24 @@ typedef NS_OPTIONS(NSInteger, PFLogInFields) { 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 PFLogInViewTwitterButtonAccessibilityIdentifier; +extern NSString *const PFLogInViewFacebookButtonAccessibilityIdentifier; +extern NSString *const PFLogInViewDismissButtonAccessibilityIdentifier; + @class PFTextField; -/*! - The `PFLogInView` class provides a standard log in interface for authenticating a . +/** + The `PFLogInView` class provides a standard log in interface for authenticating a `PFUser`. */ @interface PFLogInView : UIScrollView @@ -68,39 +82,39 @@ typedef NS_OPTIONS(NSInteger, PFLogInFields) { /// @name Creating Log In View ///-------------------------------------- -/*! - @abstract Initializes the view with the specified log in elements. +/** + Initializes the view with the specified log in elements. @param fields A bitmask specifying the log in elements which are enabled in the view - @returns An initialized `PFLogInView` object or `nil` if the object couldn't be created. + @return An initialized `PFLogInView` object or `nil` if the object couldn't be created. @see PFLogInFields */ - (instancetype)initWithFields:(PFLogInFields)fields; -/*! - @abstract The view controller that will present this view. +/** + The view controller that will present this view. - @discussion Used to lay out elements correctly when the presenting view controller has translucent elements. + Used to lay out elements correctly when the presenting view controller has translucent elements. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, weak) UIViewController *presentingViewController; +@property (nullable, nonatomic, weak) UIViewController *presentingViewController; ///-------------------------------------- /// @name Customizing the Logo ///-------------------------------------- /// The logo. By default, it is the Parse logo. -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong) UIView *logo; +@property (nullable, nonatomic, strong) UIView *logo; ///-------------------------------------- /// @name Configure Username Behaviour ///-------------------------------------- -/*! - @abstract If email should be used to log in, instead of username +/** + If email should be used to log in, instead of username - @discussion By default, this is set to `NO`. + By default, this is set to `NO`. */ @property (nonatomic, assign) BOOL emailAsUsername; @@ -108,65 +122,65 @@ typedef NS_OPTIONS(NSInteger, PFLogInFields) { /// @name Log In Elements ///-------------------------------------- -/*! - @abstract The bitmask which specifies the enabled log in elements in the view. +/** + The bitmask which specifies the enabled log in elements in the view. */ @property (nonatomic, assign, readonly) PFLogInFields fields; -/*! - @abstract The username text field. It is `nil` if the element is not enabled. +/** + The username text field. It is `nil` if the element is not enabled. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFTextField *usernameField; +@property (nullable, nonatomic, strong, readonly) PFTextField *usernameField; -/*! - @abstract The password text field. It is `nil` if the element is not enabled. +/** + The password text field. It is `nil` if the element is not enabled. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFTextField *passwordField; +@property (nullable, nonatomic, strong, readonly) PFTextField *passwordField; -/*! - @abstract The password forgotten button. It is `nil` if the element is not enabled. +/** + The password forgotten button. It is `nil` if the element is not enabled. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *passwordForgottenButton; +@property (nullable, nonatomic, strong, readonly) UIButton *passwordForgottenButton; -/*! - @abstract The log in button. It is `nil` if the element is not enabled. +/** + The log in button. It is `nil` if the element is not enabled. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *logInButton; +@property (nullable, nonatomic, strong, readonly) UIButton *logInButton; -/*! - @abstract The Facebook button. It is `nil` if the element is not enabled. +/** + The Facebook button. It is `nil` if the element is not enabled. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *facebookButton; +@property (nullable, nonatomic, strong, readonly) UIButton *facebookButton; -/*! - @abstract The Twitter button. It is `nil` if the element is not enabled. +/** + The Twitter button. It is `nil` if the element is not enabled. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *twitterButton; +@property (nullable, nonatomic, strong, readonly) UIButton *twitterButton; -/*! - @abstract The sign up button. It is `nil` if the element is not enabled. +/** + The sign up button. It is `nil` if the element is not enabled. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *signUpButton; +@property (nullable, nonatomic, strong, readonly) UIButton *signUpButton; -/*! - @abstract It is `nil` if the element is not enabled. +/** + It is `nil` if the element is not enabled. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *dismissButton; +@property (nullable, nonatomic, strong, readonly) UIButton *dismissButton; -/*! - @abstract The facebook/twitter login label. +/** + The facebook/twitter login label. @deprecated This property is deprecated and will always be nil. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UILabel *externalLogInLabel __attribute__(PARSE_UI_DEPRECATED("This property is deprecated and will always be nil.")); +@property (nullable, nonatomic, strong, readonly) UILabel *externalLogInLabel __attribute__(PARSE_UI_DEPRECATED("This property is deprecated and will always be nil.")); -/*! - @abstract The sign up label. +/** + The sign up label. @deprecated This property is deprecated and will always be nil. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UILabel *signUpLabel __attribute__(PARSE_UI_DEPRECATED("This property is deprecated and will always be nil.")); +@property (nullable, nonatomic, strong, readonly) UILabel *signUpLabel __attribute__(PARSE_UI_DEPRECATED("This property is deprecated and will always be nil.")); @end -PFUI_ASSUME_NONNULL_END +NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.m index 4aed98d..4dfbc5c 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.m +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.m @@ -35,6 +35,19 @@ static NSString *const PFLogInViewDefaultFacebookButtonImageName = @"facebook_icon.png"; static NSString *const PFLogInViewDefaultTwitterButtonImageName = @"twitter_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 PFLogInViewTwitterButtonAccessibilityIdentifier = @"PFLogInViewTwitterButtonAccessibilityIdentifier"; +NSString *const PFLogInViewFacebookButtonAccessibilityIdentifier = @"PFLogInViewFacebookButtonAccessibilityIdentifier"; +NSString *const PFLogInViewDismissButtonAccessibilityIdentifier = @"PFLogInViewDismissButtonAccessibilityIdentifier"; + @implementation PFLogInView ///-------------------------------------- @@ -44,7 +57,7 @@ @implementation PFLogInView + (PFActionButtonConfiguration *)_defaultSignUpButtonConfiguration { PFActionButtonConfiguration *configuration = [[PFActionButtonConfiguration alloc] initWithBackgroundImageColor:[PFColor signupButtonBackgroundColor] image:nil]; - NSString *title = NSLocalizedString(@"Sign Up", @"Sign Up"); + NSString *title = PFLocalizedString(@"Sign Up", @"Sign Up"); [configuration setTitle:title forButtonStyle:PFActionButtonStyleNormal]; [configuration setTitle:title forButtonStyle:PFActionButtonStyleWide]; @@ -55,9 +68,9 @@ + (PFActionButtonConfiguration *)_defaultFacebookButtonConfiguration { PFActionButtonConfiguration *configuration = [[PFActionButtonConfiguration alloc] initWithBackgroundImageColor:[PFColor facebookButtonBackgroundColor] image:[PFImage imageNamed:PFLogInViewDefaultFacebookButtonImageName]]; - [configuration setTitle:NSLocalizedString(@"Facebook", @"Facebook") + [configuration setTitle:PFLocalizedString(@"Facebook", @"Facebook") forButtonStyle:PFActionButtonStyleNormal]; - [configuration setTitle:NSLocalizedString(@"Log In with Facebook", @"Log In with Facebook") + [configuration setTitle:PFLocalizedString(@"Log In with Facebook", @"Log In with Facebook") forButtonStyle:PFActionButtonStyleWide]; @@ -68,9 +81,9 @@ + (PFActionButtonConfiguration *)_defaultTwitterButtonConfiguration { PFActionButtonConfiguration *configuration = [[PFActionButtonConfiguration alloc] initWithBackgroundImageColor:[PFColor twitterButtonBackgroundColor] image:[PFImage imageNamed:PFLogInViewDefaultTwitterButtonImageName]]; - [configuration setTitle:NSLocalizedString(@"Twitter", @"Twitter") + [configuration setTitle:PFLocalizedString(@"Twitter", @"Twitter") forButtonStyle:PFActionButtonStyleNormal]; - [configuration setTitle:NSLocalizedString(@"Log In with Twitter", @"Log In with Twitter") + [configuration setTitle:PFLocalizedString(@"Log In with Twitter", @"Log In with Twitter") forButtonStyle:PFActionButtonStyleWide]; @@ -109,6 +122,7 @@ - (void)_updateAllFields { if (_fields & PFLogInFieldsDismissButton) { if (!_dismissButton) { _dismissButton = [[PFDismissButton alloc] initWithFrame:CGRectZero]; + _dismissButton.accessibilityIdentifier = PFLogInViewDismissButtonAccessibilityIdentifier; [self addSubview:_dismissButton]; } } else { @@ -121,6 +135,7 @@ - (void)_updateAllFields { _usernameField = [[PFTextField alloc] initWithFrame:CGRectZero separatorStyle:(PFTextFieldSeparatorStyleTop | PFTextFieldSeparatorStyleBottom)]; + _usernameField.accessibilityIdentifier = PFLogInViewUsernameFieldAccessibilityIdentifier; _usernameField.autocorrectionType = UITextAutocorrectionTypeNo; _usernameField.autocapitalizationType = UITextAutocapitalizationTypeNone; _usernameField.returnKeyType = UIReturnKeyNext; @@ -131,7 +146,8 @@ - (void)_updateAllFields { if (!_passwordField) { _passwordField = [[PFTextField alloc] initWithFrame:CGRectZero separatorStyle:PFTextFieldSeparatorStyleBottom]; - _passwordField.placeholder = NSLocalizedString(@"Password", @"Password"); + _passwordField.accessibilityIdentifier = PFLogInViewPasswordFieldAccessibilityIdentifier; + _passwordField.placeholder = PFLocalizedString(@"Password", @"Password"); _passwordField.secureTextEntry = YES; _passwordField.autocorrectionType = UITextAutocorrectionTypeNo; _passwordField.autocapitalizationType = UITextAutocapitalizationTypeNone; @@ -150,6 +166,7 @@ - (void)_updateAllFields { if (!_signUpButton) { _signUpButton = [[PFActionButton alloc] initWithConfiguration:[[self class] _defaultSignUpButtonConfiguration] buttonStyle:PFActionButtonStyleNormal]; + _signUpButton.accessibilityIdentifier = PFLogInViewSignUpButtonAccessibilityIdentifier; [self addSubview:_signUpButton]; } } else { @@ -160,7 +177,8 @@ - (void)_updateAllFields { if (_fields & PFLogInFieldsPasswordForgotten) { if (!_passwordForgottenButton) { _passwordForgottenButton = [[PFTextButton alloc] initWithFrame:CGRectZero]; - [_passwordForgottenButton setTitle:NSLocalizedString(@"Forgot Password?", "Forgot Password?") + _passwordForgottenButton.accessibilityIdentifier = PFLogInViewPasswordForgottenButtonAccessibilityIdentifier; + [_passwordForgottenButton setTitle:PFLocalizedString(@"Forgot Password?", "Forgot Password?") forState:UIControlStateNormal]; [self addSubview:_passwordForgottenButton]; } @@ -172,7 +190,8 @@ - (void)_updateAllFields { if (_fields & PFLogInFieldsLogInButton) { if (!_logInButton) { _logInButton = [[PFPrimaryButton alloc] initWithBackgroundImageColor:[PFColor loginButtonBackgroundColor]]; - [_logInButton setTitle:NSLocalizedString(@"Log In", @"Log In") forState:UIControlStateNormal]; + _logInButton.accessibilityIdentifier = PFLogInViewLogInButtonAccessibilityIdentifier; + [_logInButton setTitle:PFLocalizedString(@"Log In", @"Log In") forState:UIControlStateNormal]; [self addSubview:_logInButton]; } } else { @@ -184,6 +203,7 @@ - (void)_updateAllFields { if (!_facebookButton) { _facebookButton = [[PFActionButton alloc] initWithConfiguration:[[self class] _defaultFacebookButtonConfiguration] buttonStyle:PFActionButtonStyleNormal]; + _facebookButton.accessibilityIdentifier = PFLogInViewFacebookButtonAccessibilityIdentifier; [self addSubview:_facebookButton]; } } else { @@ -195,6 +215,7 @@ - (void)_updateAllFields { if (!_twitterButton) { _twitterButton = [[PFActionButton alloc] initWithConfiguration:[[self class] _defaultTwitterButtonConfiguration] buttonStyle:PFActionButtonStyleNormal]; + _twitterButton.accessibilityIdentifier = PFLogInViewTwitterButtonAccessibilityIdentifier; [self addSubview:_twitterButton]; } } else { @@ -475,10 +496,10 @@ - (void)_updateUsernameFieldStyle { NSString *usernamePlaceholder = nil; if (!_emailAsUsername) { keyboardType = UIKeyboardTypeDefault; - usernamePlaceholder = NSLocalizedString(@"Username", @"Username"); + usernamePlaceholder = PFLocalizedString(@"Username", @"Username"); } else { keyboardType = UIKeyboardTypeEmailAddress; - usernamePlaceholder = NSLocalizedString(@"Email", @"Email"); + usernamePlaceholder = PFLocalizedString(@"Email", @"Email"); } _usernameField.placeholder = usernamePlaceholder; diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h index 9df9112..72d4ff3 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h @@ -21,17 +21,19 @@ #import +#import + #import #import -PFUI_ASSUME_NONNULL_BEGIN +NS_ASSUME_NONNULL_BEGIN @class PFSignUpViewController; @class PFUser; @protocol PFLogInViewControllerDelegate; -/*! - The `PFLogInViewController` class presents and manages a standard authentication interface for logging in a . +/** + The `PFLogInViewController` class presents and manages a standard authentication interface for logging in a `PFUser`. */ @interface PFLogInViewController : UIViewController @@ -39,52 +41,52 @@ PFUI_ASSUME_NONNULL_BEGIN /// @name Configuring Log In Elements ///-------------------------------------- -/*! - @abstract A bitmask specifying the log in elements which are enabled in the view. +/** + A bitmask specifying the log in elements which are enabled in the view. @see PFLogInFields */ @property (nonatomic, assign) PFLogInFields fields; -/*! - @abstract The log in view. It contains all the enabled log in elements. +/** + The log in view. It contains all the enabled log in elements. @see PFLogInView */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFLogInView *logInView; +@property (nullable, nonatomic, strong, readonly) PFLogInView *logInView; ///-------------------------------------- /// @name Configuring Log In Behaviors ///-------------------------------------- -/*! - @abstract The delegate that responds to the control events of `PFLogInViewController`. +/** + The delegate that responds to the control events of `PFLogInViewController`. @see PFLogInViewControllerDelegate */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, weak) id delegate; +@property (nullable, nonatomic, weak) id delegate; -/*! - @abstract The facebook permissions that Facebook log in requests for. +/** + The facebook permissions that Facebook log in requests for. - @discussion If unspecified, the default is basic facebook permissions. + If unspecified, the default is basic facebook permissions. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, copy) NSArray *facebookPermissions; +@property (nullable, nonatomic, copy) NSArray *facebookPermissions; -/*! - @abstract The sign up controller if sign up is enabled. +/** + The sign up controller if sign up is enabled. - @discussion Use this to configure the sign up view, and the transition animation to the sign up view. + 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 (PFUI_NULLABLE_PROPERTY nonatomic, strong) PFSignUpViewController *signUpController; +@property (nullable, nonatomic, strong) PFSignUpViewController *signUpController; -/*! - @abstract Whether to prompt for the email as username on the login view. +/** + Whether to prompt for the email as username on the login view. - @discussion If set to `YES`, we'll prompt for the email in the username field. - This property value propagates to the attached . + 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; @@ -95,19 +97,19 @@ PFUI_ASSUME_NONNULL_BEGIN /// @name Notifications ///-------------------------------------- -/*! - @abstract The notification is posted immediately after the log in succeeds. +/** + The notification is posted immediately after the log in succeeds. */ extern NSString *const PFLogInSuccessNotification; -/*! - @abstract The notification is posted immediately after the log in fails. - @discussion If the delegate prevents the log in from starting, the notification is not sent. +/** + 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; -/*! - @abstract The notification is posted immediately after the log in is cancelled. +/** + The notification is posted immediately after the log in is cancelled. */ extern NSString *const PFLogInCancelNotification; @@ -115,8 +117,8 @@ extern NSString *const PFLogInCancelNotification; /// @name PFLogInViewControllerDelegate ///-------------------------------------- -/*! - The `PFLogInViewControllerDelegate` protocol defines methods a delegate of a should implement. +/** + The `PFLogInViewControllerDelegate` protocol defines methods a delegate of a `PFLogInViewController` should implement. All methods of this protocol are optional. */ @protocol PFLogInViewControllerDelegate @@ -127,14 +129,14 @@ extern NSString *const PFLogInCancelNotification; /// @name Customizing Behavior ///-------------------------------------- -/*! - @abstract Sent to the delegate to determine whether the log in request should be submitted to the server. +/** + 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. - @returns A `BOOL` indicating whether the log in should proceed. + @return A `BOOL` indicating whether the log in should proceed. */ - (BOOL)logInViewController:(PFLogInViewController *)logInController shouldBeginLogInWithUsername:(NSString *)username @@ -144,28 +146,27 @@ shouldBeginLogInWithUsername:(NSString *)username /// @name Responding to Actions ///-------------------------------------- -/*! - @abstract Sent to the delegate when a is logged in. +/** + Sent to the delegate when a `PFUser` is logged in. @param logInController The login view controller where login finished. - @param user object that is a result of the login. + @param user `PFUser` object that is a result of the login. */ - (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user; -/*! - @abstract Sent to the delegate when the log in attempt fails. +/** + Sent to the delegate when the log in attempt fails. - @discussion If you implement this method, PFLoginViewController will not automatically show its default + 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:(PFUI_NULLABLE NSError *)error; +- (void)logInViewController:(PFLogInViewController *)logInController didFailToLogInWithError:(nullable NSError *)error; -/*! - @abstract Sent to the delegate when the log in screen is cancelled. +/** + Sent to the delegate when the log in screen is cancelled. @param logInController The login view controller where login was cancelled. */ @@ -173,4 +174,4 @@ shouldBeginLogInWithUsername:(NSString *)username @end -PFUI_ASSUME_NONNULL_END +NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.m index a6dceae..34e9d8b 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.m +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.m @@ -35,7 +35,7 @@ NSString *const PFLogInFailureNotification = @"com.parse.ui.login.failure"; NSString *const PFLogInCancelNotification = @"com.parse.ui.login.cancel"; -/*! +/** This protocol exists so that we can weakly refer to messages to pass to PFFacebookUtils without actually taking a dependency on the symbols. */ @@ -103,6 +103,8 @@ - (void)_commonInit { self.modalPresentationStyle = UIModalPresentationFormSheet; _fields = PFLogInFieldsDefault; + _facebookPermissions = @[ @"public_profile" ]; + if ([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)]) { self.automaticallyAdjustsScrollViewInsets = NO; } @@ -233,17 +235,6 @@ - (BOOL)textFieldShouldReturn:(UITextField *)textField { return YES; } -///-------------------------------------- -#pragma mark - UIAlertViewDelegate -///-------------------------------------- - -- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex { - if (buttonIndex != [alertView cancelButtonIndex]) { - NSString *email = [alertView textFieldAtIndex:0].text; - [self _requestPasswordResetWithEmail:email]; - } -} - ///-------------------------------------- #pragma mark - Private ///-------------------------------------- @@ -289,38 +280,39 @@ - (void)_dismissAction { } - (void)_forgotPasswordAction PF_EXTENSION_UNAVAILABLE("") { - NSString *title = NSLocalizedString(@"Reset Password", @"Forgot password request title in PFLogInViewController"); - NSString *message = NSLocalizedString(@"Please enter the email address for your account.", + 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"); - UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title - message:message - delegate:self - cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel") - otherButtonTitles:NSLocalizedString(@"OK", @"OK"), nil]; - alertView.alertViewStyle = UIAlertViewStylePlainTextInput; - - UITextField *textField = [alertView textFieldAtIndex:0]; - textField.placeholder = NSLocalizedString(@"Email", @"Email"); - textField.keyboardType = UIKeyboardTypeEmailAddress; - textField.returnKeyType = UIReturnKeyDone; - - [alertView show]; + [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 = NSLocalizedString(@"Password Reset", + NSString *title = PFLocalizedString(@"Password Reset", @"Password reset success alert title in PFLogInViewController."); - NSString *message = [NSString stringWithFormat:NSLocalizedString(@"An email with reset instructions has been sent to '%@'.", + NSString *message = [NSString stringWithFormat:PFLocalizedString(@"An email with reset instructions has been sent to '%@'.", @"Password reset message in PFLogInViewController"), email]; - [PFUIAlertView showAlertViewWithTitle:title - message:message - cancelButtonTitle:NSLocalizedString(@"OK", @"OK")]; + [PFUIAlertView presentAlertInViewController:self withTitle:title message:message]; } else { - NSString *title = NSLocalizedString(@"Password Reset Failed", + NSString *title = PFLocalizedString(@"Password Reset Failed", @"Password reset error alert title in PFLogInViewController."); - [PFUIAlertView showAlertViewWithTitle:title error:error]; + [PFUIAlertView presentAlertInViewController:self withTitle:title error:error]; } }]; } @@ -471,14 +463,14 @@ - (void)_loginDidFailWithError:(NSError *)error { if (_delegateExistingMethods.didFailToLogIn) { [_delegate logInViewController:self didFailToLogInWithError:error]; } else { - NSString *title = NSLocalizedString(@"Login Failed", @"Login failed alert title in PFLogInViewController"); + NSString *title = PFLocalizedString(@"Login Failed", @"Login failed alert title in PFLogInViewController"); NSString *message = nil; if (error.code == kPFErrorObjectNotFound) { - message = NSLocalizedString(@"The username and password you entered don't match", @"Invalid login credentials alert message in PFLogInViewController"); + message = PFLocalizedString(@"The username and password you entered don't match", @"Invalid login credentials alert message in PFLogInViewController"); } else { - message = NSLocalizedString(@"Please try again", @"Generic login failed alert message in PFLogInViewController"); + message = PFLocalizedString(@"Please try again", @"Generic login failed alert message in PFLogInViewController"); } - [PFUIAlertView showAlertViewWithTitle:title message:message]; + [PFUIAlertView presentAlertInViewController:self withTitle:title message:message]; } [[NSNotificationCenter defaultCenter] postNotificationName:PFLogInFailureNotification object:self]; } diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h index fa5ce55..6ee0849 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h @@ -24,24 +24,24 @@ #import #import -PFUI_ASSUME_NONNULL_BEGIN +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 -/*! - @abstract Initializes a product table view controller. +/** + Initializes a product table view controller. @param style The UITableViewStyle for the table - @returns An initialized `PFProductTableViewController` object or `nil` if the object couldn't be created. + @return An initialized `PFProductTableViewController` object or `nil` if the object couldn't be created. */ - (instancetype)initWithStyle:(UITableViewStyle)style NS_DESIGNATED_INITIALIZER; @end -PFUI_ASSUME_NONNULL_END +NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m index 34da3ca..544a38d 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m @@ -88,15 +88,15 @@ - (void)objectsDidLoad:(NSError *)error { cell.state = PFPurchaseTableViewCellStateDownloading; [PFPurchase downloadAssetForTransaction:transaction - completion:^(NSString *filePath, NSError *downloadError) { - if (!downloadError) { + completion:^(NSString *filePath, NSError *error) { + if (!error) { cell.state = PFPurchaseTableViewCellStateDownloaded; } else { cell.state = PFPurchaseTableViewCellStateNormal; - NSString *title = NSLocalizedString(@"Download Error", + NSString *title = PFLocalizedString(@"Download Error", @"Download Error"); - [PFUIAlertView showAlertViewWithTitle:title error:downloadError]; + [PFUIAlertView presentAlertInViewController:self withTitle:title error:error]; } } progress:^(int percentDone) { @@ -174,8 +174,8 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath PFProduct *product = self.objects[indexPath.row]; [PFPurchase buyProduct:product.productIdentifier block:^(NSError *error) { if (error) { - NSString *title = NSLocalizedString(@"Purchase Error", @"Purchase Error"); - [PFUIAlertView showAlertViewWithTitle:title error:error]; + NSString *title = PFLocalizedString(@"Purchase Error", @"Purchase Error"); + [PFUIAlertView presentAlertInViewController:self withTitle:title error:error]; } }]; } diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h index e658269..a09589c 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h @@ -21,17 +21,18 @@ #import +#import #import -PFUI_ASSUME_NONNULL_BEGIN +NS_ASSUME_NONNULL_BEGIN -@class BFTask; +@class BFTask<__covariant BFGenericType>; @class PFCollectionViewCell; @class PFObject; @class PFQuery; -/*! - This class allows you to think about a one-to-one mapping between a and a `UICollectionViewCell`, +/** + 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: @@ -43,37 +44,37 @@ PFUI_ASSUME_NONNULL_BEGIN - 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 + @see `PFCollectionViewCell` */ @interface PFQueryCollectionViewController : UICollectionViewController -/*! - @abstract The class name of the this collection will use as a datasource. +/** + The class name of the `PFObject` this collection will use as a datasource. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, copy) IBInspectable NSString *parseClassName; +@property (nullable, nonatomic, copy) IBInspectable NSString *parseClassName; -/*! - @abstract Whether the collection should use the default loading view. Default - `YES`. +/** + Whether the collection should use the default loading view. Default - `YES`. */ @property (nonatomic, assign) IBInspectable BOOL loadingViewEnabled; -/*! - @abstract Whether the collection should use the built-in pull-to-refresh feature. Defualt - `YES`. +/** + Whether the collection should use the built-in pull-to-refresh feature. Default - `YES`. */ @property (nonatomic, assign) IBInspectable BOOL pullToRefreshEnabled; -/*! - @abstract Whether the collection should use the built-in pagination feature. Default - `YES`. +/** + Whether the collection should use the built-in pagination feature. Default - `YES`. */ @property (nonatomic, assign) IBInspectable BOOL paginationEnabled; -/*! - @abstract The number of objects to show per page. Default - `25`. +/** + The number of objects to show per page. Default - `25`. */ @property (nonatomic, assign) IBInspectable NSUInteger objectsPerPage; -/*! - @abstract Whether the collection is actively loading new data from the server. +/** + Whether the collection is actively loading new data from the server. */ @property (nonatomic, assign, getter=isLoading) BOOL loading; @@ -81,104 +82,104 @@ PFUI_ASSUME_NONNULL_BEGIN /// @name Creating a PFQueryCollectionViewController ///-------------------------------------- -/*! - @abstract Initializes a view controller with a `UICollectionViewFlowLayout` and a class name - of that will be associated with this collection. +/** + 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 that this table will display. + @param className The class name of the instances of `PFObject` that this table will display. - @returns An initialized `PFQueryCollectionViewController` object or `nil` if the object couldn't be created. + @return An initialized `PFQueryCollectionViewController` object or `nil` if the object couldn't be created. */ -- (instancetype)initWithClassName:(PFUI_NULLABLE NSString *)className; +- (instancetype)initWithClassName:(nullable NSString *)className; -/*! - @abstract Initializes a view controller with a class name of that will be associated with this collection. +/** + 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 that this table will display. + @param className The class name of the instances of `PFObject` that this table will display. - @returns An initialized `PFQueryCollectionViewController` object or `nil` if the object couldn't be created. + @return An initialized `PFQueryCollectionViewController` object or `nil` if the object couldn't be created. */ - (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout - className:(PFUI_NULLABLE NSString *)className NS_DESIGNATED_INITIALIZER; + 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:(PFUI_NULLABLE NSError *)error NS_REQUIRES_SUPER; +- (void)objectsDidLoad:(nullable NSError *)error NS_REQUIRES_SUPER; ///-------------------------------------- /// @name Accessing Results ///-------------------------------------- -/*! - @abstract The array of instances of that is used as a data source. +/** + The array of instances of `PFObject` that is used as a data source. */ -@property (nonatomic, copy, readonly) NSArray *objects; +@property (nonatomic, copy, readonly) NSArray<__kindof PFObject *> *objects; -/*! - @abstract Returns an object at a particular indexPath. +/** + Returns an object at a particular indexPath. - @discussion The default impementation returns the object at `indexPath.item`. + 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`. - @returns The object at the specified indexPath. + @return The object at the specified indexPath. */ -- (PFUI_NULLABLE PFObject *)objectAtIndexPath:(PFUI_NULLABLE NSIndexPath *)indexPath; +- (nullable PFObject *)objectAtIndexPath:(nullable NSIndexPath *)indexPath; -/*! - @abstract Removes an object at the specified index path, animated. +/** + Removes an object at the specified index path, animated. */ -- (void)removeObjectAtIndexPath:(PFUI_NULLABLE NSIndexPath *)indexPath; +- (void)removeObjectAtIndexPath:(nullable NSIndexPath *)indexPath; -/*! - @abstract Removes all objects at the specified index paths, animated. +/** + Removes all objects at the specified index paths, animated. */ -- (void)removeObjectsAtIndexPaths:(PFUI_NULLABLE NSArray *)indexes; +- (void)removeObjectsAtIndexPaths:(nullable NSArray *)indexes; ///-------------------------------------- /// @name Loading Data ///-------------------------------------- -/*! - @abstract Clears the collection view and loads the first page of objects. +/** + Clears the collection view and loads the first page of objects. - @returns An awaitable task that completes when the reload succeeds + @return An awaitable task that completes when the reload succeeds */ -- (BFTask *)loadObjects; +- (BFTask *> *)loadObjects; -/*! - @abstract Loads the objects of the at the specified page and appends it to the +/** + 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. - @returns An awaitable task that completes when the reload succeeds + @return An awaitable task that completes when the reload succeeds */ -- (BFTask *)loadObjects:(NSInteger)page clear:(BOOL)clear; +- (BFTask *> *)loadObjects:(NSInteger)page clear:(BOOL)clear; -/*! - @abstract Loads the next page of objects, appends to table, and refreshes. +/** + Loads the next page of objects, appends to table, and refreshes. */ - (void)loadNextPage; -/*! - @abstract Clears the collection view of all objects. +/** + Clears the collection view of all objects. */ - (void)clear; @@ -186,10 +187,10 @@ PFUI_ASSUME_NONNULL_BEGIN /// @name Querying ///-------------------------------------- -/*! - @abstract Override to construct your own custom to get the objects. +/** + Override to construct your own custom `PFQuery` to get the objects. - @returns An instance of that method will use to the objects for this collection. + @return An instance of `PFQuery` that `-loadObjects` method will use to the objects for this collection. */ - (PFQuery *)queryForCollection; @@ -197,31 +198,31 @@ PFUI_ASSUME_NONNULL_BEGIN /// @name Data Source Methods ///-------------------------------------- -/*! - @abstract Override this method to customize each cell given a that is loaded. +/** + Override this method to customize each cell given a `PFObject` that is loaded. - @warning The cell should inherit from which is a subclass of `UICollectionViewCell`. + @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 that is associated with the cell. + @param object The `PFObject` that is associated with the cell. - @returns The cell that represents this object. + @return The cell that represents this object. */ -- (PFUI_NULLABLE PFCollectionViewCell *)collectionView:(UICollectionView *)collectionView - cellForItemAtIndexPath:(NSIndexPath *)indexPath - object:(PFUI_NULLABLE PFObject *)object; +- (nullable PFCollectionViewCell *)collectionView:(UICollectionView *)collectionView + cellForItemAtIndexPath:(NSIndexPath *)indexPath + object:(nullable PFObject *)object; -/*! - @discussion Override this method to customize the view that allows the user to load the +/** + 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. - @returns The view that allows the user to paginate. + @return The view that allows the user to paginate. */ -- (PFUI_NULLABLE UICollectionReusableView *)collectionViewReusableViewForNextPageAction:(UICollectionView *)collectionView; +- (nullable UICollectionReusableView *)collectionViewReusableViewForNextPageAction:(UICollectionView *)collectionView; @end -PFUI_ASSUME_NONNULL_END +NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m index af1a52a..6df7599 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m @@ -31,12 +31,13 @@ #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; + NSMutableArray *_mutableObjects; BOOL _firstLoad; // Whether we have loaded the first set of objects NSInteger _currentPage; // The last page that was loaded @@ -226,18 +227,18 @@ - (void)removeObjectsAtIndexPaths:(NSArray *)indexPaths { #pragma mark - #pragma mark Loading Data -- (BFTask *)loadObjects { +- (BFTask *> *)loadObjects { return [self loadObjects:0 clear:YES]; } -- (BFTask *)loadObjects:(NSInteger)page clear:(BOOL)clear { +- (BFTask *> *)loadObjects:(NSInteger)page clear:(BOOL)clear { self.loading = YES; [self objectsWillLoad]; - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - PFQuery *query = [self queryForCollection]; [self _alterQuery:query forLoadingPage:page]; + + BFTaskCompletionSource *> *source = [BFTaskCompletionSource taskCompletionSource]; [query findObjectsInBackgroundWithBlock:^(NSArray *foundObjects, NSError *error) { if (![Parse isLocalDatastoreEnabled] && query.cachePolicy != kPFCachePolicyCacheOnly && @@ -266,9 +267,12 @@ - (BFTask *)loadObjects:(NSInteger)page clear:(BOOL)clear { [self objectsDidLoad:error]; [self.refreshControl endRefreshing]; - [source setError:error]; + if (error) { + [source trySetError:error]; + } else { + [source trySetResult:foundObjects]; + } }]; - return source.task; } @@ -330,7 +334,7 @@ - (UICollectionReusableView *)collectionViewReusableViewForNextPageAction:(UICol _currentNextPageView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:PFQueryCollectionViewNextPageReusableViewIdentifier forIndexPath:[self _indexPathForPaginationReusableView]]; - _currentNextPageView.textLabel.text = NSLocalizedString(@"Load more...", @"Load more..."); + _currentNextPageView.textLabel.text = PFLocalizedString(@"Load more...", @"Load more..."); [_currentNextPageView addTarget:self action:@selector(loadNextPage) forControlEvents:UIControlEventTouchUpInside]; _currentNextPageView.animating = self.loading; return _currentNextPageView; @@ -388,31 +392,10 @@ - (void)_handleDeletionError:(NSError *)error { // Fully reload on error. [self loadObjects]; - NSString *errorMessage = [NSString stringWithFormat:@"%@: \"%@\"", - NSLocalizedString(@"Error occurred during deletion", @"Error occurred during deletion"), + NSString *message = [NSString stringWithFormat:@"%@: \"%@\"", + PFLocalizedString(@"Error occurred during deletion", @"Error occurred during deletion"), error.localizedDescription]; - - if ([UIAlertController class]) { - UIAlertController *errorController = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Error", @"Error") - message:errorMessage - preferredStyle:UIAlertControllerStyleAlert]; - - [errorController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK", @"OK") - style:UIAlertActionStyleCancel - handler:nil]]; - - [self presentViewController:errorController animated:YES completion:nil]; - } else { - // Cast to `id` is required for building succesfully for app extensions, - // this code actually never runs in App Extensions, since they are iOS 8.0+, so we are good with just a hack - UIAlertView *alertView = [(id)[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", @"Error") - message:errorMessage - delegate:nil - cancelButtonTitle:NSLocalizedString(@"OK", @"OK") - otherButtonTitles:nil]; - - [alertView show]; - } + [PFUIAlertView presentAlertInViewController:self withTitle:PFLocalizedString(@"Delete Error", @"Delete Error") message:message]; } #pragma mark - diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h index 4f73344..62d4a01 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h @@ -21,17 +21,18 @@ #import +#import #import -PFUI_ASSUME_NONNULL_BEGIN +NS_ASSUME_NONNULL_BEGIN -@class BFTask; +@class BFTask<__covariant BFGenericType>; @class PFObject; @class PFQuery; @class PFTableViewCell; -/*! - This class allows you to think about a one-to-one mapping between a and a `UITableViewCell`, +/** + 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: @@ -49,78 +50,78 @@ PFUI_ASSUME_NONNULL_BEGIN /// @name Creating a PFQueryTableViewController ///-------------------------------------- -/*! - @abstract Initializes with a class name of the that will be associated with this table. +/** + Initializes with a class name of the `PFObject` that will be associated with this table. @param style The UITableViewStyle for the table - @param className The class name of the instances of that this table will display. + @param className The class name of the instances of `PFObject` that this table will display. - @returns An initialized `PFQueryTableViewController` object or `nil` if the object couldn't be created. + @return An initialized `PFQueryTableViewController` object or `nil` if the object couldn't be created. */ - (instancetype)initWithStyle:(UITableViewStyle)style - className:(PFUI_NULLABLE NSString *)className NS_DESIGNATED_INITIALIZER; + className:(nullable NSString *)className NS_DESIGNATED_INITIALIZER; -/*! - @abstract Initializes with a class name of the PFObjects that will be associated with this table. +/** + Initializes with a class name of the PFObjects that will be associated with this table. - @param className The class name of the instances of that this table will display. + @param className The class name of the instances of `PFObject` that this table will display. - @returns An initialized `PFQueryTableViewController` object or `nil` if the object couldn't be created. + @return An initialized `PFQueryTableViewController` object or `nil` if the object couldn't be created. */ -- (instancetype)initWithClassName:(PFUI_NULLABLE NSString *)className; +- (instancetype)initWithClassName:(nullable NSString *)className; ///-------------------------------------- /// @name Configuring Behavior ///-------------------------------------- -/*! - @abstract The class name of the this table will use as a datasource. +/** + The class name of the `PFObject` this table will use as a datasource. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, copy) IBInspectable NSString *parseClassName; +@property (nullable, nonatomic, copy) IBInspectable NSString *parseClassName; -/*! - @abstract The key to use to display for the cell text label. +/** + The key to use to display for the cell text label. - @discussion This won't apply if you override + This won't apply if you override `-tableView:cellForRowAtIndexPath:object:` */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, copy) IBInspectable NSString *textKey; +@property (nullable, nonatomic, copy) IBInspectable NSString *textKey; -/*! - @abstract The key to use to display for the cell image view. +/** + The key to use to display for the cell image view. - @discussion This won't apply if you override + This won't apply if you override `-tableView:cellForRowAtIndexPath:object:` */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, copy) IBInspectable NSString *imageKey; +@property (nullable, nonatomic, copy) IBInspectable NSString *imageKey; -/*! - @abstract The image to use as a placeholder for the cell images. +/** + The image to use as a placeholder for the cell images. - @discussion This won't apply if you override + This won't apply if you override `-tableView:cellForRowAtIndexPath:object:` */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong) IBInspectable UIImage *placeholderImage; +@property (nullable, nonatomic, strong) IBInspectable UIImage *placeholderImage; -/*! - @abstract Whether the table should use the default loading view. Default - `YES`. +/** + Whether the table should use the default loading view. Default - `YES`. */ @property (nonatomic, assign) IBInspectable BOOL loadingViewEnabled; -/*! - @abstract Whether the table should use the built-in pull-to-refresh feature. Defualt - `YES`. +/** + Whether the table should use the built-in pull-to-refresh feature. Default - `YES`. */ @property (nonatomic, assign) IBInspectable BOOL pullToRefreshEnabled; -/*! - @abstract Whether the table should use the built-in pagination feature. Default - `YES`. +/** + Whether the table should use the built-in pagination feature. Default - `YES`. */ @property (nonatomic, assign) IBInspectable BOOL paginationEnabled; -/*! - @abstract The number of objects to show per page. Default - `25`. +/** + The number of objects to show per page. Default - `25`. */ @property (nonatomic, assign) IBInspectable NSUInteger objectsPerPage; -/*! - @abstract Whether the table is actively loading new data from the server. +/** + Whether the table is actively loading new data from the server. */ @property (nonatomic, assign, getter=isLoading) BOOL loading; @@ -128,85 +129,85 @@ PFUI_ASSUME_NONNULL_BEGIN /// @name Responding to Events ///-------------------------------------- -/*! +/** Called when objects will loaded from Parse. If you override this method, you must call [super objectsWillLoad] in your implementation. */ - (void)objectsWillLoad; -/*! +/** 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:(PFUI_NULLABLE NSError *)error; +- (void)objectsDidLoad:(nullable NSError *)error; ///-------------------------------------- /// @name Accessing Results ///-------------------------------------- -/*! - @abstract The array of instances of that is used as a data source. +/** + The array of instances of `PFObject` that is used as a data source. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, copy, readonly) NSArray *objects; +@property (nullable, nonatomic, copy, readonly) NSArray<__kindof PFObject *> *objects; -/*! - @abstract Returns an object at a particular indexPath. +/** + Returns an object at a particular indexPath. - @discussion The default impementation returns the object at `indexPath.row`. + The default impementation returns the object at `indexPath.row`. If you want to return objects in a different indexPath order, like for sections, override this method. @param indexPath The indexPath. - @returns The object at the specified index + @return The object at the specified index */ -- (PFUI_NULLABLE PFObject *)objectAtIndexPath:(PFUI_NULLABLE NSIndexPath *)indexPath; +- (nullable PFObject *)objectAtIndexPath:(nullable NSIndexPath *)indexPath; -/*! - @abstract Removes an object at the specified index path, animated. +/** + Removes an object at the specified index path, animated. */ -- (void)removeObjectAtIndexPath:(PFUI_NULLABLE NSIndexPath *)indexPath; +- (void)removeObjectAtIndexPath:(nullable NSIndexPath *)indexPath; -/*! - @abstract Removes an object at the specified index path, with or without animation. +/** + Removes an object at the specified index path, with or without animation. */ -- (void)removeObjectAtIndexPath:(PFUI_NULLABLE NSIndexPath *)indexPath animated:(BOOL)animated; +- (void)removeObjectAtIndexPath:(nullable NSIndexPath *)indexPath animated:(BOOL)animated; -/*! - @abstract Removes all objects at the specified index paths, animated. +/** + Removes all objects at the specified index paths, animated. */ -- (void)removeObjectsAtIndexPaths:(PFUI_NULLABLE NSArray *)indexes; +- (void)removeObjectsAtIndexPaths:(nullable NSArray *)indexPaths; -/*! - @abstract Removes all objects at the specified index paths, with or without animation. +/** + Removes all objects at the specified index paths, with or without animation. */ -- (void)removeObjectsAtIndexPaths:(PFUI_NULLABLE NSArray *)indexes animated:(BOOL)animated; +- (void)removeObjectsAtIndexPaths:(nullable NSArray *)indexPaths animated:(BOOL)animated; -/*! - @abstract Clears the table of all objects. +/** + Clears the table of all objects. */ - (void)clear; -/*! - @abstract Clears the table and loads the first page of objects. +/** + Clears the table and loads the first page of objects. - @returns An awaitable task that completes when the reload succeeds + @return An awaitable task that completes when the reload succeeds */ -- (BFTask *)loadObjects; +- (BFTask *> *)loadObjects; -/*! - @abstract Loads the objects of the className at the specified page and appends it to the +/** + Loads the objects of the className at the specified page and appends it to the objects already loaded and refreshes the table. @param page The page of objects to load. @param clear Whether to clear the table after receiving the objects - @returns An awaitable task that completes when the reload succeeds + @return An awaitable task that completes when the reload succeeds */ -- (BFTask *)loadObjects:(NSInteger)page clear:(BOOL)clear; +- (BFTask *> *)loadObjects:(NSInteger)page clear:(BOOL)clear; -/*! - @abstract Loads the next page of objects, appends to table, and refreshes. +/** + Loads the next page of objects, appends to table, and refreshes. */ - (void)loadNextPage; @@ -214,7 +215,7 @@ PFUI_ASSUME_NONNULL_BEGIN /// @name Querying ///-------------------------------------- -/*! +/** Override to construct your own custom PFQuery to get the objects. @result PFQuery that loadObjects will use to the objects for this table. */ @@ -224,36 +225,35 @@ PFUI_ASSUME_NONNULL_BEGIN /// @name Data Source Methods ///-------------------------------------- -/*! - @abstract Override this method to customize each cell given a PFObject that is loaded. +/** + Override this method to customize each cell given a PFObject that is loaded. - @discussion If you don't override this method, it will use a default style cell and display either + If you don't override this method, it will use a default style cell and display either the first data key from the object, or it will display the key as specified with `textKey`, `imageKey`. - @warning The cell should inherit from which is a subclass of `UITableViewCell`. + @warning The cell should inherit from `PFTableViewCell` which is a subclass of `UITableViewCell`. @param tableView The table view object associated with this controller. @param indexPath The indexPath of the cell. @param object The PFObject that is associated with the cell. - @returns The cell that represents this object. + @return The cell that represents this object. */ -- (PFUI_NULLABLE PFTableViewCell *)tableView:(UITableView *)tableView - cellForRowAtIndexPath:(NSIndexPath *)indexPath - object:(PFUI_NULLABLE PFObject *)object; +- (nullable PFTableViewCell *)tableView:(UITableView *)tableView + cellForRowAtIndexPath:(NSIndexPath *)indexPath + object:(nullable PFObject *)object; -/*! - @discussion Override this method to customize the cell that allows the user to load the +/** + Override this method to customize the cell that allows the user to load the next page when pagination is turned on. @param tableView The table view object associated with this controller. @param indexPath The indexPath of the cell. - @returns The cell that allows the user to paginate. + @return The cell that allows the user to paginate. */ -- (PFUI_NULLABLE PFTableViewCell *)tableView:(UITableView *)tableView - cellForNextPageAtIndexPath:(NSIndexPath *)indexPath; +- (nullable PFTableViewCell *)tableView:(UITableView *)tableView cellForNextPageAtIndexPath:(NSIndexPath *)indexPath; @end -PFUI_ASSUME_NONNULL_END +NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m index f9fad49..bf7a0d0 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m @@ -21,6 +21,7 @@ #import "PFQueryTableViewController.h" +#import #import #import @@ -31,6 +32,7 @@ #import "PFLoadingView.h" #import "PFLocalization.h" #import "PFTableViewCell.h" +#import "PFUIAlertView.h" // Add headers to kill any warnings. // `initWithStyle:` is a UITableViewController method. @@ -44,7 +46,7 @@ - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibB @end @interface PFQueryTableViewController () { - NSMutableArray *_mutableObjects; + NSMutableArray *_mutableObjects; BOOL _firstLoad; // Whether we have loaded the first set of objects NSInteger _currentPage; // The last page that was loaded @@ -211,18 +213,18 @@ - (void)clear { _currentPage = 0; } -- (BFTask *)loadObjects { +- (BFTask *> *)loadObjects { return [self loadObjects:0 clear:YES]; } -- (BFTask *)loadObjects:(NSInteger)page clear:(BOOL)clear { +- (BFTask *> *)loadObjects:(NSInteger)page clear:(BOOL)clear { self.loading = YES; [self objectsWillLoad]; - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - PFQuery *query = [self queryForTable]; [self _alterQuery:query forLoadingPage:page]; + + BFTaskCompletionSource *> *source = [BFTaskCompletionSource taskCompletionSource]; [query findObjectsInBackgroundWithBlock:^(NSArray *foundObjects, NSError *error) { if (![Parse isLocalDatastoreEnabled] && query.cachePolicy != kPFCachePolicyCacheOnly && @@ -251,7 +253,11 @@ - (BFTask *)loadObjects:(NSInteger)page clear:(BOOL)clear { [self objectsDidLoad:error]; [self.refreshControl endRefreshing]; - [source setError:error]; + if (error) { + [source trySetError:error]; + } else { + [source trySetResult:foundObjects]; + } }]; return source.task; @@ -397,8 +403,8 @@ - (void)removeObjectsAtIndexPaths:(NSArray *)indexPaths animated:(BOOL)animated [allDeletionTasks addObject:[obj deleteInBackground]]; } - [[BFTask taskForCompletionOfAllTasks:allDeletionTasks] - continueWithBlock:deletionHandlerBlock]; + [[BFTask taskForCompletionOfAllTasks:allDeletionTasks] continueWithExecutor:[BFExecutor mainThreadExecutor] + withBlock:deletionHandlerBlock]; } - (PFTableViewCell *)tableView:(UITableView *)otherTableView cellForNextPageAtIndexPath:(NSIndexPath *)indexPath { @@ -408,7 +414,7 @@ - (PFTableViewCell *)tableView:(UITableView *)otherTableView cellForNextPageAtIn if (cell == nil) { cell = [[PFActivityIndicatorTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; - cell.textLabel.text = NSLocalizedString(@"Load more...", @"Load more..."); + cell.textLabel.text = PFLocalizedString(@"Load more...", @"Load more..."); } cell.animating = self.loading; @@ -516,31 +522,10 @@ - (void)_handleDeletionError:(NSError *)error { // Fully reload on error. [self loadObjects]; - NSString *errorMessage = [NSString stringWithFormat:@"%@: \"%@\"", - NSLocalizedString(@"Error occurred during deletion", @"Error occurred during deletion"), - error.localizedDescription]; - - if ([UIAlertController class]) { - UIAlertController *errorController = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Error", @"Error") - message:errorMessage - preferredStyle:UIAlertControllerStyleAlert]; - - [errorController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK", @"OK") - style:UIAlertActionStyleCancel - handler:nil]]; - - [self presentViewController:errorController animated:YES completion:nil]; - } else { - // Cast to `id` is required for building succesfully for app extensions, - // this code actually never runs in App Extensions, since they are iOS 8.0+, so we are good with just a hack - UIAlertView *alertView = [(id)[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", @"Error") - message:errorMessage - delegate:nil - cancelButtonTitle:NSLocalizedString(@"OK", @"OK") - otherButtonTitles:nil]; - - [alertView show]; - } + 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 - @@ -553,7 +538,7 @@ - (void)_refreshControlValueChanged:(UIRefreshControl *)refreshControl { #pragma mark - #pragma mark Accessors -- (NSArray *)objects { +- (NSArray<__kindof PFObject *> *)objects { return _mutableObjects; } diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h index d6a8795..e203515 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h @@ -23,36 +23,48 @@ #import -PFUI_ASSUME_NONNULL_BEGIN +NS_ASSUME_NONNULL_BEGIN -/*! +/** `PFSignUpFields` bitmask specifies the sign up elements which are enabled in the view. @see PFSignUpViewController @see PFSignUpView */ typedef NS_OPTIONS(NSInteger, PFSignUpFields) { - /*! Username and password fields. */ + /** Username and password fields. */ PFSignUpFieldsUsernameAndPassword = 0, - /*! Email field. */ + /** Email field. */ PFSignUpFieldsEmail = 1 << 0, - /*! This field can be used for something else. */ + /** This field can be used for something else. */ PFSignUpFieldsAdditional = 1 << 1, - /*! Sign Up Button */ + /** Sign Up Button */ PFSignUpFieldsSignUpButton = 1 << 2, - /*! Dismiss Button */ + /** Dismiss Button */ PFSignUpFieldsDismissButton = 1 << 3, - /*! Default value. Combines Username, Password, Email, Sign Up and Dismiss Buttons. */ + /** Default value. Combines Username, Password, Email, Sign Up and Dismiss Buttons. */ PFSignUpFieldsDefault = (PFSignUpFieldsUsernameAndPassword | PFSignUpFieldsEmail | PFSignUpFieldsSignUpButton | PFSignUpFieldsDismissButton) }; +/** + `PFSignUpFields`'s accessibity identifiers + + @see PFSignUpView + */ +extern NSString *const PFSignUpViewUsernameFieldAccessibilityIdentifier; +extern NSString *const PFSignUpViewEmailFieldAccessibilityIdentifier; +extern NSString *const PFSignUpViewPasswordFieldAccessibilityIdentifier; +extern NSString *const PFSignUpViewAdditionalFieldAccessibilityIdentifier; +extern NSString *const PFSignUpViewSignUpButtonAccessibilityIdentifier; +extern NSString *const PFSignUpViewDismissButtonAccessibilityIdentifier; + @class PFTextField; -/*! - The `PFSignUpView` class provides a standard sign up interface for authenticating a . +/** + The `PFSignUpView` class provides a standard sign up interface for authenticating a `PFUser`. */ @interface PFSignUpView : UIScrollView @@ -60,41 +72,41 @@ typedef NS_OPTIONS(NSInteger, PFSignUpFields) { /// @name Creating SignUp View ///-------------------------------------- -/*! - @abstract Initializes the view with the specified sign up elements. +/** + Initializes the view with the specified sign up elements. @param fields A bitmask specifying the sign up elements which are enabled in the view - @returns An initialized `PFSignUpView` object or `nil` if the object couldn't be created. + @return An initialized `PFSignUpView` object or `nil` if the object couldn't be created. @see PFSignUpFields */ - (instancetype)initWithFields:(PFSignUpFields)fields; -/*! - @abstract The view controller that will present this view. +/** + The view controller that will present this view. - @discussion Used to lay out elements correctly when the presenting view controller has translucent elements. + Used to lay out elements correctly when the presenting view controller has translucent elements. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, weak) UIViewController *presentingViewController; +@property (nullable, nonatomic, weak) UIViewController *presentingViewController; ///-------------------------------------- /// @name Customizing the Logo ///-------------------------------------- -/*! - @abstract The logo. By default, it is the Parse logo. +/** + The logo. By default, it is the Parse logo. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong) UIView *logo; +@property (nullable, nonatomic, strong) UIView *logo; ///-------------------------------------- /// @name Configure Username Behaviour ///-------------------------------------- -/*! - @abstract If email should be used to log in, instead of username +/** + If email should be used to log in, instead of username - @discussion By default, this is set to `NO`. + By default, this is set to `NO`. */ @property (nonatomic, assign) BOOL emailAsUsername; @@ -102,43 +114,43 @@ typedef NS_OPTIONS(NSInteger, PFSignUpFields) { /// @name Sign Up Elements ///-------------------------------------- -/*! - @abstract The bitmask which specifies the enabled sign up elements in the view +/** + The bitmask which specifies the enabled sign up elements in the view */ @property (nonatomic, assign, readonly) PFSignUpFields fields; -/*! - @abstract The username text field. +/** + The username text field. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFTextField *usernameField; +@property (nullable, nonatomic, strong, readonly) PFTextField *usernameField; -/*! - @abstract The password text field. +/** + The password text field. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFTextField *passwordField; +@property (nullable, nonatomic, strong, readonly) PFTextField *passwordField; -/*! - @abstract The email text field. It is `nil` if the element is not enabled. +/** + The email text field. It is `nil` if the element is not enabled. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFTextField *emailField; +@property (nullable, nonatomic, strong, readonly) PFTextField *emailField; -/*! - @abstract The additional text field. It is `nil` if the element is not enabled. +/** + The additional text field. It is `nil` if the element is not enabled. - @discussion This field is intended to be customized. + This field is intended to be customized. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFTextField *additionalField; +@property (nullable, nonatomic, strong, readonly) PFTextField *additionalField; -/*! - @abstract The sign up button. It is `nil` if the element is not enabled. +/** + The sign up button. It is `nil` if the element is not enabled. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *signUpButton; +@property (nullable, nonatomic, strong, readonly) UIButton *signUpButton; -/*! - @abstract The dismiss button. It is `nil` if the element is not enabled. +/** + The dismiss button. It is `nil` if the element is not enabled. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) UIButton *dismissButton; +@property (nullable, nonatomic, strong, readonly) UIButton *dismissButton; @end -PFUI_ASSUME_NONNULL_END +NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.m index b171404..5a35639 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.m +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.m @@ -32,6 +32,17 @@ static NSString *const PFSignUpViewDefaultLogoImageName = @"parse_logo.png"; +///-------------------------------------- +#pragma mark - Accessibility Identifiers +///-------------------------------------- + +NSString *const PFSignUpViewUsernameFieldAccessibilityIdentifier = @"PFSignUpViewUsernameFieldAccessibilityIdentifier"; +NSString *const PFSignUpViewEmailFieldAccessibilityIdentifier = @"PFSignUpViewEmailFieldAccessibilityIdentifier"; +NSString *const PFSignUpViewPasswordFieldAccessibilityIdentifier = @"PFSignUpViewPasswordFieldAccessibilityIdentifier"; +NSString *const PFSignUpViewAdditionalFieldAccessibilityIdentifier = @"PFSignUpViewAdditionalFieldAccessibilityIdentifier"; +NSString *const PFSignUpViewSignUpButtonAccessibilityIdentifier = @"PFSignUpViewSignUpButtonAccessibilityIdentifier"; +NSString *const PFSignUpViewDismissButtonAccessibilityIdentifier = @"PFSignUpViewDismissButtonAccessibilityIdentifier"; + @implementation PFSignUpView #pragma mark - @@ -52,12 +63,14 @@ - (instancetype)initWithFields:(PFSignUpFields)otherFields { if (_fields & PFSignUpFieldsDismissButton) { _dismissButton = [[PFDismissButton alloc] initWithFrame:CGRectZero]; + _dismissButton.accessibilityIdentifier = PFSignUpViewDismissButtonAccessibilityIdentifier; [self addSubview:_dismissButton]; } _usernameField = [[PFTextField alloc] initWithFrame:CGRectZero separatorStyle:(PFTextFieldSeparatorStyleTop | PFTextFieldSeparatorStyleBottom)]; + _usernameField.accessibilityIdentifier = PFSignUpViewUsernameFieldAccessibilityIdentifier; _usernameField.autocorrectionType = UITextAutocorrectionTypeNo; _usernameField.autocapitalizationType = UITextAutocapitalizationTypeNone; _usernameField.returnKeyType = UIReturnKeyNext; @@ -66,7 +79,8 @@ - (instancetype)initWithFields:(PFSignUpFields)otherFields { _passwordField = [[PFTextField alloc] initWithFrame:CGRectZero separatorStyle:PFTextFieldSeparatorStyleBottom]; - _passwordField.placeholder = NSLocalizedString(@"Password", @"Password"); + _passwordField.accessibilityIdentifier = PFSignUpViewPasswordFieldAccessibilityIdentifier; + _passwordField.placeholder = PFLocalizedString(@"Password", @"Password"); _passwordField.secureTextEntry = YES; _passwordField.autocorrectionType = UITextAutocorrectionTypeNo; _passwordField.autocapitalizationType = UITextAutocapitalizationTypeNone; @@ -80,10 +94,11 @@ - (instancetype)initWithFields:(PFSignUpFields)otherFields { if (_fields & PFSignUpFieldsEmail) { _emailField = [[PFTextField alloc] initWithFrame:CGRectZero separatorStyle:PFTextFieldSeparatorStyleBottom]; + _emailField.accessibilityIdentifier = PFSignUpViewEmailFieldAccessibilityIdentifier; _emailField.autocorrectionType = UITextAutocorrectionTypeNo; _emailField.autocapitalizationType = UITextAutocapitalizationTypeNone; _emailField.keyboardType = UIKeyboardTypeEmailAddress; - _emailField.placeholder = NSLocalizedString(@"Email", @"Email"); + _emailField.placeholder = PFLocalizedString(@"Email", @"Email"); if (!(_fields & PFSignUpFieldsAdditional)) { _emailField.returnKeyType = UIReturnKeyDone; } else { @@ -95,16 +110,18 @@ - (instancetype)initWithFields:(PFSignUpFields)otherFields { if (_fields & PFSignUpFieldsAdditional) { _additionalField = [[PFTextField alloc] initWithFrame:CGRectZero separatorStyle:PFTextFieldSeparatorStyleBottom]; + _additionalField.accessibilityIdentifier = PFSignUpViewAdditionalFieldAccessibilityIdentifier; _additionalField.autocorrectionType = UITextAutocorrectionTypeNo; _additionalField.autocapitalizationType = UITextAutocapitalizationTypeNone; - _additionalField.placeholder = NSLocalizedString(@"Additional", @"Additional"); + _additionalField.placeholder = PFLocalizedString(@"Additional", @"Additional"); _additionalField.returnKeyType = UIReturnKeyDone; [self addSubview:_additionalField]; } if (_fields & PFSignUpFieldsSignUpButton) { _signUpButton = [[PFPrimaryButton alloc] initWithBackgroundImageColor:[PFColor signupButtonBackgroundColor]]; - [_signUpButton setTitle:NSLocalizedString(@"Sign Up", @"Sign Up") forState:UIControlStateNormal]; + _signUpButton.accessibilityIdentifier = PFSignUpViewSignUpButtonAccessibilityIdentifier; + [_signUpButton setTitle:PFLocalizedString(@"Sign Up", @"Sign Up") forState:UIControlStateNormal]; [self addSubview:_signUpButton]; } @@ -305,10 +322,10 @@ - (void)_updateUsernameFieldStyle { UIKeyboardType keyboardType = UIKeyboardTypeDefault; NSString *placeholder = nil; if (!_emailAsUsername) { - placeholder = NSLocalizedString(@"Username", @"Username"); + placeholder = PFLocalizedString(@"Username", @"Username"); keyboardType = UIKeyboardTypeDefault; } else { - placeholder = NSLocalizedString(@"Email", @"Email"); + placeholder = PFLocalizedString(@"Email", @"Email"); keyboardType = UIKeyboardTypeEmailAddress; } diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h index 88b2332..23c7779 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h @@ -21,17 +21,19 @@ #import +#import + #import #import @class PFUser; @protocol PFSignUpViewControllerDelegate; -PFUI_ASSUME_NONNULL_BEGIN +NS_ASSUME_NONNULL_BEGIN -/*! +/** The `PFSignUpViewController` class that presents and manages - a standard authentication interface for signing up a . + a standard authentication interface for signing up a `PFUser`. */ @interface PFSignUpViewController : UIViewController @@ -39,42 +41,42 @@ PFUI_ASSUME_NONNULL_BEGIN /// @name Configuring Sign Up Elements ///-------------------------------------- -/*! - @abstract A bitmask specifying the log in elements which are enabled in the view. +/** + A bitmask specifying the log in elements which are enabled in the view. @see PFSignUpFields */ @property (nonatomic, assign) PFSignUpFields fields; -/*! - @abstract The sign up view. It contains all the enabled log in elements. +/** + The sign up view. It contains all the enabled log in elements. @see PFSignUpView */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong, readonly) PFSignUpView *signUpView; +@property (nullable, nonatomic, strong, readonly) PFSignUpView *signUpView; ///-------------------------------------- /// @name Configuring Sign Up Behaviors ///-------------------------------------- -/*! - @abstract The delegate that responds to the control events of `PFSignUpViewController`. +/** + The delegate that responds to the control events of `PFSignUpViewController`. @see PFSignUpViewControllerDelegate */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, weak) id delegate; +@property (nullable, nonatomic, weak) id delegate; -/*! - @abstract Minimum required password length for user signups, defaults to `0`. +/** + Minimum required password length for user signups, defaults to `0`. */ @property (nonatomic, assign) NSUInteger minPasswordLength; -/*! - @abstract Whether to use the email as username on the attached . +/** + Whether to use the email as username on the attached `signUpView`. - @discussion If set to `YES`, we'll hide the email field, prompt for the email in + If set to `YES`, we'll hide the email field, prompt for the email in the username field, and save the email into both username and email - fields on the new object. By default, this is set to `NO`. + fields on the new `PFUser` object. By default, this is set to `NO`. */ @property (nonatomic, assign) BOOL emailAsUsername; @@ -84,20 +86,20 @@ PFUI_ASSUME_NONNULL_BEGIN /// @name Notifications ///-------------------------------------- -/*! - @abstract The notification is posted immediately after the sign up succeeds. +/** + The notification is posted immediately after the sign up succeeds. */ extern NSString *const PFSignUpSuccessNotification; -/*! - @abstract The notification is posted immediately after the sign up fails. +/** + The notification is posted immediately after the sign up fails. - @discussion If the delegate prevents the sign up to start, the notification is not sent. + If the delegate prevents the sign up to start, the notification is not sent. */ extern NSString *const PFSignUpFailureNotification; -/*! - @abstract The notification is posted immediately after the user cancels sign up. +/** + The notification is posted immediately after the user cancels sign up. */ extern NSString *const PFSignUpCancelNotification; @@ -105,8 +107,8 @@ extern NSString *const PFSignUpCancelNotification; /// @name PFSignUpViewControllerDelegate ///-------------------------------------- -/*! - The `PFLogInViewControllerDelegate` protocol defines methods a delegate of a should implement. +/** + The `PFLogInViewControllerDelegate` protocol defines methods a delegate of a `PFSignUpViewController` should implement. All methods of this protocol are optional. */ @protocol PFSignUpViewControllerDelegate @@ -117,39 +119,38 @@ extern NSString *const PFSignUpCancelNotification; /// @name Customizing Behavior ///-------------------------------------- -/*! - @abstract Sent to the delegate to determine whether the sign up request should be submitted to the server. +/** + Sent to the delegate to determine whether the sign up request should be submitted to the server. @param signUpController The signup view controller that is requesting the data. @param info An `NSDictionary` instance which contains all sign up information that the user entered. - @returns A `BOOL` indicating whether the sign up should proceed. + @return A `BOOL` indicating whether the sign up should proceed. */ -- (BOOL)signUpViewController:(PFSignUpViewController *)signUpController shouldBeginSignUp:(NSDictionary *)info; +- (BOOL)signUpViewController:(PFSignUpViewController *)signUpController shouldBeginSignUp:(NSDictionary *)info; ///-------------------------------------- /// @name Responding to Actions ///-------------------------------------- -/*! - @abstract Sent to the delegate when a is signed up. +/** + Sent to the delegate when a `PFUser` is signed up. @param signUpController The signup view controller where signup finished. - @param user object that is a result of the sign up. + @param user `PFUser` object that is a result of the sign up. */ - (void)signUpViewController:(PFSignUpViewController *)signUpController didSignUpUser:(PFUser *)user; -/*! - @abstract Sent to the delegate when the sign up attempt fails. +/** + Sent to the delegate when the sign up attempt fails. @param signUpController The signup view controller where signup failed. @param error `NSError` object representing the error that occured. */ -- (void)signUpViewController:(PFSignUpViewController *)signUpController - didFailToSignUpWithError:(PFUI_NULLABLE NSError *)error; +- (void)signUpViewController:(PFSignUpViewController *)signUpController didFailToSignUpWithError:(nullable NSError *)error; -/*! - @abstract Sent to the delegate when the sign up screen is cancelled. +/** + Sent to the delegate when the sign up screen is cancelled. @param signUpController The signup view controller where signup was cancelled. */ @@ -157,4 +158,4 @@ extern NSString *const PFSignUpCancelNotification; @end -PFUI_ASSUME_NONNULL_END +NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.m index 257b5fb..34c77e0 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.m +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.m @@ -269,7 +269,7 @@ - (void)_signUpAction { } if ([password length] < _minPasswordLength) { - NSString *errorMessage = NSLocalizedString(@"Password must be at least %d characters.", + NSString *errorMessage = PFLocalizedString(@"Password must be at least %d characters.", @"Password too short error message in PFSignUpViewController"); errorMessage = [NSString stringWithFormat:errorMessage, (unsigned long)_minPasswordLength]; NSError *error = [NSError errorWithDomain:PFParseErrorDomain @@ -324,7 +324,7 @@ - (void)_signUpDidFailWithError:(NSError *)error { } [[NSNotificationCenter defaultCenter] postNotificationName:PFSignUpFailureNotification object:self]; - NSString *title = NSLocalizedString(@"Sign Up Error", @"Sign Up Error"); + NSString *title = PFLocalizedString(@"Sign Up Error", @"Sign Up Error"); if ([[error domain] isEqualToString:PFParseErrorDomain]) { NSInteger errorCode = [error code]; @@ -332,37 +332,37 @@ - (void)_signUpDidFailWithError:(NSError *)error { UIResponder *responder = nil; if (errorCode == kPFErrorInvalidEmailAddress) { - message = NSLocalizedString(@"The email address is invalid. Please enter a valid email.", + message = PFLocalizedString(@"The email address is invalid. Please enter a valid email.", @"Invalid email address error message in PFSignUpViewControllers"); responder = _signUpView.emailField ?: _signUpView.usernameField; } else if (errorCode == kPFErrorUsernameMissing) { - message = NSLocalizedString(@"Please enter a username.", + message = PFLocalizedString(@"Please enter a username.", @"Username missing error message in PFSignUpViewController"); responder = _signUpView.usernameField; } else if (errorCode == kPFErrorUserPasswordMissing) { - message = NSLocalizedString(@"Please enter a password.", + message = PFLocalizedString(@"Please enter a password.", @"Password missing error message in PFSignUpViewController"); responder = _signUpView.passwordField; } else if (errorCode == kPFErrorUsernameTaken) { - NSString *format = NSLocalizedString(@"The username '%@' is taken. Please try choosing a different username.", + NSString *format = PFLocalizedString(@"The username '%@' is taken. Please try choosing a different username.", @"Username taken error format in PFSignUpViewController"); message = [NSString stringWithFormat:format, _signUpView.usernameField.text]; responder = _signUpView.usernameField; } else if (error.code == kPFErrorUserEmailTaken) { - NSString *format = NSLocalizedString(@"The email '%@' is taken. Please try using a different email.", + NSString *format = PFLocalizedString(@"The email '%@' is taken. Please try using a different email.", @"Email is taken error format in PFSignUpViewController."); UITextField *textField = self.emailAsUsername ? _signUpView.usernameField : _signUpView.emailField; message = [NSString stringWithFormat:format, textField.text]; responder = textField; } else if (error.code == kPFErrorUserEmailMissing) { - message = NSLocalizedString(@"Please enter an email.", + message = PFLocalizedString(@"Please enter an email.", @"Email missing error message in PFSignUpViewController"); responder = _signUpView.emailField; } if (message != nil) { - [PFUIAlertView showAlertViewWithTitle:title message:message]; + [PFUIAlertView presentAlertInViewController:self withTitle:title message:message]; [responder becomeFirstResponder]; return; @@ -370,7 +370,7 @@ - (void)_signUpDidFailWithError:(NSError *)error { } // Show the generic error alert, as no custom cases matched before - [PFUIAlertView showAlertViewWithTitle:title error:error]; + [PFUIAlertView presentAlertInViewController:self withTitle:title error:error]; } - (void)_cancelSignUp { diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.h index 368b3d6..d8d4845 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.h @@ -21,57 +21,59 @@ #import +#import + #import -PFUI_ASSUME_NONNULL_BEGIN +NS_ASSUME_NONNULL_BEGIN -typedef void(^PFImageViewImageResultBlock)(UIImage *PFUI_NULLABLE_S image, NSError *PFUI_NULLABLE_S error); +typedef void(^PFImageViewImageResultBlock)(UIImage *__nullable image, NSError *__nullable error); -@class BFTask; +@class BFTask<__covariant BFGenericType>; @class PFFile; -/*! +/** An image view that downloads and displays remote image stored on Parse's server. */ @interface PFImageView : UIImageView -/*! - @abstract The remote file on Parse's server that stores the image. +/** + The remote file on Parse's server that stores the image. - @warning Note that the download does not start until is called. + @warning Note that the download does not start until `-loadInBackground:` is called. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong) PFFile *file; +@property (nullable, nonatomic, strong) PFFile *file; -/*! - @abstract Initiate downloading of the remote image. +/** + Initiate downloading of the remote image. - @discussion Once the download completes, the remote image will be displayed. + Once the download completes, the remote image will be displayed. - @returns The task, that encapsulates the work being done. + @return The task, that encapsulates the work being done. */ -- (BFTask *)loadInBackground; +- (BFTask *)loadInBackground; -/*! - @abstract Initiate downloading of the remote image. +/** + Initiate downloading of the remote image. - @discussion Once the download completes, the remote image will be displayed. + Once the download completes, the remote image will be displayed. @param completion the completion block. */ -- (void)loadInBackground:(PFUI_NULLABLE PFImageViewImageResultBlock)completion; +- (void)loadInBackground:(nullable PFImageViewImageResultBlock)completion; -/*! - @abstract Initiate downloading of the remote image. +/** + Initiate downloading of the remote image. - @discussion Once the download completes, the remote image will be displayed. + 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:(PFUI_NULLABLE PFImageViewImageResultBlock)completion - progressBlock:(PFUI_NULLABLE void (^)(int percentDone))progressBlock; +- (void)loadInBackground:(nullable PFImageViewImageResultBlock)completion + progressBlock:(nullable void (^)(int percentDone))progressBlock; @end -PFUI_ASSUME_NONNULL_END +NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.m index fe44076..f10a9aa 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.m +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.m @@ -47,8 +47,8 @@ - (void)setFile:(PFFile *)otherFile { #pragma mark - #pragma mark Load -- (BFTask *)loadInBackground { - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; +- (BFTask *)loadInBackground { + BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; [self loadInBackground:^(UIImage *image, NSError *error) { if (error) { [source trySetError:error]; diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.h index 5bfb168..4e6f878 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.h @@ -23,46 +23,46 @@ #import -PFUI_ASSUME_NONNULL_BEGIN +NS_ASSUME_NONNULL_BEGIN -/*! +/** `PFTextFieldSeparatorStyle` bitmask specifies the style of the separators, that should be used for a given `PFTextField`. @see PFTextField */ typedef NS_OPTIONS(uint8_t, PFTextFieldSeparatorStyle){ - /*! No separators are visible. */ + /** No separators are visible. */ PFTextFieldSeparatorStyleNone = 0, - /*! Separator on top of the text field. */ + /** Separator on top of the text field. */ PFTextFieldSeparatorStyleTop = 1 << 0, - /*! Separator at the bottom of the text field. */ + /** Separator at the bottom of the text field. */ PFTextFieldSeparatorStyleBottom = 1 << 1 }; -/*! +/** `PFTextField` class serves as a stylable subclass of `UITextField`. It includes styles that are specific to `ParseUI` framework and allows advanced customization. */ @interface PFTextField : UITextField -/*! - @abstract Separator style bitmask that should be applied to this textfield. +/** + Separator style bitmask that should be applied to this textfield. - @discussion Default: + Default: `PFTextFieldSeparatorStyleNone` @see PFTextFieldSeparatorStyle */ @property (nonatomic, assign) PFTextFieldSeparatorStyle separatorStyle; -/*! - @abstract Color that should be used for the separators, if they are visible. +/** + Color that should be used for the separators, if they are visible. - @discussion Default: `227,227,227,1.0`. + Default: `227,227,227,1.0`. */ -@property (PFUI_NULLABLE_PROPERTY nonatomic, strong) UIColor *separatorColor UI_APPEARANCE_SELECTOR; +@property (nullable, nonatomic, strong) UIColor *separatorColor UI_APPEARANCE_SELECTOR; -/*! +/** This method is a convenience initializer that sets both `frame` and `separatorStyle` for an instance of `PFTextField.` @param frame The frame rectangle for the view, measured in points. @@ -74,4 +74,4 @@ typedef NS_OPTIONS(uint8_t, PFTextFieldSeparatorStyle){ @end -PFUI_ASSUME_NONNULL_END +NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Generated/PFResources.h b/FoodbLog/Pods/ParseUI/ParseUI/Generated/PFResources.h index 9e01c13..61a9259 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Generated/PFResources.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Generated/PFResources.h @@ -1,13 +1,13 @@ // This is an auto-generated file. #import @interface PFResources : NSObject -+ (NSData *)facebook_icon_png;//modified:2023-04-05 07:30:44 +0100 -+ (NSData *)facebook_icon2x_png;//modified:2023-04-05 07:30:44 +0100 -+ (NSData *)facebook_icon3x_png;//modified:2023-04-05 07:30:44 +0100 -+ (NSData *)parse_logo_png;//modified:2023-04-05 07:30:44 +0100 -+ (NSData *)parse_logo2x_png;//modified:2023-04-05 07:30:44 +0100 -+ (NSData *)parse_logo3x_png;//modified:2023-04-05 07:30:44 +0100 -+ (NSData *)twitter_icon_png;//modified:2023-04-05 07:30:44 +0100 -+ (NSData *)twitter_icon2x_png;//modified:2023-04-05 07:30:44 +0100 -+ (NSData *)twitter_icon3x_png;//modified:2023-04-05 07:30:44 +0100 ++ (NSData *)facebook_icon_png;//modified:2023-04-05 08:12:17 +0100 ++ (NSData *)facebook_icon2x_png;//modified:2023-04-05 08:12:17 +0100 ++ (NSData *)facebook_icon3x_png;//modified:2023-04-05 08:12:17 +0100 ++ (NSData *)parse_logo_png;//modified:2023-04-05 08:12:17 +0100 ++ (NSData *)parse_logo2x_png;//modified:2023-04-05 08:12:17 +0100 ++ (NSData *)parse_logo3x_png;//modified:2023-04-05 08:12:17 +0100 ++ (NSData *)twitter_icon_png;//modified:2023-04-05 08:12:17 +0100 ++ (NSData *)twitter_icon2x_png;//modified:2023-04-05 08:12:17 +0100 ++ (NSData *)twitter_icon3x_png;//modified:2023-04-05 08:12:17 +0100 @end diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Other/ParseUIConstants.h b/FoodbLog/Pods/ParseUI/ParseUI/Other/ParseUIConstants.h index 19cfa1d..edd970a 100644 --- a/FoodbLog/Pods/ParseUI/ParseUI/Other/ParseUIConstants.h +++ b/FoodbLog/Pods/ParseUI/ParseUI/Other/ParseUIConstants.h @@ -41,36 +41,4 @@ # endif #endif -///-------------------------------------- -/// @name Nullability Support -///-------------------------------------- - -#if __has_feature(nullability) -# define PFUI_NULLABLE nullable -# define PFUI_NULLABLE_S __nullable -# define PFUI_NULL_UNSPECIFIED null_unspecified -# define PFUI_NULLABLE_PROPERTY nullable, -#else -# define PFUI_NULLABLE -# define PFUI_NULLABLE_S -# define PFUI_NULL_UNSPECIFIED -# define PFUI_NULLABLE_PROPERTY -#endif - -#if __has_feature(assume_nonnull) -# ifdef NS_ASSUME_NONNULL_BEGIN -# define PFUI_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN -# else -# define PFUI_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin") -# endif -# ifdef NS_ASSUME_NONNULL_END -# define PFUI_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END -# else -# define PFUI_ASSUME_NONNULL_END _Pragma("clang assume_nonnull end") -# endif -#else -# define PFUI_ASSUME_NONNULL_BEGIN -# define PFUI_ASSUME_NONNULL_END -#endif - #endif diff --git a/FoodbLog/Pods/Pods.xcodeproj/project.pbxproj b/FoodbLog/Pods/Pods.xcodeproj/project.pbxproj index 5989698..ee22423 100644 --- a/FoodbLog/Pods/Pods.xcodeproj/project.pbxproj +++ b/FoodbLog/Pods/Pods.xcodeproj/project.pbxproj @@ -7,763 +7,769 @@ objects = { /* Begin PBXBuildFile section */ - 000A86E96A999630D18730F9FE407521 /* PFSessionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 62FADD9376E95D055AF0A96D39FD267C /* PFSessionUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 015904FC34AD7AC33B5C17A8B4DC2E5E /* PFPurchaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CFB2DE553F71F9BD4D38BFE889EE5A1 /* PFPurchaseTableViewCell.m */; }; - 01903DCA721AA027FF2C4BFB3235968F /* ParseUIConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 830900A05A897F050CC8C0CCDE4C4FD8 /* ParseUIConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 01BB74BC139D1D09260F64D925379F49 /* PFQueryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 61FF4D40E535915FF2A5E6013656D65F /* PFQueryUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0354AEA3E753D30AE8E6B94A701A1A90 /* PFRESTFileCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 48347C3BCE6F2F0E9F400C6727FC975A /* PFRESTFileCommand.m */; }; - 03737B28D6BAF57168047F81B5FC83DC /* PFAnonymousUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 139DF95532D69618F5A132FBD855F503 /* PFAnonymousUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 03C60FBD9CB7547B458B40058168BB28 /* UNIHTTPClientHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 242785A2D898F8B3178C5C87B1AD01AC /* UNIHTTPClientHelper.h */; }; - 03E5826A251D0DE9BF070EAB5A3F6B07 /* PFSQLiteStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AC19EA4CDEEFAFF25CAB498F92DE3C8 /* PFSQLiteStatement.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 03FDAA175EB6B999D72B4EB88E67B03E /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = 69460567E8D0F3A25083496C96A69461 /* BFCancellationTokenRegistration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 0433ED820B0734E79BC0D1269B11B1DF /* PFLogInView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B1DAEDA8CCCACC84601EECDB3E6D1FF6 /* PFLogInView_Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 04BE8237D681A07B607B091DCB0FCE6A /* PFRESTUserCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = C64ACA14342A9ECCF8A0C727A2193004 /* PFRESTUserCommand.m */; }; - 04CB32149BEA0320CF6F9640A78D8327 /* PFConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D2AE97133B1C7AD99D02E0CBDFB4DE9 /* PFConfigController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 04DBFADECB060B72536903FAD0684BBE /* FUISegmentedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A6C012A4F3D5A672788A760562623DA /* FUISegmentedControl.m */; }; + 000A86E96A999630D18730F9FE407521 /* PFSessionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = AC7DB93B4EAA0F9CF5C79181A315DD5D /* PFSessionUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0136E37C32D8DE8DF43162608ACD7EF5 /* PFQueryCollectionViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = E272D407AC4A249F7DCA0B9CA3115B66 /* PFQueryCollectionViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 01BB74BC139D1D09260F64D925379F49 /* PFQueryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 58AE592385190B7467E751B3B8DACB38 /* PFQueryUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0354AEA3E753D30AE8E6B94A701A1A90 /* PFRESTFileCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 436C46A02A32E7AC27D14D39EC7C1837 /* PFRESTFileCommand.m */; }; + 03737B28D6BAF57168047F81B5FC83DC /* PFAnonymousUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = B6F772B42BF7CA65B75F996B143430CD /* PFAnonymousUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 03C60FBD9CB7547B458B40058168BB28 /* UNIHTTPClientHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = EAE6707081D74AD48DDC2CD34E54F4A5 /* UNIHTTPClientHelper.h */; }; + 03E5826A251D0DE9BF070EAB5A3F6B07 /* PFSQLiteStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = 66D7E61A2DA0CCA139659AE3C52ADAC5 /* PFSQLiteStatement.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 03FDAA175EB6B999D72B4EB88E67B03E /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = E05ADC8B41F427B22AC3E815A19350EB /* BFCancellationTokenRegistration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 049FE09CD66461A8ABBDCD0F41EA4532 /* PFLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = B0315B64F3C557F7C3897F4E68B228A5 /* PFLoadingView.m */; }; + 04BE8237D681A07B607B091DCB0FCE6A /* PFRESTUserCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 78DF666508E81974752F6338C9BD57F0 /* PFRESTUserCommand.m */; }; + 04CB32149BEA0320CF6F9640A78D8327 /* PFConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4133DB2BFB881FA9162EC51EF7038118 /* PFConfigController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 04DBFADECB060B72536903FAD0684BBE /* FUISegmentedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A7EC5204AF6AD0ACD56CD9B3D27A7E8 /* FUISegmentedControl.m */; }; 055F10145C443934BB202FE4BE8E3DB2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - 056D70251AC8E24C6BF38B23DD1714E8 /* PFQueryCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A8E2C8071F308F79E8DC8D5E1A0A736 /* PFQueryCollectionViewController.m */; }; - 056DDAB5F33D617C977BAE5F25ECD98C /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC37C36EDC5E7749DCC7CEC01B8E91 /* AFHTTPRequestOperation.m */; }; - 05896B286C7BD0C5F16B9AFE7857FAC4 /* PFACL.m in Sources */ = {isa = PBXBuildFile; fileRef = C2CA7B1027D42D64DAA67C1E2011479E /* PFACL.m */; }; - 05BD04A5F73E3D27A7D713F3C5CB5F7A /* IQKeyboardManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E61330560D82210F3152034DA8D29E3E /* IQKeyboardManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 064CF6A1C6BD102075020713D14FB109 /* PFFileDataStream.m in Sources */ = {isa = PBXBuildFile; fileRef = C1648D08CE8E716C210353B82071411F /* PFFileDataStream.m */; }; - 084E0CA489A67284CCA0A3CACBF8B0E7 /* PFInstallationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B7DC16C982ED9197D1D5205693D4D1E /* PFInstallationConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0871B276C9E86024967A75834BF8BA6A /* UIButton+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = EC3F8E5AAA0D556290B7B5552E7891B8 /* UIButton+Chameleon.m */; }; - 08F77CB26BD05FE1B343D55D81CBEAD3 /* IQBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = B72FD366845653BD01ECF1385B7EA338 /* IQBarButtonItem.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 09256B3E535A3C628240CF7C752E131C /* PFUIAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F0311DC1C98B85666BEDBEE32749F74 /* PFUIAlertView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 09292E938D63ED03EE26FFF12249BDD0 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DEB4FC3937D0DC7EB7B1CE6AE0C79D6 /* BFCancellationToken.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 09AD6095076F77A17AF15C8FA5DADC7A /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A670E98EA122B6C249D0794F87C5973 /* PFJSONSerialization.m */; }; - 09FDD64FF016A46433ABC8E1A95CE5B6 /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = E15E68480948E1C08CA894190BF3AF27 /* Bolts.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 0C0D5C75A59E94327ABF2F1277BA6325 /* UIBarButtonItem+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC33545EC4D27DD8FBAA13A736EB786 /* UIBarButtonItem+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0C26152F6C1310B04B876FD3B44B1021 /* IQKeyboardManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ED929F9AD4980BC36464DF3BE248120C /* IQKeyboardManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0C4D15C99084144F0AE0AACF24644554 /* PFRESTCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 385261552CFAF1B884CE31C0FDFAC71A /* PFRESTCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0C90ECF0F1EE859A59AFA69F87780746 /* PFHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 636B22993762DB16840604D7D3A30F70 /* PFHash.m */; }; - 0CC24C2247F9698B3E15F4CD4A651E9D /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 71906898F9D4CCF17CBD5FC16B0E40FB /* PFURLSessionDataTaskDelegate_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0CCEBBF735A04B98E5C808E82DAE4CA8 /* PFObjectBatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = B658BAA68F8498FD1647DDC21EFA343D /* PFObjectBatchController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0D86170F1985007D9E2EB7D2CAFE1BCE /* IQNSArray+Sort.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D30F5219BDECE4875E21C7C337CAB52 /* IQNSArray+Sort.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 0E46571B85EE1DEB0E0BBE4324B2F5CE /* PFFileDataStream.h in Headers */ = {isa = PBXBuildFile; fileRef = FDB1BAB3B8D54F4259C686820194F1B4 /* PFFileDataStream.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0F5680893697DCD762345A72BE90A107 /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F396B4049BADC218F3C27A0FB8AF963 /* UIProgressView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0FA4BDB376E469CB553E01E199BBB63A /* PFRESTPushCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = C10C515D0450CC29CCEF68EA816542D5 /* PFRESTPushCommand.m */; }; - 0FC757A2467A1C8278B3C8E0FD126CB9 /* PFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 2247D4BD60404A85E31A8014A3D24BB5 /* PFObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0FF92B7CA2702E3FB545DBC76EB8F7DD /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = AFA966371146146D7F2018130EFE0F66 /* UIActivityIndicatorView+AFNetworking.m */; }; - 105080EA61E3AD581D9D992B1C5EB418 /* PFOfflineQueryLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = FDBF6836162C2F1E62D2A5B6917F4F50 /* PFOfflineQueryLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1053442EE9C1B64B2AAD7CB91CC8F960 /* PFHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A930BF850559AE082DDFACF6887C72E /* PFHash.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 11BCBDEFED4629E3C8FC48ED753E74E6 /* PFPaymentTransactionObserver_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 318C56533FDD447102932A6E5A233A7E /* PFPaymentTransactionObserver_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1233214C807850AC28C1C7BC25C7606D /* PFSQLiteDatabaseResult.h in Headers */ = {isa = PBXBuildFile; fileRef = ABFBC5AE1B18C02508CD09769DD4415A /* PFSQLiteDatabaseResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 12818D0029FE4E7608CDA06B0E38E47D /* flat-ui-icons-regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7389E3A97A4248463F61AE93C1902809 /* flat-ui-icons-regular.ttf */; }; - 135A844B6167C7B3BBC7AED7CA8826DA /* PFObjectFilePersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F9F93F92926388C8FFB4EC13EA0DEBD /* PFObjectFilePersistenceController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1383661E416ECA10B53C370FD7DA478C /* PFMultiProcessFileLockController.h in Headers */ = {isa = PBXBuildFile; fileRef = D10834D8E017BD682BEB53FD751CEB75 /* PFMultiProcessFileLockController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 13CDBBD7FCCA51D3FD1983ED9C0486D1 /* UNIHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = A283BA24B8BC2F745E053B68490B43ED /* UNIHTTPRequest.h */; }; - 13EFAF7127423EC8B6BE3BC894FAB0DC /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 412765A1C5B6953A288C3BAEBC8E6B37 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1443D972565FC29DF40A16022899A59D /* UIColor+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 27E94F52DD7FEA4FD150E6DFECA07CF1 /* UIColor+ChameleonPrivate.m */; }; - 15821E308FD874609FFFE7B07AA7BEE9 /* PFOfflineQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AB3B84C7DF66F47815CEE5E52615C7A /* PFOfflineQueryController.m */; }; - 16765937127A9DE7C2E2BB1C5F588B65 /* IQUIView+IQKeyboardToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = EB082ABFA0DCDEA7C961D1A1D072C3B9 /* IQUIView+IQKeyboardToolbar.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 16ADBCAD54B5CF1F3995F1AF0154F67B /* PFSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F1D3010E400E70C042940F75036BF3D /* PFSessionController.m */; }; - 16B523016828FB603F9E4D9DB07CD7AF /* PFUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0225577578F0F538D3E335508E84D451 /* PFUserController.m */; }; - 16C9563FC522AFCBB4B9593E72899D21 /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D3DED295E0CF4409F8BC8976A09F184 /* SDWebImage-dummy.m */; }; - 16CFA704931431EC2146912A493064F2 /* PFObjectEstimatedData.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CAC2D7C9A799C8A55D219041965A2B1 /* PFObjectEstimatedData.m */; }; - 170B81C1284725FB6076446FABCCDFE3 /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = BF319A176D7C5D07103C1757D1C4A6FC /* PFConfig.m */; }; - 17407DB318F6ECE65359F1988EB587C6 /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F017C36C635B636A8A9720DF93844C2F /* PFConfig_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 17826DD59204D4468835FC0C09E9EBA5 /* UNIJsonNode.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = E291C26D7FB8D9A151C45977AB616E47 /* UNIJsonNode.h */; }; - 17987D10D1BCBE60B5B277B9194A1CE1 /* PFPushController.h in Headers */ = {isa = PBXBuildFile; fileRef = 38D7F1933A49B1054CE8669A45108CF3 /* PFPushController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 17FFB9A78D520A8A0C2133681F0C4589 /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AE1A480AE466808EAF88E6FA440AA1F /* PFQueryController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1810DA64266F52B6508F1AF0754D7D1F /* FUIPopoverBackgroundView.h in Headers */ = {isa = PBXBuildFile; fileRef = 23D27BEF28A85F709CBDB0B8CB65DE48 /* FUIPopoverBackgroundView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 18BFB3DF28A19F110FE09F0BCC652A99 /* PFPinningObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = E36DC6F0E757E7535DDD2E9C1B846AED /* PFPinningObjectStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 18F82D1C6E5E33BAFAD4215A6CC4ADD3 /* PFResources.h in Headers */ = {isa = PBXBuildFile; fileRef = F6895F2BAF98D8298BFB0A2C2E84DF25 /* PFResources.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 192494CAD9AAE36D9D54BE9950D74FA4 /* PFUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = BD99F6ACFEC1E975F0FE0DF810A977A0 /* PFUserState.m */; }; - 19BEEA34AF0C75BF7625B3E99E24D16B /* PFQueryState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D7825E186E2129768F652FA322E5FD2 /* PFQueryState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1A18FCCEB1D3BF943E9E049EC19EA46D /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 1760FE20743A856B0B1A742482064BC4 /* AFURLResponseSerialization.m */; }; - 1A8275935FF8BACEEA3858BEA3434421 /* PFUserAuthenticationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F2689D7BF9856AA54533AE6210302B0 /* PFUserAuthenticationDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1A871FF7D4F4A5A7CA464BE20B506535 /* PFLogInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CF59640D2C379A8552A7FE126379C1A /* PFLogInViewController.m */; }; - 1AF8E5D403591848BFA38386949654ED /* PFInstallationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE893D8A79BCE927BD34935557FC189 /* PFInstallationPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1AFB8287EE97FBB14C982D3730384309 /* PFObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 87D7C7463212CB7E7A2C6DDE9D75FFF5 /* PFObjectControlling.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1B1F1AF2A1AB6F428F22E527890F4BD2 /* PFActivityIndicatorTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 98B7E2A8BF0A20332398DEB41B1BB68E /* PFActivityIndicatorTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1B3EB346D29198E022DC233258C133B7 /* PFURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EE7C503197A62ADD66AD452FCFEFAB7 /* PFURLSession.m */; }; - 1B63D74CBA62C2E4CEA16D613970A1D9 /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D716BF50FFA96153B62E0AE932F3E47 /* PFPinningEventuallyQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1B7B817BF37A32BD3EC434F3C36C4764 /* UITabBar+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 04E51A30E638BD5F2089972DC7339D76 /* UITabBar+FlatUI.m */; }; - 1C6C96BE29A770F780EDC084673E03DA /* PFCoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A78827F2D79D32394CB2A7F8AC054D28 /* PFCoreManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 056DDAB5F33D617C977BAE5F25ECD98C /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 447A70708A6608EE3D4BD4E556895AE6 /* AFHTTPRequestOperation.m */; }; + 05896B286C7BD0C5F16B9AFE7857FAC4 /* PFACL.m in Sources */ = {isa = PBXBuildFile; fileRef = 0528637876B6E3CD1CC1904766E72FCF /* PFACL.m */; }; + 064CF6A1C6BD102075020713D14FB109 /* PFFileDataStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CF00F1FC0F39F69845946C2AD585948 /* PFFileDataStream.m */; }; + 07A6B25857900B4C1A2C450E1B6CC2C6 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */; }; + 084E0CA489A67284CCA0A3CACBF8B0E7 /* PFInstallationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BC3203CA8DEAE4E766361C3772E32DF /* PFInstallationConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0871B276C9E86024967A75834BF8BA6A /* UIButton+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 89DE757655305B9DAB2E3EA0D59AE60D /* UIButton+Chameleon.m */; }; + 0918720A79F5B3CE0D7CCB713DCD4F16 /* IQUITextFieldView+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 22F7F0A49C5577FAC19A72BBDAE54073 /* IQUITextFieldView+Additions.m */; }; + 0925FC3D640ECBAF8B8D0AA184F95BEF /* PFActionButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 56EFB542F9FA3A986A2C18607C6BA01A /* PFActionButton.m */; }; + 09292E938D63ED03EE26FFF12249BDD0 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 78392292469D781C93066CD8051EC869 /* BFCancellationToken.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 09AD6095076F77A17AF15C8FA5DADC7A /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = E4ED7A0517A36ECA8CCCE78610B55016 /* PFJSONSerialization.m */; }; + 09FDD64FF016A46433ABC8E1A95CE5B6 /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = B77EC240733E6F154C558B7682AB8B94 /* Bolts.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0B59DB8E6AB6779CC25A6E28EF151996 /* IQKeyboardReturnKeyHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = A37B0AEE4085E5EAF1D675B479E83F07 /* IQKeyboardReturnKeyHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0BFBDC63C826F1DAD4758E0549141BE7 /* PFPrimaryButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 826F299C0C32FA4481DAE44FA6FA0A1E /* PFPrimaryButton.m */; }; + 0C0D5C75A59E94327ABF2F1277BA6325 /* UIBarButtonItem+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 81A894C8CDCCFEAB2B5E90D348379A43 /* UIBarButtonItem+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0C4D15C99084144F0AE0AACF24644554 /* PFRESTCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = CF296274D6055775584EBDE9FFA27649 /* PFRESTCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0C90ECF0F1EE859A59AFA69F87780746 /* PFHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 8924CD04B6BFE4AAC5C88AEA98869B06 /* PFHash.m */; }; + 0CC24C2247F9698B3E15F4CD4A651E9D /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DA5EF8C3E29EFFDABDC9EE3902FE630 /* PFURLSessionDataTaskDelegate_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0CCEBBF735A04B98E5C808E82DAE4CA8 /* PFObjectBatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A7B4A661CDD8F7A507BC897C1C1F57D /* PFObjectBatchController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0D433D2B67E6C443BD7CE63B01107D09 /* IQUIViewController+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C73CA6320217923A2DFB485254CC628 /* IQUIViewController+Additions.m */; }; + 0D7ACCD56C3A035010D6E8DE07225906 /* PFTextButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EDD0EDAAEC49A923F963CFF2EB1A94F /* PFTextButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0E46571B85EE1DEB0E0BBE4324B2F5CE /* PFFileDataStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F5D0B6D294347476FD73D958F09ED17 /* PFFileDataStream.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0F5680893697DCD762345A72BE90A107 /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FA89EADBEBD0F217B329170BCD40A4C /* UIProgressView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0FA4BDB376E469CB553E01E199BBB63A /* PFRESTPushCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = D2E0EEEC88F8887028FA6F0DDA67548B /* PFRESTPushCommand.m */; }; + 0FC757A2467A1C8278B3C8E0FD126CB9 /* PFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 3424FEAC2E4DE6A897AE678346A16EB3 /* PFObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0FF92B7CA2702E3FB545DBC76EB8F7DD /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D60463E70F6B8741716B5430ED6586F /* UIActivityIndicatorView+AFNetworking.m */; }; + 105080EA61E3AD581D9D992B1C5EB418 /* PFOfflineQueryLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = ED353E01D2DC7C2CFC849BFC56253F3F /* PFOfflineQueryLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1053442EE9C1B64B2AAD7CB91CC8F960 /* PFHash.h in Headers */ = {isa = PBXBuildFile; fileRef = EC4A64A0CD9BB0968D9668774F8AB562 /* PFHash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 112A2B2F920B6739EF4388D9F5F09D1D /* PFLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 80476201DCD8D8BD6436D2B68B92209C /* PFLoadingView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 11BCBDEFED4629E3C8FC48ED753E74E6 /* PFPaymentTransactionObserver_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D093C8CB7A26243277525B5AAEEFDAC /* PFPaymentTransactionObserver_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1233214C807850AC28C1C7BC25C7606D /* PFSQLiteDatabaseResult.h in Headers */ = {isa = PBXBuildFile; fileRef = DC59FC62BE26AD5C562D7BBF2224A10E /* PFSQLiteDatabaseResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 12818D0029FE4E7608CDA06B0E38E47D /* flat-ui-icons-regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 70B003B9161DCD2E0A45781DF2576C89 /* flat-ui-icons-regular.ttf */; }; + 135A844B6167C7B3BBC7AED7CA8826DA /* PFObjectFilePersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = A0B75CA0A1B123DC95D30ED0D3F93513 /* PFObjectFilePersistenceController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1383661E416ECA10B53C370FD7DA478C /* PFMultiProcessFileLockController.h in Headers */ = {isa = PBXBuildFile; fileRef = DD67EEF35668EABDA6CDE4706E5C10D0 /* PFMultiProcessFileLockController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 13CDBBD7FCCA51D3FD1983ED9C0486D1 /* UNIHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BBDBA1C6D3C481A980BC35C14B1BAEF /* UNIHTTPRequest.h */; }; + 13EFAF7127423EC8B6BE3BC894FAB0DC /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 18D28DEFCE0FAFDD3C9195B9594781FC /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1443D972565FC29DF40A16022899A59D /* UIColor+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 97B2351AC859811A6FD2A910BB95E71D /* UIColor+ChameleonPrivate.m */; }; + 15821E308FD874609FFFE7B07AA7BEE9 /* PFOfflineQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 57F620D9F908B6A65FB1CEE68626BF6E /* PFOfflineQueryController.m */; }; + 16ADBCAD54B5CF1F3995F1AF0154F67B /* PFSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = E92240B95F45B88D980A83809E4BCE74 /* PFSessionController.m */; }; + 16B523016828FB603F9E4D9DB07CD7AF /* PFUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D0A81E8C2565C9257E716AD6F1840C1 /* PFUserController.m */; }; + 16C9563FC522AFCBB4B9593E72899D21 /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A7B398E287C24BCC8433260FC465DB3 /* SDWebImage-dummy.m */; }; + 16CFA704931431EC2146912A493064F2 /* PFObjectEstimatedData.m in Sources */ = {isa = PBXBuildFile; fileRef = 8727E4ED80EA777438361FDA993B9BE4 /* PFObjectEstimatedData.m */; }; + 170B81C1284725FB6076446FABCCDFE3 /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 67B1DADD0464EB28623E46BA51F4E731 /* PFConfig.m */; }; + 1723BEF336768A66DA2AF9BCF2BE3BB2 /* PFProductTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B852FCF809F069DBCAB8194541BD2D2 /* PFProductTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17407DB318F6ECE65359F1988EB587C6 /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 793A3BFEC9783DDC1830CDC4663B9EC4 /* PFConfig_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 17826DD59204D4468835FC0C09E9EBA5 /* UNIJsonNode.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = A616ECB7E02535F4B9005E0B7B570609 /* UNIJsonNode.h */; }; + 17987D10D1BCBE60B5B277B9194A1CE1 /* PFPushController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B765AFD4A4848FC69B9C8A2E9F26602 /* PFPushController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 17FFB9A78D520A8A0C2133681F0C4589 /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 70E696DD69E7E5ED847216871E48280C /* PFQueryController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1810DA64266F52B6508F1AF0754D7D1F /* FUIPopoverBackgroundView.h in Headers */ = {isa = PBXBuildFile; fileRef = BFB3C1E76C4F806EFCDE8512A39D23C2 /* FUIPopoverBackgroundView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1891EB569E88E565A1387A243A000F4A /* PFColor.m in Sources */ = {isa = PBXBuildFile; fileRef = A3F525305019C6D6103B6394A0D2FFAB /* PFColor.m */; }; + 18BFB3DF28A19F110FE09F0BCC652A99 /* PFPinningObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 2100573153580E93D49B528DA64E5E5F /* PFPinningObjectStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 192494CAD9AAE36D9D54BE9950D74FA4 /* PFUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = AE6967C88C45F046AD5C10E7ACE7F9DE /* PFUserState.m */; }; + 196100D6BA1B2CA2FC16F09196B9F48C /* PFLogInView.m in Sources */ = {isa = PBXBuildFile; fileRef = AA873AB0DE8D007CA8F0042C3B6675E3 /* PFLogInView.m */; }; + 19BEEA34AF0C75BF7625B3E99E24D16B /* PFQueryState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 25A6BCE1E348D02F01E197A0C48E07E7 /* PFQueryState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1A18FCCEB1D3BF943E9E049EC19EA46D /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = CB77AF007BC5AA8EA10347DB05702138 /* AFURLResponseSerialization.m */; }; + 1A30E79E21EC2187DB34AA1B105B741A /* PFSignUpView.h in Headers */ = {isa = PBXBuildFile; fileRef = CB00637E4C07D93AA94189E0D17D0509 /* PFSignUpView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1A8275935FF8BACEEA3858BEA3434421 /* PFUserAuthenticationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 10327370A383E65FA840807957C88BCD /* PFUserAuthenticationDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1AF8E5D403591848BFA38386949654ED /* PFInstallationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FCCA3A37B3313BAF696EBB3102DF427 /* PFInstallationPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1AFB8287EE97FBB14C982D3730384309 /* PFObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DFE6A76A1CE11D7A2988AB23405FE3D /* PFObjectControlling.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B3EB346D29198E022DC233258C133B7 /* PFURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 524E125E9BB16B2EA346C11FA2CCF3DB /* PFURLSession.m */; }; + 1B63D74CBA62C2E4CEA16D613970A1D9 /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = F148BFBBDD8AB8A9E87918D610748144 /* PFPinningEventuallyQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B7B817BF37A32BD3EC434F3C36C4764 /* UITabBar+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B1DC4F3EA65E8107DBC6146CF990FFF /* UITabBar+FlatUI.m */; }; + 1BE7576A9CF85332BF9CE0A20A4654FE /* PFTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCA492568C51FFC3E67F860276C05E61 /* PFTableViewCell.m */; }; + 1C6C96BE29A770F780EDC084673E03DA /* PFCoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DA0612D4D7F2E82006DC4C386EE7835 /* PFCoreManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1CC6FFF7532AECCB61FF240C59D3748E /* PFLogInViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FB8156015613925F2F535F01040F256 /* PFLogInViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1D1597CB5319D82AB03C4656A4FFC3E2 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F62BD8D055CECF254F18875CD46DFA2 /* CoreLocation.framework */; }; - 1D4F83C8E6A5CCD96E035DF6E03A7C58 /* PFRESTAnalyticsCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E2E224B40477F06DF3B453832889DE /* PFRESTAnalyticsCommand.m */; }; + 1D4F83C8E6A5CCD96E035DF6E03A7C58 /* PFRESTAnalyticsCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E425907A301715A116FF9A3132EFC63 /* PFRESTAnalyticsCommand.m */; }; 1DBDEF199D3AEF9310F2935DBBBF1F89 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - 1DD099BB263B6FC964DF781D1887C906 /* PFCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = EE1F78ECB62A69EB240E2BFAAD710CDB /* PFCategoryLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1E82CB078732A340B2516F9D5971E917 /* UNIJsonNode.h in Headers */ = {isa = PBXBuildFile; fileRef = E291C26D7FB8D9A151C45977AB616E47 /* UNIJsonNode.h */; }; - 1E8D6949CBCA40DB1BB2E04CBAC3A80F /* Unirest-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 937BA62AFDBF0A1259E42BCF5763391E /* Unirest-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1EA53431B0411D64E969C75020D2253D /* PFUserFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 92D60EA1BE94F7CC68B03B328E9DA910 /* PFUserFileCodingLogic.m */; }; - 1EBA3D2F590571ADD7C4824FD35C6CD2 /* UIPopoverController+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = A97F7D38BC76709C3A8940B642F9736F /* UIPopoverController+FlatUI.m */; }; - 1EDEA12414A8201331E9B8B22F1B7F92 /* PFPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FBADA788C844BC035F839991DA33BC7 /* PFPin.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1F14458F8079F45B39F591632AF289EE /* PFRESTObjectCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D3308E5C88DF7BD7EB9571B8F71861E2 /* PFRESTObjectCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1F74418A1A844AD6F2D0BE55DB5A565B /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B4598F68BAD6898D603B376A1FB1A8B /* AFNetworkActivityIndicatorManager.m */; }; - 1FC72C12CFE43E264EA429E7DB7C7787 /* UNIHTTPResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5272189E4887F0A7478864335C376F72 /* UNIHTTPResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 20868FC093029679C5D39FF2B3620B1D /* PFQueryTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A7759BCCF26709D483AEAA4CA39B1AC /* PFQueryTableViewController.m */; }; - 2122B48610E7556893633F090FF877DB /* ChameleonConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C1BEBF049C3CF3B9440DB6E9743072A /* ChameleonConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2142C67AE21760B7CC6503EA03FF5F66 /* PFAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 63E672189DC0628FEE2AF3B6EF6CE5F6 /* PFAnalytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 21486DFB5F9A1C12F5615840459CF0E1 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C9045272DB5D24BA18512C635B70BF34 /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 21BCE7766FE3C1F059C9002704419CA1 /* PFPaymentTransactionObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = AC8E66BCE1B2B67DA2045E7EB6549471 /* PFPaymentTransactionObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 21DC14D176AC70D4936783626B9F0377 /* PFSQLiteDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4075748CA8F21BAC0F4620D185E8FD8E /* PFSQLiteDatabase_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 21E02BBD258139C9B5170C242EAB46EB /* PFCommandRunningConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A29FD65C70682683A3D7D37BD9F78E53 /* PFCommandRunningConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 21F70A540678BB24C4996F1CD1855CA9 /* UIColor+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 73B12CABD664167D981D0544B9928022 /* UIColor+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2248CB8CC7031E8FAA06E3E917BC5734 /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BAFC8795A0D106AB97B4408C85D0A49 /* PFRESTPushCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2267E143F866BBFEB39DDB060F71B943 /* UNIHTTPBinaryResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A42508E95E64986B0EDAFC9E7C7942A /* UNIHTTPBinaryResponse.h */; }; + 1DD099BB263B6FC964DF781D1887C906 /* PFCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 089CCF84955BA2531A9DA4EB301EE774 /* PFCategoryLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1E82CB078732A340B2516F9D5971E917 /* UNIJsonNode.h in Headers */ = {isa = PBXBuildFile; fileRef = A616ECB7E02535F4B9005E0B7B570609 /* UNIJsonNode.h */; }; + 1E8D6949CBCA40DB1BB2E04CBAC3A80F /* Unirest-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DE1C0FA9FAF3336E0D882CF851F8D942 /* Unirest-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1EA53431B0411D64E969C75020D2253D /* PFUserFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = CA81F6D4EC4A09874076DCCE8890B484 /* PFUserFileCodingLogic.m */; }; + 1EBA3D2F590571ADD7C4824FD35C6CD2 /* UIPopoverController+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DDE204F56A235BFC67201687941B5F5 /* UIPopoverController+FlatUI.m */; }; + 1EDEA12414A8201331E9B8B22F1B7F92 /* PFPin.h in Headers */ = {isa = PBXBuildFile; fileRef = A7B9CAD0F05D1A202F8BFBCEC0C7F240 /* PFPin.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1EF0C2E2ADE21F09A52C24D1C6A1DEB5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; + 1F14458F8079F45B39F591632AF289EE /* PFRESTObjectCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F975DFB0B29996EF17B1A0A3E07BC65 /* PFRESTObjectCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1F74418A1A844AD6F2D0BE55DB5A565B /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 749D4221E99EEA9B5BC4964E736739C2 /* AFNetworkActivityIndicatorManager.m */; }; + 1FC72C12CFE43E264EA429E7DB7C7787 /* UNIHTTPResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = F6390E9096EABF37B25ABD5CAB5B561B /* UNIHTTPResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 20E7C991D833842AC8BD7B3F676A5CCE /* IQToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 97EE31EC4749C71A2BAD9783137A7666 /* IQToolbar.m */; }; + 2122B48610E7556893633F090FF877DB /* ChameleonConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 63A96BD4D5CE686506290E2B2F6864B5 /* ChameleonConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2142C67AE21760B7CC6503EA03FF5F66 /* PFAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EE2A8D1E5AFBD0420E65DA1389499B3 /* PFAnalytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 21486DFB5F9A1C12F5615840459CF0E1 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6721C44FB15736B15A7A9FF9DEE5BA27 /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 21BCE7766FE3C1F059C9002704419CA1 /* PFPaymentTransactionObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 1934CD496BF357F3D85BDB55F2D42649 /* PFPaymentTransactionObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 21DC14D176AC70D4936783626B9F0377 /* PFSQLiteDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E0CC60D5D61DAC18565BFA86B04B3091 /* PFSQLiteDatabase_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 21E02BBD258139C9B5170C242EAB46EB /* PFCommandRunningConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A5FAEE78A4702D335F3353DE5B22486B /* PFCommandRunningConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 21F70A540678BB24C4996F1CD1855CA9 /* UIColor+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = BF928DF49EC124F57C165424C653912E /* UIColor+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2248CB8CC7031E8FAA06E3E917BC5734 /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC40AAE4F66D4423B9D67D418FE9E45 /* PFRESTPushCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2267E143F866BBFEB39DDB060F71B943 /* UNIHTTPBinaryResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = C8C622D61D94B0BB8BC678A39B314790 /* UNIHTTPBinaryResponse.h */; }; 22BAE8994ADCD5A6A4D71352BA0D0954 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3780C220917B4DD9DC02DDD7323405B0 /* SystemConfiguration.framework */; }; - 22C4D0EA9DC115B2C820CC447AA2DCBC /* PFSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DFD47DBE4E7606BA4FA86C0F5919CDD5 /* PFSession_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 235CA0C0E4047D17A23597B064580FDC /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 255D9757582A2D903E70F23C181DF04B /* PFLocationManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 22C4D0EA9DC115B2C820CC447AA2DCBC /* PFSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B54AB9EA09EEEF30796D34F7D163FE45 /* PFSession_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 235CA0C0E4047D17A23597B064580FDC /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 14B527B21E752166A0ECE57755F5B742 /* PFLocationManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; 237A599B046B4F3EB709E88AC0C2F107 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DE1802829062F013D376CB812C19065 /* UIKit.framework */; }; - 244941FCFAF0AF23318B474B95FDC752 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = CF3F287B1CCA362FEB1A80FCD3146513 /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 24C5777AA30FE28C5A943689139B9DA1 /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = AA2E139C45664A8F35F7CC0FC4652D64 /* PFAsyncTaskQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 24D23BC1BBB0A7A7F30C9EC3F45CCBB8 /* UNISimpleRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 45CDE5CE83E5FA7A91A9F1B5B0BA5342 /* UNISimpleRequest.h */; }; + 23852A0A5F7CE41D512D4613ECBD39DA /* fr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = CAF92C30B6888E0F131016AB7EE40127 /* fr.lproj */; }; + 244941FCFAF0AF23318B474B95FDC752 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = C0B062364FAD300B57FFF2CD44278F60 /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 244DC49E1540D69F3CF41F9E39418FD4 /* PFImage.m in Sources */ = {isa = PBXBuildFile; fileRef = F14562D32CD87B15414FD459F3B13C75 /* PFImage.m */; }; + 24C5777AA30FE28C5A943689139B9DA1 /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = DC28C0625C2B08E7619AEFBF99128019 /* PFAsyncTaskQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 24D23BC1BBB0A7A7F30C9EC3F45CCBB8 /* UNISimpleRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C46519EC14E1637D6277AAE86419317 /* UNISimpleRequest.h */; }; 24F2BC96841F8A37EC52957AB59F2B70 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */; }; - 250A6A22ADFC9DCDE240E81BF031C373 /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 02CAE2970238AAA1CC6CCF79D78A95D9 /* PFMutableUserState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2552EF538219FE248A64E2D5ECE1F267 /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 2A04E1624A7D22B26C4108F5511DBA59 /* en.lproj */; }; - 25716D382DCFCAD7F4D883C97A203B25 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = E594ABB625D8E0146B3BC5AF5C3BD580 /* BFTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2572640CFC23B4C317C822B8F7052777 /* PFTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3E3071B72FB3D58BE54787E6BDFB30E /* PFTableViewCell.m */; }; - 2577E5E644A5FDDF4CB92BAF5F31EC7D /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EDC42BD069E7A8A5E8A432640A1F523 /* PFPushUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 262301EFB0DF84B163076AE6AE233A63 /* PFUser.h in Headers */ = {isa = PBXBuildFile; fileRef = CFFDDC90032F16F94B5EC26EFEF453DF /* PFUser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2644C9F43A44BDE784C59C428084FC25 /* PFRESTCloudCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = C4ECEB822EE787E43E4B3D81D192BD08 /* PFRESTCloudCommand.m */; }; - 278C6EAEEE0A5BF8D626590F9CE97ACD /* PFMutableFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 70A3394AFCD610A0CB8D77E3345EDC43 /* PFMutableFileState.m */; }; + 250A6A22ADFC9DCDE240E81BF031C373 /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = F30BAE81C83BFC24C3F09853774210B8 /* PFMutableUserState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 25716D382DCFCAD7F4D883C97A203B25 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BE0320666C40F6DC06AF96C24A87FFC /* BFTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2577E5E644A5FDDF4CB92BAF5F31EC7D /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A163F69034220CA4460D8608674DCAD /* PFPushUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 262301EFB0DF84B163076AE6AE233A63 /* PFUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A13FE5C7D35D0AE5753E0BBDB76B4DD /* PFUser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2644C9F43A44BDE784C59C428084FC25 /* PFRESTCloudCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 95314205CD5BD2133AB7512597330119 /* PFRESTCloudCommand.m */; }; + 265EC3AA4B084F65A25382B691F9B3A7 /* PFSignUpView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A79E98AEE84BCDEC2A44AC20B564C75 /* PFSignUpView.m */; }; + 278C6EAEEE0A5BF8D626590F9CE97ACD /* PFMutableFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = C8EA7A9046754051261628FE4A4FBC57 /* PFMutableFileState.m */; }; 287FFE08BB132472B7CE5BB3F47506B6 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F47F6AD14A34D9AF4DC5B0EC8FF52D24 /* CFNetwork.framework */; }; - 2921ACB9BA038E23AD06882CA0726C09 /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 10047E16CC827DC41FA3CA3C588A92AA /* AFSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 29BBF790B6F414BA173B1B782F99AB27 /* IQKeyboardManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 748B0CC576A8F49BAB1FF66E84471822 /* IQKeyboardManager-dummy.m */; }; - 2C9ABA75D5226F81794858C2526DCC7C /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */; }; - 2D88653DF74717862CA3930405E6B1A6 /* UISlider+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = F06AE122820D7A69B28B8EE2E62E85F1 /* UISlider+FlatUI.m */; }; - 2DE51A8444F0CEE2BEA32BBE1D5A2C54 /* PFSQLiteDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = E743DD9EBFBFF918EF56FABFE4C5AC4D /* PFSQLiteDatabaseResult.m */; }; - 2EE700C80315947D821E53B00AA74847 /* Parse.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C58B900BAB52BE6C1A6AC9401D85688 /* Parse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2FAA5B2F5F9FDDE4AA56578E1EAC701A /* PFTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 15E60AC5AE5D9C7E54C124BD0AF98894 /* PFTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3005D65B0D40094D6DA7A7D7213106DF /* PFImage.h in Headers */ = {isa = PBXBuildFile; fileRef = B76589E19EEC53370B66781B36DA63ED /* PFImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 30363108F907B435D4933CECA8A71F1C /* PFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C38C5BECC83269A118226CDCB9D7F23 /* PFNetworkActivityIndicatorManager.m */; }; - 30DE4D927EC179D0C616A2855CDB459A /* PFLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E151F5F8DCE58DAE5D1BA2B8EF1ABE8 /* PFLoadingView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 30EE70080B2F12E67F05AD0CAC186B75 /* NSArray+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 866C32999AC6688E43E9E3A792BC2D34 /* NSArray+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 31185487A9186107B6DE9891D14BFE90 /* IQTitleBarButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = BA5631014AC595496E91221859D20693 /* IQTitleBarButtonItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 312C40EA300F699058F45DE66C7F9C51 /* UNIBaseRequest.h in Copy HttpRequest Public Headers */ = {isa = PBXBuildFile; fileRef = B3DEB5E877C555C69169163E7AE3DCD1 /* UNIBaseRequest.h */; }; - 313BD1D22D3DE3450A1B4727713A15E9 /* UIAlertView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 13D51BF48F5AB0EACFEFDE67304AE0AE /* UIAlertView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 31C43362935AD5BBD696F7FAA1492DD0 /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 37FA8F56A1FA6A8339B3BF6A946BAEE1 /* PFCategoryLoader.m */; }; - 324F9FD525319CA2193E87C87FD96700 /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CB133094501625DCA52F72F4C4E2B46 /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32B13741B4A59633A35C03D3BD085300 /* PFPush.h in Headers */ = {isa = PBXBuildFile; fileRef = A869D04D94D174D538E8EEC8AD639A3F /* PFPush.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32C1805D7037A65C326F15AAD4BE4831 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D76EBB2E083B394F15EA609C72DA53F /* BFCancellationTokenSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32F3C97B6182D3AC5A80BA4739537E08 /* UITabBar+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 71F87070D4783A8D6F354D8BCAB875C3 /* UITabBar+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 33263E341C1322500C5F2632B22EECA7 /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DE2D5472532E535898481C5442AAA5B /* UIWebView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3365FAB014526B23559C5872E3437594 /* PFObjectFileCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 13F31358F978DB7AE6B1DDF2572DD630 /* PFObjectFileCoder.m */; }; - 33DDA524C70EF2A533A82C76BC02D588 /* UNISimpleRequest.h in Copy HttpRequest Public Headers */ = {isa = PBXBuildFile; fileRef = 45CDE5CE83E5FA7A91A9F1B5B0BA5342 /* UNISimpleRequest.h */; }; - 33E6684C7788A971BC853F79DFF4CEBB /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C575A54BA05AD27990EABB75C2F2926 /* BFCancellationToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 34282579CDF97D7263F08A2B79AF81D6 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = B9DD11F8C4BB31A6C209F4164F43F64F /* PFEncoder.m */; }; - 343BA4FDC3A386CEC60414AF4686A9B9 /* PFLogInView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EDBAED551FD57F89EBFB1F16C24A8BC /* PFLogInView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 34548E9B4CDB70E6E52F11A181092423 /* UNIHTTPRequestWithBody.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 843985569B6BCF4CD645497A32668195 /* UNIHTTPRequestWithBody.h */; }; - 348A4B6738A8BD6637F87F3926564CEF /* UIImage+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 0071EAC09DA0FFDA8FB3410D2936CA80 /* UIImage+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3491354D5E3DF8A5EFB4DB1ACBAB9B29 /* IQTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3EC67DF2778EB45CB9E74820D228B3 /* IQTextView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 34A10781FF0D6156B2F0E33BB5DF0224 /* PFDefaultACLController.m in Sources */ = {isa = PBXBuildFile; fileRef = C571323D266A5975685DD2191C775A9A /* PFDefaultACLController.m */; }; - 354857C6F33F12FCA2CFDB52898A2255 /* UNIHTTPBinaryResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = A89D66CA82F4BB4ED27F23A368117AD8 /* UNIHTTPBinaryResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 35DFE8F14A41999C6A59595E8B8A147F /* PFObjectUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 08FAD9262BEE1666BF4D27626214085C /* PFObjectUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 365CF97A9023756C3B71A78C0F150024 /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 54A49B5066DC5E2D106E4AB7EC84E310 /* ParseModule.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 36D51FC3C4F0F93BF917316E39608365 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - 37A3F447E3723760E69C1AC533341CF4 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 76CB784D54B055F86031B44399CB67A2 /* UIRefreshControl+AFNetworking.m */; }; - 38633D20F3A40F43C90014227D54371B /* PFConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = CB714FA67888C5CA046827C36660588D /* PFConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 38B64A887C7C04EAEE5414A2715EEC58 /* UNIHTTPJsonResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = BC984301125702EFEAEC41E5B9293303 /* UNIHTTPJsonResponse.h */; }; - 38D829CEA9E110D82321565160D8394C /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 6133AB3618602C2A8838511FEC730F13 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 390E4C4935A539E3C35633049F4C4C0D /* NSArray+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = EDF1B2BF95B7B8E40AF9358E2CAC9C93 /* NSArray+Chameleon.m */; }; - 3A066B9A2C17944AB5CE63613BCB1EC5 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BF3E9A8E7DEEA28BC70D87AF3DBEC43 /* BFCancellationTokenRegistration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3A1CC2DA6F8F25B29230E84636D88D6D /* PFCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = 998337F9EFB691B95AC04D0DEDFA76DF /* PFCloud.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3A83FC797677226A54553528FDC17526 /* PFURLSessionUploadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D840D2F9AFF823F94F3AB0131703459B /* PFURLSessionUploadTaskDelegate.m */; }; - 3BC2F4893F897433C613EEEE5EE935A2 /* FUIPopoverBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = CEE4FFACD555D625ACE047DB1EE70750 /* FUIPopoverBackgroundView.m */; }; - 3BFD15515778438F53184FB409F433FA /* PFHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = CD6556ADFAD1BE0857B3369A52050CC6 /* PFHTTPRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C4D35E189329636BFF6117BF20985E3 /* FUITextField.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D4160C37DEDD4C39102E2A7D159A51F /* FUITextField.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C8E21B73FA1F3272C097FF1635AE123 /* PFJSONSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = F8778205B24E6652290E0F5E7CA361EC /* PFJSONSerialization.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3DBB6503CA0A6A4010CBF5811D2EF6A0 /* PFOfflineObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = F449C107CBE098205F80BDB0D60F2E22 /* PFOfflineObjectController.m */; }; - 3DC92CBA93056F0AB9A06A9690F79256 /* IQKeyboardReturnKeyHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EC3FC2DD569F8D2763648C4F041C266 /* IQKeyboardReturnKeyHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3E3D4C3FBC3D5752FB6F7D8CEC6DD58C /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EBF18A4C5D5CB1C2B68379E0F011BC7 /* PFEventuallyPin.m */; }; - 3E9C3B14F625AD4489FB47F637D3AD44 /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = C6620BB5952ABF0E4296A0D2DB7BE02F /* PFKeychainStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3F2C1610BA5B0F27BAB9D3067AC8FB30 /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F6C72DA72BB9A832890E4D4C02C794A /* PFBaseState.m */; }; + 2921ACB9BA038E23AD06882CA0726C09 /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 59ECECD66E1B23B4D503CFCF46952262 /* AFSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2B08FFD13779AF38637AE45D96FC4539 /* ParseUI.h in Headers */ = {isa = PBXBuildFile; fileRef = B7308BC8BA2DF875593DADD527D898A7 /* ParseUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2D88653DF74717862CA3930405E6B1A6 /* UISlider+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = FB2160A0B485224469FAF6BA39EB0364 /* UISlider+FlatUI.m */; }; + 2D9C9874A5E0BFD7EC15207A5008A2E9 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */; }; + 2DE51A8444F0CEE2BEA32BBE1D5A2C54 /* PFSQLiteDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = B9699B645F9D9FD06B73D75CA3FB069B /* PFSQLiteDatabaseResult.m */; }; + 2EE700C80315947D821E53B00AA74847 /* Parse.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B9244AA4FFAD4954BC0B0ACB67D2F4C /* Parse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2FCE284E00285EE0D6C39B4039CD0621 /* IQPreviousNextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C159A4F2438A5E10FDA73505BEFA94D /* IQPreviousNextView.m */; }; + 2FFABE52A081FE4BE451A2B1F06E2149 /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = DC7BB69962EB8928BACCE0021E544A5E /* en.lproj */; }; + 30363108F907B435D4933CECA8A71F1C /* PFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C6149FA7454A58C374DE984CBB2B5D5 /* PFNetworkActivityIndicatorManager.m */; }; + 303EF0EA5F4EC4173321804ADF5C4A8E /* PFRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 74507F19D1FF215BD94690AA2D88047B /* PFRect.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 30EE70080B2F12E67F05AD0CAC186B75 /* NSArray+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = CD004273FD354237F7D844A9BEAA8D1E /* NSArray+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 312C40EA300F699058F45DE66C7F9C51 /* UNIBaseRequest.h in Copy HttpRequest Public Headers */ = {isa = PBXBuildFile; fileRef = F002184D6C52C347609B0935CC6CF065 /* UNIBaseRequest.h */; }; + 313BD1D22D3DE3450A1B4727713A15E9 /* UIAlertView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 992F6F2CF6AA0579EA8E24CB235D73BA /* UIAlertView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 31C43362935AD5BBD696F7FAA1492DD0 /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B85775602BF2725E42724F544D6ECD0 /* PFCategoryLoader.m */; }; + 31F9A88DA1F14642D4C4092CE9F01590 /* PFQueryTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 93DC759AA838D19EFDB5EE39A0FD3B8A /* PFQueryTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 324F9FD525319CA2193E87C87FD96700 /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 110AAF7EB53ECB71214D319069E26CBB /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 32B13741B4A59633A35C03D3BD085300 /* PFPush.h in Headers */ = {isa = PBXBuildFile; fileRef = C64D42AAE0A0E697FE455FDDF0F6AF44 /* PFPush.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 32C1805D7037A65C326F15AAD4BE4831 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = CE1F8CA7790E14B93C4917A7AA6806F0 /* BFCancellationTokenSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 32F3C97B6182D3AC5A80BA4739537E08 /* UITabBar+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = C566D49A7C726CF5969F4B79AA9ED6C7 /* UITabBar+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 33263E341C1322500C5F2632B22EECA7 /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = FD5C4496FDDA02FC33B9EF297AD6BF6A /* UIWebView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3365FAB014526B23559C5872E3437594 /* PFObjectFileCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D50D22BBDCF4938379296E2F238F866 /* PFObjectFileCoder.m */; }; + 33DDA524C70EF2A533A82C76BC02D588 /* UNISimpleRequest.h in Copy HttpRequest Public Headers */ = {isa = PBXBuildFile; fileRef = 7C46519EC14E1637D6277AAE86419317 /* UNISimpleRequest.h */; }; + 33E6684C7788A971BC853F79DFF4CEBB /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 53CEB84926E7FC9E2CFE13206641FDF1 /* BFCancellationToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 34282579CDF97D7263F08A2B79AF81D6 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 029C15EA534199B8D6FF5549EDA5174A /* PFEncoder.m */; }; + 34548E9B4CDB70E6E52F11A181092423 /* UNIHTTPRequestWithBody.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = E1429F34AED40EF32B9C37C25F4B5395 /* UNIHTTPRequestWithBody.h */; }; + 348A4B6738A8BD6637F87F3926564CEF /* UIImage+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D9DF0C4B326ED5F2D1D4EAE13266284 /* UIImage+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 34A10781FF0D6156B2F0E33BB5DF0224 /* PFDefaultACLController.m in Sources */ = {isa = PBXBuildFile; fileRef = B09F7439A6613B5442F51FD2DEE7DFB7 /* PFDefaultACLController.m */; }; + 34FB30E858367D47FED90E6B3E4605AA /* PFSignUpViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 17A8A4A862EC921341A6294A505E8C17 /* PFSignUpViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 354857C6F33F12FCA2CFDB52898A2255 /* UNIHTTPBinaryResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = F84345E7863ED40A20705BCC540EF530 /* UNIHTTPBinaryResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 35DFE8F14A41999C6A59595E8B8A147F /* PFObjectUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = B19AA6954ACEF35AEBBB17B964C0E14C /* PFObjectUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 365CF97A9023756C3B71A78C0F150024 /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = A747F1408C49254D6028E4F8891C4084 /* ParseModule.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 37A3F447E3723760E69C1AC533341CF4 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 719F3201FA8FF71792294DDA9C2E0678 /* UIRefreshControl+AFNetworking.m */; }; + 38633D20F3A40F43C90014227D54371B /* PFConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DDFDA2543E81B2D6485145052BA73C2 /* PFConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 38B64A887C7C04EAEE5414A2715EEC58 /* UNIHTTPJsonResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 328E074028831B7162CC31C478F53164 /* UNIHTTPJsonResponse.h */; }; + 38D829CEA9E110D82321565160D8394C /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 829A5C4EB781110BB7C73A0432188FD5 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 390E4C4935A539E3C35633049F4C4C0D /* NSArray+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = B4749B8DD730E19C293B814FC52D7503 /* NSArray+Chameleon.m */; }; + 3A066B9A2C17944AB5CE63613BCB1EC5 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 13621BDB45C7DD8B00AEED3D06BB3D73 /* BFCancellationTokenRegistration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3A1CC2DA6F8F25B29230E84636D88D6D /* PFCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = E65E7AF0524FDBEF23D5EFA1398195EF /* PFCloud.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3A83FC797677226A54553528FDC17526 /* PFURLSessionUploadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A71FEF7E5647E074B2A574E5FE4CDF3E /* PFURLSessionUploadTaskDelegate.m */; }; + 3AF7CAD58044A895437E02A54D89803F /* IQTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B577949D6BEA39F003EEBD1157A4423 /* IQTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3BC2F4893F897433C613EEEE5EE935A2 /* FUIPopoverBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = 518E2B391F997E4CCF271F754FA363A8 /* FUIPopoverBackgroundView.m */; }; + 3BFD15515778438F53184FB409F433FA /* PFHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 65BFCDD2C8EE6E26312798F208A450E4 /* PFHTTPRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C4D35E189329636BFF6117BF20985E3 /* FUITextField.h in Headers */ = {isa = PBXBuildFile; fileRef = 4576727BB25DE279D205E8F0DB89DB48 /* FUITextField.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3C8E21B73FA1F3272C097FF1635AE123 /* PFJSONSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = B6B448028CCE0AD7EDBEC9BE86199EC1 /* PFJSONSerialization.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3DBB6503CA0A6A4010CBF5811D2EF6A0 /* PFOfflineObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F4922424C98CDCBAF70F6694F7186 /* PFOfflineObjectController.m */; }; + 3E3D4C3FBC3D5752FB6F7D8CEC6DD58C /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 920C6629AB79F0D4396D3F62D12B3527 /* PFEventuallyPin.m */; }; + 3E9C3B14F625AD4489FB47F637D3AD44 /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 79FD47C9A55EA483579D7171540525DC /* PFKeychainStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3F2C1610BA5B0F27BAB9D3067AC8FB30 /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3BF9878F0834C3730E36D502F45185 /* PFBaseState.m */; }; 3F9F253CF143CE15C66E99719E1296F6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - 4017F157B6276B31A37E281C033F7D41 /* UINavigationBar+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = EA4EB23C725FCF4754FDC1ECC1A03D47 /* UINavigationBar+FlatUI.m */; }; - 402896AEC22293D8BCD6860E87020689 /* BFDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = BC79A8ADF356BE7E0C97159A9173BD3E /* BFDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4088CBC095D20D651F6BA5F7A3FED8FE /* PFActionButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C796738B070BC90BE32479A8A3AF602 /* PFActionButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 40F68DEA67982D3B13DF8EC32D23C859 /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 68664BFE50321FF5CE50A110AAE7E2E5 /* AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4017F157B6276B31A37E281C033F7D41 /* UINavigationBar+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = F4F2DBF73DDDA25055C195018E9186F0 /* UINavigationBar+FlatUI.m */; }; + 402896AEC22293D8BCD6860E87020689 /* BFDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CD3DF3B3BA00C9C3B9025084D6018EA /* BFDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 40EE14623331B78066A61917BB957969 /* IQTitleBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 848D623C2A83A163ACAD11BD0385C867 /* IQTitleBarButtonItem.m */; }; + 40F68DEA67982D3B13DF8EC32D23C859 /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = A6710EB1470E4F0F7701E1C154191C58 /* AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 424186E1571F6A9EA76817C716384271 /* PFTextButton.m in Sources */ = {isa = PBXBuildFile; fileRef = A89A6272C760E24D4FCB53B305AD1CCB /* PFTextButton.m */; }; 4258F7777937094D7BE116408C78DC46 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA6600846C35A33A9E0A0436C4B4BC26 /* StoreKit.framework */; }; - 42B6719FA91532EEEF59E348C9F722F6 /* PFRelation.h in Headers */ = {isa = PBXBuildFile; fileRef = B1A39241452F7C9E16CF2D824F7364DC /* PFRelation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 43F3A74CC45BE08D52C8BCDC56F58617 /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 40668A53B58A0048FA222C4AB7E2189E /* UIButton+AFNetworking.m */; }; - 446C0BBFFD9EAB06C6FCCF34AE0E5286 /* FUISwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B28432D4AB483D9A86C6817FB52BF45 /* FUISwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 448ED42670A895C7549BEB4765047AB3 /* PFURLSessionDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 46AA5FBD23466BC2877613E9ED755E8F /* PFURLSessionDataTaskDelegate.m */; }; - 44C1F895434928D4584C6938E69F6D32 /* PFUserPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 50662E86832F5B9AA451BDE684D8D13D /* PFUserPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 44D664F52828716532BBE6F0A5D9BF6B /* PFPushChannelsController.h in Headers */ = {isa = PBXBuildFile; fileRef = F38FDD5066166323AEDEE66D20C6F9C2 /* PFPushChannelsController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 456125DA576BBA0E50106E319FF73A44 /* PFCommandURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 809F219DA65FEDD9A6F8E2DF586F7D62 /* PFCommandURLRequestConstructor.m */; }; - 457A1B73EB100DB2139DCBA29A6DB28A /* PFURLSessionJSONDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E725EA90CDD636F75AA6136536B4106E /* PFURLSessionJSONDataTaskDelegate.m */; }; - 466DA06DD6F7E087A1C72AA91896B56C /* PFMutableACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = CA65A1A27CD00A01A317F904467FD513 /* PFMutableACLState.m */; }; - 46A85D0B3E105715569CB1BC5C7C88C8 /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 311DAB5AE58D986B329A83CDA6086370 /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 46BF99BEBFFD63DBE8BC085CD18A4024 /* PFRESTAnalyticsCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B4159A9FBBE236E3AC1B55F41CC8C84 /* PFRESTAnalyticsCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 46C66D1485581BB40EFAB6E834BD8C47 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BE58929E3D2856E2FF1200233D5AEB2 /* PFEncoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 46F36C74EF8B07192275578A983B1E96 /* PFAnalyticsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = F2BA222B9F01795A4208422B79E054CA /* PFAnalyticsUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4777B57796CCF2501C8E4035ABC45459 /* PFRESTConfigCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 818DBD3B6CFCFF9DC445CD8574113BAA /* PFRESTConfigCommand.m */; }; - 4896AA0698E4DAD2C367D7660C9257A6 /* IQUIWindow+Hierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = 25397001B9BF4C1125DCF8D75A89971C /* IQUIWindow+Hierarchy.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 49213E71A202E706B4C67562EC826709 /* PFUserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = E7F24C0BF2AC1D3A0AB451BCE534C2D0 /* PFUserConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 492386F98E4215A5AD79F9CC7670AED3 /* ParseUI-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 586F2194798AE4805A6F8FE5E6F506DE /* ParseUI-dummy.m */; }; - 4927A5D31337BBF09B4D630EEBB29762 /* PFACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 41C24ABA60DD2C0A252F655A688A17C6 /* PFACLState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 493A39F7AB5CC399A17F93EB112A7C15 /* ChameleonMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = E99932D8C34D4E771914E628104B89C5 /* ChameleonMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 494AB2A28A1FE50E4A600C9EA897D4DD /* PFInstallationIdentifierStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CDDE8A709E5616D62A31C917FE40D76 /* PFInstallationIdentifierStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 499795646572C0F4982F952399B79430 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 00D07CDF153D8265CAE511A266EBBD92 /* AFSecurityPolicy.m */; }; - 49DF183B1AF52E821ED5A77B97CF6DCB /* UNIHTTPJsonResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B4F6F85D50E4CA8F5E785A0C0E8F842 /* UNIHTTPJsonResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 4B2AFEB8AA38E3742467F54CF68224C6 /* PFEventuallyPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 7870F841A362ED1E4FFA8F36CA9D297E /* PFEventuallyPin.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4B711F7739F9BC189B32ABDB6BA90A0F /* PFCurrentObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 99FBB19FAFA339DAE8A2130BCBCD5A90 /* PFCurrentObjectControlling.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4B9F5156E5DDC40B87884E5C37B1153B /* IQUIWindow+Hierarchy.h in Headers */ = {isa = PBXBuildFile; fileRef = C1E8E202F03E9DFA6AFB0F098ABD3A06 /* IQUIWindow+Hierarchy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4BAD01BECD8E7D90990BF6B30EAC04C3 /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 2028AA6088F4575DAF17E2F06D2DC064 /* PFAnalytics.m */; }; - 4C94CABF04CF5B40BA9A93E090EB08AD /* PFHTTPURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CFB142945D82B4D948325BA5F017A04 /* PFHTTPURLRequestConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4CAADF796B7A0A57121A9E3C287127C5 /* UIViewController+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 656E2AE30EB08EBE4FFC367B7AE4DEAE /* UIViewController+Chameleon.m */; }; - 4D410BAF4CB2B1C8C7AD0F85700EE2D8 /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = A24E7517836476C9939D680AAF9AAF11 /* PFAssert.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4D78D87B1BB66CD942A878041185C7C0 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BE6842882A4FB9F520482896F6AB111 /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 4D9D2707B9A1C9724DFCD9D69B993FA1 /* AFNetworking-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8852424B3CD79FB522C7DBB741B3A915 /* AFNetworking-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4E149934317AEC01048B753730F6EA9F /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D75D7FA476F50BC5FB3F3B0641D2926 /* AFURLSessionManager.m */; }; - 4E1AD5C16CF7F3F2397F4A106F313096 /* IQUIViewController+Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EFCD2984A81FFD36BD6341ECAD197B3 /* IQUIViewController+Additions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4E349CA31573A68A02AD4F89FDFAA05B /* UNIRest.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 6226CB7D1425E15682AC63FA51921DD7 /* UNIRest.h */; }; - 4EDC3D68FA4D08025BAF6A25AFB5E65B /* PFReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = DF725FD55935B6C23669417D4E1B2668 /* PFReachability.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4FB349659BB29F142EB4C5A11CF8D33E /* PFDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F3997BE1E4CB1C34C279A257963F192 /* PFDevice.m */; }; - 4FEBA5F071565CE6BEFF968CD56E365A /* PFRESTObjectBatchCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = C6725615AB0EB3D222E0B93D2EC3C6B7 /* PFRESTObjectBatchCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5064614BEFC3E1DCB85B376E7C849393 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1579F2982C42C23D86C4671BEFC5BC9E /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 50696775E4E363709DA7C32DDE26C749 /* PFPushController.m in Sources */ = {isa = PBXBuildFile; fileRef = D26D67D3B6418EC0A3EC02DFD678C696 /* PFPushController.m */; }; + 42B6719FA91532EEEF59E348C9F722F6 /* PFRelation.h in Headers */ = {isa = PBXBuildFile; fileRef = 373B403D2BC5D282CCC10F9AF474DEE1 /* PFRelation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 43F3A74CC45BE08D52C8BCDC56F58617 /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 523B0739D98E30356009D72E50CC1DDB /* UIButton+AFNetworking.m */; }; + 446C0BBFFD9EAB06C6FCCF34AE0E5286 /* FUISwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FE2DCAC734B4286316670697800D439 /* FUISwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 448ED42670A895C7549BEB4765047AB3 /* PFURLSessionDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9493E918DE059197B488AEB66DA6E6DF /* PFURLSessionDataTaskDelegate.m */; }; + 44C1F895434928D4584C6938E69F6D32 /* PFUserPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 249176052C8E9FF258B54C64D59D6DD2 /* PFUserPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44D664F52828716532BBE6F0A5D9BF6B /* PFPushChannelsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 212A31C3327EAA3D513C3DE44A109768 /* PFPushChannelsController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44E515AEC571BC7E0022D7EC3E46C355 /* ParseUIConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7C94F9DF9D3C658BC5608AEB9B49B1 /* ParseUIConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 456125DA576BBA0E50106E319FF73A44 /* PFCommandURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 487BDB4CA79192A229759CBAEB510235 /* PFCommandURLRequestConstructor.m */; }; + 457A1B73EB100DB2139DCBA29A6DB28A /* PFURLSessionJSONDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8967DDB36504C317B821DF34152AC486 /* PFURLSessionJSONDataTaskDelegate.m */; }; + 466DA06DD6F7E087A1C72AA91896B56C /* PFMutableACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D0B8387029A2FBE4D1B3128F06E3921 /* PFMutableACLState.m */; }; + 467950FEB327FA58BF3AB19866202783 /* PFActivityIndicatorCollectionReusableView.h in Headers */ = {isa = PBXBuildFile; fileRef = E261E97A551F62268F5002DB529D4A74 /* PFActivityIndicatorCollectionReusableView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 46A85D0B3E105715569CB1BC5C7C88C8 /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 41755FA2662E2489FEB0E6FEC30BCAE0 /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 46BF99BEBFFD63DBE8BC085CD18A4024 /* PFRESTAnalyticsCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D13E9CC7C55D6E5308CFD2BDDF4E3E35 /* PFRESTAnalyticsCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 46C66D1485581BB40EFAB6E834BD8C47 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = F16B2F09DDA3B581B0D212FFDBAA7BEE /* PFEncoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 46F36C74EF8B07192275578A983B1E96 /* PFAnalyticsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 75D3AA3139CAC105C690DB23C90E64BF /* PFAnalyticsUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4777B57796CCF2501C8E4035ABC45459 /* PFRESTConfigCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 033347FAE6C04EC4566EFBDC24DB4DC8 /* PFRESTConfigCommand.m */; }; + 4835ED1722E656D7F6B5E9FD14D4F5DB /* PFTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DD4060F8826F9A5E5D4C4FC4E7A3256 /* PFTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 48E6C81111ABE83FB43D7E16A07D423B /* IQKeyboardManagerConstantsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 82C057CF73EC05C9B670CD36A4FF9DC1 /* IQKeyboardManagerConstantsInternal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 49213E71A202E706B4C67562EC826709 /* PFUserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = DA7D6B40CA043E1F26CF1737EE7C2D8D /* PFUserConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4927A5D31337BBF09B4D630EEBB29762 /* PFACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E759BDB2280614B1E223A5BF6593C20 /* PFACLState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 493A39F7AB5CC399A17F93EB112A7C15 /* ChameleonMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 40375E85CA508E2B057CECEF9AC0A466 /* ChameleonMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 494AB2A28A1FE50E4A600C9EA897D4DD /* PFInstallationIdentifierStore.h in Headers */ = {isa = PBXBuildFile; fileRef = D9ABEBD69361FA1FD8939A21C71A86B3 /* PFInstallationIdentifierStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 499795646572C0F4982F952399B79430 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = F051420DDB92AA7A4614BFE96C0B4881 /* AFSecurityPolicy.m */; }; + 49DF183B1AF52E821ED5A77B97CF6DCB /* UNIHTTPJsonResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C63D8CB09610644959B555ABF676D45 /* UNIHTTPJsonResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 4B2AFEB8AA38E3742467F54CF68224C6 /* PFEventuallyPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 444C17DA53AAC790C006E8C77C606141 /* PFEventuallyPin.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4B711F7739F9BC189B32ABDB6BA90A0F /* PFCurrentObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F899C2DE9446CFBD4258DF3146777DA /* PFCurrentObjectControlling.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4BAD01BECD8E7D90990BF6B30EAC04C3 /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEB824107C28055F7FDA4A9A2034A36 /* PFAnalytics.m */; }; + 4C94CABF04CF5B40BA9A93E090EB08AD /* PFHTTPURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BFDADA3217FE77D6F8E68621BA9FD77E /* PFHTTPURLRequestConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4CAADF796B7A0A57121A9E3C287127C5 /* UIViewController+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F5AC19CF9E1DB86BB619A83FD60C580 /* UIViewController+Chameleon.m */; }; + 4CFA03024DDB3D22E34E21E6B93577B9 /* IQKeyboardManagerConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A038B70DE9AC30C4BE5735BDCF379F95 /* IQKeyboardManagerConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4D410BAF4CB2B1C8C7AD0F85700EE2D8 /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C31022C27A2C8C1FBE857406C9AF09F /* PFAssert.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4D78D87B1BB66CD942A878041185C7C0 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 13BA722BB3C5D60330A639CBB1030486 /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 4D9D2707B9A1C9724DFCD9D69B993FA1 /* AFNetworking-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2809CC499F34E67434A2065F3F90217D /* AFNetworking-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4DA3E886A13F59B8C595071C71911700 /* IQPreviousNextView.h in Headers */ = {isa = PBXBuildFile; fileRef = ED6DBBE9C8F59A2808A1B55CA7815B1A /* IQPreviousNextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4E149934317AEC01048B753730F6EA9F /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F83EC07F9C3FF86C4D9BD2A58B549B0E /* AFURLSessionManager.m */; }; + 4E349CA31573A68A02AD4F89FDFAA05B /* UNIRest.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 0D36B7A5D9F6AF7F4E01B2320E7BB931 /* UNIRest.h */; }; + 4EDC3D68FA4D08025BAF6A25AFB5E65B /* PFReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5942670B140FE51902C19AA1DE9A9F3C /* PFReachability.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4F8534F0CB4CD037ACE1B5BF6460999D /* IQKeyboardManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CF8C2D7B1873D1DE1458FA7D18F57592 /* IQKeyboardManager.m */; }; + 4FB349659BB29F142EB4C5A11CF8D33E /* PFDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C3AAD13195F59C43C31D7B68EBD3011 /* PFDevice.m */; }; + 4FEBA5F071565CE6BEFF968CD56E365A /* PFRESTObjectBatchCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 831DABB79EABDA3FF9164AB3067B2154 /* PFRESTObjectBatchCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5064614BEFC3E1DCB85B376E7C849393 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E4DAF9930C43CB43E5BF52055CD68F1 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 50696775E4E363709DA7C32DDE26C749 /* PFPushController.m in Sources */ = {isa = PBXBuildFile; fileRef = D5A1769B7D39E3622EBE828E69A03539 /* PFPushController.m */; }; 509F838C90BD33FB102E30FA553546A5 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC336EDAC9FA746257F40BD540DC9A75 /* Security.framework */; }; - 50A74BA500644CFE9D103329CBEB0D32 /* PFObjectLocalIdStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 065E4ABAE71F00350CBF5E154707399C /* PFObjectLocalIdStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 50A74BA500644CFE9D103329CBEB0D32 /* PFObjectLocalIdStore.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6237226D0A898842335421FF28BB4E /* PFObjectLocalIdStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 50C18B976C17A2FBB0886EA75DF5BAAA /* IQKeyboardReturnKeyHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E8D9690AF80D6F60B62DDAF44050907 /* IQKeyboardReturnKeyHandler.m */; }; 5114F8D6A5939B847DDDC41E2B75D419 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */; }; - 516412468B9D294B708BB12CCDE0E76E /* PFSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 80684463B172C7670EDABBAB1D1D3482 /* PFSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 52347D4DE0F39E74CAFB1591E68221E7 /* PFObjectEstimatedData.h in Headers */ = {isa = PBXBuildFile; fileRef = FF246D759D5911D6B15A849D032F9E71 /* PFObjectEstimatedData.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 523D7711F694B582C1B3E89E912DF6B3 /* PFPushState.m in Sources */ = {isa = PBXBuildFile; fileRef = E474D6AB963D4ABAFB608C01EC10CCE0 /* PFPushState.m */; }; - 525611A9C3408922BB8EB81692E6D161 /* PFFileController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FC94E4C9D7446F799F1571C5E5D24B3 /* PFFileController.m */; }; - 525727E37B9DFED1CD3A18CFF752383C /* ChameleonFramework-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D79C12A61A4543E416CBB738D3FF37C3 /* ChameleonFramework-dummy.m */; }; - 52D60DFB5AF85D51AE70D3FA3B5F8633 /* PFURLSessionCommandRunner_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = ACB7449F5C2B0CE0404EEF1294771367 /* PFURLSessionCommandRunner_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 516412468B9D294B708BB12CCDE0E76E /* PFSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BAB143961E7B37C103224026BB1A6A4 /* PFSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 519234A19A528D630BC6A20215E7B467 /* IQUIScrollView+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C177476B0E75BABF4B4FCB549A41A30 /* IQUIScrollView+Additions.m */; }; + 52347D4DE0F39E74CAFB1591E68221E7 /* PFObjectEstimatedData.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FF0ED8615CFE41B1191D7A379331688 /* PFObjectEstimatedData.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 523D7711F694B582C1B3E89E912DF6B3 /* PFPushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E6F93F75316C1B80CAAF5C92F8366AF /* PFPushState.m */; }; + 525611A9C3408922BB8EB81692E6D161 /* PFFileController.m in Sources */ = {isa = PBXBuildFile; fileRef = 52F2CC34E25309A7D0C44241B0F15DEB /* PFFileController.m */; }; + 525727E37B9DFED1CD3A18CFF752383C /* ChameleonFramework-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D2290841E77758DEB6EAFA4F67271A3 /* ChameleonFramework-dummy.m */; }; + 52D60DFB5AF85D51AE70D3FA3B5F8633 /* PFURLSessionCommandRunner_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 857186AEF8B59B6AE45A44A595FC38D1 /* PFURLSessionCommandRunner_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; 53363111800D0961A419E660FABB61E8 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62333A4D0E9AF8700874F1F22E9827D6 /* AudioToolbox.framework */; }; - 533BECEF90857A789B965FE3C20DA467 /* PFRelationState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E936219EC6142DBDD297B11DCA11AC0A /* PFRelationState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 533D41F33F1F148F6D7BBC7BB5C3DEA6 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D0E7ECA8260E9EE58E2D1D581456EE6 /* PFObjectFileCodingLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 535123250BC23D2854597629C68EF4F1 /* PFMutableObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 352A7DFC0FAD78D5F39DDCF907D02C5F /* PFMutableObjectState.m */; }; - 53C9A682E744C8CD8A71E7926530B78D /* UNIHTTPResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F8AB594F361E76ACA20213E0F3D3860 /* UNIHTTPResponse.h */; }; - 53CB0FAB7D337B035394604A48E7A357 /* PFUserConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 19176755A633092BD34527BD97CC9A2D /* PFUserConstants.m */; }; - 53EC95B96212B86A7482BE9466EB41BF /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E737BD38A79BE130905DB568587BBC4 /* UIWebView+AFNetworking.m */; }; - 543BA9CDC20915D1B7D6CE986E3C86BC /* PFQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 86017ED93042A0624A5FBBFEDCDEE976 /* PFQueryState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 54FA74375505B520AC81A5FE3C892313 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 01682B06EC1A9F5115B2823C70E94CA9 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5630A2F69424A9E46E93DE4E4407AE1C /* UIImage+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 44E08AAB6C070B945737B41031CFCAC4 /* UIImage+ChameleonPrivate.m */; }; - 56CAFB300305782D5B129B4DD0B0EE58 /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D464E14984EAF6352F7E733E899C8F4A /* PFRESTConfigCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5717FB78F8B2247DAF6CC1D1F0CD1D98 /* PFPushPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 41729ECC74ACE0C2F2268BD56ABD77D5 /* PFPushPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 57595893801E77A08FC28462EA856C40 /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 91F6CE6961CE84A5E762D863216E0997 /* AFNetworking-dummy.m */; }; - 58A62415FFD7B1782701548E67E4E8D0 /* UIFont+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC6A55FA3CDF0EF58B5D4BDD6F6CAD8 /* UIFont+FlatUI.m */; }; - 59E5D1E2428A166DDC257FAF4FB9F9C3 /* PFPropertyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = EE18541D7EEA1DE57DE7976E3835CA79 /* PFPropertyInfo.m */; }; - 5A25D889204C1D0838E27A486CEE76AA /* PFSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 3448DBBDFED1AD82ECE8A1B07DD53EB0 /* PFSession.m */; }; - 5BB2CC688FADABE72F1EE80DBCDE28A5 /* UNIBodyRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = AD75432B2BF6D1FC707CFCCD3527D979 /* UNIBodyRequest.h */; }; - 5BE7BF61E2C24AFF20EE09847B3462AA /* PFPaymentTransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 687B09B7B61E7AD8BBFAD05917EA3836 /* PFPaymentTransactionObserver.m */; }; - 5C069A9D5B4CAE514B4F46117B04E888 /* UITableViewCell+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 94D6AC2286C9B645008316B81D8156C7 /* UITableViewCell+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5CCE8599A31182489B7556A9A94C0CE7 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E6A437EBB862966A809668856F8E247 /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 533BECEF90857A789B965FE3C20DA467 /* PFRelationState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 85342B421353B094FC8A7B1ABA28B021 /* PFRelationState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 533D41F33F1F148F6D7BBC7BB5C3DEA6 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = DDC009A128625087767288D7706E4920 /* PFObjectFileCodingLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 535123250BC23D2854597629C68EF4F1 /* PFMutableObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = DC1FF3B7F18FCF2F0A4EFD477BE62BAA /* PFMutableObjectState.m */; }; + 53C9A682E744C8CD8A71E7926530B78D /* UNIHTTPResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 7175B962AF396E26B597D16DC3A5CAAB /* UNIHTTPResponse.h */; }; + 53CB0FAB7D337B035394604A48E7A357 /* PFUserConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = D89292EA416BFB4E38CFA341905BFDFD /* PFUserConstants.m */; }; + 53EC95B96212B86A7482BE9466EB41BF /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = E5EABACCD833603D71DDA83AF8267A78 /* UIWebView+AFNetworking.m */; }; + 543BA9CDC20915D1B7D6CE986E3C86BC /* PFQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = F41BA5906F72B08707A6E9500176C911 /* PFQueryState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 54C7D79891D053A424B0DF7E9E73B36A /* PFImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 18E5B4F6DD54D3DFEE040D4E42491397 /* PFImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 54FA74375505B520AC81A5FE3C892313 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 90B7F377A6C76455F713F9A2956AE3E4 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5630A2F69424A9E46E93DE4E4407AE1C /* UIImage+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = CF09587F6E7B5C55B2DBC4F76D84C78F /* UIImage+ChameleonPrivate.m */; }; + 56CAFB300305782D5B129B4DD0B0EE58 /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 16A83694A1281D2628E8C6E4A5050DE4 /* PFRESTConfigCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5717FB78F8B2247DAF6CC1D1F0CD1D98 /* PFPushPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 947FF1F683D3B81772BB3703B214E58F /* PFPushPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 57372144DB1FA2903B634AF173F67242 /* PFImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 448743DDA2013C8A9A70568A441DEF22 /* PFImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 57595893801E77A08FC28462EA856C40 /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CE1D7CADD6B787D221D22A300F04F5B1 /* AFNetworking-dummy.m */; }; + 58A62415FFD7B1782701548E67E4E8D0 /* UIFont+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = CEED91958785BC6C656DF48AF67670D7 /* UIFont+FlatUI.m */; }; + 590AD04854053AF10E3397F20A648CFF /* IQBarButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = E515F384B4FC8E3B8439F1DB578EB3E5 /* IQBarButtonItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 59E5D1E2428A166DDC257FAF4FB9F9C3 /* PFPropertyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 0415F5BE04092407D9C3DF323C2DDA93 /* PFPropertyInfo.m */; }; + 5A25D889204C1D0838E27A486CEE76AA /* PFSession.m in Sources */ = {isa = PBXBuildFile; fileRef = BA8F4C6CB58404CBBBB266E5FD1A21F8 /* PFSession.m */; }; + 5BB2CC688FADABE72F1EE80DBCDE28A5 /* UNIBodyRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7AE561E188BF127BA12657694BA340 /* UNIBodyRequest.h */; }; + 5BE7BF61E2C24AFF20EE09847B3462AA /* PFPaymentTransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 339B985FE4916FC0EAD33315A7189218 /* PFPaymentTransactionObserver.m */; }; + 5C069A9D5B4CAE514B4F46117B04E888 /* UITableViewCell+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = BE14B64B7D94E9A0E083FC542AECB820 /* UITableViewCell+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5CCE8599A31182489B7556A9A94C0CE7 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 5896B97D426354756157FC55B080FD82 /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 5D0F6EB9FF087444D8C35C94F587FA90 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */; }; - 5E13FE4DEC63873FCFEE5E3F62CF76B3 /* UNIHTTPStringResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B09852DB9FD0FD28F70ECC80DCF2091 /* UNIHTTPStringResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 5E13FE4DEC63873FCFEE5E3F62CF76B3 /* UNIHTTPStringResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = F06A9FEFC03282E0E3A86AAE7A3A6FBC /* UNIHTTPStringResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 5E1CA14AAE9164EA9144A2D66C7ABCED /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - 5E1DA51B25F43C73FAEC3F35A34CF6D7 /* UIProgressView+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = E5855B0E065B8C1A0EADD0781BD28D00 /* UIProgressView+FlatUI.m */; }; - 5E55D469ABDA00CB5E22565486F051AE /* PFKeyValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 98FC30222B791FD6C8D1E6F1BC6F7687 /* PFKeyValueCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5EF07666094CCCAD7F7FD9C75E1B1A39 /* IQUITextFieldView+Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F452750888B246772EB8A6877EBAF3F /* IQUITextFieldView+Additions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F7CFB98E474841AFEAC9142671E1607 /* PFURLSessionUploadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 30897A1EF233A016A554F6A64222767E /* PFURLSessionUploadTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5FC03CE121193E811A7A38226CEB7FE6 /* UIToolbar+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 20B6097286CC2E4C80A144D823873289 /* UIToolbar+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 60235CFEA89AAEDCC92FD14F7B13642E /* PFTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 28965A0B0DA8E71614774B97CBEF38BB /* PFTaskQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6117F0C2CD693D1223FF88671015CE8B /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = E715B6385F222A65C0AEDD033DAC27BF /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 617837DA00E113ED6434856AFD3B0655 /* PFLogInViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = D49A2F201D1F072E9F700F36FB9F6B9A /* PFLogInViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6195644CA3E3419A95951B95B12769B1 /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = B4E5AC1FC469AA6601F3D23C8271F2CA /* AFURLConnectionOperation.m */; }; - 625FF9AE4686AEA4FDCDA12811832704 /* PFSQLiteStatement.m in Sources */ = {isa = PBXBuildFile; fileRef = 40284536A49434B0DD0358F33A4F8172 /* PFSQLiteStatement.m */; }; - 62868B8A6396629E54D5A1B9EDC2DCED /* PFFileStagingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 641771E5ACE52EEBF054DF88C734432B /* PFFileStagingController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6355D259CFE41FA5DB24D153FB7A462A /* PFCurrentInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 241D90B262CD5D9CA1CE4E85B2753446 /* PFCurrentInstallationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 63972B7F495EB80B6B9A732BCFFC62D0 /* UIImage+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = F44A3C87BEE43E3E45E5CF3D64032D69 /* UIImage+FlatUI.m */; }; - 63B554E188C8F0ECE4E2FE49DC187B71 /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3667C7F789954F098ADC741D622D52B7 /* AFURLSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 63BA863394E7EEC25970ADD618763ADE /* UNIUrlConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E279FCCEB7C1AEB25BCE46F878D745B /* UNIUrlConnection.h */; }; - 63C8A6145BA13CC1357BACF7619571A9 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = A356B9DFCE0F6FA18DF48B6098125F04 /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 63FAAFF9D8F289AB5D001057E0A6E0C2 /* UIImage+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = DB9AB176562A9D6550C05D4A4094FF0F /* UIImage+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6449D6FF9A736A7B47059C6C6207F2E1 /* PFLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = F24E7092B94D3B25D84A505A530066AE /* PFLoadingView.m */; }; - 646E86EA149691E2A103AABC8ED83B3E /* Lato-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B4B9DA35E6B073D79C38529A56AD6105 /* Lato-Regular.ttf */; }; - 6474A151BAB6300B587DF01C1F4FFD7E /* PFCachedQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = D6A3F777F9D72A576946C81634647411 /* PFCachedQueryController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6482EBE780EB543371D426AC31797DAE /* PFSignUpViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FD643ED6BE8B1DFB4B3D62C42982411 /* PFSignUpViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6544222D2E3DD831AFFA9A3DCF39345D /* IQTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = BB33008CB3C2594164293FDA78B53616 /* IQTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 658DD32CED473FCE3E157760C94A6AB9 /* FlatUIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 44C38AD5632D2AB0489B5A84DAE0E5C3 /* FlatUIKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 65954C025FD7062A89E4CAB5E385B3DF /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = D76E57E96B10ED8D71DC4BE92815D2B3 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6607A316934DC065E94AA70556947F1E /* PFResources.m in Sources */ = {isa = PBXBuildFile; fileRef = 44E593737C598C091CC7B69331EE8F5A /* PFResources.m */; }; - 66761408528652240616F11E28CA1AD4 /* PFLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = FB8B3149AFFBFA7C33EB94E521126BBF /* PFLogging.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 66DB7FE778575C04997A47CE9AA4C978 /* ParseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A30756FBB458B3FFBE25E41C6A39E07 /* ParseManager.m */; }; - 6740D1151D0F74B100B549BA5D8068DB /* IQSegmentedNextPrevious.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C5CF7AB604577F8094BB7A4D0B1EA38 /* IQSegmentedNextPrevious.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 67E47244AD75E871069A0531DD9C9608 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B65C31D9152869F1CCD359EF540969 /* PFURLSessionFileDownloadTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 67E9AAA2DF855990B53C8E37179D1B08 /* PFAnalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = CCE21169E91B4F413E70BB27F172E902 /* PFAnalyticsUtilities.m */; }; - 684E3449A728EFEBE2160ED5F8E37900 /* Parse-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 12EE481EE7117C1AC26F8C373608E91D /* Parse-dummy.m */; }; - 69EBAC092096215DC0EA9C889002873B /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 305805548D87E2C5165C0A0FED697B4F /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 69F700981DD5FE492C5E69C0AAD478C3 /* PFLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3661E7338F270E4C60D4CB7618DACD33 /* PFLocationManager.m */; }; - 6A204352C2657039376D9B800EEA73DC /* PFImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F9A8AE9C1EA56C8732FF0143F957D513 /* PFImageCache.m */; }; - 6A8840784D210166F0E75E0AF8E413AD /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = EE978A828BDE18C9C31167600F655876 /* UIButton+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6A8962718D8E9D7C66B2D3013F40D5C0 /* PFOfflineQueryLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE1874B575E1E5185B44168861EBBA9 /* PFOfflineQueryLogic.m */; }; - 6AEE6C668ADED265E5073A0C10F14DEA /* Parse.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CF52AD6C105BF59D3D2E0B1453E545F /* Parse.m */; }; - 6B4EAD36189A20ACB81F4AF6B62EDC93 /* PFCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 53523337F4B830F83880CFDC298F2BC8 /* PFCollectionViewCell.m */; }; - 6B9A30C0DEEE650ACE7112BEF04EB351 /* PFLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C7B8B94263BB8F789B6BD083776BBFC /* PFLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6CC8DAFDF47415C82B325AB167FB27C2 /* IQKeyboardManager.bundle in Resources */ = {isa = PBXBuildFile; fileRef = A4FDC68F75815A014551F0B6B572D2AF /* IQKeyboardManager.bundle */; }; - 6CE0BDF4BC45D85351D65C54058ADCA8 /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = D253FAF99DE0E9661935D36E6600717C /* BFTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 6D0EDE2C0500E59D3BCCDF8014073A8B /* PFOfflineObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CC6108EC34A6AB9D07BF82118825BE6 /* PFOfflineObjectController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6D856BD6272DC3B97FBAC3D6503343D8 /* UNIHTTPStringResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = C7F69AB63C5B9D83F940D7C9CA0CE984 /* UNIHTTPStringResponse.h */; }; - 6DA6530898EC420505935E4CBB869ADB /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = DE9F993B8C26D2CD762FFC2EB4E32734 /* UIKit+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6DDD9E6F6119619D1120F3D382CA208A /* PFObjectSubclassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 83F94635DF5FD3CB6C04F66A51892F22 /* PFObjectSubclassInfo.m */; }; - 6EB34C4A888CD75B1347430E8E2DC8AB /* PFPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = F5B5CF62D6DD8EC2B0ABA7B384CFB873 /* PFPropertyInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6EC4D234025E1A35DBB519302842C887 /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C823BA36B3996A5B127FB928AAFB071 /* PFCoreDataProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5E1DA51B25F43C73FAEC3F35A34CF6D7 /* UIProgressView+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = ED1B808831668BFCE5B5641495D4D294 /* UIProgressView+FlatUI.m */; }; + 5E55D469ABDA00CB5E22565486F051AE /* PFKeyValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = FB87370F76BC674AD21F1FABEB5464F9 /* PFKeyValueCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F7CFB98E474841AFEAC9142671E1607 /* PFURLSessionUploadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B208B6F44DC353307586ECDE943C9F4 /* PFURLSessionUploadTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5FC03CE121193E811A7A38226CEB7FE6 /* UIToolbar+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B72B0C51A38197D37BB6563BDCA4FC1 /* UIToolbar+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 60235CFEA89AAEDCC92FD14F7B13642E /* PFTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = E82CA19BA3E0DE4964F0C052630016EF /* PFTaskQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6117F0C2CD693D1223FF88671015CE8B /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C66681DF328D06725C4357E76019D12 /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 6195644CA3E3419A95951B95B12769B1 /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 57F5879358C84148A7DCDE756C38208B /* AFURLConnectionOperation.m */; }; + 625FF9AE4686AEA4FDCDA12811832704 /* PFSQLiteStatement.m in Sources */ = {isa = PBXBuildFile; fileRef = E8084FC656FBBB0FFE9F542CFE82DFC8 /* PFSQLiteStatement.m */; }; + 62868B8A6396629E54D5A1B9EDC2DCED /* PFFileStagingController.h in Headers */ = {isa = PBXBuildFile; fileRef = BB2C9ECA5C083B1C1AB04DAF1E83046E /* PFFileStagingController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 62930E5DA75B433CF56BD46ACCDF18F0 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */; }; + 6355D259CFE41FA5DB24D153FB7A462A /* PFCurrentInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 283A6A064CA65E920533C0B11919385E /* PFCurrentInstallationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 63972B7F495EB80B6B9A732BCFFC62D0 /* UIImage+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = B4B17635A35B3C414378999631FEB0AD /* UIImage+FlatUI.m */; }; + 63B554E188C8F0ECE4E2FE49DC187B71 /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 29E0F094F0637842397AB96FB4423477 /* AFURLSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 63BA863394E7EEC25970ADD618763ADE /* UNIUrlConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB08B7E9CFEBFDFED3FC2C86EF02981 /* UNIUrlConnection.h */; }; + 63C8A6145BA13CC1357BACF7619571A9 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A0B96CBB6636A7BDCBA964478F20F8F /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 63FAAFF9D8F289AB5D001057E0A6E0C2 /* UIImage+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A94C4B6698BAB7FAD0158E1D025AFD0 /* UIImage+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 646E86EA149691E2A103AABC8ED83B3E /* Lato-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 02461850BFE597052075F46B27750287 /* Lato-Regular.ttf */; }; + 6474A151BAB6300B587DF01C1F4FFD7E /* PFCachedQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = E69D548BB3EF5F5499142B94DC2D4D2D /* PFCachedQueryController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 658DD32CED473FCE3E157760C94A6AB9 /* FlatUIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 80A30BF5DA2904576C9A695E79AEBC44 /* FlatUIKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 65954C025FD7062A89E4CAB5E385B3DF /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = C971E759236FF5C44EDF586ABA1FDD1A /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 661AE9E6CC11D489ACDAA85361690949 /* PFQueryCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EFF140CE5FEE134EEDE89A382783CD66 /* PFQueryCollectionViewController.m */; }; + 66761408528652240616F11E28CA1AD4 /* PFLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = D869C16E6B92E4E4DAEC9B9363D8D3F6 /* PFLogging.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 66DB7FE778575C04997A47CE9AA4C978 /* ParseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 58D1011532F802CDF880D3B55F389975 /* ParseManager.m */; }; + 676779CDA73D9EB7101859B2DEFD12C2 /* PFLogInView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B4FA5364701AAA618A9F456A6322416E /* PFLogInView_Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 67E47244AD75E871069A0531DD9C9608 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 562ED9F06683670B4C58AD183A5119AE /* PFURLSessionFileDownloadTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 67E9AAA2DF855990B53C8E37179D1B08 /* PFAnalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 57EE6DBB3BE682C35873FDA83F44B5FC /* PFAnalyticsUtilities.m */; }; + 684E3449A728EFEBE2160ED5F8E37900 /* Parse-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 73B7094CD00334DE71FFD9ED9F4AFE8D /* Parse-dummy.m */; }; + 69EBAC092096215DC0EA9C889002873B /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B1E5C0E4125427F0E3FDE91F5CBA4513 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69F700981DD5FE492C5E69C0AAD478C3 /* PFLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 312CFE7334F9820D693DB8F87FDF58BA /* PFLocationManager.m */; }; + 6A8840784D210166F0E75E0AF8E413AD /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 32D1EED54067102FB95B998DE807EB80 /* UIButton+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6A8962718D8E9D7C66B2D3013F40D5C0 /* PFOfflineQueryLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = EE7E578477183FF7B01EB42B97FB5875 /* PFOfflineQueryLogic.m */; }; + 6AEE6C668ADED265E5073A0C10F14DEA /* Parse.m in Sources */ = {isa = PBXBuildFile; fileRef = 7063EC865492F550FE5219FA73C9583A /* Parse.m */; }; + 6B9A30C0DEEE650ACE7112BEF04EB351 /* PFLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 3552A7840686D24CD44668B0CDA0BF24 /* PFLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6C0B0898DDB38E27DC6B993EFCFBEEB4 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DE1802829062F013D376CB812C19065 /* UIKit.framework */; }; + 6C9D9AB66755FD1D4F7DA70220CAE7DA /* pt-BR.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 45D59B3477CE4E1E8A8D72DAA36AE180 /* pt-BR.lproj */; }; + 6CE0BDF4BC45D85351D65C54058ADCA8 /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 30900CE96B834D956AE04457A32EC9B2 /* BFTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 6D0EDE2C0500E59D3BCCDF8014073A8B /* PFOfflineObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 287B74C03E5984086449C9EC4671728B /* PFOfflineObjectController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6D856BD6272DC3B97FBAC3D6503343D8 /* UNIHTTPStringResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = DBE6819D41549A1CBD4D69F3085F2562 /* UNIHTTPStringResponse.h */; }; + 6DA6530898EC420505935E4CBB869ADB /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 58C02A1A5B90D578646A551B3EE8B09B /* UIKit+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6DDD9E6F6119619D1120F3D382CA208A /* PFObjectSubclassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F8393736BD5D73AC01DBCF37963E6EA /* PFObjectSubclassInfo.m */; }; + 6EB34C4A888CD75B1347430E8E2DC8AB /* PFPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0211A72E4EA58246830A20585FB161A7 /* PFPropertyInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6EC4D234025E1A35DBB519302842C887 /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 4373AB8A755D4DB6F49BA37DEFE4C9CF /* PFCoreDataProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6ED02164B5E06B799C50961364EEC1DC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - 6EFE18C45AAF6979BA21513D0DC45732 /* PFRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 67CE6D4D9A7B520EA991DDC9419C137E /* PFRelationState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 700F5568DDA1E624C522F380B8738A42 /* PFAsyncTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = CD3794F214603143EF12BBD7D35183B1 /* PFAsyncTaskQueue.m */; }; - 70AF59761E0C2A4A726B6E59FEE3CC24 /* PFProduct.m in Sources */ = {isa = PBXBuildFile; fileRef = 88DBADE931198B937A907C0F4A844AB0 /* PFProduct.m */; }; - 70BCB2E06955566BC275547B1CE87E1E /* PFColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 5407D6309498466D3BD9EEE5DC9171F2 /* PFColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 70E7F7CC26DD49AF7C5F885CBFED80EE /* PFActivityIndicatorTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 86BD4117D04BA8012C142C487374653B /* PFActivityIndicatorTableViewCell.m */; }; - 71406894593D147D7656C97D0BE33AE0 /* PFFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EADC0A4005E0A455E24E378AAEACAC44 /* PFFileManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 714FB212B725F8BDF3683F38B7F6B4CE /* AFHTTPRequestOperationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DD00DBDBA4AB7937FF095E5352F14E53 /* AFHTTPRequestOperationManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 71535E3B142F488A3F510A0A2D854A26 /* PFErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = FD4E574985753AA8FBFCD4DF93047E2C /* PFErrorUtilities.m */; }; - 72312D1A5AE5A6C1B984412285CF5E92 /* PFWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 852A83DBE22D8BF63D1F7D4F20EB25EF /* PFWeakValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 72CEF78CC6C2341AB78EC7ED7A3B2844 /* AFURLConnectionOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = FABD26BF571BCC663379AABBAAE7B44B /* AFURLConnectionOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 72FAFB0F0E6FF8AB2E9CB406A0C6D66B /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B6DC6273BB88E3B2428C06836FF537E5 /* Parse_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 733D1FF755A7E59F0218E2A9225E9ECA /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = F364E09FEB64FC9E1C8B7224CDCE8E01 /* UIImage+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 73468106D270D5373F13A88722F0F42B /* FlatUIKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 20D75D05C3716B1B1FCE88C6C2E9312D /* FlatUIKit-dummy.m */; }; - 73530A369BC0C71417737C7732EE4BE5 /* PFUserAuthenticationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A7D177985593F94AB3C85D6D51C42C6 /* PFUserAuthenticationController.m */; }; - 746B0BD3442F7C333D7F7E2C518E9031 /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = C8CC6659A6C2F9156DD09335364D0A48 /* UIRefreshControl+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 747E24F16EF4878D1A18D93BB11C1E48 /* PFActivityIndicatorCollectionReusableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B071309D9B499D128868D443A721FC7 /* PFActivityIndicatorCollectionReusableView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 74942D131A05E345D9BC3D47F8487C58 /* PFHTTPURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C225A32BD5AB6FEB97D66740F1E0931 /* PFHTTPURLRequestConstructor.m */; }; - 74D6C8F8FFCA98252D63ECB118C4A832 /* PFInstallationIdentifierStore_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 98CE93C5090192A08CBA7E7C5BF3D0EC /* PFInstallationIdentifierStore_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 755D05098517A360EA8B6BF70AED2F97 /* IQBarButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D206417FCB7E126D2076A47DEDF1A1C /* IQBarButtonItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 75DFF5A155538F100BE6FD0AEF6B2EEF /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 53977B705B1F2FD103C89A12B9885AA3 /* PFMulticastDelegate.m */; }; - 7604B65CA0E258822D5401A28AD4F6E0 /* PFFieldOperationDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 35AB26F5A3AAAB62DB4FDBFA45B6AE7B /* PFFieldOperationDecoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7652337C6698F42EC8AA67BEBABC57E8 /* PFFileController.h in Headers */ = {isa = PBXBuildFile; fileRef = 113A9AE0365FCE4FF2F8C95725E6A010 /* PFFileController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 76F0ADD573F39F6C2E6AA583EE3E28AD /* PFOperationSet.m in Sources */ = {isa = PBXBuildFile; fileRef = C0F69EF677BEDD5C5FA799A9275E6EAC /* PFOperationSet.m */; }; - 7715B49F4FD719BFF228560746AC6F96 /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DDF020AF63A140F55102296DFDB9C66 /* PFInstallation.m */; }; - 772FAB57D507F834419A8B53F81775FE /* PFCommandCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 97FB31513AE2FE8E761A9C0EEB5EC31F /* PFCommandCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7757891143F134EF973508DD56821CA6 /* PFRole.h in Headers */ = {isa = PBXBuildFile; fileRef = EF607DC0E28A9F3234F18C9B3BA88690 /* PFRole.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 77894BDDAFFE8441526B64E1BBB856C7 /* PFURLSessionCommandRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = 5358009CFED1962F15A2280446DB04A7 /* PFURLSessionCommandRunner.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 78CCEA1A83DC9E7EFD3198F14D7AB289 /* PFLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 3ECA32B49BAEAD29BCA93D40EE9CC6B7 /* PFLogger.m */; }; - 79227FA8FC3B6B7EA7D79083B641E36C /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3613B45ABCFAEBD5BADAE64A82A4746B /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 79D5AB7ED99F6F3FB99421D0DD941FC6 /* PFNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E3AAE5A1E6096A049F4DA5D191CBADC /* PFNullability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 79D915DCC0E57B431C2DB968A7BB6674 /* UIView+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 464C0397F3E6DFAFEB38909A49A88023 /* UIView+ChameleonPrivate.m */; }; - 79E30128DA0EB3E973E7089926A04270 /* PFGeoPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B4DD551A4377B715FBEA24BD68F23F7 /* PFGeoPoint.m */; }; - 79E628F0D120F5718AF6A64BDA3BFB05 /* ParseUI-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A505892A83F06969DC7D47BC6FC72B07 /* ParseUI-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7B1AC5CBBF99FE9A4DF4918085F741E7 /* PFPinningObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 666458A8556D81D46682CDDE3C99CFBD /* PFPinningObjectStore.m */; }; - 7B7E112AD433BAF56C889FF2C8D8828F /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 566D307A23F6EE2FF9B47E6A1C68C59E /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 7B7EE0F54A3687CFB442555D1F00B532 /* PFPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = C582F437DEEFC2DC78C169737D7E9D53 /* PFPurchase.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7BB986930A679B4F4A6E2F0567AA1118 /* UIPopoverController+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 11779F8DF80724C9D85DA16EE6D8F4EB /* UIPopoverController+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7BE8B7B3771AAA185FA9AF266ACB51D0 /* PFPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = EEFC9ED15A9741CB66AA57CF2B4D69FB /* PFPurchaseController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7C2D840346C748D52A6E325D25703569 /* PFSignUpView.m in Sources */ = {isa = PBXBuildFile; fileRef = B8F7790A71F9CD28C39B9D26DA94ED71 /* PFSignUpView.m */; }; - 7C404DEBEDF06360F28C8E6C457520AF /* NSString+Icons.h in Headers */ = {isa = PBXBuildFile; fileRef = 22F5A1329C6658B77CE9B997619A6610 /* NSString+Icons.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7C57153FEFBA930A0F3DE7E6A5DDFD98 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - 7CA0EC245101545B13439BA0D2D9B8CA /* PFOfflineStore.h in Headers */ = {isa = PBXBuildFile; fileRef = BF4961A65C147D1F0F5A6BC47121CBCF /* PFOfflineStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6EFE18C45AAF6979BA21513D0DC45732 /* PFRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = CEFF5B62376E2591D6E5EAF93B76997E /* PFRelationState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 700F5568DDA1E624C522F380B8738A42 /* PFAsyncTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 3870EE2EF73F00569F66764B6840BA48 /* PFAsyncTaskQueue.m */; }; + 70AF59761E0C2A4A726B6E59FEE3CC24 /* PFProduct.m in Sources */ = {isa = PBXBuildFile; fileRef = 968C1C61689C3F23A5FC509269AE1B6C /* PFProduct.m */; }; + 71406894593D147D7656C97D0BE33AE0 /* PFFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E5C55CFEDDC650E3CDF3F59B2865200 /* PFFileManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 714FB212B725F8BDF3683F38B7F6B4CE /* AFHTTPRequestOperationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ECD2B9CBAE08A9410E23E90B706CC79 /* AFHTTPRequestOperationManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 71535E3B142F488A3F510A0A2D854A26 /* PFErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = AC4DC6A2437F65F8A83CB36C3B66723C /* PFErrorUtilities.m */; }; + 72312D1A5AE5A6C1B984412285CF5E92 /* PFWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D5F1CE5891DAE96AE6580471A3F81CD /* PFWeakValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 72CEF78CC6C2341AB78EC7ED7A3B2844 /* AFURLConnectionOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 45756B2B291EADD70CF96E443BAD2FF1 /* AFURLConnectionOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 72FAFB0F0E6FF8AB2E9CB406A0C6D66B /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D3EE32A19F2CA37F68E600E3B1A8BAB6 /* Parse_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 733D1FF755A7E59F0218E2A9225E9ECA /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DA03E39CAF7E8EFC0E5EDDCBC9F3BD0 /* UIImage+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 73468106D270D5373F13A88722F0F42B /* FlatUIKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B834CB346FEDD46855AF57AD06DE5791 /* FlatUIKit-dummy.m */; }; + 73530A369BC0C71417737C7732EE4BE5 /* PFUserAuthenticationController.m in Sources */ = {isa = PBXBuildFile; fileRef = DEA92EAFBD2F6D31CC60C9BD2B8B1F9E /* PFUserAuthenticationController.m */; }; + 746B0BD3442F7C333D7F7E2C518E9031 /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = A816AB5A1E39050DB3C8267CC75B6308 /* UIRefreshControl+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 74942D131A05E345D9BC3D47F8487C58 /* PFHTTPURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 22EC91ED4B69A438A78BF10A844BE247 /* PFHTTPURLRequestConstructor.m */; }; + 74D6C8F8FFCA98252D63ECB118C4A832 /* PFInstallationIdentifierStore_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B8B26D22A8D50D5756DCEABC1E2F39B /* PFInstallationIdentifierStore_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 75DFF5A155538F100BE6FD0AEF6B2EEF /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 69EB7978B5C927F6B8DB109710F1A3A9 /* PFMulticastDelegate.m */; }; + 7604B65CA0E258822D5401A28AD4F6E0 /* PFFieldOperationDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = AE235869020CAD616253B91718814EB4 /* PFFieldOperationDecoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7652337C6698F42EC8AA67BEBABC57E8 /* PFFileController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FC877593D9C3597554FD4F63EA7265D /* PFFileController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 76F0ADD573F39F6C2E6AA583EE3E28AD /* PFOperationSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 20B2A45932656A04E9A644FBC0DA4689 /* PFOperationSet.m */; }; + 7715B49F4FD719BFF228560746AC6F96 /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E6B3CC888343CC69943B63141268699 /* PFInstallation.m */; }; + 772FAB57D507F834419A8B53F81775FE /* PFCommandCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 13E84B7E5A4B30014D5A54B0F163A44F /* PFCommandCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7757891143F134EF973508DD56821CA6 /* PFRole.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A9951560A51BC6B7877E46E76741F7E /* PFRole.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 77894BDDAFFE8441526B64E1BBB856C7 /* PFURLSessionCommandRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = 09E57153667D515CCBCF5953009ED8FC /* PFURLSessionCommandRunner.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7879E7CFEED86DB1E505DC098A9897C6 /* ParseUI-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F126906F253F3C3848FA05C0D242D4D9 /* ParseUI-dummy.m */; }; + 78CCEA1A83DC9E7EFD3198F14D7AB289 /* PFLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = CD550819AF8416A5DB414CAA7025CB06 /* PFLogger.m */; }; + 79227FA8FC3B6B7EA7D79083B641E36C /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B54797159113BD42DEF825808E96506 /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 79D5AB7ED99F6F3FB99421D0DD941FC6 /* PFNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 69AB457D67396F5B1AE602EB9BE91C33 /* PFNullability.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79D915DCC0E57B431C2DB968A7BB6674 /* UIView+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D2A07DA0436A22DB926D8F8BA8F922A /* UIView+ChameleonPrivate.m */; }; + 79E30128DA0EB3E973E7089926A04270 /* PFGeoPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AEE82C4E7D4C887B812D322BF6616C6 /* PFGeoPoint.m */; }; + 7B1AC5CBBF99FE9A4DF4918085F741E7 /* PFPinningObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 7625D472ACC8D44E3E9CF86870FB700F /* PFPinningObjectStore.m */; }; + 7B7E112AD433BAF56C889FF2C8D8828F /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B6C075902DFE55B31A76D31208A4280 /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7B7EE0F54A3687CFB442555D1F00B532 /* PFPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AF187A6BDAC9D45C8425EE5D9869AA9 /* PFPurchase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7BB986930A679B4F4A6E2F0567AA1118 /* UIPopoverController+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 21D8E4F6E3FE9751A9C71B96F1DA3755 /* UIPopoverController+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7BE8B7B3771AAA185FA9AF266ACB51D0 /* PFPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = FC11F4C9F01877A5D56739B9BBA85621 /* PFPurchaseController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C404DEBEDF06360F28C8E6C457520AF /* NSString+Icons.h in Headers */ = {isa = PBXBuildFile; fileRef = C7BC9D529DFB9C2876F1B26C742549E5 /* NSString+Icons.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7C534B05C9F8A8CA0A573629B03C076B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DE1802829062F013D376CB812C19065 /* UIKit.framework */; }; + 7CA0EC245101545B13439BA0D2D9B8CA /* PFOfflineStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C279362F3C05B272F24D95D7C88397A /* PFOfflineStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7CBF2011432C597B6BC5A384EE6454B3 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 799A25ED12D346D0E10745AF43D345D4 /* MobileCoreServices.framework */; }; - 7CE03C57C94CDC8B9A2074371BF4DD5E /* PFRelationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A2C468F7EBC72EDE2DDF8B4ADEF3EFF1 /* PFRelationPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7D626270AE9630C1EC494E72B53795C5 /* PFProductTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 077B7B33826673C09B30B8671D0097CF /* PFProductTableViewController.m */; }; - 7D712156EAFC4E82DB10F63FF6DE9688 /* PFLocalization.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FFE49908079C5362E67099F8C05E1B8 /* PFLocalization.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7D753DB6C985E2BA23D16756811EE941 /* IQToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = F494433C963318EF0C17653A4A373201 /* IQToolbar.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7DA854BB5C3326B269441322D1C2628B /* PFProduct+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 98EC7EC190408FB4A48D91C9C6E633EC /* PFProduct+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7E4206E2E57E51D8EDF9E49677C3DA3D /* AFHTTPRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 96B0AB09E758FB641EEAB8FB2C91C6C9 /* AFHTTPRequestOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7ECD6A8CE8FF5825DDD32C63DD6F2B43 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DE1802829062F013D376CB812C19065 /* UIKit.framework */; }; - 7F1A3ACA61A193AE5AC994B81D58AA12 /* PFActionButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 8536E7EDEE9BFAF06216BADC69B65005 /* PFActionButton.m */; }; - 7F514C48A1433CC4E7666EED8526EB82 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = A408C24FBC30C794341C29AD9ECA2CD1 /* UIImageView+AFNetworking.m */; }; - 7FBDBBC09E7D8CE63696847366DCFEE3 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 389E8A9F78577F9DC088BC37445C2F27 /* AFURLResponseSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7FC33645ED6F5B7A52A793A1F647EB67 /* IQKeyboardReturnKeyHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 54B90D0232ABF1B3E61A9DC3EEAA226A /* IQKeyboardReturnKeyHandler.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 7FDF8C860061C943C172B1CD123039BF /* PFPropertyInfo_Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = 0725DB534BB32F744586EC0F2357B78B /* PFPropertyInfo_Runtime.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8011E13C93B1251BE83F73849CBA41D4 /* Base64.h in Headers */ = {isa = PBXBuildFile; fileRef = 473595C4DE2B48B0D88D8F99E55C5F45 /* Base64.h */; }; - 80701E4D0A3C6FD04DB9EA02163971E5 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = C1A50FE4924602AEF1988B628C5A61F6 /* PFBaseState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7CE03C57C94CDC8B9A2074371BF4DD5E /* PFRelationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DAEBE8AEEE1FAA4664DBEB20E14CE68 /* PFRelationPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7DA854BB5C3326B269441322D1C2628B /* PFProduct+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0264EE9F5AFC365618A7A86369BDF5E5 /* PFProduct+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E4206E2E57E51D8EDF9E49677C3DA3D /* AFHTTPRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0322D52D22023BE2411F2CCAACEE304A /* AFHTTPRequestOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7F514C48A1433CC4E7666EED8526EB82 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 73CC9A342B0099AB7F2D13D603FCFC71 /* UIImageView+AFNetworking.m */; }; + 7FBDBBC09E7D8CE63696847366DCFEE3 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = E01DF6BF8E0DB15494DA23A118BCDE49 /* AFURLResponseSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7FDF8C860061C943C172B1CD123039BF /* PFPropertyInfo_Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = A78B6320A995FD2334C69BD6DD530AAB /* PFPropertyInfo_Runtime.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8011E13C93B1251BE83F73849CBA41D4 /* Base64.h in Headers */ = {isa = PBXBuildFile; fileRef = 06BFD711819A59BFBB5685332131E5BF /* Base64.h */; }; + 80701E4D0A3C6FD04DB9EA02163971E5 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = 1698F26D15551C1829449B813F474E0F /* PFBaseState.h */; settings = {ATTRIBUTES = (Project, ); }; }; 808B6A1291FF164B160C5ED8A99652A5 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3691CA8C96F3BE2D408B9E1E7FCDD5A3 /* ImageIO.framework */; }; - 808F096E62506786671896B6BE8FC00E /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = F8C8EB38499DF1B91AD5834F3D8238B6 /* PFCloud.m */; }; - 80E0DE86061F5656E6CE5D4D06A38853 /* UITableViewCell+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = E2D1FC6E559818FF5E899D86DFDAE1F0 /* UITableViewCell+FlatUI.m */; }; - 818582725BCC7A824799342881C7FB4D /* IQUIView+IQKeyboardToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EFB510E35A2E19894B0116FF11AF2F8 /* IQUIView+IQKeyboardToolbar.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 81CD1C3D3AEE6561FC8B25231388EDBA /* UNIJsonNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FE07D72A0D452DFEAACC04F124006CF /* UNIJsonNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 82193516C2657105BB1B20F27C8C012A /* PFRESTUserCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A28FD3FB992F202D240D12E7F2B7FD5 /* PFRESTUserCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 82A7493CFF424B02B1EA1D347F3EF1B5 /* PFPurchaseTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 780D44B2A921C4D352FA9A6D9693F79A /* PFPurchaseTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 831065AD23377EF92A22E15118931DED /* PFQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = 0766F2D21D2ED224A3E82F26E0B5CD52 /* PFQueryState.m */; }; - 83E42BD304254F2EA45636E1EBFEBCD5 /* PFAnalytics_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 22B70DF0AA41BAA3C080197E5CC5D07B /* PFAnalytics_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 848290264E2010E537F5B77148DD4D32 /* PFSQLiteDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 150C19C70C597D439FA96FCB3A6B68AC /* PFSQLiteDatabaseController.m */; }; - 85A58BD000E6A4ADF674465A45C88D41 /* PFConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = D918045D3E6E8340A10A1948E5BB7798 /* PFConfigController.m */; }; - 869568B070A4B8CAC7778AE5EE71BD5A /* UIStepper+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = BBEB6900A59681CD6E50CF6B6C2D6F9A /* UIStepper+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 86E6118CAFA8C90FC0ABF1688FE6E65E /* PFOperationSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E69CBD775346A00D22D02F01FAEEE59 /* PFOperationSet.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8702D2031C885CF3BB2D8795A6FC0C3A /* FUISegmentedControl.h in Headers */ = {isa = PBXBuildFile; fileRef = C137855C14937C945753B86B2CDA79D9 /* FUISegmentedControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 87753E6E8545A51BB7F4BDBD7DD3FAC2 /* PFObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 80865A22558AC6423CFCE3A112073FD6 /* PFObjectController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 881CD8405ABE6BEFB471F1622F70BC8D /* Lato-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4313FC1E27E9B9A96CC0E86A9963B5EE /* Lato-Light.ttf */; }; - 894AA3587AF5C3A6D545C4A4BA5B58AC /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 246514DFF438978008D8FA6C3DB62A87 /* UIActivityIndicatorView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 896FD5D0C72F697DF9C5D17F7B529E61 /* PFEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E4C754AF717C0F9578078037DD972B7 /* PFEventuallyQueue.m */; }; - 89982466919DA42C5657FB1D75221B9C /* ParseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 065EC0B26F5FCC313BF0CC772F0AAFCD /* ParseManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8A89A0B9F1586CA458B63C76E953F154 /* PFApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = B719C90D607E7C93D3CABC47049790CB /* PFApplication.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8BE7480FA5E61B80FCDAF98F65677B11 /* PFColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 171D6E3ADAA1BB99E7913D83084A2274 /* PFColor.m */; }; - 8C2E6C32E366F961F86C99CE651AF056 /* PFPrimaryButton.m in Sources */ = {isa = PBXBuildFile; fileRef = B37DB5C5090B2B2D7BED7A2071CCDA07 /* PFPrimaryButton.m */; }; - 8CCFEC94CDC419B16F917810D8439F39 /* UIFont+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B3157DA60A76070C8C1BC098218AB51 /* UIFont+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D7B15921E081CC2B3191D35B5C4CEAF /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FFE8C5EB6588366F5E38E8025B4CAD0 /* BFExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 8E3CAFDA290A60D8B3A289E6DAD97C53 /* FUICellBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = D1E1BEDB5A8BC95C80FA17589D69210B /* FUICellBackgroundView.m */; }; - 8F43E873C338BF50D7914531236AAEDB /* UNIHTTPRequestWithBody.m in Sources */ = {isa = PBXBuildFile; fileRef = E3523BF1D55FC301141D3E8EA5BD9A1F /* UNIHTTPRequestWithBody.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 8F495189348B03AE6F7B46DA0413D883 /* PFPushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 85DE173836F20C196CF9443BA77C76A2 /* PFPushState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8F498BF52B76ACF30337C019FF3B30EC /* PFCommandRunningConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = C26F1D9455881336DF278C24466FBC70 /* PFCommandRunningConstants.m */; }; - 8F6BC9571604760D4F4E1AAA4105F39A /* PFDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F44CE6BEBD6122876882DCE9A46EBF2 /* PFDateFormatter.m */; }; - 8F78EF384897E4D8632DD80FB74EB452 /* PFProductsRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C1F692004740EFBE7FF1FF61AB5529B /* PFProductsRequestHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8F8BD8F9E8C2408792AE189075B4B7BC /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C3F57E6B4F1FB2E1F1904A1F180B1D6 /* BFTaskCompletionSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 8FAC5B4DDD700682A6B3A9167F863290 /* FUITextField.m in Sources */ = {isa = PBXBuildFile; fileRef = BBF5C97238A5D929CC8B153AEF2E9179 /* FUITextField.m */; }; - 8FB1DF7D54B01E7F8B51A01CCD305E7C /* PFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 614FAF041CF57C25CF92549363DC2B35 /* PFFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8FD6FCE130BFD1E16FB2A68476BED532 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7861C0328B9B37380137F55D5B766F21 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 91752E5ED76E71C38BC521664A4FD5B6 /* PFQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = DC3331AEC86B8C52429A342C01652D63 /* PFQuery.m */; }; - 91D1F2E5F9AECFF5785A6814972F9054 /* Lato-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 64999537AFDE8F90807B5B5991781283 /* Lato-Italic.ttf */; }; - 91F72E1C525A78F015595B286044D120 /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A5D2EBF57F51AF57F8C4C497E5D6AEA /* PFCommandRunning.m */; }; - 9303E978E2E7E3C00257DD5DC7B6E9B7 /* PFObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = D0874E998F9E9F408D294DF2386879A8 /* PFObjectConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9310D82E97611942915A3940EC448CB4 /* PFMutableUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = BC12683ED13AF4741D430BB224279C59 /* PFMutableUserState.m */; }; - 940E81601DA01C64F91AF1BAFE5D84AC /* PFPurchaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E00B62CEE59E199D07EB3F3B4F2710F /* PFPurchaseController.m */; }; - 94A9BD60599FB2C2AA2B0AB35934B758 /* PFCloudCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = 69A510A1BF3A452173802E1908C71DB3 /* PFCloudCodeController.m */; }; - 94D401C18BF19BD75CFAC4BFB763CE7C /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FF78B4C18BD5E661C223DA05F706583 /* PFUserState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9566EE1DC82CDB9049D8D21CB842C386 /* PFWeakValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 96FC24F36F6A0E253A147A902D4D87B3 /* PFWeakValue.m */; }; - 962F75F303F57D0673BD35FE3835415A /* PFMutablePushState.m in Sources */ = {isa = PBXBuildFile; fileRef = A0C767F598567EAD6A78E56703F0BF49 /* PFMutablePushState.m */; }; - 965E194205240C804A5CC4E09422F906 /* PFAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 96BBE1D7671D60064CCF9BFFA76E8E28 /* PFAnalyticsController.m */; }; - 966DE4286AC2490A6FCBACA8413C8067 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DAB5D2AB74AB4E6E40BC4E2BA5EC42C /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96AF27C042B48DFA54ACF2FAADFA773D /* PFRelation.m in Sources */ = {isa = PBXBuildFile; fileRef = BEE6E33A4974E21DDA04F659E990E8D5 /* PFRelation.m */; }; - 96BE3ED0FDDA9CBA6D0DF772A7BA40E0 /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E9D2D880354EC317D86A4349D035200 /* UIImageView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96D0CF407A2B521A9A520132685C2A53 /* PFImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 83B8FAAF482B78AC548BDC44BA540C3A /* PFImage.m */; }; - 96E3D29B214EBF429C504C8CA55D1B9F /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = BDB6A8639913CC9852F97AECC7B36C74 /* en.lproj */; }; - 96F1A018D913D4362A1013D53C417E4F /* PFPrimaryButton.h in Headers */ = {isa = PBXBuildFile; fileRef = D5BCBF924ED06727AAC5736473727FB8 /* PFPrimaryButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 97328A6D629EDD7889FB3194C26619E4 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F214F248D919BBE5E1846DA84E7EC571 /* AFNetworkReachabilityManager.m */; }; - 97BEC95DB23314A8FEB59FD75DE72D66 /* PFSQLiteDatabaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DF2C8BE2B249F69FCE01059E5C2E34E /* PFSQLiteDatabaseController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 97DAA182EA0457ECE6DF454FDFB50E71 /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = FF48AB657BBC095D80AA753EDFA8198E /* PFURLConstructor.m */; }; - 9835F5DE63612AE5CB247BEDF9F6BAD9 /* Lato-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 416EF6ABD24C5B14BDDDADF319BC2942 /* Lato-Bold.ttf */; }; + 808F096E62506786671896B6BE8FC00E /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 96F352501E39A78917919E6827D9662D /* PFCloud.m */; }; + 80E0DE86061F5656E6CE5D4D06A38853 /* UITableViewCell+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 46422AC887FA952A4892854E29579089 /* UITableViewCell+FlatUI.m */; }; + 8169F60E91A5DCF1BCD770127B09C896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */; }; + 81CD1C3D3AEE6561FC8B25231388EDBA /* UNIJsonNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 71FEF17E88601C7390E60B7D3C7D86D9 /* UNIJsonNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 82193516C2657105BB1B20F27C8C012A /* PFRESTUserCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 0644AF28ADE45E9FB2616BBB3A6B43F3 /* PFRESTUserCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 831065AD23377EF92A22E15118931DED /* PFQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = BEF4FF7171109B841E52DAB6544DCFB3 /* PFQueryState.m */; }; + 83E42BD304254F2EA45636E1EBFEBCD5 /* PFAnalytics_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BAEDB2E65A042469BB0C6C0651AD122 /* PFAnalytics_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 848290264E2010E537F5B77148DD4D32 /* PFSQLiteDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A621B8940AFC7648C5072806B4B9311 /* PFSQLiteDatabaseController.m */; }; + 85A58BD000E6A4ADF674465A45C88D41 /* PFConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FB02385D3C2C2A0EB07A7BD82B8DE4B /* PFConfigController.m */; }; + 869568B070A4B8CAC7778AE5EE71BD5A /* UIStepper+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA6B39941ACCBCAFA2A4F26CF1AF48C /* UIStepper+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 86E6118CAFA8C90FC0ABF1688FE6E65E /* PFOperationSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E056AC96A8AACCF1DD32256DE702C88 /* PFOperationSet.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8702D2031C885CF3BB2D8795A6FC0C3A /* FUISegmentedControl.h in Headers */ = {isa = PBXBuildFile; fileRef = B585A7167FD23401CC0AC3C94F615F46 /* FUISegmentedControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 87753E6E8545A51BB7F4BDBD7DD3FAC2 /* PFObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BC693C636CC87A6217C7C5DBD4D7A4A /* PFObjectController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 881A85BA5B670D61BFD52254E3C8239C /* PFImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = E1507F321942D4FD208B55803D3583FF /* PFImageView.m */; }; + 881CD8405ABE6BEFB471F1622F70BC8D /* Lato-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 19DAC19FA8196CB203717E1E2DF33FC0 /* Lato-Light.ttf */; }; + 894AA3587AF5C3A6D545C4A4BA5B58AC /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A8B03638085EFF11C1EAAF09ED235E2 /* UIActivityIndicatorView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 896FD5D0C72F697DF9C5D17F7B529E61 /* PFEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C2680C64F9681DB935CEC6C07AECD7F /* PFEventuallyQueue.m */; }; + 89982466919DA42C5657FB1D75221B9C /* ParseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 982A9041ADE39E009726C8B46D8C4515 /* ParseManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8A89A0B9F1586CA458B63C76E953F154 /* PFApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 279C7B8C6BAEF8CDFC3B4C468EA5C328 /* PFApplication.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8ACA8ACCF631EB59400D1E29CE40C30A /* PFProductTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7299ED8195E626646307BF4A8D40A058 /* PFProductTableViewController.m */; }; + 8AF62FF179A471E00F0F81C59A82DFD2 /* PFTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 6120BA628BADDB347735942BA78DB2BC /* PFTextField.m */; }; + 8C450FC7E1CB66D28CD46981530E0A8C /* IQUIScrollView+Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9569F3B77A7977F33A12712389BEACFC /* IQUIScrollView+Additions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8CCFEC94CDC419B16F917810D8439F39 /* UIFont+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = BAB3C187C0719EC147E9F61E5E85BC65 /* UIFont+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8D7B15921E081CC2B3191D35B5C4CEAF /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = E8530B9B30D42F583B3BC811E303DBD3 /* BFExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 8E3CAFDA290A60D8B3A289E6DAD97C53 /* FUICellBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = FCD70579BE96CFBD090F1E64FC7A1E4E /* FUICellBackgroundView.m */; }; + 8EEF8A9731DE9C088F894071C9248FB3 /* IQUIView+Hierarchy.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E2DA89B7784D376EAF5F391CD3E45B /* IQUIView+Hierarchy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8F17B1B66C878E45560A44574817D6E1 /* PFLogInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F63505CC4ACA8270E183DAA52A22B58A /* PFLogInViewController.m */; }; + 8F43E873C338BF50D7914531236AAEDB /* UNIHTTPRequestWithBody.m in Sources */ = {isa = PBXBuildFile; fileRef = 49C9AED1403F10EAEF0BDD8C5D1D3ED4 /* UNIHTTPRequestWithBody.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 8F495189348B03AE6F7B46DA0413D883 /* PFPushState.h in Headers */ = {isa = PBXBuildFile; fileRef = BC45FC112DCEC836AB7FC34C7DEC3DD9 /* PFPushState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8F498BF52B76ACF30337C019FF3B30EC /* PFCommandRunningConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 4557A74A01F29629FD85B18F24E777A5 /* PFCommandRunningConstants.m */; }; + 8F6BC9571604760D4F4E1AAA4105F39A /* PFDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B0FFF3EEE8DA5E91EDEB8EA6DD38164 /* PFDateFormatter.m */; }; + 8F78EF384897E4D8632DD80FB74EB452 /* PFProductsRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 58A2B45D80BC9668A48207A6F9EEC39D /* PFProductsRequestHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8F8BD8F9E8C2408792AE189075B4B7BC /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B4C034A030FAA4EDA0401F0A8DA0E1 /* BFTaskCompletionSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 8FAC5B4DDD700682A6B3A9167F863290 /* FUITextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 1297CEA60937D63A7F97997D134CB8BB /* FUITextField.m */; }; + 8FB1DF7D54B01E7F8B51A01CCD305E7C /* PFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = BF5D4519F2FD959DD3A51A80CF8C52D8 /* PFFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8FD6FCE130BFD1E16FB2A68476BED532 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = D9045979C5B73816C81F6DC6CB9C26C6 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 91498D9A5A6A6D196994EF09622612CF /* PFResources.m in Sources */ = {isa = PBXBuildFile; fileRef = A0AE3560BE9FC94C3B71D94028EB8928 /* PFResources.m */; }; + 91752E5ED76E71C38BC521664A4FD5B6 /* PFQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FB30C451B1E7FFB9382796A11C5943B /* PFQuery.m */; }; + 91D1F2E5F9AECFF5785A6814972F9054 /* Lato-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2BA2B31088E6C331D800CCAB32D64F16 /* Lato-Italic.ttf */; }; + 91F72E1C525A78F015595B286044D120 /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = 836407DF9AE49E6F3CF05A57B2F3E0A1 /* PFCommandRunning.m */; }; + 9303E978E2E7E3C00257DD5DC7B6E9B7 /* PFObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 735FD83521BA17D09CAE866022FD78C7 /* PFObjectConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9310D82E97611942915A3940EC448CB4 /* PFMutableUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = 46CD8E4F61AC27B42941BB20FCCC1C2F /* PFMutableUserState.m */; }; + 940E81601DA01C64F91AF1BAFE5D84AC /* PFPurchaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 331297A6C5AA9401BD6372032CD02FED /* PFPurchaseController.m */; }; + 9411A8D1DF493F321B801931CFB501E5 /* PFImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = C317661A6C63BF31F4516396085D1DDD /* PFImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 94A9BD60599FB2C2AA2B0AB35934B758 /* PFCloudCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = B4C9DD585C2ACD9EBCBC81F91C89331A /* PFCloudCodeController.m */; }; + 94D401C18BF19BD75CFAC4BFB763CE7C /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = E6492D62837F81793852C022F8DDDE48 /* PFUserState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9566EE1DC82CDB9049D8D21CB842C386 /* PFWeakValue.m in Sources */ = {isa = PBXBuildFile; fileRef = BC22009CD0CB35CBE3E0FE126DC1372A /* PFWeakValue.m */; }; + 962F75F303F57D0673BD35FE3835415A /* PFMutablePushState.m in Sources */ = {isa = PBXBuildFile; fileRef = E6E8FDE318E4C904383C402577CB676E /* PFMutablePushState.m */; }; + 965E194205240C804A5CC4E09422F906 /* PFAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B64FDF9AB420DD2D5082AAFDADB7FDA /* PFAnalyticsController.m */; }; + 966DE4286AC2490A6FCBACA8413C8067 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D7FFC332FE37C75EC2BBEEB205C3392 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96AF27C042B48DFA54ACF2FAADFA773D /* PFRelation.m in Sources */ = {isa = PBXBuildFile; fileRef = 532DBEDE2A0498233B11E32D118785DB /* PFRelation.m */; }; + 96BE3ED0FDDA9CBA6D0DF772A7BA40E0 /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FAE01CF4B380A313FEBB6E495A58C24 /* UIImageView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96E3D29B214EBF429C504C8CA55D1B9F /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 6142F4E83D523220AAA5D1451FD4BD96 /* en.lproj */; }; + 97328A6D629EDD7889FB3194C26619E4 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F16F15C48D3F05417CA21097C2E54EDC /* AFNetworkReachabilityManager.m */; }; + 97BEC95DB23314A8FEB59FD75DE72D66 /* PFSQLiteDatabaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = 120FA99F09676AEC262A7A964B7F118B /* PFSQLiteDatabaseController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 97DAA182EA0457ECE6DF454FDFB50E71 /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EC3750FD01543193A7B71DB65C65C6C /* PFURLConstructor.m */; }; + 9835F5DE63612AE5CB247BEDF9F6BAD9 /* Lato-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3DC055B41165FBC9ADAFA20E9AFEC94E /* Lato-Bold.ttf */; }; 98D637C604695D57419F1D6809F263D6 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC336EDAC9FA746257F40BD540DC9A75 /* Security.framework */; }; - 98DA10F38127EB1D4AFF2BDB077F68B7 /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A75A05D48E060BEBF89A6B65009C577 /* ParseModule.m */; }; - 98E9E7DA23152B6ABA2CCE66175BEDA9 /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EFDB080D04D6824C62FACC8278749656 /* AFHTTPSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 98F1DA4E3B5EF713459CCDB878C388A4 /* PFActivityIndicatorCollectionReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F03D75A8EAB99E67ACE53F63B414F22 /* PFActivityIndicatorCollectionReusableView.m */; }; - 993DAD4DC798A7883F3C30AE13359184 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A042B54870F2691CE1141CC51249B831 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 99819454185035CCC28034E61522B9C9 /* PFUIAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C9859B01D21C19A7695D3E4BC335D14 /* PFUIAlertView.m */; }; - 999D42B892A6FFA309196DA2508021E1 /* IQKeyboardManagerConstantsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 015D3940BAC78105EDF03F2BB91A46E6 /* IQKeyboardManagerConstantsInternal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 99D4F3E015F413FE2AC39FABE7E8D931 /* PFInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 60EC5380A05609AFEADD93175936D23A /* PFInstallationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9A93633A0CB818C83EC1FC7B7662BB75 /* PFMutableRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 25714ADEA4E375B6832A9DF56A53F64C /* PFMutableRelationState.m */; }; - 9BC741341F7A3E9797DA6EB1C47662E1 /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = C6C75DCA8C9E3639140AC579C4C46296 /* PFInternalUtils.m */; }; - 9CB57B8503F184A68E407640D207ADAC /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CC658527AA6BE88A41923B795916FE0 /* PFPushManager.m */; }; - 9CEF7DD95429E95AAA42B8ED323DDA01 /* PFRESTCommand_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 320F50071C407D10444E25E65E981EAB /* PFRESTCommand_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9DB442303F0400FF942BB74CE5BB31D0 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 765C0EAAC0CBC6AF531C333F05E087B9 /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9E95E582F430EE008AD319FBD4D2F352 /* PFPush.m in Sources */ = {isa = PBXBuildFile; fileRef = 05FE2E6BDD950A5BDE5209E33B3C42DF /* PFPush.m */; }; - 9F17CC9DD4071EB42DA080EF5B2905EC /* PFObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5545F56CBCA1961E8A999F7257C1FA51 /* PFObject.m */; }; - 9FB642D753999CE0D817238756960E9A /* PFImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = EC9278D7F2E8ED952563707F9B4FB0C4 /* PFImageView.m */; }; - 9FCD98AAEE8AD79C20BD6854611C7421 /* PFObjectSubclassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B6815C329F8604653FA7EB39FBF3DC2 /* PFObjectSubclassInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A0345C0C15762A801A8E2CAD19B637F3 /* PFRESTObjectBatchCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA05D6E4244A871551EC80C2CDCCEC1 /* PFRESTObjectBatchCommand.m */; }; - A038878D88F1510B6E0A20E100FAC74C /* UNIHTTPRequest.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = A283BA24B8BC2F745E053B68490B43ED /* UNIHTTPRequest.h */; }; - A0B32A29C37C2FD2C97C80F4F4E9BB2E /* PFObject+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = 390E345239D63E6785408FCCB29AA27C /* PFObject+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A0D8132A74C3DD45A066B66B96872A8D /* PFRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = A1C3EA21F91503CF85866B1DEBB42208 /* PFRelationState.m */; }; - A160951FFCA747F6D3865F68468227C1 /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB558CB27C9B59F1418AA3959C1070B /* PFEventuallyQueue_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A17802ED40EC2AA21BA76147AB4AD71B /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 467740A6E9FE2B669577C05571B6DC7F /* PFPushManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A1C0916A3268ADF687DDA3BA26ECCB4F /* PFGeoPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = BBF6063B6F29BA7E6ACAA2D45B0000D4 /* PFGeoPoint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A1C35F6CD4D45B271A2E74D7A7CC1A86 /* PFTextButton.h in Headers */ = {isa = PBXBuildFile; fileRef = D0687D024DA00AAE7B4F8366D819654C /* PFTextButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A1FC37F2116E19070ECBC786636BD411 /* UNIHTTPBinaryResponse.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = 7A42508E95E64986B0EDAFC9E7C7942A /* UNIHTTPBinaryResponse.h */; }; - A2245AAA5B2933D9DF90599CF9F14F1E /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = DF0826136CA6F04163DCAD76EB0BE45D /* PFUser.m */; }; - A271CE741A0CB0405BBE24DEC09F7ADB /* PFRESTQueryCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = B2E4026B95A28F85E28276E70D07582F /* PFRESTQueryCommand.m */; }; - A2C0656F1C90FA35634A60E17128300D /* PFRESTFileCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C31C458F86FD36FC07384D563ADFBF2 /* PFRESTFileCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A386DD98979FC8C7E89C0C04EAA0FCF7 /* PFMutableQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = FF08CF3F86D480A8166480D6782736FD /* PFMutableQueryState.m */; }; - A41AA45BCD642898558436AF46D198BC /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5896CFB908B877F5C2F4D5066E6E80D3 /* AFNetworkReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A46EEDC8DCA2052DACCF4C8B558ADD01 /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A316237767BF661F1B6AD8F4B030AF7A /* PFURLSession_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A53F8B0DE57890778BFB311DF00E862B /* PFPropertyInfo_Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = D0A63F277F04D487A09199897B91DA43 /* PFPropertyInfo_Runtime.m */; }; - A543D21D249A4C570A3C1F9660FFFE4D /* UNIUrlConnection.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8E279FCCEB7C1AEB25BCE46F878D745B /* UNIUrlConnection.h */; }; - A57280D5D9EF86E700F1B12266FABBC7 /* IQToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB87D6EE15561B81AB4D70AD70B70FB /* IQToolbar.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A5EC9DBA68F789AE7442C6EA6D182285 /* ChameleonFramework-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F18000A5D7CD27A6122BE6E91FD82BC9 /* ChameleonFramework-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A5F3A45286A396D2C6C2756E87A6FEFD /* FUICellBackgroundView.h in Headers */ = {isa = PBXBuildFile; fileRef = CD104B7AD1FBF1F91303950B3BD5DE5A /* FUICellBackgroundView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 98DA10F38127EB1D4AFF2BDB077F68B7 /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E9D4BAA6FB13BABFA6610DB1C1A516A /* ParseModule.m */; }; + 98E9E7DA23152B6ABA2CCE66175BEDA9 /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 74D0634B76E4EE3C7476264586B47F18 /* AFHTTPSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 993DAD4DC798A7883F3C30AE13359184 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 32719F277BAE80948D0BEA83DAC8F658 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 99BD144694112221EBA83A41C8D34F77 /* IQTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 80CB234E37168DF49DEAB9D544A0C5FB /* IQTextView.m */; }; + 99D4F3E015F413FE2AC39FABE7E8D931 /* PFInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = AC9A5F70E2DE419835876FAA80A1B09C /* PFInstallationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A93633A0CB818C83EC1FC7B7662BB75 /* PFMutableRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CF35D4AC32619FDEC1F5F4FC52084A9 /* PFMutableRelationState.m */; }; + 9B651075445D3C80AF9F6C538F4B04FE /* IQUIWindow+Hierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = 648C65817ACE24AD1C674B8C829B4E36 /* IQUIWindow+Hierarchy.m */; }; + 9BC741341F7A3E9797DA6EB1C47662E1 /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = A7FF321DDDFD4C9D30F6C27AE6F15255 /* PFInternalUtils.m */; }; + 9C0514948A37A2930EC6A3B4F5DF52AE /* PFResources.h in Headers */ = {isa = PBXBuildFile; fileRef = BED06D69A31505FA7CD8316C179CDFAC /* PFResources.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9C13735A4125C01C40EBD9209594EAD7 /* PFPrimaryButton.h in Headers */ = {isa = PBXBuildFile; fileRef = D8DF24ADAADAC243785A71EB5043ECB5 /* PFPrimaryButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9CB57B8503F184A68E407640D207ADAC /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0600787BA30BFE74CE957F9E90F3BBBA /* PFPushManager.m */; }; + 9CEF7DD95429E95AAA42B8ED323DDA01 /* PFRESTCommand_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B7D47CF2CED52BB8C4DBF504E0FD9A5 /* PFRESTCommand_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9DB442303F0400FF942BB74CE5BB31D0 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = A672C404782F472C63BC1B4FF31B6004 /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9E4F5CDEEE091D095F1769FD0423C07C /* IQToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 744ACCE6B933BA912384E2E1F34A3BA7 /* IQToolbar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9E95E582F430EE008AD319FBD4D2F352 /* PFPush.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E42C21E2CF24EB6317C3418E412FAC0 /* PFPush.m */; }; + 9F17CC9DD4071EB42DA080EF5B2905EC /* PFObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 150F4AC40940FEC7C1C20AAD696887E5 /* PFObject.m */; }; + 9F3D52953CC0694BC6FDE81CD221A27C /* PFRect.m in Sources */ = {isa = PBXBuildFile; fileRef = CC3E170282FD37E519479DFEEE7D55B2 /* PFRect.m */; }; + 9FCD98AAEE8AD79C20BD6854611C7421 /* PFObjectSubclassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A8E778140C33BF8B75C390520FC2B65 /* PFObjectSubclassInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A0345C0C15762A801A8E2CAD19B637F3 /* PFRESTObjectBatchCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = EE598A4F3D9378CEBAD8365FAB0D2291 /* PFRESTObjectBatchCommand.m */; }; + A038878D88F1510B6E0A20E100FAC74C /* UNIHTTPRequest.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8BBDBA1C6D3C481A980BC35C14B1BAEF /* UNIHTTPRequest.h */; }; + A0B32A29C37C2FD2C97C80F4F4E9BB2E /* PFObject+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F49279416DD3E891AA4D2508E5DEDA /* PFObject+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A0D8132A74C3DD45A066B66B96872A8D /* PFRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A264B2075C9820174A1D049067B3CBF /* PFRelationState.m */; }; + A160951FFCA747F6D3865F68468227C1 /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CB6945F45579087C28867C89A928DECD /* PFEventuallyQueue_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A17802ED40EC2AA21BA76147AB4AD71B /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6360B90072C4B548E77BF105665B6C37 /* PFPushManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A1C0916A3268ADF687DDA3BA26ECCB4F /* PFGeoPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AECBBD0EFF420415B93C5A23FCB6BCD /* PFGeoPoint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A1FC37F2116E19070ECBC786636BD411 /* UNIHTTPBinaryResponse.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = C8C622D61D94B0BB8BC678A39B314790 /* UNIHTTPBinaryResponse.h */; }; + A2245AAA5B2933D9DF90599CF9F14F1E /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 4ED9C82C3A61619800659B958E8E749E /* PFUser.m */; }; + A271CE741A0CB0405BBE24DEC09F7ADB /* PFRESTQueryCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D2CC7EA24171E936D65F3D1CE945A69 /* PFRESTQueryCommand.m */; }; + A2C0656F1C90FA35634A60E17128300D /* PFRESTFileCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C522A64AC5540AAD98319C36F3E135 /* PFRESTFileCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A386DD98979FC8C7E89C0C04EAA0FCF7 /* PFMutableQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = AD0FE61335BED497567057BA19502825 /* PFMutableQueryState.m */; }; + A41AA45BCD642898558436AF46D198BC /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 7491B40A0184FAC7223E8121B02FB307 /* AFNetworkReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A46EEDC8DCA2052DACCF4C8B558ADD01 /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 44A129BE492571A758DC14026E10AB87 /* PFURLSession_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A4C736E58BDA8172D6667A19851FDEC2 /* IQUITextFieldView+Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 96430B20989715A8573563A41C2C9B2B /* IQUITextFieldView+Additions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A53F8B0DE57890778BFB311DF00E862B /* PFPropertyInfo_Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = E095BAA9FC8B747A000DE925306793BE /* PFPropertyInfo_Runtime.m */; }; + A543D21D249A4C570A3C1F9660FFFE4D /* UNIUrlConnection.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 2BB08B7E9CFEBFDFED3FC2C86EF02981 /* UNIUrlConnection.h */; }; + A5EC9DBA68F789AE7442C6EA6D182285 /* ChameleonFramework-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C3AC194441355C5C035DA3351650C99E /* ChameleonFramework-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A5F3A45286A396D2C6C2756E87A6FEFD /* FUICellBackgroundView.h in Headers */ = {isa = PBXBuildFile; fileRef = BD17758C6D9E58B355428B80263D17EA /* FUICellBackgroundView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A652CE778B758C13386CAA2CE8285644 /* PFPurchaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 209B5F6CA85EBF47851F7BAB625D9974 /* PFPurchaseTableViewCell.m */; }; A677EA486B6C150619DB9868EF9771BD /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */; }; - A6ADA7DB7955937E81F5AC2A9BB71A46 /* PFUserState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A6886AC956A814ACE7382CC7A019CD2 /* PFUserState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A75ECFAB2C512E4E952D146A0B14729E /* PFCurrentInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F4D59B74D186D3A1C07E193A4B8E5BA /* PFCurrentInstallationController.m */; }; - A7FDEA1C1A76CA8E5DF230F4BA31677D /* PFObjectFilePersistenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = AC430D908CF42C14EF7AAFD9B91F4151 /* PFObjectFilePersistenceController.m */; }; - A83FB900F4477F11C2DCD7F8B69209B3 /* PFCurrentUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = EF673633FFA2D7135116862CBD8BE0B9 /* PFCurrentUserController.m */; }; - A87EDB8E2777D3E2D232BCB2A6CFE489 /* PFMutablePushState.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B9C6B10499E423A5444CE2864F26C4C /* PFMutablePushState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A8F6AAD9D6A648D30F327911D8CE53CE /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = A50114757684801C1DE99C04001D04C4 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AA0FC201A1809E7157E034B695A569F2 /* UISlider+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 8442B999E5775411EEFFBC7781637303 /* UISlider+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AA1026B1D369DE93692B71C618D3A82A /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = A776F03C60540FC847DC8FD81CFFD399 /* BFTask+Private.m */; }; - AA217B621ABD283FBA8020E902BB96AD /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = A515ED69EEDB97450E752EA285213DEA /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - AB7A59AE59C71EE96481D322D85D64F8 /* PFAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1479D081320EC36085B8B30288068183 /* PFAlertView.m */; }; - ABB094B942B56188EF4189D1F88D5903 /* PFObjectController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ECC7AE2129119EE9949BB6A2DBA3907 /* PFObjectController_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ACA8475381335DA76ADC114838D0274C /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F97B8CE87B16ACD8D4260933E48F819 /* Bolts.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AD07E8D874E4871FF64FA7BDF298C678 /* UIBarButtonItem+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = C0AD563E6E870F9D52DAD712828C35FB /* UIBarButtonItem+FlatUI.m */; }; - AD1CB3E55033674B9517582A59A1E2AC /* PFObjectFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = BAD731CA6EDC2C97EDBAE9DEF5BEE3A3 /* PFObjectFileCodingLogic.m */; }; - AE6DA539CD6C6FFEFEB1CA40BF9998CE /* UNIHTTPClientHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 38FA89344906DEDDD5D2F77DE3B534B8 /* UNIHTTPClientHelper.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A6ADA7DB7955937E81F5AC2A9BB71A46 /* PFUserState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 571A49A343233979AB4B93973BE75E50 /* PFUserState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A75ECFAB2C512E4E952D146A0B14729E /* PFCurrentInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 73E92AE01951AA70475BDC4CB43A6528 /* PFCurrentInstallationController.m */; }; + A7FDEA1C1A76CA8E5DF230F4BA31677D /* PFObjectFilePersistenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = 42BF37A08F24B8A4D646021BAC4A89B8 /* PFObjectFilePersistenceController.m */; }; + A83FB900F4477F11C2DCD7F8B69209B3 /* PFCurrentUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2BF4F04D9236FEB54B0E9C3385222C8 /* PFCurrentUserController.m */; }; + A8689F6902D3755B75C02E5ED73DD9DD /* IQUIView+IQKeyboardToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = A5AB58CE9D615EDAA234854092081DEA /* IQUIView+IQKeyboardToolbar.m */; }; + A87EDB8E2777D3E2D232BCB2A6CFE489 /* PFMutablePushState.h in Headers */ = {isa = PBXBuildFile; fileRef = CF0865463F092E74770E7110F2D76193 /* PFMutablePushState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A8F6AAD9D6A648D30F327911D8CE53CE /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C112C5EA6B10F17C8A8DC5699FFED81 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AA0FC201A1809E7157E034B695A569F2 /* UISlider+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = B53CFF61083EF9E417C641E96A20A279 /* UISlider+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AA1026B1D369DE93692B71C618D3A82A /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 810047E1F16DB679BCA0CC9D8C9337B7 /* BFTask+Private.m */; }; + AA217B621ABD283FBA8020E902BB96AD /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = BDAEBE02C021E3A5CC6C2481DDB70A37 /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + AB7A59AE59C71EE96481D322D85D64F8 /* PFAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 463691C0AD9E31BB5AD4BDB493C34D0D /* PFAlertView.m */; }; + ABB094B942B56188EF4189D1F88D5903 /* PFObjectController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6627F2203B9CE43FB51C48DEC6485120 /* PFObjectController_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ACA8475381335DA76ADC114838D0274C /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = 143B16D45EA328180F3DC8ADB2E0F355 /* Bolts.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AD07E8D874E4871FF64FA7BDF298C678 /* UIBarButtonItem+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 34856B703E5606ED1C3566F49C8E8DF4 /* UIBarButtonItem+FlatUI.m */; }; + AD1CB3E55033674B9517582A59A1E2AC /* PFObjectFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C44D70A8C988A5FC533435B05B77CB /* PFObjectFileCodingLogic.m */; }; + AE6DA539CD6C6FFEFEB1CA40BF9998CE /* UNIHTTPClientHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E8C2D556022D673D9A39AEE75A92D7B7 /* UNIHTTPClientHelper.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; AE7B412FE2E9E3E2F7CE6FBED6304B96 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - AEDEB8A43CD152EBE7A2E0C3080CE070 /* BoltsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = FABD3C800CB44450C92F28069681BE92 /* BoltsVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AEF9213E35168A3EB14E0CDA9D7E44E6 /* UNIBodyRequest.h in Copy HttpRequest Public Headers */ = {isa = PBXBuildFile; fileRef = AD75432B2BF6D1FC707CFCCD3527D979 /* UNIBodyRequest.h */; }; - AF12089323AED5E530B41B0F4FCA25E7 /* PFKeyValueCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F31C3824F949AF1259C33FE153A1EA9 /* PFKeyValueCache_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AF3B908A52FDFCC291BABD7DEA6A4C3B /* PFACLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 485733735128D4A7D968200F60AE577F /* PFACLPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AF9A03B5B4E1AFB497391551CFB9EBA4 /* PFPushChannelsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 20BC97E813BBBC1228B843C37193A581 /* PFPushChannelsController.m */; }; - B012C2B3E0D50B9AB1CDFFCB0E76CA7B /* PFThreadsafety.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B2C31800C645ACA08536F0A681E03CF /* PFThreadsafety.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B060B84D7C08761A91B38892D95643E6 /* PFRect.m in Sources */ = {isa = PBXBuildFile; fileRef = FDFED8D0FCA171BCC518F85E9793444E /* PFRect.m */; }; - B0647F5D1F335773BA3C155C2FE34280 /* UIView+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F87229E5105EE0FA00DE0B0D95E67052 /* UIView+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B0B5582F003288C5C96AFA142471D43D /* PFReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 09135BA358F372DFAB44C8FB18692D6C /* PFReachability.m */; }; - B2471816ECEF65C1A92D0AC65357602B /* PFFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = ED9A2647BBFB6D985C23B197AA1B2982 /* PFFileState.m */; }; - B2F619610C5E641B67EDF4E366C0E073 /* PFQueryCollectionViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 32588BB30F6E0F5B2DD13FB47DEBCC27 /* PFQueryCollectionViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AEDEB8A43CD152EBE7A2E0C3080CE070 /* BoltsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = CB2C2E44C04D75E24B7B90AAA247551E /* BoltsVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AEF9213E35168A3EB14E0CDA9D7E44E6 /* UNIBodyRequest.h in Copy HttpRequest Public Headers */ = {isa = PBXBuildFile; fileRef = 8E7AE561E188BF127BA12657694BA340 /* UNIBodyRequest.h */; }; + AF12089323AED5E530B41B0F4FCA25E7 /* PFKeyValueCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B66BB1A1B150F73F53A51DB0EF89A285 /* PFKeyValueCache_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AF27938E3A4D924379F07AD58990CC7F /* PFSignUpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AB0CD6365496172E27CBD57A2266391 /* PFSignUpViewController.m */; }; + AF3B908A52FDFCC291BABD7DEA6A4C3B /* PFACLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 32917B1510914295787D683689498DCC /* PFACLPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AF9A03B5B4E1AFB497391551CFB9EBA4 /* PFPushChannelsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B84C7E4CD2F561F248C7DAD46DAB372 /* PFPushChannelsController.m */; }; + B012C2B3E0D50B9AB1CDFFCB0E76CA7B /* PFThreadsafety.h in Headers */ = {isa = PBXBuildFile; fileRef = 9051E6207606F6E900A4A30F93EE6FE1 /* PFThreadsafety.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B0647F5D1F335773BA3C155C2FE34280 /* UIView+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 73A9A926D0BDDC98D57EA6CCBC0E91AC /* UIView+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B0B5582F003288C5C96AFA142471D43D /* PFReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = D305BB43DFE0C6524796909B892CDE28 /* PFReachability.m */; }; + B2471816ECEF65C1A92D0AC65357602B /* PFFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DD6269DBB74E9E2A4341B46B3B2240C /* PFFileState.m */; }; + B2AC279F28767EE398BD6A3187018651 /* PFActivityIndicatorTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = BDB6900AC0DB1620F42D3AA6F1A09E5D /* PFActivityIndicatorTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B2F43ACBCFE5596CE46D95C7AA1399D1 /* IQKeyboardManager.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CB1D7D1EE6ECB93DA929D451A913B2F9 /* IQKeyboardManager.bundle */; }; B31A56A27408319D70D1547B5FA51EAD /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 11733E9AB23CFF872D2D8C693E69A845 /* CoreText.framework */; }; - B322A3CEE4151E27F3073CBEC0BBA270 /* PFRESTSessionCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B117E2539ED9DDF90DCCD6AC02BA037 /* PFRESTSessionCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B337B1573E6106190658E45630AD4381 /* PFQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = AF6B37C98266FCE557B14E51A8B13011 /* PFQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B38703522CBD2E293FD804AD58121426 /* IQUIView+Hierarchy.h in Headers */ = {isa = PBXBuildFile; fileRef = 9661CC0A310A5FFEF6DAC9066D0D906F /* IQUIView+Hierarchy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B3CCC9CE6FF7374AE8CA9882F02F0425 /* ParseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = EB1E0B109FE60D221F3E42A35EC080BC /* ParseInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B3E81351F8E1BDBF2F584E84B3A49B8E /* PFSubclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = 0982CCB6B201941BA02A2C5BED20003D /* PFSubclassing.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B3F2988C9D5F3C144651BF0A698F6394 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = CE8BDCF7E26F4C56C0ADF6B761072CC2 /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B471B47E09E3665845AC1C686A63D6B0 /* UNISimpleRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E61428FE87E53D9A77A44F2EAFA62DD6 /* UNISimpleRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B4FF3032C86287B3EB198AE9902F83A5 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 47047F8FC46BB309AE276DC772A8E367 /* AFURLRequestSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B535D14A88056AFF1A1B7CB70B9664B2 /* FUIAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B33B936A9A7DB28766EEBFB4899F4ED /* FUIAlertView.m */; }; - B5A306F6D83114B15C2C3A82F443F112 /* PFKeyValueCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 624695D19509BEA6FDB8926119091B30 /* PFKeyValueCache.m */; }; - B5A96ABEBC622D7ADE04769DE77CA8FC /* IQTitleBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EFEAE643868EF55305AEDA7B9B5EF2E /* IQTitleBarButtonItem.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B5E41D5D6349F5F3843295A17A9BDDB2 /* Base64.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 473595C4DE2B48B0D88D8F99E55C5F45 /* Base64.h */; }; - B67A0B1855A78C232CA8CA4193480797 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 51CF4033E47188387317DC9CBC5EBBA3 /* UIProgressView+AFNetworking.m */; }; - B69EFF69C1045685D6C9529BB5D56453 /* FUIButton.m in Sources */ = {isa = PBXBuildFile; fileRef = F4555BF7ABB9786C4B80BF763FE75EA7 /* FUIButton.m */; }; - B6D5E48011E309C95B0D178AF8AA0494 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C9643764C40666FA3BDA5483199A807 /* BFCancellationTokenSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B6DFDA7AEEE3818FB42BF55BB43EA79B /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 74B88130F8B1AC90AC1CA346D577FB27 /* PFInternalUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B7189A5111E54D1C0475383753974988 /* PFProductsRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 52CD825D9A1511054A1A5701A737B96F /* PFProductsRequestHandler.m */; }; - B79B6F2E53077EAEBD1BCDA3DF97E926 /* PFCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = AFA7104945F1D9E5D257AF888DF068F6 /* PFCollectionViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B8184053368C7A9E1DC9520118C1E928 /* UNIBaseRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B46EEECD7599B121204708C32CECD6C /* UNIBaseRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B84EC5076309422B9A2C7A55CDABF5EB /* PFCurrentConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D23B3A862EAC73082D325761E92C03 /* PFCurrentConfigController.m */; }; - B8E17F40332B9A8B4AD153AC08C7C60B /* UILabel+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DAFE2C00F715262F9AF47201AE5B463 /* UILabel+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B93A8E1F2FBE4ECDF4C19B2E1698AD3E /* PFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 497EC4624AF81526C5C1ADB7FE648185 /* PFDateFormatter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B953AB7BAE43C522F0DC429FFD1CBEB8 /* PFAnonymousAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = CBF8069EC1EAD1EEE3C76F86B6CAEAC9 /* PFAnonymousAuthenticationProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B9667C60685EA0031CA019D522B3028F /* PFRESTCloudCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 0670C245E4B747809A451258C962EA4C /* PFRESTCloudCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B97B1932591A9DC33101F6DC39CACFA0 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BEF1B2C844D9D029D40DCE5288DA37E5 /* AFHTTPSessionManager.m */; }; - BA6DFE37B6BBCC3575139A1C0A6989A1 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 044039FB6F0BAE9C54969FBC7A846A8A /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BAFB7DE6902268900B1B195416BE4D04 /* PFOfflineQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A63A0131E42676B37B1723606FB5076 /* PFOfflineQueryController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BB068C0CCE5128CAED93094E6A3164DB /* PFDefaultACLController.h in Headers */ = {isa = PBXBuildFile; fileRef = B088733242F6563E27BF3689B4BCA38E /* PFDefaultACLController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BB37D3123E1BA2AAB5924D33133261F3 /* PFRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 22E7AE4FBF90398DB0FD1B35A9DD34AC /* PFRect.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BB59A06B6A75653CECA76692FBABC24B /* PFSignUpView.h in Headers */ = {isa = PBXBuildFile; fileRef = ED30F858AF7B9CE0A8573C496C34FE29 /* PFSignUpView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BB9E8B6CA1A0F28FE241638A9272ED77 /* PFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B5F387A157BDF133EF4E326D269BDCA9 /* PFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC5EB4978A6158F54C41E94D40FB3A40 /* PFInstallationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ABE08EED6D9D0788D5D114EB8073400 /* PFInstallationConstants.m */; }; - BC69C3F29FE101D4247B541115AB8848 /* PFRole.m in Sources */ = {isa = PBXBuildFile; fileRef = 44C79E1505808F22B40DEDC10582999E /* PFRole.m */; }; - BC976BE2061D253EDB43A6E3CD2BD60E /* PFProductTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C50F078A36FD9673AD03D42BF7FC663E /* PFProductTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BD0BF44B4A873132D7BEE79DC691F996 /* KeyboardManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F7C53E20D1BF8377618EFF47699E99E0 /* KeyboardManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BD2636AC38047EE877D06873DC7EF988 /* UNIHTTPRequestWithBody.h in Headers */ = {isa = PBXBuildFile; fileRef = 843985569B6BCF4CD645497A32668195 /* UNIHTTPRequestWithBody.h */; }; - BD2D9BCFDCA527EA0CEBA86E82943CE0 /* UIToolbar+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EB12118FD4DE039BC62EF0E15829099 /* UIToolbar+FlatUI.m */; }; - BD4F7DE5F808676F975022B06C963C28 /* PFURLSessionDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 68183AD738E931701FD0AD3DF16E94B9 /* PFURLSessionDataTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BDF6A32A836F3709640D087117D096FE /* PFPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = FC83E11ABE486AAF98952F9D81D4ED34 /* PFPurchase.m */; }; - BE32F7A8ED25F80F8FA9558A89EBEAAF /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C0186D06FBE7DA63E6E3D6BA78C59D81 /* AFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BE7B9DCC1918965D09FCB459C6908AFF /* UNIUrlConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = F9264E1D10476FDE807BE7A3F3324C1F /* UNIUrlConnection.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - BF8D6320B7CD58347D2D83FFD03CF8C7 /* PFRESTQueryCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 26C5CC23FF12B866E1AD73E2DC206622 /* PFRESTQueryCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BFBF76808AF82215541A512281405BE3 /* PFObjectState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 66B92824AD49FBB9390D23A0ECEC41CD /* PFObjectState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B322A3CEE4151E27F3073CBEC0BBA270 /* PFRESTSessionCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = B485708557E6CB2DE1F09BD5E1B8F90F /* PFRESTSessionCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B337B1573E6106190658E45630AD4381 /* PFQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = B1D876439A55825F2D698021F318F11B /* PFQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B3CCC9CE6FF7374AE8CA9882F02F0425 /* ParseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = F756DED267DAEAA45B7B75F44B527FE0 /* ParseInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B3E81351F8E1BDBF2F584E84B3A49B8E /* PFSubclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = 59579E28C00752CB33687F0116BCE918 /* PFSubclassing.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B3F2988C9D5F3C144651BF0A698F6394 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 64197C6CBE27CDF8450C86E247333C27 /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B471B47E09E3665845AC1C686A63D6B0 /* UNISimpleRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5ED9BE76CA272DD593432FBBB31A0802 /* UNISimpleRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B4EC18486C52A92FE8E7BD6F5CA0CC07 /* ParseUI-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A43EB961420A5AF4805BFDFA34DCDB3 /* ParseUI-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B4FF3032C86287B3EB198AE9902F83A5 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B559DA039E8A1B57AA78991E706A8C2 /* AFURLRequestSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B535D14A88056AFF1A1B7CB70B9664B2 /* FUIAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 59C4881749E08C596424F2235546B787 /* FUIAlertView.m */; }; + B5A306F6D83114B15C2C3A82F443F112 /* PFKeyValueCache.m in Sources */ = {isa = PBXBuildFile; fileRef = EBA6B31F193A3582597871E09B2C0D55 /* PFKeyValueCache.m */; }; + B5D2DB65CD96809A3E305A54A7A9D2D4 /* IQNSArray+Sort.m in Sources */ = {isa = PBXBuildFile; fileRef = C1D45ADCE0464957F823585B3FDF82FB /* IQNSArray+Sort.m */; }; + B5E41D5D6349F5F3843295A17A9BDDB2 /* Base64.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 06BFD711819A59BFBB5685332131E5BF /* Base64.h */; }; + B67A0B1855A78C232CA8CA4193480797 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CAAD28C58C66EB0A98AA015C265FDCE /* UIProgressView+AFNetworking.m */; }; + B69EFF69C1045685D6C9529BB5D56453 /* FUIButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BF939D82D860D7ABEC9DC1665E9AFFC /* FUIButton.m */; }; + B6D5E48011E309C95B0D178AF8AA0494 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = BB8F0303D37F7A5C0E989A3297D5D05E /* BFCancellationTokenSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B6DFDA7AEEE3818FB42BF55BB43EA79B /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = A1046A49BB31CE2EDA5FADB31A184D95 /* PFInternalUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B7189A5111E54D1C0475383753974988 /* PFProductsRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 560C0E4A9A88A8BCA7929A45B476EDE1 /* PFProductsRequestHandler.m */; }; + B8184053368C7A9E1DC9520118C1E928 /* UNIBaseRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = FE4BA056F7A9AC13CC0B5DC014161925 /* UNIBaseRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B82E90F4E6AE4160EAC6E395B4D91A73 /* PFDismissButton.h in Headers */ = {isa = PBXBuildFile; fileRef = B59CF43B52C3F67340E0866557906257 /* PFDismissButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B84EC5076309422B9A2C7A55CDABF5EB /* PFCurrentConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C8AC497AFA3C26AABE01AA1D7E3F66D /* PFCurrentConfigController.m */; }; + B8E17F40332B9A8B4AD153AC08C7C60B /* UILabel+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 68485F33091E36236F52B5769528EB54 /* UILabel+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B90CAC2F3B9B544961A70A906B16CC1C /* PFQueryTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 47A62753B34D273314D19513D5331BC8 /* PFQueryTableViewController.m */; }; + B93A8E1F2FBE4ECDF4C19B2E1698AD3E /* PFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 94DF9C4055D9F72566E7A9544165FE9D /* PFDateFormatter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B953AB7BAE43C522F0DC429FFD1CBEB8 /* PFAnonymousAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = E13BC81FEAB08337AF37599B924A0B92 /* PFAnonymousAuthenticationProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B9667C60685EA0031CA019D522B3028F /* PFRESTCloudCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 41B531CB3F68644A7CA2E2C2C2A0A399 /* PFRESTCloudCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B97B1932591A9DC33101F6DC39CACFA0 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F76DB2BC23017FA90C4165EAE8CFB396 /* AFHTTPSessionManager.m */; }; + BA6DFE37B6BBCC3575139A1C0A6989A1 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1222D529EEC7D53C3D01CCE61951FE2B /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BAFB7DE6902268900B1B195416BE4D04 /* PFOfflineQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 73BC7B9783D64F0A868195064BC3BE46 /* PFOfflineQueryController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BB068C0CCE5128CAED93094E6A3164DB /* PFDefaultACLController.h in Headers */ = {isa = PBXBuildFile; fileRef = 39A9911126C27100A1F40C2590B1A921 /* PFDefaultACLController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BB197948814E822050EAD045575FA763 /* PFCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 50B6CCE1DD1F1B571E064C44E3D7CC87 /* PFCollectionViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BB9E8B6CA1A0F28FE241638A9272ED77 /* PFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 384BDE20DFFC6A0E2458D1BC282F4420 /* PFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BC5EB4978A6158F54C41E94D40FB3A40 /* PFInstallationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 74D802D8056ADFE99B20602EAA26F7B2 /* PFInstallationConstants.m */; }; + BC69C3F29FE101D4247B541115AB8848 /* PFRole.m in Sources */ = {isa = PBXBuildFile; fileRef = FC35A11ED7B0DCD6819A7CBB019FE94C /* PFRole.m */; }; + BD2636AC38047EE877D06873DC7EF988 /* UNIHTTPRequestWithBody.h in Headers */ = {isa = PBXBuildFile; fileRef = E1429F34AED40EF32B9C37C25F4B5395 /* UNIHTTPRequestWithBody.h */; }; + BD2D9BCFDCA527EA0CEBA86E82943CE0 /* UIToolbar+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 90AFF1F5771F5C74F72298841B0D450E /* UIToolbar+FlatUI.m */; }; + BD4F7DE5F808676F975022B06C963C28 /* PFURLSessionDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D29EBF6D740449C59B201746886CD2A /* PFURLSessionDataTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BDF6A32A836F3709640D087117D096FE /* PFPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = 08CFC3FCA7FE77B46041821976AF2BA6 /* PFPurchase.m */; }; + BE32F7A8ED25F80F8FA9558A89EBEAAF /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A97E94420846C84B8140C33CF337FE2C /* AFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BE7B9DCC1918965D09FCB459C6908AFF /* UNIUrlConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3130F150ABEFE07878D5F834F7C368 /* UNIUrlConnection.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + BF8D6320B7CD58347D2D83FFD03CF8C7 /* PFRESTQueryCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 6784E3A646029063B6761DB858CC2A64 /* PFRESTQueryCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BFBF76808AF82215541A512281405BE3 /* PFObjectState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A7377E6FF89E05208972680783752B9A /* PFObjectState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; C0DC97F79BE2050D4DE691E1D991A391 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3780C220917B4DD9DC02DDD7323405B0 /* SystemConfiguration.framework */; }; - C102035B25414733AA5D99E52A896424 /* PFDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 45505F5B25D4570A45EFBA3FB9E5650D /* PFDevice.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C1514CF8F5DC189265CCE541F189F4BD /* PFCommandRunning.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B4F9159794FFF9BEDDFCBAA5965C056 /* PFCommandRunning.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C1A609EC0AACF147369E9433683D4C1D /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = ACF7C931823A68DDBB4BD5C0A4C40927 /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - C1FCB24C1B387306C08722AD05271F71 /* PFApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 24FF581FD822FC0314972728E320502B /* PFApplication.m */; }; - C21257ABEC8456229A8715EE704A7DF1 /* PFObjectSubclassingController.h in Headers */ = {isa = PBXBuildFile; fileRef = B93D67F2A685201833890E4ADFBF1CAE /* PFObjectSubclassingController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C22ECBA602D338BD6C554258C6C80DAB /* PFMultiProcessFileLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D0C6A79B925E5B8DDC09CC0D8F44006 /* PFMultiProcessFileLock.m */; }; - C2678B91068F7931D5742BEB0AE154FF /* PFRESTObjectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = A586A584997D8AAB3C26BC7EA0ABE46C /* PFRESTObjectCommand.m */; }; - C45E267982D6D19F30F6E9E63F3DE81E /* IQKeyboardManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 701A5B85169EB58682F05C75AC13EB3E /* IQKeyboardManager.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - C4885489A964BAC5764A68106B49CE84 /* PFAnonymousUtils_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FB95CF7F41F64BD82E62CED5B594292 /* PFAnonymousUtils_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C590E355367085B3F71811AD1D8AE9BC /* PFObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 609DBFC143F8CA52ECA2DC3956D4ADC3 /* PFObjectController.m */; }; - C5BDF2C3F576679C66B34129891D1919 /* PFACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 81509BFE89D1F42DFC217BFFCC77885F /* PFACLState.m */; }; - C7526D6608B593099FEC8D0896359897 /* PFCoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F552E66B16A2615DC0009C21B50D3642 /* PFCoreManager.m */; }; - C7A351D5E8CBD94236D7A7B43E6E228A /* PFDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A0FAD2BC796F0C43E5AD3DFB8BF253 /* PFDataProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C8CCDFB80193D1AC799456689D8B1C55 /* UIColor+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = E2117490959B9550A4868376B6579453 /* UIColor+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C8E3699CC4885FE30DB9B4F6733EBFDA /* PFMutableRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 2641B578F87B9B95E398CE86A132190C /* PFMutableRelationState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C912666A5A195657F1BADD12361FA838 /* IQSegmentedNextPrevious.h in Headers */ = {isa = PBXBuildFile; fileRef = C034B2ACBE6538C3217772E314D8114F /* IQSegmentedNextPrevious.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C9780FA67E5B8C292063A552C855FB90 /* PFObjectLocalIdStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 49C9D42C27DD2AE3AAB32AE24D2EBF53 /* PFObjectLocalIdStore.m */; }; - CA5F23766F60847E0A35969F56BE64E3 /* PFCommandCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 633C5F1F9DDC345F9BDF689B08C71651 /* PFCommandCache_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CA6093691030EB225102EA5B084B9966 /* PFUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 73ACD345C800D725173F90C44EFD0B3A /* PFUserController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CA6BAD1169CA01807573AE331781DCB5 /* PFSessionController.h in Headers */ = {isa = PBXBuildFile; fileRef = CEB2A2A103376D8F9047E4F1E106E16A /* PFSessionController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CC3CACD5E552F8287FF72CCEDB01EDE9 /* Chameleon_.h in Headers */ = {isa = PBXBuildFile; fileRef = E572BEF3BF5FA574EE0EE4E0D2FDB479 /* Chameleon_.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C102035B25414733AA5D99E52A896424 /* PFDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC5F15FE7360B5B3103BBC0CDF77057 /* PFDevice.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C1514CF8F5DC189265CCE541F189F4BD /* PFCommandRunning.h in Headers */ = {isa = PBXBuildFile; fileRef = BF0F1E060D039DB2ED92B2064E9324FC /* PFCommandRunning.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C1A609EC0AACF147369E9433683D4C1D /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 81D0A63D86D41097D8121FB31AFAFEEA /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C1FCB24C1B387306C08722AD05271F71 /* PFApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = D63A69F4B3F958DFFF7944B7D8290D88 /* PFApplication.m */; }; + C21257ABEC8456229A8715EE704A7DF1 /* PFObjectSubclassingController.h in Headers */ = {isa = PBXBuildFile; fileRef = B37A54E62CF8CA8E0CAB38A547E00BBD /* PFObjectSubclassingController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C22ECBA602D338BD6C554258C6C80DAB /* PFMultiProcessFileLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 078CF89D1976FA56CB71DB442293247A /* PFMultiProcessFileLock.m */; }; + C2678B91068F7931D5742BEB0AE154FF /* PFRESTObjectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 041219D95934148272D9D11F04A65097 /* PFRESTObjectCommand.m */; }; + C47ED1A4BB88FE7511F228BF5BA3EB4A /* PFUIAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = E074D43B725F9C362400C9DF86A4123D /* PFUIAlertView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C4885489A964BAC5764A68106B49CE84 /* PFAnonymousUtils_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E06A7119515F4910F956F06EF911C715 /* PFAnonymousUtils_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C590E355367085B3F71811AD1D8AE9BC /* PFObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = FE9E03DE7A25EA6F5C94C4201C60D18B /* PFObjectController.m */; }; + C5BDF2C3F576679C66B34129891D1919 /* PFACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DC55D2B463E6818D02D571FF341E73B /* PFACLState.m */; }; + C7526D6608B593099FEC8D0896359897 /* PFCoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 144E3BE8EEEEF124C9859E3D7ADBE20F /* PFCoreManager.m */; }; + C7A351D5E8CBD94236D7A7B43E6E228A /* PFDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 023393764250C8DBC9744BAAF26A4B90 /* PFDataProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C7F5E4E05604B5ABC2B37F8FA933A19F /* IQUIViewController+Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 33EFCD2A806F168B502839B5E06004C6 /* IQUIViewController+Additions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C8CCDFB80193D1AC799456689D8B1C55 /* UIColor+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = B2ED2797E56832F52396742BD5AC40B1 /* UIColor+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C8E3699CC4885FE30DB9B4F6733EBFDA /* PFMutableRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 435F2CA4899F4863E2CCBD079FDB969F /* PFMutableRelationState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C9780FA67E5B8C292063A552C855FB90 /* PFObjectLocalIdStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 7259AEBFEEBDDB3685DB53543C199135 /* PFObjectLocalIdStore.m */; }; + CA5F23766F60847E0A35969F56BE64E3 /* PFCommandCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 692F0A966BB11E58EB1DF1EFEEE973F3 /* PFCommandCache_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CA6093691030EB225102EA5B084B9966 /* PFUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BA130676F12B046A542250B72B807BA /* PFUserController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CA6BAD1169CA01807573AE331781DCB5 /* PFSessionController.h in Headers */ = {isa = PBXBuildFile; fileRef = BF72FEFBC6FF8F58CB7CB79FB1C8A7BE /* PFSessionController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CAC05D738F63DFDB78C95C9EE1E6FC8C /* IQUIView+Hierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = BE1AA56FB3518F5ACF08ABFFB8F71661 /* IQUIView+Hierarchy.m */; }; + CC1B6334BB55493205C13E94D92F3421 /* IQBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C56C342942346FB5B3BCF38AFC2442C /* IQBarButtonItem.m */; }; + CC3CACD5E552F8287FF72CCEDB01EDE9 /* Chameleon_.h in Headers */ = {isa = PBXBuildFile; fileRef = BB0313D8856E1ACFFE80F68A9635BD01 /* Chameleon_.h */; settings = {ATTRIBUTES = (Public, ); }; }; CC4E8765CAC02E51F101B700BDB09598 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */; }; - CC8AEBF8D6620E619F26B670189D49C8 /* PFPropertyInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 898E5A3B286DE966995F5236CA3096FB /* PFPropertyInfo_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CE27939928BB4A1DB0706AC1C8A61541 /* PFTextButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 50CAE388BE03392981EB34F0ED05A9DC /* PFTextButton.m */; }; - CE68EA7C522F468D775F060CAF3E705D /* PFObjectUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = F06ED24D1C39A0CFF4123EB0D9491BFB /* PFObjectUtilities.m */; }; - CE94EBF86870898CC0BDAA6ED65C6BF4 /* BFTask+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 151EC16230A016E1E972D02CF9AFCF34 /* BFTask+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CF023CFF89B2E017CC525D92766B31C5 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FD253470226BBD7EAC24A931D19F7D9 /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - CF17EAE278CDD50904A3B07140E9DFD6 /* PFURLSessionJSONDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DCCBF38FA67936B62300896ABA01E42F /* PFURLSessionJSONDataTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CF20CC7E23BD16017EB85C1F6D100F8A /* UIAlertView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 18507E1294DADA225725E281BEEF80DD /* UIAlertView+AFNetworking.m */; }; - CF4D60758633BAE6D1B122456EC24F75 /* Parse-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 43ED988181D6943C924184E66A36963B /* Parse-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CFC88C3F705FA4DCFC03D3A2B773C54B /* PFDismissButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D44A8F3669FDFCF5D7BBCD8CFCD25AC /* PFDismissButton.m */; }; - D03E2E09CD4A257BF7CF59BC14F39774 /* ChameleonConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = A740D31E8046CDB8D8368E00E9329E79 /* ChameleonConstants.m */; }; - D079F0D0F75347213786652AF578F521 /* PFFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CF4CF703CC1DBD333ED293E64B2816AC /* PFFileManager.m */; }; - D08A4B442A5964C417489F08A81784F5 /* PFSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = B32250A0ACFF1FD6AFA14D88511BAE8F /* PFSQLiteDatabase.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D08EE9C2CF0357A7FD1D76F9B93776C4 /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = FC5523A002FB0121BC9A4F24743AFB0D /* PFObjectSubclassingController.m */; }; - D0CF387D344B15D8630064997043503C /* PFSignUpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EB80548C95ADD762223EC007944AF45 /* PFSignUpViewController.m */; }; - D1816449E827B54FC644A5285C5E79E7 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 92C68D5FDCA38C263C5C9DA67BC52DAB /* PFURLSessionFileDownloadTaskDelegate.m */; }; - D1ABCFFF2DBFE6D749E1C7C772262D39 /* PFACLState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EB2DEB083FAA7954B735F6FAF4BA4FEA /* PFACLState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D1BB40613CBDD8C6DAA7812E7FFFF26C /* PFAnonymousAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = B0994984629F495251BA8A149F317827 /* PFAnonymousAuthenticationProvider.m */; }; - D2305969E531EBA7A255D3C4302E7665 /* Bolts-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FFDAC5862665AC65E3E4CD90C8369020 /* Bolts-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D243F10448E2A25C9E2900BFD359D668 /* UNIHTTPJsonResponse.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = BC984301125702EFEAEC41E5B9293303 /* UNIHTTPJsonResponse.h */; }; - D2641614DC999C027E62514B55A06016 /* PFCommandResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 73A911C862B60EA923C814A7824ED72E /* PFCommandResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D2FE57DEAD266E99D8CDBD42BC46CA3F /* PFAnonymousUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = A6A36422F3C90967B88FE242E00E11EB /* PFAnonymousUtils.m */; }; - D48ADA5A04EC8BD8FFB980445E0DE387 /* PFNetworkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F539BDDEF739BDE923DD4C1FC4B2894 /* PFNetworkCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D4C5AECA4AEB0E17B93EECD0ADD06AEE /* PFMutableACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E80233019F4EE7D4C240660178775ED /* PFMutableACLState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D50C7B2A36FA249BB8504A699EB42614 /* PFObjectPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 45D7D6B01B2B8A0D96A29F97BC24C01A /* PFObjectPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D67DF497D24A2D6049AF0B75A46AE48F /* PFACL.h in Headers */ = {isa = PBXBuildFile; fileRef = 38BB302FD9DECD313D93E13A55C5A724 /* PFACL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6870DB8F518AC2F91F9FB95CFF384D9 /* PFAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = BEF3548901AFF1442D8A42CE3D5CD1A7 /* PFAlertView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D6A76FC088B728E09BE669238269A3F6 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F19C8953497BC870280615D15B50D758 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6E746CCAE091711861229C64E08D878 /* IQKeyboardManagerConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D3240C4C5BE274F71D28337454BCF6D /* IQKeyboardManagerConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D75ADB82D221CE073A2385D9BF116313 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 7188A502AE1E58CD7A9DBA3B6C887DF0 /* PFDecoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D7AB05392442CA0F7360E9A0DEFDF10F /* UNIRest.h in Headers */ = {isa = PBXBuildFile; fileRef = 6226CB7D1425E15682AC63FA51921DD7 /* UNIRest.h */; }; - D804E6D1B5A4F1ED130362B6610693FE /* PFCloudCodeController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A5EFD08535330BF7DE6E1D3E60F0FDF /* PFCloudCodeController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D80843081D15837B4B5C8D66D2A8036D /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = FCE06702DA3E947891057A5BB5C23AB1 /* PFCommandCache.m */; }; - D880721F15CF00B4947F68BBDAE3BC19 /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 341193ADAA541B40C6DC994505AA1FD6 /* PFPushUtilities.m */; }; - D8959E35373758B9DF78F533C55FFC08 /* PFProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = 255CEDD6FA71975460137BA3F1A2CC30 /* PFProduct.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D89C08E3CB7C04D6DCC8D18E7149069E /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = F0849AC8F9BFE0E883A47F09527D2117 /* PFInstallationController.m */; }; - D8E2653DA4361CAA33F7832803BD676C /* PFTextField.h in Headers */ = {isa = PBXBuildFile; fileRef = 819412AD0928AF8171877E3BEC3035CA /* PFTextField.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D912EE794EA43F144E2BFDB5E306D3BC /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D6B4E7FA130709BC2B2CD4708AB3B01 /* PFDecoder.m */; }; - D9FA43E9B824136A20E678A3C9CE7507 /* ChameleonEnums.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BBB82019D63DE4FA7F0B92670365270 /* ChameleonEnums.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA15806CB1F348AB5EDB812656E228F2 /* PFDismissButton.h in Headers */ = {isa = PBXBuildFile; fileRef = C5C549C5C71BC97E1890902EFB8FB31F /* PFDismissButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DA339154E42740D763E1E4E42DDB9A1E /* PFFileState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BB3E23687BDA8DF4EC8C90366A7F21E /* PFFileState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DA468AF6666C79B9CE948EBEC956317A /* PFInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 623E4161A8235BF36BEE1C200D5F8E72 /* PFInstallation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAAD175EBECAE7AF5296008E30760A93 /* PFSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = E6BA7CC067B235E0FF566A94E1581577 /* PFSQLiteDatabase.m */; }; - DAD63D2B12385137F611785D8087B0C7 /* PFObjectFileCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E0AF3C159D4C8B5EB68C6ADB8FB55A2 /* PFObjectFileCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DAE230257B3B2669C1587D2039114C8F /* IQNSArray+Sort.h in Headers */ = {isa = PBXBuildFile; fileRef = 36EA36B4327C3CAA76DB71E90785D0B4 /* IQNSArray+Sort.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DB6AD4AA0A96598835F98152FDD9EAA6 /* PFQueryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = B13866FCDF031E55F0DD3D8829D073F8 /* PFQueryPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DC7016A3F483CE9795D9BC1B478A6FB2 /* PFLogInView.m in Sources */ = {isa = PBXBuildFile; fileRef = 409309719BF6A320534CB7DAFF568B83 /* PFLogInView.m */; }; - DC7BA7D1F02949DCEE942B23DFEEC45E /* UNIHTTPRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 61BDE38ED20108AC210E4C985B982B1B /* UNIHTTPRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - DDCAA9BE250EAD797FB91253079205E5 /* UIColor+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 24DB6CC2B14662F6E9B1E046CD7199F7 /* UIColor+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DDFB747838D1B33306D14FB92112203A /* PFCurrentConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 52EDE9D3C5F9D0F9C4068C669A7F7141 /* PFCurrentConfigController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DE6FF42AA13354302CCE67FBA5AE3056 /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = B2B797BD23176FC43BD0D3B5634BE059 /* BFTaskCompletionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DEEA2648058B3E6F40892B4E254501F9 /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 978F1D1FC858DCFF654EA8F44B32F5DF /* AFHTTPRequestOperationManager.m */; }; - DEF9DDF8C9F9606CCDB79286AE41A95F /* PFQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF6084BF27306D73EE3F7156B4A3EFD /* PFQueryController.m */; }; - DF088B8852C119D2181A3D18888CA8D2 /* PFCachedQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = EA75AE20BB255EFB336F605121156B56 /* PFCachedQueryController.m */; }; - DF3181F400F49532145EAF90931261AB /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F032D7E1283777ACE202494C6F7BCD73 /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - DF5C7E7715762DEE188F738217816938 /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = F7278CD831A6A182FCEB151BD633E223 /* PFMultiProcessFileLockController.m */; }; - DF6BE3AEF2D65C63BB86491AF2D1D74F /* PFMultiProcessFileLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 886E9C8ED5B1B07A35329D7F11A187EC /* PFMultiProcessFileLock.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E0689342829558FC97ECA6AE5B078183 /* PFImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 392D3E8B1EE935766CE3A0E9996B235F /* PFImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E073A9FAA1E4FBFEED33E37680301216 /* FUIButton.h in Headers */ = {isa = PBXBuildFile; fileRef = DBC114B642595675D739DDEDD016E9F1 /* FUIButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E11377D77F494E8D27302892123A6C88 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = D93710ABE14AC931BA5E37E5461EFE9D /* AFURLRequestSerialization.m */; }; - E11481C2A7C5F0D2D2B514972DC3BD75 /* PFQueryTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 49B4F56ABCA4652DC76E6114451571CB /* PFQueryTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E15973B7000BAF44794642F5C614DEB2 /* UIViewController+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = A66795F738318920B0D6E941B13871CF /* UIViewController+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CC8AEBF8D6620E619F26B670189D49C8 /* PFPropertyInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B1D30808B74647E6437CF9F248FF87E /* PFPropertyInfo_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CE68EA7C522F468D775F060CAF3E705D /* PFObjectUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 764482CB123621C18470E54689AE1D1A /* PFObjectUtilities.m */; }; + CE94EBF86870898CC0BDAA6ED65C6BF4 /* BFTask+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 405B14A1911C958897CB6F7AA3CA87B0 /* BFTask+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CF023CFF89B2E017CC525D92766B31C5 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 84F48C253BD5BE7290BF97DBB488394B /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + CF17EAE278CDD50904A3B07140E9DFD6 /* PFURLSessionJSONDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C29C184DBBCE87B995B672F7F51F2EA /* PFURLSessionJSONDataTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CF20CC7E23BD16017EB85C1F6D100F8A /* UIAlertView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = B27416461ADADD8D3ADF8E8D35A3ACE1 /* UIAlertView+AFNetworking.m */; }; + CF4D60758633BAE6D1B122456EC24F75 /* Parse-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D72AEC533D655C8D593C07A53F1D747F /* Parse-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D03E2E09CD4A257BF7CF59BC14F39774 /* ChameleonConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = D996C2666AEBC5DE15F1132F7519EEFA /* ChameleonConstants.m */; }; + D041E5A116E9A902A377085D66C03139 /* PFLogInView.h in Headers */ = {isa = PBXBuildFile; fileRef = E619BDE14AB08B9FB930109F4E31D8CD /* PFLogInView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D079F0D0F75347213786652AF578F521 /* PFFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 88D5A072EC90FD6AC9092E73B90F9254 /* PFFileManager.m */; }; + D08A4B442A5964C417489F08A81784F5 /* PFSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 47DEEC6F87A4C44266E60D0FE9D3CD84 /* PFSQLiteDatabase.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D08EE9C2CF0357A7FD1D76F9B93776C4 /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 39E688412771E938F26B8F10C0191798 /* PFObjectSubclassingController.m */; }; + D17AEA993640DA0427EAEEEBF50DA02F /* IQKeyboardManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 62CF11BB195FBEDB741B155A299E3F4C /* IQKeyboardManager-dummy.m */; }; + D1816449E827B54FC644A5285C5E79E7 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D7A3AD7DED9F7674DF066157B83874E1 /* PFURLSessionFileDownloadTaskDelegate.m */; }; + D184483D8564CEEE9E25688918814972 /* IQNSArray+Sort.h in Headers */ = {isa = PBXBuildFile; fileRef = 39A51D0C532BCF6377526E08062DE36D /* IQNSArray+Sort.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D1ABCFFF2DBFE6D749E1C7C772262D39 /* PFACLState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FB6B6FE77562EFAE3F96B1E69E8AC7BB /* PFACLState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D1BB40613CBDD8C6DAA7812E7FFFF26C /* PFAnonymousAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEB1C5E9BC1B761C1D681F6ED6D8494 /* PFAnonymousAuthenticationProvider.m */; }; + D2305969E531EBA7A255D3C4302E7665 /* Bolts-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3689BC9116ABAB64895F8C584E42DFC6 /* Bolts-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D243F10448E2A25C9E2900BFD359D668 /* UNIHTTPJsonResponse.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = 328E074028831B7162CC31C478F53164 /* UNIHTTPJsonResponse.h */; }; + D2641614DC999C027E62514B55A06016 /* PFCommandResult.h in Headers */ = {isa = PBXBuildFile; fileRef = A86E6037DE1255155FC0C886F04E3B93 /* PFCommandResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D2FE57DEAD266E99D8CDBD42BC46CA3F /* PFAnonymousUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = E15CB84F6EAC100D531B6BCAAA2815AB /* PFAnonymousUtils.m */; }; + D48ADA5A04EC8BD8FFB980445E0DE387 /* PFNetworkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E6BF5C5D003F29D1B91F74088E1F30B /* PFNetworkCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D4C5AECA4AEB0E17B93EECD0ADD06AEE /* PFMutableACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = C45DABCF47D9B4496B4627C78ACA5F5B /* PFMutableACLState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D50C7B2A36FA249BB8504A699EB42614 /* PFObjectPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A25890C6749766D2FA0F6910C5AFB555 /* PFObjectPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D5B1F28C17002CBE60420F56B85DC2BF /* IQUIView+IQKeyboardToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A8213D4F0DEBAD8576AB50551D8B094 /* IQUIView+IQKeyboardToolbar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D62B907A64D301A42B3CE20A27B9DD20 /* PFDismissButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 9005E4E32F1EF9E3F28CB2D81637B524 /* PFDismissButton.m */; }; + D67DF497D24A2D6049AF0B75A46AE48F /* PFACL.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B4B936F403CF30DCA18AD72190FCFC9 /* PFACL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D6870DB8F518AC2F91F9FB95CFF384D9 /* PFAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = A7B79D3518D2C9F3E903CF4F1BF00D13 /* PFAlertView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D6A76FC088B728E09BE669238269A3F6 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = EACA9F3764C09E78E6A493517CC775B9 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D75ADB82D221CE073A2385D9BF116313 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 35ACB630538A121CBF33BD2A43D210F7 /* PFDecoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D79592AB3645A0C669F9F71022E80008 /* PFActivityIndicatorTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E1AFB8E063415AF1B76421BD1E70D71 /* PFActivityIndicatorTableViewCell.m */; }; + D7AB05392442CA0F7360E9A0DEFDF10F /* UNIRest.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D36B7A5D9F6AF7F4E01B2320E7BB931 /* UNIRest.h */; }; + D804E6D1B5A4F1ED130362B6610693FE /* PFCloudCodeController.h in Headers */ = {isa = PBXBuildFile; fileRef = A59BC2D719A6FE36F8A22D143D3E4E76 /* PFCloudCodeController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D80843081D15837B4B5C8D66D2A8036D /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = B7EF29C21D7B2E9DCDB866FFBB91594A /* PFCommandCache.m */; }; + D880721F15CF00B4947F68BBDAE3BC19 /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 603FE11A5C1B8C0DC8233656AE9ED2CA /* PFPushUtilities.m */; }; + D8959E35373758B9DF78F533C55FFC08 /* PFProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C01979AC575C3DF44D871EBE33C80D1 /* PFProduct.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D89C08E3CB7C04D6DCC8D18E7149069E /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 62292C896B27EDFF3089011E9218A54F /* PFInstallationController.m */; }; + D912EE794EA43F144E2BFDB5E306D3BC /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 41C1D92DF62E21AFDBB85A53A4D4712E /* PFDecoder.m */; }; + D9FA43E9B824136A20E678A3C9CE7507 /* ChameleonEnums.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F7C8A872250C0A49C96DA6FE264847D /* ChameleonEnums.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DA339154E42740D763E1E4E42DDB9A1E /* PFFileState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 67C82E63D914F4652D462D1EF746789E /* PFFileState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DA468AF6666C79B9CE948EBEC956317A /* PFInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 39D6DC64510F8D6816ED4A2F7DFB52AF /* PFInstallation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DAAD175EBECAE7AF5296008E30760A93 /* PFSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = F23678C89071A5C346F5BE0C1DFE5EC2 /* PFSQLiteDatabase.m */; }; + DAD63D2B12385137F611785D8087B0C7 /* PFObjectFileCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 201D0AF4758543C8B03C221952439864 /* PFObjectFileCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DB6AD4AA0A96598835F98152FDD9EAA6 /* PFQueryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = C0A12B9EF7949B48A1FA4D686A7BA5F9 /* PFQueryPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DC7BA7D1F02949DCEE942B23DFEEC45E /* UNIHTTPRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D6C2112669072AE57F3B1EF2C2D85B3D /* UNIHTTPRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + DDCAA9BE250EAD797FB91253079205E5 /* UIColor+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CDA46DB859C98B0E388E4E3FBFB36FB /* UIColor+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DDFB747838D1B33306D14FB92112203A /* PFCurrentConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = FB9516C98F43C642D31BA9E3D82C8206 /* PFCurrentConfigController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DE0A0C5803FF6B8465951B95A6EE1AF8 /* PFImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = C237413667676F66D932237A4073CB42 /* PFImageCache.m */; }; + DE6FF42AA13354302CCE67FBA5AE3056 /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 27FD73571D1F0E411532F29E810FE8F4 /* BFTaskCompletionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DEEA2648058B3E6F40892B4E254501F9 /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B539B882529715D46F58AA7C0F7277A6 /* AFHTTPRequestOperationManager.m */; }; + DEF9DDF8C9F9606CCDB79286AE41A95F /* PFQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 33A844344DE513F67DA9B594005E312F /* PFQueryController.m */; }; + DF088B8852C119D2181A3D18888CA8D2 /* PFCachedQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 92AA3B35831850C75A93CFD081927516 /* PFCachedQueryController.m */; }; + DF3181F400F49532145EAF90931261AB /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7158256AD2EEA035C9BB1BF017053123 /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + DF5C7E7715762DEE188F738217816938 /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E818A121570D3A0F0DA80F2825AFB6D /* PFMultiProcessFileLockController.m */; }; + DF6BE3AEF2D65C63BB86491AF2D1D74F /* PFMultiProcessFileLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F123ABB578E3F518DF039070BC96D0B /* PFMultiProcessFileLock.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DFA57BC7705BEA564355F07D921005B0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; + E073A9FAA1E4FBFEED33E37680301216 /* FUIButton.h in Headers */ = {isa = PBXBuildFile; fileRef = E5673AE21FC295054FE51806B2157579 /* FUIButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E11377D77F494E8D27302892123A6C88 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F468E6B33E9C6CF3D86F7DE8C388C8B /* AFURLRequestSerialization.m */; }; + E15973B7000BAF44794642F5C614DEB2 /* UIViewController+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EE09B13391CB4E2288B618D9989B7CF /* UIViewController+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E15EBFD04B36AD3E47934A1D0EDE2A76 /* PFPurchaseTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9731541F793BCF26FDF4582BC3D06C4B /* PFPurchaseTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; E187E8D8CF825E41E24E4ECF043D165B /* Pods-FoodbLog-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 71E8757C5E655C53AAFA0481265D031B /* Pods-FoodbLog-dummy.m */; }; - E283FC5D5F9002724D4E524E59577F76 /* PFObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = A40CB3A94F942DB16FCA1145446DFA1E /* PFObjectState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E2C42C2EC9B809BA3AEDE05F92643393 /* PFMutableObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = F0F27237E7594BDC013703A579974879 /* PFMutableObjectState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E31DB9FC1B6D203D4C442A4E001AA9F8 /* PFTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 2699550AAFB04BB17916C59A6B1FC51D /* PFTaskQueue.m */; }; - E32B12CDAA8A832881EA08013F74B10A /* UNIRest.m in Sources */ = {isa = PBXBuildFile; fileRef = 91C373870E6D645F6FF004CCD43B21E6 /* UNIRest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + E283FC5D5F9002724D4E524E59577F76 /* PFObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = E17C805A5EBB9F99E87AE99981812FC7 /* PFObjectState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E2C42C2EC9B809BA3AEDE05F92643393 /* PFMutableObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = EC68094E74192E9415DE284736276F42 /* PFMutableObjectState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E2FF904D58EF803363F83C88EFDC1EBC /* PFLocalization.h in Headers */ = {isa = PBXBuildFile; fileRef = F6A33DD502114C23783D6D52977D75D2 /* PFLocalization.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E31DB9FC1B6D203D4C442A4E001AA9F8 /* PFTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DC5561D6E88870E46F7C10C1B8A21CC /* PFTaskQueue.m */; }; + E32B12CDAA8A832881EA08013F74B10A /* UNIRest.m in Sources */ = {isa = PBXBuildFile; fileRef = 302EA9A2809EC2AE89E8395AE0606DC9 /* UNIRest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; E333D533DE4361D5A3CE2F9D62281084 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - E3C98A1E8B44CB98C75C72B0153311FA /* PFFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 0480814245A7B51C8119FEB8A9BB24EF /* PFFileState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E3DE284C9F31AEA272123577A8454947 /* PFFieldOperationDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = D853E3A07CB02F8C41AC94B33D18DE6E /* PFFieldOperationDecoder.m */; }; - E422151D5688228672DB1F43821D0AB9 /* UIButton+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C5002465C0FC38F707FE42128EF8087 /* UIButton+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E44F9A7B9A2B8D6F8C679EB26957DCB1 /* UNIHTTPResponse.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = 9F8AB594F361E76ACA20213E0F3D3860 /* UNIHTTPResponse.h */; }; - E57913A90FF880A05C0C1CBA7C10F570 /* PFImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D6CC34BA2E5393D2D3F739F59596E4C /* PFImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E58B15E1388E3893149BE0E2AF7C021D /* PFAnalyticsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D00AA339432926A0C0AD20217302F65 /* PFAnalyticsController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E6074F2DE1234DE003E339251CE655DC /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 1401F53C5562661D42BA72E3554ABA2B /* PFMutableFileState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E67A6D29E52E288E8B60D39C878CF960 /* Chameleon_.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A5FB006DED3350DEBDAA366AA9B3C93 /* Chameleon_.m */; }; - E89DF5C4D859407455A3E294EE9D420A /* UNIHTTPClientHelper.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 242785A2D898F8B3178C5C87B1AD01AC /* UNIHTTPClientHelper.h */; }; - E8D145B6A8F126EE542D4560DA53C04B /* PFEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = DD38371523A69B7D5F80DEF60A1EC8D3 /* PFEventuallyQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E8E206B9EEE20D20F0D9BEFE46B653D1 /* PFPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 83026E30E5879736A329148544ED9B28 /* PFPin.m */; }; - E9157D80838E300F27801069DA1BF917 /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 335A452C51FBD35625AA2BC327ADC7F5 /* Bolts-dummy.m */; }; - E9301E9CC4AAB6DCE8FAEE224E15F583 /* ParseUI.h in Headers */ = {isa = PBXBuildFile; fileRef = A6D188FC37D6AAAB2E2FBE6F57F7EE82 /* ParseUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E93714A40956181311573F34E143DB3C /* IQUIView+Hierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = 989D519E262D75CFB924E7B8A1C4ADDF /* IQUIView+Hierarchy.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - E94EB5FE3AAD983E3DEC7DC48A2A91A7 /* Unirest-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A28B62FB34B8E41CEE484AD8817B831C /* Unirest-dummy.m */; }; - E94EE26A559D916232409D3B78C1330C /* PFOfflineStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CACE40B53562456C7355A1BD4B3BF59 /* PFOfflineStore.m */; }; - E99B3AC70816797E71FD03AD9F6ED794 /* PFUserFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 326B3BC55A45A42DE61D2F9FD6215A24 /* PFUserFileCodingLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EBAD17678C41DA0FC100BAF0C597CF1D /* PFFieldOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E223A483DDF7AE6383953308A7288EC6 /* PFFieldOperation.m */; }; - EC4BF1A648624D63284CED0E9A6992CA /* PFMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 61E8FE17B430924B29695138E0ACFA96 /* PFMulticastDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED29E4C820CC9842AAD8DC8AD8DE1B7C /* PFInstallationIdentifierStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 21915C1929F889B9A02A6D8BD071D10B /* PFInstallationIdentifierStore.m */; }; - ED7504BB4E39C1BD0DBBC215994E7D77 /* PFURLConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 09FF643952C8AE70189400301DA35699 /* PFURLConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED9C3556AC3D5037CB6FF529D816FB12 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = B5B9189D6AB1779845E876D0D0424221 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EE3C0F724C90FE75756273DAD768D769 /* IQUITextFieldView+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 383265CA7C2F466092EF3C7F1E49C8DE /* IQUITextFieldView+Additions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - EEBA3FE1C7E10F722123D0898B8A3390 /* Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 59CCCB05A2EBA3189A6BE62B37274EC2 /* Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EF985A767B2C450FA8F0640769D206AD /* UNIBaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = B3DEB5E877C555C69169163E7AE3DCD1 /* UNIBaseRequest.h */; }; - EFC43ED31D5EAC920327974ECFCEEE03 /* PFFile_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A70E011791587979C22032E1FB4F06F9 /* PFFile_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F05460F7ED57F04C670F8CF2A121BFD7 /* UIColor+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B30CADFCD2F0D69405E4D939DC3BFB /* UIColor+Chameleon.m */; }; - F0F92512DD701E369E2EE06A213E11DD /* UINavigationBar+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 788310F842000FA289D2F1CDCD98A85C /* UINavigationBar+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F0FBC0D30A36AD2329B48A43A17C4F73 /* PFFileStagingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 991D633806D370E5A9CCBCE8F7E6CF93 /* PFFileStagingController.m */; }; - F1A626CC96C4F5309BDB955D24C08340 /* FlatUIKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 15797AFCB16424C69558924B2C21A6E3 /* FlatUIKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F257CA05C061D91DBF8FF42DF83ACB48 /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = 24776F7FEE23D85F92F28624333EF3EC /* PFThreadsafety.m */; }; - F31306E41FB51E5765D496D169EA1C87 /* PFRESTCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = A6E6334AF3D4ABDE619C3F9F1575FA7A /* PFRESTCommand.m */; }; - F3208A893E46B96AEB700BA316A28496 /* PFConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 09EA67B03147905558D01B94F40D3B87 /* PFConstants.m */; }; - F33EECCDE7368710D4AB061B4D4EF441 /* Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = D9C88B55C686DDE9636FBFF719E4A77D /* Base64.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - F35BD45463573B117E40D3CAEEF20AC4 /* FUISwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = 48E6A4215AF02A0535DF6FEEA6CF7E97 /* FUISwitch.m */; }; - F3A723074159B52AECB8DB92DCC9068D /* UINavigationController+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 65C5E78DF211DF65F36E36C9FC0D1B01 /* UINavigationController+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F408B67DE22C6E247BE9587685BFD844 /* PFMutableQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 46C0C4F037BDBC97CB84248D3C6354F7 /* PFMutableQueryState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F4259C77CC1398618A0AB193BD065D6D /* UNIBodyRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 27CF6BC1B2E5C52B3244B8D531442D06 /* UNIBodyRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - F4A3C9920EDEA3E824FE7C0843DD52CE /* PFCommandResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D0DB85E2D94B47CB63F50784F0CCD01 /* PFCommandResult.m */; }; - F578343769211EBC6B3F9E68ACCD6A8C /* PFMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A5971EA076048933873A26498305DB /* PFMacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F59673E41BF429818335D4E6BA080037 /* PFBase64Encoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2046774BE36FD33388E4E6602AF763A0 /* PFBase64Encoder.m */; }; - F5A1F5648B57F8EE92271219D9640F86 /* FUIAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = ADCB853B7D560FC831BF87685AD57A9B /* FUIAlertView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F5BA0DBEDD8F1AE74F6BF8E3AF1034EC /* UIStepper+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 4436838248BB3C88A53FD7F6F9B1BDBF /* UIStepper+FlatUI.m */; }; - F668EAE6CBB9ADC856DF7885478C3693 /* NSString+Icons.m in Sources */ = {isa = PBXBuildFile; fileRef = 81311E91F15A9ACF24DDCF24A36B0F39 /* NSString+Icons.m */; }; - F66FB96E58063242636624CC93CB1481 /* PFObjectBatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = D34C12E4F952DB5875CBA2FC470CEA4A /* PFObjectBatchController.m */; }; - F6CD1E97BE26915E38C4670CEB95CFAE /* UIColor+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = D0B9EF05BBF29D5217191E4094EB3982 /* UIColor+FlatUI.m */; }; - F738741C0DA60836C6691930B8903F44 /* PFBase64Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = B7D8C5668CD3DD0CB72C11E3C568BEAF /* PFBase64Encoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F73C65E428DB0FF941082D3A5112C901 /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = D9E50F16F11C26B58CB696C26DE57E74 /* PFGeoPointPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F77A9F2C3BA210256751313BC23B8BAA /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 70C2CCBB87CBCB7C3F8AED8C1396EF19 /* BFExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F7A4DCF50AE508452A448EA22797EEBB /* PFSessionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 072BA5A6E13B9A44E938BDEC145CD4DD /* PFSessionUtilities.m */; }; - F7F1F58441A29C3E9E037BF03A1E0172 /* PFErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = BF64F8F931BFD24F09DA8796A5AB8716 /* PFErrorUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F83A166A204E7F70BAABFD2E4CA21FC7 /* PFRESTSessionCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = F439F7531646055B955D7668822E655A /* PFRESTSessionCommand.m */; }; - F868175B0C271A19B75F4993EEF107D1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */; }; - F8B195D52D2D7BE80CF4EE6B726204A6 /* PFConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = DC8286821540402840D2F78184926242 /* PFConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F8CAF02F1E612CEFB2AB6C3B731ADA87 /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = F35C83A2CBD33B6D54CB34F091A81847 /* PFPinningEventuallyQueue.m */; }; - F8D55F4F51D08B48B8B0776E9DE8E4D2 /* PFPushState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F6FFE987901F200ABA41215EC6603C5 /* PFPushState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F906BA7712F8F45BF05FD888A25ADB6F /* PFFieldOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2697B93401DB7B2F5E39F3CF9BC4DCB3 /* PFFieldOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F914B72A685B4117F89010C60D49A74D /* PFCurrentUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CC62DFCDBE9FE6C3218D149D055F4E7 /* PFCurrentUserController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F9352FCBA2935DB07B38CDCC3E5D04F5 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 11DA25D5854F43477EA8697C9A8A9677 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F9410635D2A13AC2DC7A9CCB266F8596 /* UIProgressView+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 86363196FAD187D55BE15125F559D10B /* UIProgressView+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F9BF113DAE31AC0FFE2C2DEA50F75891 /* UNIHTTPStringResponse.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = C7F69AB63C5B9D83F940D7C9CA0CE984 /* UNIHTTPStringResponse.h */; }; - FB0309CEBF4E3B4B5E2857A88AD60698 /* PFTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AA2C962E61F10AADB5795A8761860F4 /* PFTextField.m */; }; - FB47B2B3700081A29B32CAB0B8361303 /* UILabel+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 0263C9D12EC81C1962B428D0F0711A32 /* UILabel+Chameleon.m */; }; - FBF3606D5AA052B28AAF18AFA1F6F5E1 /* PFFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 419788502E9D2F50B77877AEE03ECD01 /* PFFile.m */; }; - FC6F96892F863F4088B93B5BC78CF60E /* IQUIViewController+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DCD97868BF52A2DA515BB0660CE3150 /* IQUIViewController+Additions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - FD18EFB419117DE421FCB38ACF9151AF /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = F863D0768304DA4198F0440CDF7AA8C1 /* PFKeychainStore.m */; }; + E3C98A1E8B44CB98C75C72B0153311FA /* PFFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 28B369CD0FD6B2267684D60BAD74B807 /* PFFileState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E3DE284C9F31AEA272123577A8454947 /* PFFieldOperationDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F817FA3B2D6B6B355ABF9815AD40608 /* PFFieldOperationDecoder.m */; }; + E422151D5688228672DB1F43821D0AB9 /* UIButton+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F2B4DBA35116B6042915F19733A7176 /* UIButton+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E44F9A7B9A2B8D6F8C679EB26957DCB1 /* UNIHTTPResponse.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = 7175B962AF396E26B597D16DC3A5CAAB /* UNIHTTPResponse.h */; }; + E58B15E1388E3893149BE0E2AF7C021D /* PFAnalyticsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F8F1DF2A2E6067126652008A009717A /* PFAnalyticsController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E6074F2DE1234DE003E339251CE655DC /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 78698705CCE8B41B0BB2C29A99DAED74 /* PFMutableFileState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E67A6D29E52E288E8B60D39C878CF960 /* Chameleon_.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E432ED6C4BACD597B5F4F2DB17116EA /* Chameleon_.m */; }; + E89DF5C4D859407455A3E294EE9D420A /* UNIHTTPClientHelper.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = EAE6707081D74AD48DDC2CD34E54F4A5 /* UNIHTTPClientHelper.h */; }; + E8D145B6A8F126EE542D4560DA53C04B /* PFEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A2E073D3DA8C342D0440403A0447C26 /* PFEventuallyQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E8E206B9EEE20D20F0D9BEFE46B653D1 /* PFPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A5E8C51D8EFCE54951AFBA268A07EC5 /* PFPin.m */; }; + E9157D80838E300F27801069DA1BF917 /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 07A0976E8712629AD60DA98871FCF0DE /* Bolts-dummy.m */; }; + E94EB5FE3AAD983E3DEC7DC48A2A91A7 /* Unirest-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 602303506554C7182024859B53F84A23 /* Unirest-dummy.m */; }; + E94EE26A559D916232409D3B78C1330C /* PFOfflineStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B36583C8B8073E88C7FBCEDD319D548 /* PFOfflineStore.m */; }; + E99B3AC70816797E71FD03AD9F6ED794 /* PFUserFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 385FE35508EFAD1A522AC72D9A9F3F0D /* PFUserFileCodingLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EBAD17678C41DA0FC100BAF0C597CF1D /* PFFieldOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 7013A29B1EA77F5E42B21D0847570E86 /* PFFieldOperation.m */; }; + EBE6A0A4F9476D021AF772A03BCA694A /* PFActionButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 1496C6331BE5CE68663D0C65DEB7E653 /* PFActionButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EC13F1DF9025A5C3E0CB90E9376BD62F /* IQKeyboardManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EF08F0FD1BF57A2E09B192B96E023021 /* IQKeyboardManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EC1CBC5AB12E4C488819653A72B5E19F /* IQKeyboardManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4012B08564DD4ED326E07CC6F074DD1B /* IQKeyboardManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EC4BF1A648624D63284CED0E9A6992CA /* PFMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D24DD97B5EB009793F423B2E12526C9 /* PFMulticastDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ED29E4C820CC9842AAD8DC8AD8DE1B7C /* PFInstallationIdentifierStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D69D5263055F55D91F01C506D8E89BAD /* PFInstallationIdentifierStore.m */; }; + ED7504BB4E39C1BD0DBBC215994E7D77 /* PFURLConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2C6A11EEEA34D04A61B4281AC80E6C /* PFURLConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ED9C3556AC3D5037CB6FF529D816FB12 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = B965B81CCEE7979B459AD921D6689D66 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EE537F59676DDE713D6A023B2C160F03 /* PFTextField.h in Headers */ = {isa = PBXBuildFile; fileRef = 9101FCF180E53E25AAE24FD11B0AB42B /* PFTextField.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EEBA3FE1C7E10F722123D0898B8A3390 /* Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D7568E836055BBF820E548BA267D097 /* Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EF985A767B2C450FA8F0640769D206AD /* UNIBaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = F002184D6C52C347609B0935CC6CF065 /* UNIBaseRequest.h */; }; + EFC43ED31D5EAC920327974ECFCEEE03 /* PFFile_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AF27CCB4FCEF9871BEE69541BB6C7107 /* PFFile_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F05460F7ED57F04C670F8CF2A121BFD7 /* UIColor+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = F84F91BBE51B1905554065F47F8129B3 /* UIColor+Chameleon.m */; }; + F0F92512DD701E369E2EE06A213E11DD /* UINavigationBar+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = A1464A1B89739CFFDC2231D2B2BFEF97 /* UINavigationBar+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F0FBC0D30A36AD2329B48A43A17C4F73 /* PFFileStagingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EE458611A33294A7976CAE3AC79A962 /* PFFileStagingController.m */; }; + F1A626CC96C4F5309BDB955D24C08340 /* FlatUIKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D308000BF600D71810C6CD2499427CD7 /* FlatUIKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F257CA05C061D91DBF8FF42DF83ACB48 /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C77C2B15C731F7A514C22FFCFAD61F4 /* PFThreadsafety.m */; }; + F2A824CD4CFB7203FD1871E0F3BE5EBD /* PFColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A16F60868674C544C93C2FC19B449CF /* PFColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F31306E41FB51E5765D496D169EA1C87 /* PFRESTCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 960742FAC6FDF1CD37B19A3DA2797830 /* PFRESTCommand.m */; }; + F3208A893E46B96AEB700BA316A28496 /* PFConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = ECD2083274B0707629CB97D4D8099431 /* PFConstants.m */; }; + F33EECCDE7368710D4AB061B4D4EF441 /* Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = D64494125FCBF8578381C4A3DFC24582 /* Base64.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + F35BD45463573B117E40D3CAEEF20AC4 /* FUISwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = 11570DEE95441A341ED290D310B99750 /* FUISwitch.m */; }; + F3A723074159B52AECB8DB92DCC9068D /* UINavigationController+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 538710A479D4D4516F3473CEB00D6341 /* UINavigationController+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3FE63C82D6575686809B65BB48AE8C8 /* IQUIWindow+Hierarchy.h in Headers */ = {isa = PBXBuildFile; fileRef = F32062803128DABF9E52794D64204AA2 /* IQUIWindow+Hierarchy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F408B67DE22C6E247BE9587685BFD844 /* PFMutableQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CB6840C12F6DE61721C1D23DAD8176F /* PFMutableQueryState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F4259C77CC1398618A0AB193BD065D6D /* UNIBodyRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B57AB3BA641DCFA726A7D3F91B31F320 /* UNIBodyRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + F4A3C9920EDEA3E824FE7C0843DD52CE /* PFCommandResult.m in Sources */ = {isa = PBXBuildFile; fileRef = D81124330876EB85D8CCB6C9378D2E8C /* PFCommandResult.m */; }; + F578343769211EBC6B3F9E68ACCD6A8C /* PFMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 9279D9795C913BECFB930DCA0A4CBF9B /* PFMacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F58ECDD2CAFE685F6DACB73F5451956A /* PFUIAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = C2660605B5FB0E40D12FF6A4B131C4A2 /* PFUIAlertView.m */; }; + F59673E41BF429818335D4E6BA080037 /* PFBase64Encoder.m in Sources */ = {isa = PBXBuildFile; fileRef = E843676E8B7DE282A6605A76DC99E8D3 /* PFBase64Encoder.m */; }; + F5A1F5648B57F8EE92271219D9640F86 /* FUIAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = F60B9EE41FD4D8BAB2516F180F00B059 /* FUIAlertView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F5BA0DBEDD8F1AE74F6BF8E3AF1034EC /* UIStepper+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = AD86AC16AA572CE40EAE3336DB4D3602 /* UIStepper+FlatUI.m */; }; + F668EAE6CBB9ADC856DF7885478C3693 /* NSString+Icons.m in Sources */ = {isa = PBXBuildFile; fileRef = C2D25A48A5669C4EEA1A1278B5AADCC8 /* NSString+Icons.m */; }; + F66FB96E58063242636624CC93CB1481 /* PFObjectBatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A99D12CF0886074F54F4101B90E0209 /* PFObjectBatchController.m */; }; + F6CD1E97BE26915E38C4670CEB95CFAE /* UIColor+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = C6465177F56344D8A62FB5F181EEDB03 /* UIColor+FlatUI.m */; }; + F738741C0DA60836C6691930B8903F44 /* PFBase64Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = EF5EAF79A06EE932EE7BB85498679562 /* PFBase64Encoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F73C65E428DB0FF941082D3A5112C901 /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 51829BFD42C53387BD853B53595A4859 /* PFGeoPointPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F77A9F2C3BA210256751313BC23B8BAA /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = CA0F759EB3B8FF5747A3FF8D9A670ED4 /* BFExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7A4DCF50AE508452A448EA22797EEBB /* PFSessionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 36829EB394DB6476915698282D533FA4 /* PFSessionUtilities.m */; }; + F7F1F58441A29C3E9E037BF03A1E0172 /* PFErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 131DCAADD2A7478906370E28CF44D71A /* PFErrorUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F816F1EB5E6293AEB6C05213922DD332 /* PFActivityIndicatorCollectionReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = C0FA4E1F34830F2463FCB811EAD24A79 /* PFActivityIndicatorCollectionReusableView.m */; }; + F83A166A204E7F70BAABFD2E4CA21FC7 /* PFRESTSessionCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = DF7A671748B1795733EB163457D9959D /* PFRESTSessionCommand.m */; }; + F8B195D52D2D7BE80CF4EE6B726204A6 /* PFConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = C80EE7051488F41E849C0913BFE85299 /* PFConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F8CAF02F1E612CEFB2AB6C3B731ADA87 /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5170BF555CAA15C414E5FFBAFBA0560C /* PFPinningEventuallyQueue.m */; }; + F8D55F4F51D08B48B8B0776E9DE8E4D2 /* PFPushState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F0D7E94728407981CD0D00CFC842764D /* PFPushState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F906BA7712F8F45BF05FD888A25ADB6F /* PFFieldOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 036DE49E350AD26884D01409BB02CCEF /* PFFieldOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F914B72A685B4117F89010C60D49A74D /* PFCurrentUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 109E7534E27B2BE53FBD782EF3EA62A9 /* PFCurrentUserController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F9352FCBA2935DB07B38CDCC3E5D04F5 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E82AC36F045BE087ECE7253B8EEB06EB /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F9410635D2A13AC2DC7A9CCB266F8596 /* UIProgressView+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = F8E604995C153FE58AF3F074F1262AEA /* UIProgressView+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F9BF113DAE31AC0FFE2C2DEA50F75891 /* UNIHTTPStringResponse.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = DBE6819D41549A1CBD4D69F3085F2562 /* UNIHTTPStringResponse.h */; }; + FA71321B6035542D5D30B828DB77FB8C /* PFCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = EAA0C3C67C7D908A2F7182249E71C853 /* PFCollectionViewCell.m */; }; + FB3FC81067E5C451ADFBFF6918D8FFCA /* IQTitleBarButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A93EE71639FC1F292FCD2110B27A625 /* IQTitleBarButtonItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FB47B2B3700081A29B32CAB0B8361303 /* UILabel+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = E07A6A98D3D5AABF5C8EFFD18AB58BC3 /* UILabel+Chameleon.m */; }; + FBF3606D5AA052B28AAF18AFA1F6F5E1 /* PFFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 19D22DE6F0EF2AF9D2D7C2F20FD61ADD /* PFFile.m */; }; + FD18EFB419117DE421FCB38ACF9151AF /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = FCDFA364DF4CC49FC21ECB8993B987F4 /* PFKeychainStore.m */; }; FDB6E1D811A52AD01DFD1128E8EF8911 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */; }; - FDCA64A498A1F1C61C0DE0342920FDB6 /* UINavigationController+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = F3DEB5E0C029DA28C8320B373AD1B88D /* UINavigationController+Chameleon.m */; }; - FE3FEBF0DEEFD932C5106CA7DCCC1FF3 /* PFCommandURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BF47B8414383C32DD8B7B421B488B543 /* PFCommandURLRequestConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FDCA64A498A1F1C61C0DE0342920FDB6 /* UINavigationController+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = E0FADD9A90F6B97C2F05721EFB03C404 /* UINavigationController+Chameleon.m */; }; + FE3FEBF0DEEFD932C5106CA7DCCC1FF3 /* PFCommandURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 91DA321208E1EF09682615B34F8542E4 /* PFCommandURLRequestConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; FE7ED99030498028605F37EB2B3518B7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - FEACB369279A460ECFC54C005A741AE0 /* PFObjectConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = B23FD0394F4B69148299C896E97C2A90 /* PFObjectConstants.m */; }; + FEACB369279A460ECFC54C005A741AE0 /* PFObjectConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B6F63E91EEC4427BD74F56EC4CDA08B /* PFObjectConstants.m */; }; FEAF74C28B30197791132CA4C268A2CD /* Pods-FoodbLog-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 47B8D17F18C41D9E28B5AD8E78B23877 /* Pods-FoodbLog-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FED8724CB7E797F857A8B6954F9672F7 /* PFQueryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 345CA40D5F45AD04D24CC17ABE86B911 /* PFQueryUtilities.m */; }; - FEEB54C300BDC23661F4B2D1C4BD939C /* PFUserAuthenticationController.h in Headers */ = {isa = PBXBuildFile; fileRef = A745A3D33907AFBD7D9B85EC9DC35D21 /* PFUserAuthenticationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FF4D68C2DEC5B1C462849F1F5EC83C76 /* PFURLSessionCommandRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E34CEB998FE5525402334C2BB80D5A3 /* PFURLSessionCommandRunner.m */; }; - FF73BEC217D2099177CEFA7DFEA4A4FD /* PFURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 73CC3349EC3533415793CF755807650A /* PFURLSession.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FFDEA159E9BE6B9B53FB5726020990FE /* PFObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 51223661224A51BA99F43A7498640E0A /* PFObjectState.m */; }; + FED8724CB7E797F857A8B6954F9672F7 /* PFQueryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D48E39DBDC5F4A1596DCF448DB2C584 /* PFQueryUtilities.m */; }; + FEEB54C300BDC23661F4B2D1C4BD939C /* PFUserAuthenticationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 989F197281037053568D90FE2E45034F /* PFUserAuthenticationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FF4D68C2DEC5B1C462849F1F5EC83C76 /* PFURLSessionCommandRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = D961C77262C7D151CC89E6164FA6D52C /* PFURLSessionCommandRunner.m */; }; + FF73BEC217D2099177CEFA7DFEA4A4FD /* PFURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E61178295191BF6E6785AA01F3B06A /* PFURLSession.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FFDEA159E9BE6B9B53FB5726020990FE /* PFObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 033CF3680745525AA290EAA350C6D644 /* PFObjectState.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 023419A71D4C5BEBC9D817ADC6C3092B /* PBXContainerItemProxy */ = { + 4534AFDCFE4E3F47A2AAF5DE9AA0B163 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 42465A188431886AB035275F049824D3; remoteInfo = Bolts; }; - 0CBD9EA31DDA34BF819A5EA071433D98 /* PBXContainerItemProxy */ = { + 5CB0E17673C4FF6B06461CFF4BE9F890 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 0130B3724283586C0E9D2A112D4F2AA1; - remoteInfo = AFNetworking; + remoteGlobalIDString = FBA456CB50E371584C11231929A0971E; + remoteInfo = IQKeyboardManager; }; - 570B15215E9310693D397DC3282CE4B4 /* PBXContainerItemProxy */ = { + 6C7FDBC1A588296B19BD2ECF54A19EC8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 42465A188431886AB035275F049824D3; remoteInfo = Bolts; }; - 631FEB8D5D54757C74C640EC60514AD8 /* PBXContainerItemProxy */ = { + 6EC43FB8FA6F24A56C8B29A3321EE415 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 96F971576D7B3914510B0B2FB38F43A2; - remoteInfo = ParseUI; + remoteGlobalIDString = 7F3FE5658AEC4AF2B296EDA73A218182; + remoteInfo = Parse; }; - 70CDEE1F31046DF7D58238DE342DC5CB /* PBXContainerItemProxy */ = { + 725D87B5A2A247E05A8144C4ADDAFBE9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = FBA456CB50E371584C11231929A0971E; - remoteInfo = IQKeyboardManager; + remoteGlobalIDString = 96F971576D7B3914510B0B2FB38F43A2; + remoteInfo = ParseUI; }; - 97F1B36C623FCCA4AA918D6FC51650CA /* PBXContainerItemProxy */ = { + 791C3327C12F11ED3A0B6E43F941ECB7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 7F3FE5658AEC4AF2B296EDA73A218182; - remoteInfo = Parse; + remoteGlobalIDString = DD9AC66E330E40497F19A867C63FBAAA; + remoteInfo = Unirest; }; - A896BC871784B8F9F89ED5DE758218C4 /* PBXContainerItemProxy */ = { + 85555F6EC589E33A03E90D2664B57C19 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 42465A188431886AB035275F049824D3; remoteInfo = Bolts; }; - B7D7D2C4956FA3742D5187D428DDE8F8 /* PBXContainerItemProxy */ = { + 8D628D385D9F5A838D8C30142748A1ED /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = DD9AC66E330E40497F19A867C63FBAAA; - remoteInfo = Unirest; + remoteGlobalIDString = 7F3FE5658AEC4AF2B296EDA73A218182; + remoteInfo = Parse; }; - BB8AEE89F14DC93554130618C695B195 /* PBXContainerItemProxy */ = { + 98BDC34B972C5A1BDCE7F5F879B31FBF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 923099EAAC66CBEDD533E3FE43830166; - remoteInfo = FlatUIKit; + remoteGlobalIDString = 28BFDC89BA4363F4F3576DEC70EE10AE; + remoteInfo = ChameleonFramework; }; - C217FDF16F9F1EFC2C5534E7024BB879 /* PBXContainerItemProxy */ = { + E1E69F9F813F9240A8C96E8C112A0D1C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 7F3FE5658AEC4AF2B296EDA73A218182; - remoteInfo = Parse; + remoteGlobalIDString = 923099EAAC66CBEDD533E3FE43830166; + remoteInfo = FlatUIKit; }; - C4176BB50DC5E33A6948CCDE5C9DB79C /* PBXContainerItemProxy */ = { + E3C263ED9E54BDFD17A2DAECF7277C9D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 28BFDC89BA4363F4F3576DEC70EE10AE; - remoteInfo = ChameleonFramework; + remoteGlobalIDString = 0130B3724283586C0E9D2A112D4F2AA1; + remoteInfo = AFNetworking; }; - F85AB62DE4BDFE183DF7AC74A4381B9B /* PBXContainerItemProxy */ = { + FDC3896FC173C665902C83FA3FA7B269 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; @@ -820,735 +826,749 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0071EAC09DA0FFDA8FB3410D2936CA80 /* UIImage+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+FlatUI.h"; path = "Classes/ios/UIImage+FlatUI.h"; sourceTree = ""; }; - 00D07CDF153D8265CAE511A266EBBD92 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; - 015D3940BAC78105EDF03F2BB91A46E6 /* IQKeyboardManagerConstantsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManagerConstantsInternal.h; path = IQKeyBoardManager/Constants/IQKeyboardManagerConstantsInternal.h; sourceTree = ""; }; - 01682B06EC1A9F5115B2823C70E94CA9 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; - 021C106DF227E61ECA4E5555FF2F7CD6 /* ParseUI.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ParseUI.modulemap; sourceTree = ""; }; - 0225577578F0F538D3E335508E84D451 /* PFUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserController.m; path = Parse/Internal/User/Controller/PFUserController.m; sourceTree = ""; }; - 0263C9D12EC81C1962B428D0F0711A32 /* UILabel+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UILabel+Chameleon.m"; path = "Pod/Classes/Objective-C/UILabel+Chameleon.m"; sourceTree = ""; }; - 02CAE2970238AAA1CC6CCF79D78A95D9 /* PFMutableUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableUserState.h; path = Parse/Internal/User/State/PFMutableUserState.h; sourceTree = ""; }; + 008FE4C757A98BF3F85D56B16B909C95 /* ParseUI.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ParseUI.debug.xcconfig; sourceTree = ""; }; + 0211A72E4EA58246830A20585FB161A7 /* PFPropertyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo.h; sourceTree = ""; }; + 023393764250C8DBC9744BAAF26A4B90 /* PFDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDataProvider.h; path = Parse/Internal/PFDataProvider.h; sourceTree = ""; }; + 02461850BFE597052075F46B27750287 /* Lato-Regular.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "Lato-Regular.ttf"; path = "Resources/Lato-Regular.ttf"; sourceTree = ""; }; + 0264EE9F5AFC365618A7A86369BDF5E5 /* PFProduct+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFProduct+Private.h"; path = "Parse/Internal/Product/PFProduct+Private.h"; sourceTree = ""; }; + 029C15EA534199B8D6FF5549EDA5174A /* PFEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEncoder.m; path = Parse/Internal/PFEncoder.m; sourceTree = ""; }; + 0322D52D22023BE2411F2CCAACEE304A /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperation.h; path = AFNetworking/AFHTTPRequestOperation.h; sourceTree = ""; }; + 033347FAE6C04EC4566EFBDC24DB4DC8 /* PFRESTConfigCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTConfigCommand.m; path = Parse/Internal/Commands/PFRESTConfigCommand.m; sourceTree = ""; }; + 033CF3680745525AA290EAA350C6D644 /* PFObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectState.m; path = Parse/Internal/Object/State/PFObjectState.m; sourceTree = ""; }; + 036DE49E350AD26884D01409BB02CCEF /* PFFieldOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperation.h; path = Parse/Internal/FieldOperation/PFFieldOperation.h; sourceTree = ""; }; 0383903D05EDD5C442C682C1F7A1752D /* ChameleonFramework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ChameleonFramework; path = ChameleonFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 044039FB6F0BAE9C54969FBC7A846A8A /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; - 0480814245A7B51C8119FEB8A9BB24EF /* PFFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState.h; path = Parse/Internal/File/State/PFFileState.h; sourceTree = ""; }; - 04E51A30E638BD5F2089972DC7339D76 /* UITabBar+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITabBar+FlatUI.m"; path = "Classes/ios/UITabBar+FlatUI.m"; sourceTree = ""; }; - 05FE2E6BDD950A5BDE5209E33B3C42DF /* PFPush.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPush.m; path = Parse/PFPush.m; sourceTree = ""; }; + 041219D95934148272D9D11F04A65097 /* PFRESTObjectCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectCommand.m; path = Parse/Internal/Commands/PFRESTObjectCommand.m; sourceTree = ""; }; + 0415F5BE04092407D9C3DF323C2DDA93 /* PFPropertyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo.m; sourceTree = ""; }; + 0528637876B6E3CD1CC1904766E72FCF /* PFACL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACL.m; path = Parse/PFACL.m; sourceTree = ""; }; + 0600787BA30BFE74CE957F9E90F3BBBA /* PFPushManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushManager.m; path = Parse/Internal/Push/Manager/PFPushManager.m; sourceTree = ""; }; 062054FC97AAAB3D2F4AB253A7CDE385 /* ParseUI */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ParseUI; path = ParseUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0625A1B69859FE4C804D6DB1E4977BA5 /* IQKeyboardManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManager.modulemap; sourceTree = ""; }; + 0644AF28ADE45E9FB2616BBB3A6B43F3 /* PFRESTUserCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTUserCommand.h; path = Parse/Internal/Commands/PFRESTUserCommand.h; sourceTree = ""; }; 0652F2476C7C87C6C0F6CB68072EA25F /* Parse */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Parse; path = Parse.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 065E4ABAE71F00350CBF5E154707399C /* PFObjectLocalIdStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectLocalIdStore.h; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h; sourceTree = ""; }; - 065EC0B26F5FCC313BF0CC772F0AAFCD /* ParseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseManager.h; path = Parse/Internal/ParseManager.h; sourceTree = ""; }; - 0670C245E4B747809A451258C962EA4C /* PFRESTCloudCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCloudCommand.h; path = Parse/Internal/Commands/PFRESTCloudCommand.h; sourceTree = ""; }; - 0725DB534BB32F744586EC0F2357B78B /* PFPropertyInfo_Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Runtime.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h; sourceTree = ""; }; - 072BA5A6E13B9A44E938BDEC145CD4DD /* PFSessionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionUtilities.m; path = Parse/Internal/Session/Utilities/PFSessionUtilities.m; sourceTree = ""; }; - 0766F2D21D2ED224A3E82F26E0B5CD52 /* PFQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryState.m; path = Parse/Internal/Query/State/PFQueryState.m; sourceTree = ""; }; - 077B7B33826673C09B30B8671D0097CF /* PFProductTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductTableViewController.m; path = ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m; sourceTree = ""; }; - 08FAD9262BEE1666BF4D27626214085C /* PFObjectUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectUtilities.h; path = Parse/Internal/Object/Utilities/PFObjectUtilities.h; sourceTree = ""; }; - 09135BA358F372DFAB44C8FB18692D6C /* PFReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFReachability.m; path = Parse/Internal/PFReachability.m; sourceTree = ""; }; - 0982CCB6B201941BA02A2C5BED20003D /* PFSubclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSubclassing.h; path = Parse/PFSubclassing.h; sourceTree = ""; }; - 09EA67B03147905558D01B94F40D3B87 /* PFConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConstants.m; path = Parse/PFConstants.m; sourceTree = ""; }; - 09FF643952C8AE70189400301DA35699 /* PFURLConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLConstructor.h; path = Parse/Internal/HTTPRequest/PFURLConstructor.h; sourceTree = ""; }; - 0A509D3953B659E7181EC82469B94A9A /* Bolts-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Bolts-Info.plist"; sourceTree = ""; }; - 0BE58929E3D2856E2FF1200233D5AEB2 /* PFEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEncoder.h; path = Parse/Internal/PFEncoder.h; sourceTree = ""; }; - 0C58B900BAB52BE6C1A6AC9401D85688 /* Parse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = Parse/Parse.h; sourceTree = ""; }; - 0CC62DFCDBE9FE6C3218D149D055F4E7 /* PFCurrentUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentUserController.h; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.h; sourceTree = ""; }; - 0D716BF50FFA96153B62E0AE932F3E47 /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningEventuallyQueue.h; path = Parse/Internal/PFPinningEventuallyQueue.h; sourceTree = ""; }; - 0E00B62CEE59E199D07EB3F3B4F2710F /* PFPurchaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseController.m; path = Parse/Internal/Purchase/Controller/PFPurchaseController.m; sourceTree = ""; }; - 0E151F5F8DCE58DAE5D1BA2B8EF1ABE8 /* PFLoadingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLoadingView.h; path = ParseUI/Classes/Internal/Views/PFLoadingView.h; sourceTree = ""; }; - 0F03D75A8EAB99E67ACE53F63B414F22 /* PFActivityIndicatorCollectionReusableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActivityIndicatorCollectionReusableView.m; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m; sourceTree = ""; }; - 0F31C3824F949AF1259C33FE153A1EA9 /* PFKeyValueCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache_Private.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h; sourceTree = ""; }; - 0F396B4049BADC218F3C27A0FB8AF963 /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; - 0FF78B4C18BD5E661C223DA05F706583 /* PFUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState.h; path = Parse/Internal/User/State/PFUserState.h; sourceTree = ""; }; - 0FFE8C5EB6588366F5E38E8025B4CAD0 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; - 10047E16CC827DC41FA3CA3C588A92AA /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; - 113A9AE0365FCE4FF2F8C95725E6A010 /* PFFileController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileController.h; path = Parse/Internal/File/Controller/PFFileController.h; sourceTree = ""; }; + 06BFD711819A59BFBB5685332131E5BF /* Base64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Base64.h; path = Unirest/Base64.h; sourceTree = ""; }; + 078CF89D1976FA56CB71DB442293247A /* PFMultiProcessFileLock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLock.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m; sourceTree = ""; }; + 07A0976E8712629AD60DA98871FCF0DE /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; + 08801F02130F31B03B1B8F0EE396CC30 /* Parse-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Parse-Info.plist"; sourceTree = ""; }; + 089CCF84955BA2531A9DA4EB301EE774 /* PFCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCategoryLoader.h; path = Parse/Internal/PFCategoryLoader.h; sourceTree = ""; }; + 08CFC3FCA7FE77B46041821976AF2BA6 /* PFPurchase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchase.m; path = Parse/PFPurchase.m; sourceTree = ""; }; + 09E57153667D515CCBCF5953009ED8FC /* PFURLSessionCommandRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h; sourceTree = ""; }; + 0A13FE5C7D35D0AE5753E0BBDB76B4DD /* PFUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUser.h; path = Parse/PFUser.h; sourceTree = ""; }; + 0B0FFF3EEE8DA5E91EDEB8EA6DD38164 /* PFDateFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDateFormatter.m; path = Parse/Internal/PFDateFormatter.m; sourceTree = ""; }; + 0B1D30808B74647E6437CF9F248FF87E /* PFPropertyInfo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Private.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h; sourceTree = ""; }; + 0B1DC4F3EA65E8107DBC6146CF990FFF /* UITabBar+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITabBar+FlatUI.m"; path = "Classes/ios/UITabBar+FlatUI.m"; sourceTree = ""; }; + 0B36583C8B8073E88C7FBCEDD319D548 /* PFOfflineStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineStore.m; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m; sourceTree = ""; }; + 0B4B936F403CF30DCA18AD72190FCFC9 /* PFACL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACL.h; path = Parse/PFACL.h; sourceTree = ""; }; + 0B559DA039E8A1B57AA78991E706A8C2 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; + 0B852FCF809F069DBCAB8194541BD2D2 /* PFProductTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductTableViewController.h; path = ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h; sourceTree = ""; }; + 0C01979AC575C3DF44D871EBE33C80D1 /* PFProduct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProduct.h; path = Parse/PFProduct.h; sourceTree = ""; }; + 0C63D8CB09610644959B555ABF676D45 /* UNIHTTPJsonResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPJsonResponse.m; path = Unirest/HttpResponse/UNIHTTPJsonResponse.m; sourceTree = ""; }; + 0CAAD28C58C66EB0A98AA015C265FDCE /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; + 0D36B7A5D9F6AF7F4E01B2320E7BB931 /* UNIRest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIRest.h; path = Unirest/UNIRest.h; sourceTree = ""; }; + 0D50D22BBDCF4938379296E2F238F866 /* PFObjectFileCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCoder.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.m; sourceTree = ""; }; + 0DEB54A8B8D441D44B09F0FA01E8E95B /* ParseUI-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ParseUI-Info.plist"; sourceTree = ""; }; + 0E42C21E2CF24EB6317C3418E412FAC0 /* PFPush.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPush.m; path = Parse/PFPush.m; sourceTree = ""; }; + 0F8F1DF2A2E6067126652008A009717A /* PFAnalyticsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsController.h; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.h; sourceTree = ""; }; + 10327370A383E65FA840807957C88BCD /* PFUserAuthenticationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationDelegate.h; path = Parse/PFUserAuthenticationDelegate.h; sourceTree = ""; }; + 109E7534E27B2BE53FBD782EF3EA62A9 /* PFCurrentUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentUserController.h; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.h; sourceTree = ""; }; + 110AAF7EB53ECB71214D319069E26CBB /* SDWebImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDecoder.h; path = SDWebImage/SDWebImageDecoder.h; sourceTree = ""; }; + 11570DEE95441A341ED290D310B99750 /* FUISwitch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUISwitch.m; path = Classes/ios/FUISwitch.m; sourceTree = ""; }; 11733E9AB23CFF872D2D8C693E69A845 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; - 11779F8DF80724C9D85DA16EE6D8F4EB /* UIPopoverController+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIPopoverController+FlatUI.h"; path = "Classes/ios/UIPopoverController+FlatUI.h"; sourceTree = ""; }; 11CBBD39FFE4DF992FED341E869D5277 /* Pods-FoodbLog-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-FoodbLog-frameworks.sh"; sourceTree = ""; }; - 11DA25D5854F43477EA8697C9A8A9677 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; - 12EE481EE7117C1AC26F8C373608E91D /* Parse-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Parse-dummy.m"; sourceTree = ""; }; - 139DF95532D69618F5A132FBD855F503 /* PFAnonymousUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils.h; path = Parse/PFAnonymousUtils.h; sourceTree = ""; }; - 13D51BF48F5AB0EACFEFDE67304AE0AE /* UIAlertView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertView+AFNetworking.h"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.h"; sourceTree = ""; }; - 13F31358F978DB7AE6B1DDF2572DD630 /* PFObjectFileCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCoder.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.m; sourceTree = ""; }; - 1401F53C5562661D42BA72E3554ABA2B /* PFMutableFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableFileState.h; path = Parse/Internal/File/State/PFMutableFileState.h; sourceTree = ""; }; - 1479D081320EC36085B8B30288068183 /* PFAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAlertView.m; path = Parse/Internal/PFAlertView.m; sourceTree = ""; }; - 150C19C70C597D439FA96FCB3A6B68AC /* PFSQLiteDatabaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseController.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m; sourceTree = ""; }; - 151EC16230A016E1E972D02CF9AFCF34 /* BFTask+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Private.h"; path = "Parse/Internal/BFTask+Private.h"; sourceTree = ""; }; - 15797AFCB16424C69558924B2C21A6E3 /* FlatUIKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FlatUIKit-umbrella.h"; sourceTree = ""; }; - 1579F2982C42C23D86C4671BEFC5BC9E /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; - 15E60AC5AE5D9C7E54C124BD0AF98894 /* PFTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTableViewCell.h; path = ParseUI/Classes/Cells/PFTableViewCell.h; sourceTree = ""; }; - 170B12DAFF7BA65AF6617BDB082A0351 /* FlatUIKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FlatUIKit.modulemap; sourceTree = ""; }; - 171D6E3ADAA1BB99E7913D83084A2274 /* PFColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFColor.m; path = ParseUI/Classes/Internal/Extensions/PFColor.m; sourceTree = ""; }; - 1760FE20743A856B0B1A742482064BC4 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; - 18507E1294DADA225725E281BEEF80DD /* UIAlertView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertView+AFNetworking.m"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.m"; sourceTree = ""; }; - 19176755A633092BD34527BD97CC9A2D /* PFUserConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserConstants.m; path = Parse/Internal/User/Constants/PFUserConstants.m; sourceTree = ""; }; - 1950AD1FE382802A49D281B1441BD20A /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; - 1A5FB006DED3350DEBDAA366AA9B3C93 /* Chameleon_.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Chameleon_.m; path = "Pod/Classes/Objective-C/Chameleon_.m"; sourceTree = ""; }; - 1AA2C962E61F10AADB5795A8761860F4 /* PFTextField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTextField.m; path = ParseUI/Classes/Views/PFTextField.m; sourceTree = ""; }; - 1ABE08EED6D9D0788D5D114EB8073400 /* PFInstallationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationConstants.m; path = Parse/Internal/Installation/Constants/PFInstallationConstants.m; sourceTree = ""; }; - 1B4159A9FBBE236E3AC1B55F41CC8C84 /* PFRESTAnalyticsCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTAnalyticsCommand.h; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.h; sourceTree = ""; }; - 1BBB82019D63DE4FA7F0B92670365270 /* ChameleonEnums.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonEnums.h; path = "Pod/Classes/Objective-C/ChameleonEnums.h"; sourceTree = ""; }; - 1C002313FB340FD9903A219A795BD6EE /* Bolts.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.release.xcconfig; sourceTree = ""; }; - 1C31C458F86FD36FC07384D563ADFBF2 /* PFRESTFileCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTFileCommand.h; path = Parse/Internal/Commands/PFRESTFileCommand.h; sourceTree = ""; }; - 1C38C5BECC83269A118226CDCB9D7F23 /* PFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFNetworkActivityIndicatorManager.m; path = Parse/PFNetworkActivityIndicatorManager.m; sourceTree = ""; }; - 1C796738B070BC90BE32479A8A3AF602 /* PFActionButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActionButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h; sourceTree = ""; }; - 1C7B8B94263BB8F789B6BD083776BBFC /* PFLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogger.h; path = Parse/Internal/PFLogger.h; sourceTree = ""; }; - 1CFB142945D82B4D948325BA5F017A04 /* PFHTTPURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPURLRequestConstructor.h; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h; sourceTree = ""; }; - 1D206417FCB7E126D2076A47DEDF1A1C /* IQBarButtonItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQBarButtonItem.h; path = IQKeyBoardManager/IQToolbar/IQBarButtonItem.h; sourceTree = ""; }; - 1D3240C4C5BE274F71D28337454BCF6D /* IQKeyboardManagerConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManagerConstants.h; path = IQKeyBoardManager/Constants/IQKeyboardManagerConstants.h; sourceTree = ""; }; - 1D3EC67DF2778EB45CB9E74820D228B3 /* IQTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQTextView.m; path = IQKeyBoardManager/IQTextView/IQTextView.m; sourceTree = ""; }; - 1DEB4FC3937D0DC7EB7B1CE6AE0C79D6 /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; - 1DF2C8BE2B249F69FCE01059E5C2E34E /* PFSQLiteDatabaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseController.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h; sourceTree = ""; }; - 1EC3FC2DD569F8D2763648C4F041C266 /* IQKeyboardReturnKeyHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardReturnKeyHandler.h; path = IQKeyBoardManager/IQKeyboardReturnKeyHandler.h; sourceTree = ""; }; - 1FC94E4C9D7446F799F1571C5E5D24B3 /* PFFileController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileController.m; path = Parse/Internal/File/Controller/PFFileController.m; sourceTree = ""; }; - 2028AA6088F4575DAF17E2F06D2DC064 /* PFAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalytics.m; path = Parse/PFAnalytics.m; sourceTree = ""; }; - 2046774BE36FD33388E4E6602AF763A0 /* PFBase64Encoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBase64Encoder.m; path = Parse/Internal/PFBase64Encoder.m; sourceTree = ""; }; - 20B6097286CC2E4C80A144D823873289 /* UIToolbar+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIToolbar+FlatUI.h"; path = "Classes/ios/UIToolbar+FlatUI.h"; sourceTree = ""; }; - 20BC97E813BBBC1228B843C37193A581 /* PFPushChannelsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushChannelsController.m; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.m; sourceTree = ""; }; - 20D75D05C3716B1B1FCE88C6C2E9312D /* FlatUIKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FlatUIKit-dummy.m"; sourceTree = ""; }; - 21915C1929F889B9A02A6D8BD071D10B /* PFInstallationIdentifierStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationIdentifierStore.m; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m; sourceTree = ""; }; - 220FC34DE425735D70DB9D8C4D741695 /* FlatUIKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FlatUIKit-prefix.pch"; sourceTree = ""; }; - 2247D4BD60404A85E31A8014A3D24BB5 /* PFObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObject.h; path = Parse/PFObject.h; sourceTree = ""; }; - 22B70DF0AA41BAA3C080197E5CC5D07B /* PFAnalytics_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics_Private.h; path = Parse/Internal/Analytics/PFAnalytics_Private.h; sourceTree = ""; }; - 22E7AE4FBF90398DB0FD1B35A9DD34AC /* PFRect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRect.h; path = ParseUI/Classes/Internal/Extensions/PFRect.h; sourceTree = ""; }; - 22F5A1329C6658B77CE9B997619A6610 /* NSString+Icons.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Icons.h"; path = "Classes/ios/NSString+Icons.h"; sourceTree = ""; }; - 23412283DC2CC20C08F72706EB4BF409 /* Unirest-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Unirest-prefix.pch"; sourceTree = ""; }; - 23D27BEF28A85F709CBDB0B8CB65DE48 /* FUIPopoverBackgroundView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUIPopoverBackgroundView.h; path = Classes/ios/FUIPopoverBackgroundView.h; sourceTree = ""; }; - 241D90B262CD5D9CA1CE4E85B2753446 /* PFCurrentInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentInstallationController.h; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h; sourceTree = ""; }; - 242785A2D898F8B3178C5C87B1AD01AC /* UNIHTTPClientHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPClientHelper.h; path = Unirest/UNIHTTPClientHelper.h; sourceTree = ""; }; - 246514DFF438978008D8FA6C3DB62A87 /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; - 24776F7FEE23D85F92F28624333EF3EC /* PFThreadsafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFThreadsafety.m; path = Parse/Internal/ThreadSafety/PFThreadsafety.m; sourceTree = ""; }; - 24DB6CC2B14662F6E9B1E046CD7199F7 /* UIColor+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIColor+ChameleonPrivate.h"; sourceTree = ""; }; - 24FF581FD822FC0314972728E320502B /* PFApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFApplication.m; path = Parse/Internal/PFApplication.m; sourceTree = ""; }; - 25397001B9BF4C1125DCF8D75A89971C /* IQUIWindow+Hierarchy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIWindow+Hierarchy.m"; path = "IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.m"; sourceTree = ""; }; - 255CEDD6FA71975460137BA3F1A2CC30 /* PFProduct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProduct.h; path = Parse/PFProduct.h; sourceTree = ""; }; - 255D9757582A2D903E70F23C181DF04B /* PFLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocationManager.h; path = Parse/Internal/PFLocationManager.h; sourceTree = ""; }; - 25714ADEA4E375B6832A9DF56A53F64C /* PFMutableRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableRelationState.m; path = Parse/Internal/Relation/State/PFMutableRelationState.m; sourceTree = ""; }; - 2641B578F87B9B95E398CE86A132190C /* PFMutableRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableRelationState.h; path = Parse/Internal/Relation/State/PFMutableRelationState.h; sourceTree = ""; }; - 265A36A163461FAFE8B22F91E5FF5839 /* AFNetworking.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AFNetworking.modulemap; sourceTree = ""; }; - 2697B93401DB7B2F5E39F3CF9BC4DCB3 /* PFFieldOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperation.h; path = Parse/Internal/FieldOperation/PFFieldOperation.h; sourceTree = ""; }; - 2699550AAFB04BB17916C59A6B1FC51D /* PFTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTaskQueue.m; path = Parse/Internal/PFTaskQueue.m; sourceTree = ""; }; - 26C5CC23FF12B866E1AD73E2DC206622 /* PFRESTQueryCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTQueryCommand.h; path = Parse/Internal/Commands/PFRESTQueryCommand.h; sourceTree = ""; }; - 27CF6BC1B2E5C52B3244B8D531442D06 /* UNIBodyRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIBodyRequest.m; path = Unirest/HttpRequest/UNIBodyRequest.m; sourceTree = ""; }; - 27E94F52DD7FEA4FD150E6DFECA07CF1 /* UIColor+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIColor+ChameleonPrivate.m"; sourceTree = ""; }; - 28965A0B0DA8E71614774B97CBEF38BB /* PFTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTaskQueue.h; path = Parse/Internal/PFTaskQueue.h; sourceTree = ""; }; - 2A04E1624A7D22B26C4108F5511DBA59 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = en.lproj; path = ParseUI/Resources/Localization/en.lproj; sourceTree = ""; }; - 2A30756FBB458B3FFBE25E41C6A39E07 /* ParseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseManager.m; path = Parse/Internal/ParseManager.m; sourceTree = ""; }; - 2A5EFD08535330BF7DE6E1D3E60F0FDF /* PFCloudCodeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloudCodeController.h; path = Parse/Internal/CloudCode/PFCloudCodeController.h; sourceTree = ""; }; - 2A6C012A4F3D5A672788A760562623DA /* FUISegmentedControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUISegmentedControl.m; path = Classes/ios/FUISegmentedControl.m; sourceTree = ""; }; - 2B3157DA60A76070C8C1BC098218AB51 /* UIFont+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIFont+FlatUI.h"; path = "Classes/ios/UIFont+FlatUI.h"; sourceTree = ""; }; - 2B4F6F85D50E4CA8F5E785A0C0E8F842 /* UNIHTTPJsonResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPJsonResponse.m; path = Unirest/HttpResponse/UNIHTTPJsonResponse.m; sourceTree = ""; }; - 2C225A32BD5AB6FEB97D66740F1E0931 /* PFHTTPURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHTTPURLRequestConstructor.m; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m; sourceTree = ""; }; - 2C5CF7AB604577F8094BB7A4D0B1EA38 /* IQSegmentedNextPrevious.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQSegmentedNextPrevious.m; path = IQKeyBoardManager/IQSegmentedNextPrevious/IQSegmentedNextPrevious.m; sourceTree = ""; }; - 2D3DED295E0CF4409F8BC8976A09F184 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; - 2D44A8F3669FDFCF5D7BBCD8CFCD25AC /* PFDismissButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDismissButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m; sourceTree = ""; }; - 2DB558CB27C9B59F1418AA3959C1070B /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue_Private.h; path = Parse/Internal/PFEventuallyQueue_Private.h; sourceTree = ""; }; + 120FA99F09676AEC262A7A964B7F118B /* PFSQLiteDatabaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseController.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h; sourceTree = ""; }; + 1222D529EEC7D53C3D01CCE61951FE2B /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; + 1297CEA60937D63A7F97997D134CB8BB /* FUITextField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUITextField.m; path = Classes/ios/FUITextField.m; sourceTree = ""; }; + 131DCAADD2A7478906370E28CF44D71A /* PFErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFErrorUtilities.h; path = Parse/Internal/PFErrorUtilities.h; sourceTree = ""; }; + 13621BDB45C7DD8B00AEED3D06BB3D73 /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; + 13BA722BB3C5D60330A639CBB1030486 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; + 13E84B7E5A4B30014D5A54B0F163A44F /* PFCommandCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache.h; path = Parse/Internal/PFCommandCache.h; sourceTree = ""; }; + 143B16D45EA328180F3DC8ADB2E0F355 /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; + 144E3BE8EEEEF124C9859E3D7ADBE20F /* PFCoreManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCoreManager.m; path = Parse/Internal/PFCoreManager.m; sourceTree = ""; }; + 1496C6331BE5CE68663D0C65DEB7E653 /* PFActionButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActionButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h; sourceTree = ""; }; + 14B527B21E752166A0ECE57755F5B742 /* PFLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocationManager.h; path = Parse/Internal/PFLocationManager.h; sourceTree = ""; }; + 150F4AC40940FEC7C1C20AAD696887E5 /* PFObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObject.m; path = Parse/PFObject.m; sourceTree = ""; }; + 1698F26D15551C1829449B813F474E0F /* PFBaseState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBaseState.h; path = Parse/Internal/PFBaseState.h; sourceTree = ""; }; + 16A83694A1281D2628E8C6E4A5050DE4 /* PFRESTConfigCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTConfigCommand.h; path = Parse/Internal/Commands/PFRESTConfigCommand.h; sourceTree = ""; }; + 17A8A4A862EC921341A6294A505E8C17 /* PFSignUpViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSignUpViewController.h; path = ParseUI/Classes/SignUpViewController/PFSignUpViewController.h; sourceTree = ""; }; + 17F49279416DD3E891AA4D2508E5DEDA /* PFObject+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = ""; }; + 183F4922424C98CDCBAF70F6694F7186 /* PFOfflineObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineObjectController.m; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m; sourceTree = ""; }; + 18D28DEFCE0FAFDD3C9195B9594781FC /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; + 18E5B4F6DD54D3DFEE040D4E42491397 /* PFImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImageCache.h; path = ParseUI/Classes/Internal/PFImageCache.h; sourceTree = ""; }; + 1934CD496BF357F3D85BDB55F2D42649 /* PFPaymentTransactionObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h; sourceTree = ""; }; + 194C09CE6BAFEA2233F1C90D5FB06DE2 /* IQKeyboardManager.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManager.release.xcconfig; sourceTree = ""; }; + 19D22DE6F0EF2AF9D2D7C2F20FD61ADD /* PFFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFile.m; path = Parse/PFFile.m; sourceTree = ""; }; + 19DAC19FA8196CB203717E1E2DF33FC0 /* Lato-Light.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "Lato-Light.ttf"; path = "Resources/Lato-Light.ttf"; sourceTree = ""; }; + 1A16F60868674C544C93C2FC19B449CF /* PFColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFColor.h; path = ParseUI/Classes/Internal/Extensions/PFColor.h; sourceTree = ""; }; + 1A2E073D3DA8C342D0440403A0447C26 /* PFEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue.h; path = Parse/Internal/PFEventuallyQueue.h; sourceTree = ""; }; + 1A79E98AEE84BCDEC2A44AC20B564C75 /* PFSignUpView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSignUpView.m; path = ParseUI/Classes/SignUpViewController/PFSignUpView.m; sourceTree = ""; }; + 1AF187A6BDAC9D45C8425EE5D9869AA9 /* PFPurchase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchase.h; path = Parse/PFPurchase.h; sourceTree = ""; }; + 1BAEDB2E65A042469BB0C6C0651AD122 /* PFAnalytics_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics_Private.h; path = Parse/Internal/Analytics/PFAnalytics_Private.h; sourceTree = ""; }; + 1CF00F1FC0F39F69845946C2AD585948 /* PFFileDataStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileDataStream.m; path = Parse/Internal/File/FileDataStream/PFFileDataStream.m; sourceTree = ""; }; + 1D3130F150ABEFE07878D5F834F7C368 /* UNIUrlConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIUrlConnection.m; path = Unirest/UNIUrlConnection.m; sourceTree = ""; }; + 1D60463E70F6B8741716B5430ED6586F /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; + 1D7FFC332FE37C75EC2BBEEB205C3392 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; + 1DA0612D4D7F2E82006DC4C386EE7835 /* PFCoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreManager.h; path = Parse/Internal/PFCoreManager.h; sourceTree = ""; }; + 1E425907A301715A116FF9A3132EFC63 /* PFRESTAnalyticsCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTAnalyticsCommand.m; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.m; sourceTree = ""; }; + 1E5C55CFEDDC650E3CDF3F59B2865200 /* PFFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileManager.h; path = Parse/Internal/PFFileManager.h; sourceTree = ""; }; + 1ECD2B9CBAE08A9410E23E90B706CC79 /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperationManager.h; path = AFNetworking/AFHTTPRequestOperationManager.h; sourceTree = ""; }; + 1F899C2DE9446CFBD4258DF3146777DA /* PFCurrentObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentObjectControlling.h; path = Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h; sourceTree = ""; }; + 1FA89EADBEBD0F217B329170BCD40A4C /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; + 201D0AF4758543C8B03C221952439864 /* PFObjectFileCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCoder.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.h; sourceTree = ""; }; + 2079E3916C3DD67D0736BF3A3B847C80 /* IQKeyboardManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardManager-Info.plist"; sourceTree = ""; }; + 209B5F6CA85EBF47851F7BAB625D9974 /* PFPurchaseTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseTableViewCell.m; path = ParseUI/Classes/Cells/PFPurchaseTableViewCell.m; sourceTree = ""; }; + 20B2A45932656A04E9A644FBC0DA4689 /* PFOperationSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOperationSet.m; path = Parse/Internal/Object/OperationSet/PFOperationSet.m; sourceTree = ""; }; + 2100573153580E93D49B528DA64E5E5F /* PFPinningObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningObjectStore.h; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.h; sourceTree = ""; }; + 212A31C3327EAA3D513C3DE44A109768 /* PFPushChannelsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushChannelsController.h; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.h; sourceTree = ""; }; + 217CAA0272C352818C8E463AFB4904F7 /* FlatUIKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FlatUIKit-Info.plist"; sourceTree = ""; }; + 21D8E4F6E3FE9751A9C71B96F1DA3755 /* UIPopoverController+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIPopoverController+FlatUI.h"; path = "Classes/ios/UIPopoverController+FlatUI.h"; sourceTree = ""; }; + 22E30A762CBA7D97BB4E81283F3DACDA /* Bolts.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.release.xcconfig; sourceTree = ""; }; + 22EC91ED4B69A438A78BF10A844BE247 /* PFHTTPURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHTTPURLRequestConstructor.m; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m; sourceTree = ""; }; + 22F7F0A49C5577FAC19A72BBDAE54073 /* IQUITextFieldView+Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUITextFieldView+Additions.m"; path = "IQKeyboardManager/Categories/IQUITextFieldView+Additions.m"; sourceTree = ""; }; + 249176052C8E9FF258B54C64D59D6DD2 /* PFUserPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserPrivate.h; path = Parse/Internal/User/PFUserPrivate.h; sourceTree = ""; }; + 25A6BCE1E348D02F01E197A0C48E07E7 /* PFQueryState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState_Private.h; path = Parse/Internal/Query/State/PFQueryState_Private.h; sourceTree = ""; }; + 25AE04E3363DD54258BA17EE714BC7DE /* FlatUIKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FlatUIKit.debug.xcconfig; sourceTree = ""; }; + 2737B1F251EAB771EB977928EF4E9B9A /* Unirest-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Unirest-Info.plist"; sourceTree = ""; }; + 279C7B8C6BAEF8CDFC3B4C468EA5C328 /* PFApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFApplication.h; path = Parse/Internal/PFApplication.h; sourceTree = ""; }; + 27FD73571D1F0E411532F29E810FE8F4 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; + 2809CC499F34E67434A2065F3F90217D /* AFNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-umbrella.h"; sourceTree = ""; }; + 283A6A064CA65E920533C0B11919385E /* PFCurrentInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentInstallationController.h; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h; sourceTree = ""; }; + 287B74C03E5984086449C9EC4671728B /* PFOfflineObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineObjectController.h; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h; sourceTree = ""; }; + 28B369CD0FD6B2267684D60BAD74B807 /* PFFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState.h; path = Parse/Internal/File/State/PFFileState.h; sourceTree = ""; }; + 29E0F094F0637842397AB96FB4423477 /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; + 2A163F69034220CA4460D8608674DCAD /* PFPushUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushUtilities.h; path = Parse/Internal/Push/Utilites/PFPushUtilities.h; sourceTree = ""; }; + 2AECBBD0EFF420415B93C5A23FCB6BCD /* PFGeoPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPoint.h; path = Parse/PFGeoPoint.h; sourceTree = ""; }; + 2AEE82C4E7D4C887B812D322BF6616C6 /* PFGeoPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFGeoPoint.m; path = Parse/PFGeoPoint.m; sourceTree = ""; }; + 2BA2B31088E6C331D800CCAB32D64F16 /* Lato-Italic.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "Lato-Italic.ttf"; path = "Resources/Lato-Italic.ttf"; sourceTree = ""; }; + 2BB08B7E9CFEBFDFED3FC2C86EF02981 /* UNIUrlConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIUrlConnection.h; path = Unirest/UNIUrlConnection.h; sourceTree = ""; }; + 2C29C184DBBCE87B995B672F7F51F2EA /* PFURLSessionJSONDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionJSONDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h; sourceTree = ""; }; + 2C3AAD13195F59C43C31D7B68EBD3011 /* PFDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDevice.m; path = Parse/Internal/PFDevice.m; sourceTree = ""; }; + 2C6149FA7454A58C374DE984CBB2B5D5 /* PFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFNetworkActivityIndicatorManager.m; path = Parse/PFNetworkActivityIndicatorManager.m; sourceTree = ""; }; + 2C77C2B15C731F7A514C22FFCFAD61F4 /* PFThreadsafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFThreadsafety.m; path = Parse/Internal/ThreadSafety/PFThreadsafety.m; sourceTree = ""; }; + 2CD3DF3B3BA00C9C3B9025084D6018EA /* BFDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFDefines.h; path = Bolts/Common/BFDefines.h; sourceTree = ""; }; + 2D0B8387029A2FBE4D1B3128F06E3921 /* PFMutableACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableACLState.m; path = Parse/Internal/ACL/State/PFMutableACLState.m; sourceTree = ""; }; + 2D29EBF6D740449C59B201746886CD2A /* PFURLSessionDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h; sourceTree = ""; }; + 2DC55D2B463E6818D02D571FF341E73B /* PFACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACLState.m; path = Parse/Internal/ACL/State/PFACLState.m; sourceTree = ""; }; + 2DD6269DBB74E9E2A4341B46B3B2240C /* PFFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileState.m; path = Parse/Internal/File/State/PFFileState.m; sourceTree = ""; }; + 2E056AC96A8AACCF1DD32256DE702C88 /* PFOperationSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOperationSet.h; path = Parse/Internal/Object/OperationSet/PFOperationSet.h; sourceTree = ""; }; 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 2F0311DC1C98B85666BEDBEE32749F74 /* PFUIAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUIAlertView.h; path = ParseUI/Classes/Internal/Extensions/PFUIAlertView.h; sourceTree = ""; }; - 2FD643ED6BE8B1DFB4B3D62C42982411 /* PFSignUpViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSignUpViewController.h; path = ParseUI/Classes/SignUpViewController/PFSignUpViewController.h; sourceTree = ""; }; - 305805548D87E2C5165C0A0FED697B4F /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; - 30897A1EF233A016A554F6A64222767E /* PFURLSessionUploadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionUploadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h; sourceTree = ""; }; - 311DAB5AE58D986B329A83CDA6086370 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDecoder.m; path = SDWebImage/SDWebImageDecoder.m; sourceTree = ""; }; - 318C56533FDD447102932A6E5A233A7E /* PFPaymentTransactionObserver_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver_Private.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h; sourceTree = ""; }; - 320F50071C407D10444E25E65E981EAB /* PFRESTCommand_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand_Private.h; path = Parse/Internal/Commands/PFRESTCommand_Private.h; sourceTree = ""; }; - 32588BB30F6E0F5B2DD13FB47DEBCC27 /* PFQueryCollectionViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryCollectionViewController.h; path = ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h; sourceTree = ""; }; - 326B3BC55A45A42DE61D2F9FD6215A24 /* PFUserFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserFileCodingLogic.h; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h; sourceTree = ""; }; - 335A452C51FBD35625AA2BC327ADC7F5 /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; - 341193ADAA541B40C6DC994505AA1FD6 /* PFPushUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushUtilities.m; path = Parse/Internal/Push/Utilites/PFPushUtilities.m; sourceTree = ""; }; - 3448DBBDFED1AD82ECE8A1B07DD53EB0 /* PFSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSession.m; path = Parse/PFSession.m; sourceTree = ""; }; - 345CA40D5F45AD04D24CC17ABE86B911 /* PFQueryUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryUtilities.m; path = Parse/Internal/Query/Utilities/PFQueryUtilities.m; sourceTree = ""; }; - 34D23B3A862EAC73082D325761E92C03 /* PFCurrentConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentConfigController.m; path = Parse/Internal/Config/Controller/PFCurrentConfigController.m; sourceTree = ""; }; - 352A7DFC0FAD78D5F39DDCF907D02C5F /* PFMutableObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableObjectState.m; path = Parse/Internal/Object/State/PFMutableObjectState.m; sourceTree = ""; }; - 35AB26F5A3AAAB62DB4FDBFA45B6AE7B /* PFFieldOperationDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperationDecoder.h; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.h; sourceTree = ""; }; - 3613B45ABCFAEBD5BADAE64A82A4746B /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; - 3661E7338F270E4C60D4CB7618DACD33 /* PFLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLocationManager.m; path = Parse/Internal/PFLocationManager.m; sourceTree = ""; }; - 3667C7F789954F098ADC741D622D52B7 /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; + 2EE2A8D1E5AFBD0420E65DA1389499B3 /* PFAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics.h; path = Parse/PFAnalytics.h; sourceTree = ""; }; + 2F7C8A872250C0A49C96DA6FE264847D /* ChameleonEnums.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonEnums.h; path = "Pod/Classes/Objective-C/ChameleonEnums.h"; sourceTree = ""; }; + 2F817FA3B2D6B6B355ABF9815AD40608 /* PFFieldOperationDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperationDecoder.m; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.m; sourceTree = ""; }; + 2FE2DCAC734B4286316670697800D439 /* FUISwitch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUISwitch.h; path = Classes/ios/FUISwitch.h; sourceTree = ""; }; + 302EA9A2809EC2AE89E8395AE0606DC9 /* UNIRest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIRest.m; path = Unirest/UNIRest.m; sourceTree = ""; }; + 30900CE96B834D956AE04457A32EC9B2 /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; + 312CFE7334F9820D693DB8F87FDF58BA /* PFLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLocationManager.m; path = Parse/Internal/PFLocationManager.m; sourceTree = ""; }; + 32719F277BAE80948D0BEA83DAC8F658 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; + 328E074028831B7162CC31C478F53164 /* UNIHTTPJsonResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPJsonResponse.h; path = Unirest/HttpResponse/UNIHTTPJsonResponse.h; sourceTree = ""; }; + 32917B1510914295787D683689498DCC /* PFACLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLPrivate.h; path = Parse/Internal/ACL/PFACLPrivate.h; sourceTree = ""; }; + 32D1EED54067102FB95B998DE807EB80 /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; + 331297A6C5AA9401BD6372032CD02FED /* PFPurchaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseController.m; path = Parse/Internal/Purchase/Controller/PFPurchaseController.m; sourceTree = ""; }; + 339B985FE4916FC0EAD33315A7189218 /* PFPaymentTransactionObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPaymentTransactionObserver.m; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m; sourceTree = ""; }; + 33A844344DE513F67DA9B594005E312F /* PFQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryController.m; path = Parse/Internal/Query/Controller/PFQueryController.m; sourceTree = ""; }; + 33EFCD2A806F168B502839B5E06004C6 /* IQUIViewController+Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIViewController+Additions.h"; path = "IQKeyboardManager/Categories/IQUIViewController+Additions.h"; sourceTree = ""; }; + 3424FEAC2E4DE6A897AE678346A16EB3 /* PFObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObject.h; path = Parse/PFObject.h; sourceTree = ""; }; + 34856B703E5606ED1C3566F49C8E8DF4 /* UIBarButtonItem+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIBarButtonItem+FlatUI.m"; path = "Classes/ios/UIBarButtonItem+FlatUI.m"; sourceTree = ""; }; + 34B4C034A030FAA4EDA0401F0A8DA0E1 /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; + 3552A7840686D24CD44668B0CDA0BF24 /* PFLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogger.h; path = Parse/Internal/PFLogger.h; sourceTree = ""; }; + 35ACB630538A121CBF33BD2A43D210F7 /* PFDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDecoder.h; path = Parse/Internal/PFDecoder.h; sourceTree = ""; }; + 36829EB394DB6476915698282D533FA4 /* PFSessionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionUtilities.m; path = Parse/Internal/Session/Utilities/PFSessionUtilities.m; sourceTree = ""; }; + 3689BC9116ABAB64895F8C584E42DFC6 /* Bolts-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-umbrella.h"; sourceTree = ""; }; + 3691B24171C74EFD1F8433B4605C38E8 /* ParseUI-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ParseUI-prefix.pch"; sourceTree = ""; }; 3691CA8C96F3BE2D408B9E1E7FCDD5A3 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; - 36EA36B4327C3CAA76DB71E90785D0B4 /* IQNSArray+Sort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQNSArray+Sort.h"; path = "IQKeyBoardManager/Categories/IQNSArray+Sort.h"; sourceTree = ""; }; + 373B403D2BC5D282CCC10F9AF474DEE1 /* PFRelation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelation.h; path = Parse/PFRelation.h; sourceTree = ""; }; 3780C220917B4DD9DC02DDD7323405B0 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 37FA8F56A1FA6A8339B3BF6A946BAEE1 /* PFCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCategoryLoader.m; path = Parse/Internal/PFCategoryLoader.m; sourceTree = ""; }; - 383265CA7C2F466092EF3C7F1E49C8DE /* IQUITextFieldView+Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUITextFieldView+Additions.m"; path = "IQKeyBoardManager/Categories/IQUITextFieldView+Additions.m"; sourceTree = ""; }; - 385261552CFAF1B884CE31C0FDFAC71A /* PFRESTCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand.h; path = Parse/Internal/Commands/PFRESTCommand.h; sourceTree = ""; }; - 389E8A9F78577F9DC088BC37445C2F27 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; - 38BB302FD9DECD313D93E13A55C5A724 /* PFACL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACL.h; path = Parse/PFACL.h; sourceTree = ""; }; - 38D7F1933A49B1054CE8669A45108CF3 /* PFPushController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushController.h; path = Parse/Internal/Push/Controller/PFPushController.h; sourceTree = ""; }; - 38F8E3AFD6049401797C7A47018A213A /* Parse.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.debug.xcconfig; sourceTree = ""; }; - 38FA89344906DEDDD5D2F77DE3B534B8 /* UNIHTTPClientHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPClientHelper.m; path = Unirest/UNIHTTPClientHelper.m; sourceTree = ""; }; - 390E345239D63E6785408FCCB29AA27C /* PFObject+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = ""; }; - 392D3E8B1EE935766CE3A0E9996B235F /* PFImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImageCache.h; path = ParseUI/Classes/Internal/PFImageCache.h; sourceTree = ""; }; - 3AE452759C3419530F9948A6E7852434 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = ""; }; - 3B28432D4AB483D9A86C6817FB52BF45 /* FUISwitch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUISwitch.h; path = Classes/ios/FUISwitch.h; sourceTree = ""; }; - 3B46EEECD7599B121204708C32CECD6C /* UNIBaseRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIBaseRequest.m; path = Unirest/HttpRequest/UNIBaseRequest.m; sourceTree = ""; }; - 3C1AC1660363A329A284E332A3E5298C /* ParseUI.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ParseUI.release.xcconfig; sourceTree = ""; }; - 3C1BEBF049C3CF3B9440DB6E9743072A /* ChameleonConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonConstants.h; path = "Pod/Classes/Objective-C/ChameleonConstants.h"; sourceTree = ""; }; - 3C3F57E6B4F1FB2E1F1904A1F180B1D6 /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; - 3D6B4E7FA130709BC2B2CD4708AB3B01 /* PFDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDecoder.m; path = Parse/Internal/PFDecoder.m; sourceTree = ""; }; + 384BDE20DFFC6A0E2458D1BC282F4420 /* PFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkActivityIndicatorManager.h; path = Parse/PFNetworkActivityIndicatorManager.h; sourceTree = ""; }; + 385FE35508EFAD1A522AC72D9A9F3F0D /* PFUserFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserFileCodingLogic.h; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h; sourceTree = ""; }; + 3870EE2EF73F00569F66764B6840BA48 /* PFAsyncTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAsyncTaskQueue.m; path = Parse/Internal/PFAsyncTaskQueue.m; sourceTree = ""; }; + 39A51D0C532BCF6377526E08062DE36D /* IQNSArray+Sort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQNSArray+Sort.h"; path = "IQKeyboardManager/Categories/IQNSArray+Sort.h"; sourceTree = ""; }; + 39A9911126C27100A1F40C2590B1A921 /* PFDefaultACLController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDefaultACLController.h; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h; sourceTree = ""; }; + 39D6DC64510F8D6816ED4A2F7DFB52AF /* PFInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallation.h; path = Parse/PFInstallation.h; sourceTree = ""; }; + 39E688412771E938F26B8F10C0191798 /* PFObjectSubclassingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassingController.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m; sourceTree = ""; }; + 3A0B96CBB6636A7BDCBA964478F20F8F /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; + 3A621B8940AFC7648C5072806B4B9311 /* PFSQLiteDatabaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseController.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m; sourceTree = ""; }; + 3A7B398E287C24BCC8433260FC465DB3 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; + 3A7EC5204AF6AD0ACD56CD9B3D27A7E8 /* FUISegmentedControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUISegmentedControl.m; path = Classes/ios/FUISegmentedControl.m; sourceTree = ""; }; + 3A8E778140C33BF8B75C390520FC2B65 /* PFObjectSubclassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassInfo.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h; sourceTree = ""; }; + 3A93EE71639FC1F292FCD2110B27A625 /* IQTitleBarButtonItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQTitleBarButtonItem.h; path = IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.h; sourceTree = ""; }; + 3A9951560A51BC6B7877E46E76741F7E /* PFRole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRole.h; path = Parse/PFRole.h; sourceTree = ""; }; + 3B8B26D22A8D50D5756DCEABC1E2F39B /* PFInstallationIdentifierStore_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore_Private.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h; sourceTree = ""; }; + 3BF939D82D860D7ABEC9DC1665E9AFFC /* FUIButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUIButton.m; path = Classes/ios/FUIButton.m; sourceTree = ""; }; + 3C41CA94D6F9231F57C05FC27DC0014F /* Unirest.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Unirest.modulemap; sourceTree = ""; }; + 3C56C342942346FB5B3BCF38AFC2442C /* IQBarButtonItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQBarButtonItem.m; path = IQKeyboardManager/IQToolbar/IQBarButtonItem.m; sourceTree = ""; }; + 3CB6840C12F6DE61721C1D23DAD8176F /* PFMutableQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableQueryState.h; path = Parse/Internal/Query/State/PFMutableQueryState.h; sourceTree = ""; }; + 3D2290841E77758DEB6EAFA4F67271A3 /* ChameleonFramework-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ChameleonFramework-dummy.m"; sourceTree = ""; }; + 3DA5EF8C3E29EFFDABDC9EE3902FE630 /* PFURLSessionDataTaskDelegate_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h; sourceTree = ""; }; + 3DC055B41165FBC9ADAFA20E9AFEC94E /* Lato-Bold.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "Lato-Bold.ttf"; path = "Resources/Lato-Bold.ttf"; sourceTree = ""; }; 3DE1802829062F013D376CB812C19065 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 3E4C754AF717C0F9578078037DD972B7 /* PFEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyQueue.m; path = Parse/Internal/PFEventuallyQueue.m; sourceTree = ""; }; - 3EBF18A4C5D5CB1C2B68379E0F011BC7 /* PFEventuallyPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyPin.m; path = Parse/Internal/PFEventuallyPin.m; sourceTree = ""; }; - 3ECA32B49BAEAD29BCA93D40EE9CC6B7 /* PFLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogger.m; path = Parse/Internal/PFLogger.m; sourceTree = ""; }; - 3EDBAED551FD57F89EBFB1F16C24A8BC /* PFLogInView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInView.h; path = ParseUI/Classes/LogInViewController/PFLogInView.h; sourceTree = ""; }; - 3EFEAE643868EF55305AEDA7B9B5EF2E /* IQTitleBarButtonItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQTitleBarButtonItem.m; path = IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.m; sourceTree = ""; }; - 3F4D59B74D186D3A1C07E193A4B8E5BA /* PFCurrentInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentInstallationController.m; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m; sourceTree = ""; }; - 3F9F93F92926388C8FFB4EC13EA0DEBD /* PFObjectFilePersistenceController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFilePersistenceController.h; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h; sourceTree = ""; }; - 40284536A49434B0DD0358F33A4F8172 /* PFSQLiteStatement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteStatement.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m; sourceTree = ""; }; - 40668A53B58A0048FA222C4AB7E2189E /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; - 4075748CA8F21BAC0F4620D185E8FD8E /* PFSQLiteDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase_Private.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h; sourceTree = ""; }; - 409309719BF6A320534CB7DAFF568B83 /* PFLogInView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogInView.m; path = ParseUI/Classes/LogInViewController/PFLogInView.m; sourceTree = ""; }; - 412765A1C5B6953A288C3BAEBC8E6B37 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; - 416EF6ABD24C5B14BDDDADF319BC2942 /* Lato-Bold.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "Lato-Bold.ttf"; path = "Resources/Lato-Bold.ttf"; sourceTree = ""; }; - 41729ECC74ACE0C2F2268BD56ABD77D5 /* PFPushPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushPrivate.h; path = Parse/Internal/Push/PFPushPrivate.h; sourceTree = ""; }; - 419788502E9D2F50B77877AEE03ECD01 /* PFFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFile.m; path = Parse/PFFile.m; sourceTree = ""; }; - 41A0FAD2BC796F0C43E5AD3DFB8BF253 /* PFDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDataProvider.h; path = Parse/Internal/PFDataProvider.h; sourceTree = ""; }; - 41C24ABA60DD2C0A252F655A688A17C6 /* PFACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState.h; path = Parse/Internal/ACL/State/PFACLState.h; sourceTree = ""; }; - 4313FC1E27E9B9A96CC0E86A9963B5EE /* Lato-Light.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "Lato-Light.ttf"; path = "Resources/Lato-Light.ttf"; sourceTree = ""; }; - 43ED988181D6943C924184E66A36963B /* Parse-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-umbrella.h"; sourceTree = ""; }; - 4436838248BB3C88A53FD7F6F9B1BDBF /* UIStepper+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIStepper+FlatUI.m"; path = "Classes/ios/UIStepper+FlatUI.m"; sourceTree = ""; }; - 44C38AD5632D2AB0489B5A84DAE0E5C3 /* FlatUIKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlatUIKit.h; path = Classes/ios/FlatUIKit.h; sourceTree = ""; }; - 44C79E1505808F22B40DEDC10582999E /* PFRole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRole.m; path = Parse/PFRole.m; sourceTree = ""; }; - 44E08AAB6C070B945737B41031CFCAC4 /* UIImage+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIImage+ChameleonPrivate.m"; sourceTree = ""; }; - 44E593737C598C091CC7B69331EE8F5A /* PFResources.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFResources.m; path = ParseUI/Generated/PFResources.m; sourceTree = ""; }; - 45505F5B25D4570A45EFBA3FB9E5650D /* PFDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDevice.h; path = Parse/Internal/PFDevice.h; sourceTree = ""; }; - 45802840BA5072DF962ED54D09FE8843 /* Bolts.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Bolts.modulemap; sourceTree = ""; }; - 45CDE5CE83E5FA7A91A9F1B5B0BA5342 /* UNISimpleRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNISimpleRequest.h; path = Unirest/HttpRequest/UNISimpleRequest.h; sourceTree = ""; }; - 45D7D6B01B2B8A0D96A29F97BC24C01A /* PFObjectPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectPrivate.h; path = Parse/Internal/Object/PFObjectPrivate.h; sourceTree = ""; }; - 464C0397F3E6DFAFEB38909A49A88023 /* UIView+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIView+ChameleonPrivate.m"; sourceTree = ""; }; - 467740A6E9FE2B669577C05571B6DC7F /* PFPushManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushManager.h; path = Parse/Internal/Push/Manager/PFPushManager.h; sourceTree = ""; }; - 46AA5FBD23466BC2877613E9ED755E8F /* PFURLSessionDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m; sourceTree = ""; }; - 46C0C4F037BDBC97CB84248D3C6354F7 /* PFMutableQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableQueryState.h; path = Parse/Internal/Query/State/PFMutableQueryState.h; sourceTree = ""; }; - 47047F8FC46BB309AE276DC772A8E367 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; - 473595C4DE2B48B0D88D8F99E55C5F45 /* Base64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Base64.h; path = Unirest/Base64.h; sourceTree = ""; }; + 3E6B3CC888343CC69943B63141268699 /* PFInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallation.m; path = Parse/PFInstallation.m; sourceTree = ""; }; + 3E6F93F75316C1B80CAAF5C92F8366AF /* PFPushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushState.m; path = Parse/Internal/Push/State/PFPushState.m; sourceTree = ""; }; + 3E8D9690AF80D6F60B62DDAF44050907 /* IQKeyboardReturnKeyHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQKeyboardReturnKeyHandler.m; path = IQKeyboardManager/IQKeyboardReturnKeyHandler.m; sourceTree = ""; }; + 3F123ABB578E3F518DF039070BC96D0B /* PFMultiProcessFileLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLock.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h; sourceTree = ""; }; + 3F5D0B6D294347476FD73D958F09ED17 /* PFFileDataStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileDataStream.h; path = Parse/Internal/File/FileDataStream/PFFileDataStream.h; sourceTree = ""; }; + 3F8393736BD5D73AC01DBCF37963E6EA /* PFObjectSubclassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassInfo.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m; sourceTree = ""; }; + 3FB02385D3C2C2A0EB07A7BD82B8DE4B /* PFConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfigController.m; path = Parse/Internal/Config/Controller/PFConfigController.m; sourceTree = ""; }; + 4012B08564DD4ED326E07CC6F074DD1B /* IQKeyboardManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManager.h; path = IQKeyboardManager/IQKeyboardManager.h; sourceTree = ""; }; + 40375E85CA508E2B057CECEF9AC0A466 /* ChameleonMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonMacros.h; path = "Pod/Classes/Objective-C/ChameleonMacros.h"; sourceTree = ""; }; + 405B14A1911C958897CB6F7AA3CA87B0 /* BFTask+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Private.h"; path = "Parse/Internal/BFTask+Private.h"; sourceTree = ""; }; + 4117F3C2B16BF78B5EBD1BEACABFF34B /* ChameleonFramework-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ChameleonFramework-Info.plist"; sourceTree = ""; }; + 4133DB2BFB881FA9162EC51EF7038118 /* PFConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfigController.h; path = Parse/Internal/Config/Controller/PFConfigController.h; sourceTree = ""; }; + 41755FA2662E2489FEB0E6FEC30BCAE0 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDecoder.m; path = SDWebImage/SDWebImageDecoder.m; sourceTree = ""; }; + 41B531CB3F68644A7CA2E2C2C2A0A399 /* PFRESTCloudCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCloudCommand.h; path = Parse/Internal/Commands/PFRESTCloudCommand.h; sourceTree = ""; }; + 41C1D92DF62E21AFDBB85A53A4D4712E /* PFDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDecoder.m; path = Parse/Internal/PFDecoder.m; sourceTree = ""; }; + 42BF37A08F24B8A4D646021BAC4A89B8 /* PFObjectFilePersistenceController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFilePersistenceController.m; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m; sourceTree = ""; }; + 435F2CA4899F4863E2CCBD079FDB969F /* PFMutableRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableRelationState.h; path = Parse/Internal/Relation/State/PFMutableRelationState.h; sourceTree = ""; }; + 436C46A02A32E7AC27D14D39EC7C1837 /* PFRESTFileCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTFileCommand.m; path = Parse/Internal/Commands/PFRESTFileCommand.m; sourceTree = ""; }; + 4373AB8A755D4DB6F49BA37DEFE4C9CF /* PFCoreDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreDataProvider.h; path = Parse/Internal/PFCoreDataProvider.h; sourceTree = ""; }; + 444C17DA53AAC790C006E8C77C606141 /* PFEventuallyPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyPin.h; path = Parse/Internal/PFEventuallyPin.h; sourceTree = ""; }; + 447A70708A6608EE3D4BD4E556895AE6 /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperation.m; path = AFNetworking/AFHTTPRequestOperation.m; sourceTree = ""; }; + 448743DDA2013C8A9A70568A441DEF22 /* PFImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImage.h; path = ParseUI/Classes/Internal/Extensions/PFImage.h; sourceTree = ""; }; + 44A129BE492571A758DC14026E10AB87 /* PFURLSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h; sourceTree = ""; }; + 4557A74A01F29629FD85B18F24E777A5 /* PFCommandRunningConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunningConstants.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m; sourceTree = ""; }; + 45756B2B291EADD70CF96E443BAD2FF1 /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLConnectionOperation.h; path = AFNetworking/AFURLConnectionOperation.h; sourceTree = ""; }; + 4576727BB25DE279D205E8F0DB89DB48 /* FUITextField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUITextField.h; path = Classes/ios/FUITextField.h; sourceTree = ""; }; + 45D59B3477CE4E1E8A8D72DAA36AE180 /* pt-BR.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = "pt-BR.lproj"; path = "ParseUI/Resources/Localization/pt-BR.lproj"; sourceTree = ""; }; + 463691C0AD9E31BB5AD4BDB493C34D0D /* PFAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAlertView.m; path = Parse/Internal/PFAlertView.m; sourceTree = ""; }; + 46422AC887FA952A4892854E29579089 /* UITableViewCell+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableViewCell+FlatUI.m"; path = "Classes/ios/UITableViewCell+FlatUI.m"; sourceTree = ""; }; + 46CD8E4F61AC27B42941BB20FCCC1C2F /* PFMutableUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableUserState.m; path = Parse/Internal/User/State/PFMutableUserState.m; sourceTree = ""; }; + 46E040DEB7A5A629D47173D5EB8CD36C /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; + 47A62753B34D273314D19513D5331BC8 /* PFQueryTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryTableViewController.m; path = ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m; sourceTree = ""; }; 47B8D17F18C41D9E28B5AD8E78B23877 /* Pods-FoodbLog-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-FoodbLog-umbrella.h"; sourceTree = ""; }; - 48347C3BCE6F2F0E9F400C6727FC975A /* PFRESTFileCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTFileCommand.m; path = Parse/Internal/Commands/PFRESTFileCommand.m; sourceTree = ""; }; - 485733735128D4A7D968200F60AE577F /* PFACLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLPrivate.h; path = Parse/Internal/ACL/PFACLPrivate.h; sourceTree = ""; }; - 48E6A4215AF02A0535DF6FEEA6CF7E97 /* FUISwitch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUISwitch.m; path = Classes/ios/FUISwitch.m; sourceTree = ""; }; - 497EC4624AF81526C5C1ADB7FE648185 /* PFDateFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDateFormatter.h; path = Parse/Internal/PFDateFormatter.h; sourceTree = ""; }; - 49B4F56ABCA4652DC76E6114451571CB /* PFQueryTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryTableViewController.h; path = ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h; sourceTree = ""; }; - 49C9D42C27DD2AE3AAB32AE24D2EBF53 /* PFObjectLocalIdStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectLocalIdStore.m; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m; sourceTree = ""; }; - 4A670E98EA122B6C249D0794F87C5973 /* PFJSONSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFJSONSerialization.m; path = Parse/Internal/PFJSONSerialization.m; sourceTree = ""; }; - 4A6886AC956A814ACE7382CC7A019CD2 /* PFUserState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState_Private.h; path = Parse/Internal/User/State/PFUserState_Private.h; sourceTree = ""; }; - 4A7D177985593F94AB3C85D6D51C42C6 /* PFUserAuthenticationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserAuthenticationController.m; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m; sourceTree = ""; }; - 4AB3B84C7DF66F47815CEE5E52615C7A /* PFOfflineQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryController.m; path = Parse/Internal/Query/Controller/PFOfflineQueryController.m; sourceTree = ""; }; - 4AB7F6659411A2066C581E0CA1DB5C65 /* AFNetworking.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.release.xcconfig; sourceTree = ""; }; - 4AE1A480AE466808EAF88E6FA440AA1F /* PFQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryController.h; path = Parse/Internal/Query/Controller/PFQueryController.h; sourceTree = ""; }; - 4B071309D9B499D128868D443A721FC7 /* PFActivityIndicatorCollectionReusableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActivityIndicatorCollectionReusableView.h; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h; sourceTree = ""; }; - 4B6815C329F8604653FA7EB39FBF3DC2 /* PFObjectSubclassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassInfo.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h; sourceTree = ""; }; - 4B9C6B10499E423A5444CE2864F26C4C /* PFMutablePushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutablePushState.h; path = Parse/Internal/Push/State/PFMutablePushState.h; sourceTree = ""; }; - 4BD4DB7C36686D11738734B18DF72463 /* IQKeyboardManager.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManager.release.xcconfig; sourceTree = ""; }; - 4BE6842882A4FB9F520482896F6AB111 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; - 4C575A54BA05AD27990EABB75C2F2926 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; - 4CA05D6E4244A871551EC80C2CDCCEC1 /* PFRESTObjectBatchCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectBatchCommand.m; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.m; sourceTree = ""; }; - 4CACE40B53562456C7355A1BD4B3BF59 /* PFOfflineStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineStore.m; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m; sourceTree = ""; }; - 4D0DB85E2D94B47CB63F50784F0CCD01 /* PFCommandResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandResult.m; path = Parse/Internal/PFCommandResult.m; sourceTree = ""; }; - 4D4160C37DEDD4C39102E2A7D159A51F /* FUITextField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUITextField.h; path = Classes/ios/FUITextField.h; sourceTree = ""; }; - 4DAB5D2AB74AB4E6E40BC4E2BA5EC42C /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; - 4DCD97868BF52A2DA515BB0660CE3150 /* IQUIViewController+Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIViewController+Additions.m"; path = "IQKeyBoardManager/Categories/IQUIViewController+Additions.m"; sourceTree = ""; }; - 4ECC7AE2129119EE9949BB6A2DBA3907 /* PFObjectController_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController_Private.h; path = Parse/Internal/Object/Controller/PFObjectController_Private.h; sourceTree = ""; }; - 4F3997BE1E4CB1C34C279A257963F192 /* PFDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDevice.m; path = Parse/Internal/PFDevice.m; sourceTree = ""; }; - 50662E86832F5B9AA451BDE684D8D13D /* PFUserPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserPrivate.h; path = Parse/Internal/User/PFUserPrivate.h; sourceTree = ""; }; - 50CAE388BE03392981EB34F0ED05A9DC /* PFTextButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTextButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m; sourceTree = ""; }; - 51223661224A51BA99F43A7498640E0A /* PFObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectState.m; path = Parse/Internal/Object/State/PFObjectState.m; sourceTree = ""; }; - 51CF4033E47188387317DC9CBC5EBBA3 /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; - 5272189E4887F0A7478864335C376F72 /* UNIHTTPResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPResponse.m; path = Unirest/HttpResponse/UNIHTTPResponse.m; sourceTree = ""; }; - 52CD825D9A1511054A1A5701A737B96F /* PFProductsRequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductsRequestHandler.m; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m; sourceTree = ""; }; - 52EDE9D3C5F9D0F9C4068C669A7F7141 /* PFCurrentConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentConfigController.h; path = Parse/Internal/Config/Controller/PFCurrentConfigController.h; sourceTree = ""; }; - 532AAB9D359ECDC94F8B03BB863AC81E /* Unirest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Unirest.release.xcconfig; sourceTree = ""; }; - 53523337F4B830F83880CFDC298F2BC8 /* PFCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCollectionViewCell.m; path = ParseUI/Classes/Cells/PFCollectionViewCell.m; sourceTree = ""; }; - 5358009CFED1962F15A2280446DB04A7 /* PFURLSessionCommandRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h; sourceTree = ""; }; - 53977B705B1F2FD103C89A12B9885AA3 /* PFMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMulticastDelegate.m; path = Parse/Internal/PFMulticastDelegate.m; sourceTree = ""; }; - 5407D6309498466D3BD9EEE5DC9171F2 /* PFColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFColor.h; path = ParseUI/Classes/Internal/Extensions/PFColor.h; sourceTree = ""; }; - 54A49B5066DC5E2D106E4AB7EC84E310 /* ParseModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseModule.h; path = Parse/Internal/ParseModule.h; sourceTree = ""; }; - 54B90D0232ABF1B3E61A9DC3EEAA226A /* IQKeyboardReturnKeyHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQKeyboardReturnKeyHandler.m; path = IQKeyBoardManager/IQKeyboardReturnKeyHandler.m; sourceTree = ""; }; - 5545F56CBCA1961E8A999F7257C1FA51 /* PFObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObject.m; path = Parse/PFObject.m; sourceTree = ""; }; - 566D307A23F6EE2FF9B47E6A1C68C59E /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; - 586F2194798AE4805A6F8FE5E6F506DE /* ParseUI-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ParseUI-dummy.m"; sourceTree = ""; }; - 5896CFB908B877F5C2F4D5066E6E80D3 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; - 59CCCB05A2EBA3189A6BE62B37274EC2 /* Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Chameleon.h; path = "Pod/Classes/Objective-C/Chameleon.h"; sourceTree = ""; }; - 5A5D2EBF57F51AF57F8C4C497E5D6AEA /* PFCommandRunning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunning.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.m; sourceTree = ""; }; - 5A930BF850559AE082DDFACF6887C72E /* PFHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHash.h; path = Parse/Internal/PFHash.h; sourceTree = ""; }; - 5BAFC8795A0D106AB97B4408C85D0A49 /* PFRESTPushCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTPushCommand.h; path = Parse/Internal/Commands/PFRESTPushCommand.h; sourceTree = ""; }; - 5BB3E23687BDA8DF4EC8C90366A7F21E /* PFFileState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState_Private.h; path = Parse/Internal/File/State/PFFileState_Private.h; sourceTree = ""; }; - 5D0E7ECA8260E9EE58E2D1D581456EE6 /* PFObjectFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCodingLogic.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h; sourceTree = ""; }; - 5D2AE97133B1C7AD99D02E0CBDFB4DE9 /* PFConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfigController.h; path = Parse/Internal/Config/Controller/PFConfigController.h; sourceTree = ""; }; - 5E3AAE5A1E6096A049F4DA5D191CBADC /* PFNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNullability.h; path = Parse/PFNullability.h; sourceTree = ""; }; - 5E69CBD775346A00D22D02F01FAEEE59 /* PFOperationSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOperationSet.h; path = Parse/Internal/Object/OperationSet/PFOperationSet.h; sourceTree = ""; }; - 5E6A437EBB862966A809668856F8E247 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; + 47DEEC6F87A4C44266E60D0FE9D3CD84 /* PFSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h; sourceTree = ""; }; + 487BDB4CA79192A229759CBAEB510235 /* PFCommandURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandURLRequestConstructor.m; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m; sourceTree = ""; }; + 49C9AED1403F10EAEF0BDD8C5D1D3ED4 /* UNIHTTPRequestWithBody.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPRequestWithBody.m; path = Unirest/UNIHTTPRequestWithBody.m; sourceTree = ""; }; + 4A6D3469A0C446BC153A71D249DD118C /* Unirest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Unirest.release.xcconfig; sourceTree = ""; }; + 4A8B03638085EFF11C1EAAF09ED235E2 /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; + 4A99D12CF0886074F54F4101B90E0209 /* PFObjectBatchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectBatchController.m; path = Parse/Internal/Object/BatchController/PFObjectBatchController.m; sourceTree = ""; }; + 4C112C5EA6B10F17C8A8DC5699FFED81 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; + 4D093C8CB7A26243277525B5AAEEFDAC /* PFPaymentTransactionObserver_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver_Private.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h; sourceTree = ""; }; + 4D7568E836055BBF820E548BA267D097 /* Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Chameleon.h; path = "Pod/Classes/Objective-C/Chameleon.h"; sourceTree = ""; }; + 4D9DF0C4B326ED5F2D1D4EAE13266284 /* UIImage+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+FlatUI.h"; path = "Classes/ios/UIImage+FlatUI.h"; sourceTree = ""; }; + 4DA03E39CAF7E8EFC0E5EDDCBC9F3BD0 /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; + 4DC5561D6E88870E46F7C10C1B8A21CC /* PFTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTaskQueue.m; path = Parse/Internal/PFTaskQueue.m; sourceTree = ""; }; + 4DD4060F8826F9A5E5D4C4FC4E7A3256 /* PFTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTableViewCell.h; path = ParseUI/Classes/Cells/PFTableViewCell.h; sourceTree = ""; }; + 4DFE6A76A1CE11D7A2988AB23405FE3D /* PFObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectControlling.h; path = Parse/Internal/Object/Controller/PFObjectControlling.h; sourceTree = ""; }; + 4E4DAF9930C43CB43E5BF52055CD68F1 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; + 4E759BDB2280614B1E223A5BF6593C20 /* PFACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState.h; path = Parse/Internal/ACL/State/PFACLState.h; sourceTree = ""; }; + 4EC3750FD01543193A7B71DB65C65C6C /* PFURLConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLConstructor.m; path = Parse/Internal/HTTPRequest/PFURLConstructor.m; sourceTree = ""; }; + 4ED9C82C3A61619800659B958E8E749E /* PFUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUser.m; path = Parse/PFUser.m; sourceTree = ""; }; + 4EDD0EDAAEC49A923F963CFF2EB1A94F /* PFTextButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTextButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h; sourceTree = ""; }; + 4EEBB37503F5FF0C662950C8F1DECA80 /* IQKeyboardManager.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManager.debug.xcconfig; sourceTree = ""; }; + 4FB30C451B1E7FFB9382796A11C5943B /* PFQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQuery.m; path = Parse/PFQuery.m; sourceTree = ""; }; + 4FCCA3A37B3313BAF696EBB3102DF427 /* PFInstallationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationPrivate.h; path = Parse/Internal/Installation/PFInstallationPrivate.h; sourceTree = ""; }; + 50B6CCE1DD1F1B571E064C44E3D7CC87 /* PFCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCollectionViewCell.h; path = ParseUI/Classes/Cells/PFCollectionViewCell.h; sourceTree = ""; }; + 5170BF555CAA15C414E5FFBAFBA0560C /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningEventuallyQueue.m; path = Parse/Internal/PFPinningEventuallyQueue.m; sourceTree = ""; }; + 51829BFD42C53387BD853B53595A4859 /* PFGeoPointPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPointPrivate.h; path = Parse/Internal/PFGeoPointPrivate.h; sourceTree = ""; }; + 518E2B391F997E4CCF271F754FA363A8 /* FUIPopoverBackgroundView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUIPopoverBackgroundView.m; path = Classes/ios/FUIPopoverBackgroundView.m; sourceTree = ""; }; + 523B0739D98E30356009D72E50CC1DDB /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; + 524E125E9BB16B2EA346C11FA2CCF3DB /* PFURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSession.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m; sourceTree = ""; }; + 52F2CC34E25309A7D0C44241B0F15DEB /* PFFileController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileController.m; path = Parse/Internal/File/Controller/PFFileController.m; sourceTree = ""; }; + 532DBEDE2A0498233B11E32D118785DB /* PFRelation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelation.m; path = Parse/PFRelation.m; sourceTree = ""; }; + 538710A479D4D4516F3473CEB00D6341 /* UINavigationController+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationController+Chameleon.h"; path = "Pod/Classes/Objective-C/UINavigationController+Chameleon.h"; sourceTree = ""; }; + 53AED7B37E59FD4C2906C8CD48F1549D /* Unirest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Unirest.debug.xcconfig; sourceTree = ""; }; + 53CEB84926E7FC9E2CFE13206641FDF1 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; + 560C0E4A9A88A8BCA7929A45B476EDE1 /* PFProductsRequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductsRequestHandler.m; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m; sourceTree = ""; }; + 562ED9F06683670B4C58AD183A5119AE /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionFileDownloadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; + 564869040FE2AC538A52B329B2EE83BE /* FlatUIKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FlatUIKit.release.xcconfig; sourceTree = ""; }; + 56EFB542F9FA3A986A2C18607C6BA01A /* PFActionButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActionButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m; sourceTree = ""; }; + 571A49A343233979AB4B93973BE75E50 /* PFUserState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState_Private.h; path = Parse/Internal/User/State/PFUserState_Private.h; sourceTree = ""; }; + 57EE6DBB3BE682C35873FDA83F44B5FC /* PFAnalyticsUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsUtilities.m; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m; sourceTree = ""; }; + 57F5879358C84148A7DCDE756C38208B /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLConnectionOperation.m; path = AFNetworking/AFURLConnectionOperation.m; sourceTree = ""; }; + 57F620D9F908B6A65FB1CEE68626BF6E /* PFOfflineQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryController.m; path = Parse/Internal/Query/Controller/PFOfflineQueryController.m; sourceTree = ""; }; + 5896B97D426354756157FC55B080FD82 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; + 58A2B45D80BC9668A48207A6F9EEC39D /* PFProductsRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductsRequestHandler.h; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h; sourceTree = ""; }; + 58AE592385190B7467E751B3B8DACB38 /* PFQueryUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryUtilities.h; path = Parse/Internal/Query/Utilities/PFQueryUtilities.h; sourceTree = ""; }; + 58C02A1A5B90D578646A551B3EE8B09B /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; + 58D1011532F802CDF880D3B55F389975 /* ParseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseManager.m; path = Parse/Internal/ParseManager.m; sourceTree = ""; }; + 59340BADC818D8D3EE97EF49C93B9657 /* AFNetworking.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.release.xcconfig; sourceTree = ""; }; + 5942670B140FE51902C19AA1DE9A9F3C /* PFReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFReachability.h; path = Parse/Internal/PFReachability.h; sourceTree = ""; }; + 59579E28C00752CB33687F0116BCE918 /* PFSubclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSubclassing.h; path = Parse/PFSubclassing.h; sourceTree = ""; }; + 59C4881749E08C596424F2235546B787 /* FUIAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUIAlertView.m; path = Classes/ios/FUIAlertView.m; sourceTree = ""; }; + 59ECECD66E1B23B4D503CFCF46952262 /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; + 5A8213D4F0DEBAD8576AB50551D8B094 /* IQUIView+IQKeyboardToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIView+IQKeyboardToolbar.h"; path = "IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h"; sourceTree = ""; }; + 5B6D1ADF24E834ADDC3684C7A9BEBA9A /* Bolts.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Bolts.modulemap; sourceTree = ""; }; + 5B765AFD4A4848FC69B9C8A2E9F26602 /* PFPushController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushController.h; path = Parse/Internal/Push/Controller/PFPushController.h; sourceTree = ""; }; + 5B85775602BF2725E42724F544D6ECD0 /* PFCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCategoryLoader.m; path = Parse/Internal/PFCategoryLoader.m; sourceTree = ""; }; + 5BA130676F12B046A542250B72B807BA /* PFUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserController.h; path = Parse/Internal/User/Controller/PFUserController.h; sourceTree = ""; }; + 5BC3203CA8DEAE4E766361C3772E32DF /* PFInstallationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationConstants.h; path = Parse/Internal/Installation/Constants/PFInstallationConstants.h; sourceTree = ""; }; + 5D0A81E8C2565C9257E716AD6F1840C1 /* PFUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserController.m; path = Parse/Internal/User/Controller/PFUserController.m; sourceTree = ""; }; + 5D2A07DA0436A22DB926D8F8BA8F922A /* UIView+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIView+ChameleonPrivate.m"; sourceTree = ""; }; + 5D2CC7EA24171E936D65F3D1CE945A69 /* PFRESTQueryCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTQueryCommand.m; path = Parse/Internal/Commands/PFRESTQueryCommand.m; sourceTree = ""; }; + 5D48E39DBDC5F4A1596DCF448DB2C584 /* PFQueryUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryUtilities.m; path = Parse/Internal/Query/Utilities/PFQueryUtilities.m; sourceTree = ""; }; + 5E1AFB8E063415AF1B76421BD1E70D71 /* PFActivityIndicatorTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActivityIndicatorTableViewCell.m; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m; sourceTree = ""; }; + 5E6BF5C5D003F29D1B91F74088E1F30B /* PFNetworkCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkCommand.h; path = Parse/Internal/PFNetworkCommand.h; sourceTree = ""; }; 5E8A133C5B52375ED7ED0B08ADBD8537 /* Pods-FoodbLog.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FoodbLog.release.xcconfig"; sourceTree = ""; }; - 5EB12118FD4DE039BC62EF0E15829099 /* UIToolbar+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIToolbar+FlatUI.m"; path = "Classes/ios/UIToolbar+FlatUI.m"; sourceTree = ""; }; - 5EDC42BD069E7A8A5E8A432640A1F523 /* PFPushUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushUtilities.h; path = Parse/Internal/Push/Utilites/PFPushUtilities.h; sourceTree = ""; }; - 5F6C72DA72BB9A832890E4D4C02C794A /* PFBaseState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBaseState.m; path = Parse/Internal/PFBaseState.m; sourceTree = ""; }; - 5F6FFE987901F200ABA41215EC6603C5 /* PFPushState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState_Private.h; path = Parse/Internal/Push/State/PFPushState_Private.h; sourceTree = ""; }; - 5FE07D72A0D452DFEAACC04F124006CF /* UNIJsonNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIJsonNode.m; path = Unirest/HttpResponse/UNIJsonNode.m; sourceTree = ""; }; - 609DBFC143F8CA52ECA2DC3956D4ADC3 /* PFObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectController.m; path = Parse/Internal/Object/Controller/PFObjectController.m; sourceTree = ""; }; - 60EC5380A05609AFEADD93175936D23A /* PFInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationController.h; path = Parse/Internal/Installation/Controller/PFInstallationController.h; sourceTree = ""; }; - 6133AB3618602C2A8838511FEC730F13 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; - 614FAF041CF57C25CF92549363DC2B35 /* PFFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile.h; path = Parse/PFFile.h; sourceTree = ""; }; - 61BDE38ED20108AC210E4C985B982B1B /* UNIHTTPRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPRequest.m; path = Unirest/UNIHTTPRequest.m; sourceTree = ""; }; - 61E8FE17B430924B29695138E0ACFA96 /* PFMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMulticastDelegate.h; path = Parse/Internal/PFMulticastDelegate.h; sourceTree = ""; }; - 61FF4D40E535915FF2A5E6013656D65F /* PFQueryUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryUtilities.h; path = Parse/Internal/Query/Utilities/PFQueryUtilities.h; sourceTree = ""; }; - 6226CB7D1425E15682AC63FA51921DD7 /* UNIRest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIRest.h; path = Unirest/UNIRest.h; sourceTree = ""; }; + 5ED9BE76CA272DD593432FBBB31A0802 /* UNISimpleRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNISimpleRequest.m; path = Unirest/HttpRequest/UNISimpleRequest.m; sourceTree = ""; }; + 5EE09B13391CB4E2288B618D9989B7CF /* UIViewController+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+Chameleon.h"; path = "Pod/Classes/Objective-C/UIViewController+Chameleon.h"; sourceTree = ""; }; + 5F2C6A11EEEA34D04A61B4281AC80E6C /* PFURLConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLConstructor.h; path = Parse/Internal/HTTPRequest/PFURLConstructor.h; sourceTree = ""; }; + 5F468E6B33E9C6CF3D86F7DE8C388C8B /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; + 602303506554C7182024859B53F84A23 /* Unirest-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Unirest-dummy.m"; sourceTree = ""; }; + 603FE11A5C1B8C0DC8233656AE9ED2CA /* PFPushUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushUtilities.m; path = Parse/Internal/Push/Utilites/PFPushUtilities.m; sourceTree = ""; }; + 6120BA628BADDB347735942BA78DB2BC /* PFTextField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTextField.m; path = ParseUI/Classes/Views/PFTextField.m; sourceTree = ""; }; + 6142F4E83D523220AAA5D1451FD4BD96 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = en.lproj; path = Parse/Resources/en.lproj; sourceTree = ""; }; + 62292C896B27EDFF3089011E9218A54F /* PFInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationController.m; path = Parse/Internal/Installation/Controller/PFInstallationController.m; sourceTree = ""; }; 62333A4D0E9AF8700874F1F22E9827D6 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; - 623E4161A8235BF36BEE1C200D5F8E72 /* PFInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallation.h; path = Parse/PFInstallation.h; sourceTree = ""; }; - 624695D19509BEA6FDB8926119091B30 /* PFKeyValueCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeyValueCache.m; path = Parse/Internal/KeyValueCache/PFKeyValueCache.m; sourceTree = ""; }; - 62FADD9376E95D055AF0A96D39FD267C /* PFSessionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionUtilities.h; path = Parse/Internal/Session/Utilities/PFSessionUtilities.h; sourceTree = ""; }; - 633C5F1F9DDC345F9BDF689B08C71651 /* PFCommandCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache_Private.h; path = Parse/Internal/PFCommandCache_Private.h; sourceTree = ""; }; - 636B22993762DB16840604D7D3A30F70 /* PFHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHash.m; path = Parse/Internal/PFHash.m; sourceTree = ""; }; - 63E672189DC0628FEE2AF3B6EF6CE5F6 /* PFAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics.h; path = Parse/PFAnalytics.h; sourceTree = ""; }; - 641771E5ACE52EEBF054DF88C734432B /* PFFileStagingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileStagingController.h; path = Parse/Internal/File/Controller/PFFileStagingController.h; sourceTree = ""; }; - 64999537AFDE8F90807B5B5991781283 /* Lato-Italic.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "Lato-Italic.ttf"; path = "Resources/Lato-Italic.ttf"; sourceTree = ""; }; - 656E2AE30EB08EBE4FFC367B7AE4DEAE /* UIViewController+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+Chameleon.m"; path = "Pod/Classes/Objective-C/UIViewController+Chameleon.m"; sourceTree = ""; }; - 65C5E78DF211DF65F36E36C9FC0D1B01 /* UINavigationController+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationController+Chameleon.h"; path = "Pod/Classes/Objective-C/UINavigationController+Chameleon.h"; sourceTree = ""; }; - 666458A8556D81D46682CDDE3C99CFBD /* PFPinningObjectStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningObjectStore.m; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.m; sourceTree = ""; }; - 66B92824AD49FBB9390D23A0ECEC41CD /* PFObjectState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState_Private.h; path = Parse/Internal/Object/State/PFObjectState_Private.h; sourceTree = ""; }; - 67CE6D4D9A7B520EA991DDC9419C137E /* PFRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState.h; path = Parse/Internal/Relation/State/PFRelationState.h; sourceTree = ""; }; - 68183AD738E931701FD0AD3DF16E94B9 /* PFURLSessionDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h; sourceTree = ""; }; - 68664BFE50321FF5CE50A110AAE7E2E5 /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; - 687B09B7B61E7AD8BBFAD05917EA3836 /* PFPaymentTransactionObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPaymentTransactionObserver.m; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m; sourceTree = ""; }; - 69460567E8D0F3A25083496C96A69461 /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; - 69A510A1BF3A452173802E1908C71DB3 /* PFCloudCodeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloudCodeController.m; path = Parse/Internal/CloudCode/PFCloudCodeController.m; sourceTree = ""; }; - 6A63A0131E42676B37B1723606FB5076 /* PFOfflineQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryController.h; path = Parse/Internal/Query/Controller/PFOfflineQueryController.h; sourceTree = ""; }; - 6AC19EA4CDEEFAFF25CAB498F92DE3C8 /* PFSQLiteStatement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteStatement.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h; sourceTree = ""; }; - 6B117E2539ED9DDF90DCCD6AC02BA037 /* PFRESTSessionCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTSessionCommand.h; path = Parse/Internal/Commands/PFRESTSessionCommand.h; sourceTree = ""; }; - 6BF3E9A8E7DEEA28BC70D87AF3DBEC43 /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; - 6C1F692004740EFBE7FF1FF61AB5529B /* PFProductsRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductsRequestHandler.h; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h; sourceTree = ""; }; - 6CB133094501625DCA52F72F4C4E2B46 /* SDWebImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDecoder.h; path = SDWebImage/SDWebImageDecoder.h; sourceTree = ""; }; - 6CDDE8A709E5616D62A31C917FE40D76 /* PFInstallationIdentifierStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h; sourceTree = ""; }; - 6CFB2DE553F71F9BD4D38BFE889EE5A1 /* PFPurchaseTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseTableViewCell.m; path = ParseUI/Classes/Cells/PFPurchaseTableViewCell.m; sourceTree = ""; }; - 6D30F5219BDECE4875E21C7C337CAB52 /* IQNSArray+Sort.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQNSArray+Sort.m"; path = "IQKeyBoardManager/Categories/IQNSArray+Sort.m"; sourceTree = ""; }; - 6D76EBB2E083B394F15EA609C72DA53F /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; - 6E0AF3C159D4C8B5EB68C6ADB8FB55A2 /* PFObjectFileCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCoder.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.h; sourceTree = ""; }; - 6E80233019F4EE7D4C240660178775ED /* PFMutableACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableACLState.h; path = Parse/Internal/ACL/State/PFMutableACLState.h; sourceTree = ""; }; - 6EFCD2984A81FFD36BD6341ECAD197B3 /* IQUIViewController+Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIViewController+Additions.h"; path = "IQKeyBoardManager/Categories/IQUIViewController+Additions.h"; sourceTree = ""; }; - 701A5B85169EB58682F05C75AC13EB3E /* IQKeyboardManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQKeyboardManager.m; path = IQKeyBoardManager/IQKeyboardManager.m; sourceTree = ""; }; - 70A3394AFCD610A0CB8D77E3345EDC43 /* PFMutableFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableFileState.m; path = Parse/Internal/File/State/PFMutableFileState.m; sourceTree = ""; }; - 70C2CCBB87CBCB7C3F8AED8C1396EF19 /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; - 70D40D77353891DBFC1CDF8EFFB36FC5 /* Unirest-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Unirest-Info.plist"; sourceTree = ""; }; - 7142851694FCB943E670DC3C15E92EBF /* ChameleonFramework.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ChameleonFramework.release.xcconfig; sourceTree = ""; }; - 7188A502AE1E58CD7A9DBA3B6C887DF0 /* PFDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDecoder.h; path = Parse/Internal/PFDecoder.h; sourceTree = ""; }; - 71906898F9D4CCF17CBD5FC16B0E40FB /* PFURLSessionDataTaskDelegate_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h; sourceTree = ""; }; + 62CF11BB195FBEDB741B155A299E3F4C /* IQKeyboardManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManager-dummy.m"; sourceTree = ""; }; + 6360B90072C4B548E77BF105665B6C37 /* PFPushManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushManager.h; path = Parse/Internal/Push/Manager/PFPushManager.h; sourceTree = ""; }; + 63A96BD4D5CE686506290E2B2F6864B5 /* ChameleonConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonConstants.h; path = "Pod/Classes/Objective-C/ChameleonConstants.h"; sourceTree = ""; }; + 64197C6CBE27CDF8450C86E247333C27 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; + 648C65817ACE24AD1C674B8C829B4E36 /* IQUIWindow+Hierarchy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIWindow+Hierarchy.m"; path = "IQKeyboardManager/Categories/IQUIWindow+Hierarchy.m"; sourceTree = ""; }; + 65BFCDD2C8EE6E26312798F208A450E4 /* PFHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPRequest.h; path = Parse/Internal/HTTPRequest/PFHTTPRequest.h; sourceTree = ""; }; + 6627F2203B9CE43FB51C48DEC6485120 /* PFObjectController_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController_Private.h; path = Parse/Internal/Object/Controller/PFObjectController_Private.h; sourceTree = ""; }; + 66D7E61A2DA0CCA139659AE3C52ADAC5 /* PFSQLiteStatement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteStatement.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h; sourceTree = ""; }; + 6720A87D6066BFEDE6B83971F452B9BD /* Bolts-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Bolts-Info.plist"; sourceTree = ""; }; + 6721C44FB15736B15A7A9FF9DEE5BA27 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; + 6784E3A646029063B6761DB858CC2A64 /* PFRESTQueryCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTQueryCommand.h; path = Parse/Internal/Commands/PFRESTQueryCommand.h; sourceTree = ""; }; + 67A6FB7F80EB38941450A0B66E1843B4 /* Parse.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.debug.xcconfig; sourceTree = ""; }; + 67B1DADD0464EB28623E46BA51F4E731 /* PFConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfig.m; path = Parse/PFConfig.m; sourceTree = ""; }; + 67C82E63D914F4652D462D1EF746789E /* PFFileState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState_Private.h; path = Parse/Internal/File/State/PFFileState_Private.h; sourceTree = ""; }; + 68485F33091E36236F52B5769528EB54 /* UILabel+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UILabel+Chameleon.h"; path = "Pod/Classes/Objective-C/UILabel+Chameleon.h"; sourceTree = ""; }; + 692F0A966BB11E58EB1DF1EFEEE973F3 /* PFCommandCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache_Private.h; path = Parse/Internal/PFCommandCache_Private.h; sourceTree = ""; }; + 69AB457D67396F5B1AE602EB9BE91C33 /* PFNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNullability.h; path = Parse/PFNullability.h; sourceTree = ""; }; + 69EB7978B5C927F6B8DB109710F1A3A9 /* PFMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMulticastDelegate.m; path = Parse/Internal/PFMulticastDelegate.m; sourceTree = ""; }; + 6AB0CD6365496172E27CBD57A2266391 /* PFSignUpViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSignUpViewController.m; path = ParseUI/Classes/SignUpViewController/PFSignUpViewController.m; sourceTree = ""; }; + 6B6F63E91EEC4427BD74F56EC4CDA08B /* PFObjectConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectConstants.m; path = Parse/Internal/Object/Constants/PFObjectConstants.m; sourceTree = ""; }; + 6B9244AA4FFAD4954BC0B0ACB67D2F4C /* Parse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = Parse/Parse.h; sourceTree = ""; }; + 6C279362F3C05B272F24D95D7C88397A /* PFOfflineStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineStore.h; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h; sourceTree = ""; }; + 6C66681DF328D06725C4357E76019D12 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; + 6CDA46DB859C98B0E388E4E3FBFB36FB /* UIColor+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIColor+ChameleonPrivate.h"; sourceTree = ""; }; + 6DAEBE8AEEE1FAA4664DBEB20E14CE68 /* PFRelationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationPrivate.h; path = Parse/Internal/Relation/PFRelationPrivate.h; sourceTree = ""; }; + 6F3BF9878F0834C3730E36D502F45185 /* PFBaseState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBaseState.m; path = Parse/Internal/PFBaseState.m; sourceTree = ""; }; + 6FC877593D9C3597554FD4F63EA7265D /* PFFileController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileController.h; path = Parse/Internal/File/Controller/PFFileController.h; sourceTree = ""; }; + 7013A29B1EA77F5E42B21D0847570E86 /* PFFieldOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperation.m; path = Parse/Internal/FieldOperation/PFFieldOperation.m; sourceTree = ""; }; + 7063EC865492F550FE5219FA73C9583A /* Parse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Parse.m; path = Parse/Parse.m; sourceTree = ""; }; + 70B003B9161DCD2E0A45781DF2576C89 /* flat-ui-icons-regular.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "flat-ui-icons-regular.ttf"; path = "Resources/flat-ui-icons-regular.ttf"; sourceTree = ""; }; + 70E696DD69E7E5ED847216871E48280C /* PFQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryController.h; path = Parse/Internal/Query/Controller/PFQueryController.h; sourceTree = ""; }; + 7158256AD2EEA035C9BB1BF017053123 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; + 7175B962AF396E26B597D16DC3A5CAAB /* UNIHTTPResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPResponse.h; path = Unirest/HttpResponse/UNIHTTPResponse.h; sourceTree = ""; }; + 719F3201FA8FF71792294DDA9C2E0678 /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; 71E8757C5E655C53AAFA0481265D031B /* Pods-FoodbLog-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-FoodbLog-dummy.m"; sourceTree = ""; }; - 71F87070D4783A8D6F354D8BCAB875C3 /* UITabBar+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITabBar+FlatUI.h"; path = "Classes/ios/UITabBar+FlatUI.h"; sourceTree = ""; }; - 7389E3A97A4248463F61AE93C1902809 /* flat-ui-icons-regular.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "flat-ui-icons-regular.ttf"; path = "Resources/flat-ui-icons-regular.ttf"; sourceTree = ""; }; - 73A911C862B60EA923C814A7824ED72E /* PFCommandResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandResult.h; path = Parse/Internal/PFCommandResult.h; sourceTree = ""; }; - 73ACD345C800D725173F90C44EFD0B3A /* PFUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserController.h; path = Parse/Internal/User/Controller/PFUserController.h; sourceTree = ""; }; - 73B12CABD664167D981D0544B9928022 /* UIColor+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+FlatUI.h"; path = "Classes/ios/UIColor+FlatUI.h"; sourceTree = ""; }; - 73CC3349EC3533415793CF755807650A /* PFURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h; sourceTree = ""; }; - 748B0CC576A8F49BAB1FF66E84471822 /* IQKeyboardManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManager-dummy.m"; sourceTree = ""; }; - 74B88130F8B1AC90AC1CA346D577FB27 /* PFInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInternalUtils.h; path = Parse/Internal/PFInternalUtils.h; sourceTree = ""; }; - 765C0EAAC0CBC6AF531C333F05E087B9 /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; - 76CB784D54B055F86031B44399CB67A2 /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; - 780D44B2A921C4D352FA9A6D9693F79A /* PFPurchaseTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseTableViewCell.h; path = ParseUI/Classes/Cells/PFPurchaseTableViewCell.h; sourceTree = ""; }; - 7861C0328B9B37380137F55D5B766F21 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; - 7870F841A362ED1E4FFA8F36CA9D297E /* PFEventuallyPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyPin.h; path = Parse/Internal/PFEventuallyPin.h; sourceTree = ""; }; - 788310F842000FA289D2F1CDCD98A85C /* UINavigationBar+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationBar+FlatUI.h"; path = "Classes/ios/UINavigationBar+FlatUI.h"; sourceTree = ""; }; + 71FEF17E88601C7390E60B7D3C7D86D9 /* UNIJsonNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIJsonNode.m; path = Unirest/HttpResponse/UNIJsonNode.m; sourceTree = ""; }; + 7259AEBFEEBDDB3685DB53543C199135 /* PFObjectLocalIdStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectLocalIdStore.m; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m; sourceTree = ""; }; + 7299ED8195E626646307BF4A8D40A058 /* PFProductTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductTableViewController.m; path = ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m; sourceTree = ""; }; + 735FD83521BA17D09CAE866022FD78C7 /* PFObjectConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectConstants.h; path = Parse/Internal/Object/Constants/PFObjectConstants.h; sourceTree = ""; }; + 73A9A926D0BDDC98D57EA6CCBC0E91AC /* UIView+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIView+ChameleonPrivate.h"; sourceTree = ""; }; + 73B7094CD00334DE71FFD9ED9F4AFE8D /* Parse-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Parse-dummy.m"; sourceTree = ""; }; + 73BC7B9783D64F0A868195064BC3BE46 /* PFOfflineQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryController.h; path = Parse/Internal/Query/Controller/PFOfflineQueryController.h; sourceTree = ""; }; + 73CC9A342B0099AB7F2D13D603FCFC71 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; + 73E92AE01951AA70475BDC4CB43A6528 /* PFCurrentInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentInstallationController.m; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m; sourceTree = ""; }; + 744ACCE6B933BA912384E2E1F34A3BA7 /* IQToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQToolbar.h; path = IQKeyboardManager/IQToolbar/IQToolbar.h; sourceTree = ""; }; + 74507F19D1FF215BD94690AA2D88047B /* PFRect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRect.h; path = ParseUI/Classes/Internal/Extensions/PFRect.h; sourceTree = ""; }; + 7491B40A0184FAC7223E8121B02FB307 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; + 749D4221E99EEA9B5BC4964E736739C2 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; + 74D0634B76E4EE3C7476264586B47F18 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; + 74D802D8056ADFE99B20602EAA26F7B2 /* PFInstallationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationConstants.m; path = Parse/Internal/Installation/Constants/PFInstallationConstants.m; sourceTree = ""; }; + 75D3AA3139CAC105C690DB23C90E64BF /* PFAnalyticsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsUtilities.h; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h; sourceTree = ""; }; + 7625D472ACC8D44E3E9CF86870FB700F /* PFPinningObjectStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningObjectStore.m; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.m; sourceTree = ""; }; + 764482CB123621C18470E54689AE1D1A /* PFObjectUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectUtilities.m; path = Parse/Internal/Object/Utilities/PFObjectUtilities.m; sourceTree = ""; }; + 78392292469D781C93066CD8051EC869 /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; + 78698705CCE8B41B0BB2C29A99DAED74 /* PFMutableFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableFileState.h; path = Parse/Internal/File/State/PFMutableFileState.h; sourceTree = ""; }; + 78DF666508E81974752F6338C9BD57F0 /* PFRESTUserCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTUserCommand.m; path = Parse/Internal/Commands/PFRESTUserCommand.m; sourceTree = ""; }; + 79167CD3E04E39F302F7B16FAA2250AF /* IQKeyboardManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManager-prefix.pch"; sourceTree = ""; }; + 793A3BFEC9783DDC1830CDC4663B9EC4 /* PFConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig_Private.h; path = Parse/Internal/Config/PFConfig_Private.h; sourceTree = ""; }; 799A25ED12D346D0E10745AF43D345D4 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; - 7A28FD3FB992F202D240D12E7F2B7FD5 /* PFRESTUserCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTUserCommand.h; path = Parse/Internal/Commands/PFRESTUserCommand.h; sourceTree = ""; }; - 7A42508E95E64986B0EDAFC9E7C7942A /* UNIHTTPBinaryResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPBinaryResponse.h; path = Unirest/HttpResponse/UNIHTTPBinaryResponse.h; sourceTree = ""; }; - 7A7759BCCF26709D483AEAA4CA39B1AC /* PFQueryTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryTableViewController.m; path = ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m; sourceTree = ""; }; - 7A8E2C8071F308F79E8DC8D5E1A0A736 /* PFQueryCollectionViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryCollectionViewController.m; path = ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m; sourceTree = ""; }; - 7AB05A9755C75CB37B4B278883D9ECBE /* AFNetworking.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.debug.xcconfig; sourceTree = ""; }; - 7B09852DB9FD0FD28F70ECC80DCF2091 /* UNIHTTPStringResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPStringResponse.m; path = Unirest/HttpResponse/UNIHTTPStringResponse.m; sourceTree = ""; }; - 7B2C31800C645ACA08536F0A681E03CF /* PFThreadsafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFThreadsafety.h; path = Parse/Internal/ThreadSafety/PFThreadsafety.h; sourceTree = ""; }; - 7B4F9159794FFF9BEDDFCBAA5965C056 /* PFCommandRunning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunning.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.h; sourceTree = ""; }; - 7BE179E9C8B4046FCC237E5DA15BB57D /* Bolts.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.debug.xcconfig; sourceTree = ""; }; - 7C5002465C0FC38F707FE42128EF8087 /* UIButton+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+Chameleon.h"; path = "Pod/Classes/Objective-C/UIButton+Chameleon.h"; sourceTree = ""; }; - 7C823BA36B3996A5B127FB928AAFB071 /* PFCoreDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreDataProvider.h; path = Parse/Internal/PFCoreDataProvider.h; sourceTree = ""; }; - 7D6CC34BA2E5393D2D3F739F59596E4C /* PFImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImageView.h; path = ParseUI/Classes/Views/PFImageView.h; sourceTree = ""; }; - 7D75D7FA476F50BC5FB3F3B0641D2926 /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; - 7DAFE2C00F715262F9AF47201AE5B463 /* UILabel+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UILabel+Chameleon.h"; path = "Pod/Classes/Objective-C/UILabel+Chameleon.h"; sourceTree = ""; }; + 79FD47C9A55EA483579D7171540525DC /* PFKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeychainStore.h; path = Parse/Internal/PFKeychainStore.h; sourceTree = ""; }; + 7A264B2075C9820174A1D049067B3CBF /* PFRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelationState.m; path = Parse/Internal/Relation/State/PFRelationState.m; sourceTree = ""; }; + 7A7B4A661CDD8F7A507BC897C1C1F57D /* PFObjectBatchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectBatchController.h; path = Parse/Internal/Object/BatchController/PFObjectBatchController.h; sourceTree = ""; }; + 7B54797159113BD42DEF825808E96506 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; + 7B72B0C51A38197D37BB6563BDCA4FC1 /* UIToolbar+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIToolbar+FlatUI.h"; path = "Classes/ios/UIToolbar+FlatUI.h"; sourceTree = ""; }; + 7C2680C64F9681DB935CEC6C07AECD7F /* PFEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyQueue.m; path = Parse/Internal/PFEventuallyQueue.m; sourceTree = ""; }; + 7C46519EC14E1637D6277AAE86419317 /* UNISimpleRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNISimpleRequest.h; path = Unirest/HttpRequest/UNISimpleRequest.h; sourceTree = ""; }; + 7C73CA6320217923A2DFB485254CC628 /* IQUIViewController+Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIViewController+Additions.m"; path = "IQKeyboardManager/Categories/IQUIViewController+Additions.m"; sourceTree = ""; }; + 7C92F31D9E400B1B46DA37ADD0B84189 /* ChameleonFramework.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ChameleonFramework.modulemap; sourceTree = ""; }; + 7D24DD97B5EB009793F423B2E12526C9 /* PFMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMulticastDelegate.h; path = Parse/Internal/PFMulticastDelegate.h; sourceTree = ""; }; + 7DB4F4E4B2256634770AE493DF1F4302 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 7DDF020AF63A140F55102296DFDB9C66 /* PFInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallation.m; path = Parse/PFInstallation.m; sourceTree = ""; }; - 7DE2D5472532E535898481C5442AAA5B /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; - 7E737BD38A79BE130905DB568587BBC4 /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; - 7F2689D7BF9856AA54533AE6210302B0 /* PFUserAuthenticationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationDelegate.h; path = Parse/PFUserAuthenticationDelegate.h; sourceTree = ""; }; - 80331DEE2BF41B2AD40413E3C5DB2B28 /* ParseUI.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ParseUI.debug.xcconfig; sourceTree = ""; }; - 80684463B172C7670EDABBAB1D1D3482 /* PFSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession.h; path = Parse/PFSession.h; sourceTree = ""; }; - 80865A22558AC6423CFCE3A112073FD6 /* PFObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController.h; path = Parse/Internal/Object/Controller/PFObjectController.h; sourceTree = ""; }; - 809F219DA65FEDD9A6F8E2DF586F7D62 /* PFCommandURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandURLRequestConstructor.m; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m; sourceTree = ""; }; - 81311E91F15A9ACF24DDCF24A36B0F39 /* NSString+Icons.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Icons.m"; path = "Classes/ios/NSString+Icons.m"; sourceTree = ""; }; - 81509BFE89D1F42DFC217BFFCC77885F /* PFACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACLState.m; path = Parse/Internal/ACL/State/PFACLState.m; sourceTree = ""; }; - 818DBD3B6CFCFF9DC445CD8574113BAA /* PFRESTConfigCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTConfigCommand.m; path = Parse/Internal/Commands/PFRESTConfigCommand.m; sourceTree = ""; }; - 819412AD0928AF8171877E3BEC3035CA /* PFTextField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTextField.h; path = ParseUI/Classes/Views/PFTextField.h; sourceTree = ""; }; - 83026E30E5879736A329148544ED9B28 /* PFPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPin.m; path = Parse/Internal/LocalDataStore/Pin/PFPin.m; sourceTree = ""; }; - 830900A05A897F050CC8C0CCDE4C4FD8 /* ParseUIConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseUIConstants.h; path = ParseUI/Other/ParseUIConstants.h; sourceTree = ""; }; - 83B8FAAF482B78AC548BDC44BA540C3A /* PFImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImage.m; path = ParseUI/Classes/Internal/Extensions/PFImage.m; sourceTree = ""; }; - 83F94635DF5FD3CB6C04F66A51892F22 /* PFObjectSubclassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassInfo.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m; sourceTree = ""; }; - 843985569B6BCF4CD645497A32668195 /* UNIHTTPRequestWithBody.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPRequestWithBody.h; path = Unirest/UNIHTTPRequestWithBody.h; sourceTree = ""; }; - 8442B999E5775411EEFFBC7781637303 /* UISlider+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UISlider+FlatUI.h"; path = "Classes/ios/UISlider+FlatUI.h"; sourceTree = ""; }; + 7DDE204F56A235BFC67201687941B5F5 /* UIPopoverController+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIPopoverController+FlatUI.m"; path = "Classes/ios/UIPopoverController+FlatUI.m"; sourceTree = ""; }; + 7DDFDA2543E81B2D6485145052BA73C2 /* PFConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConstants.h; path = Parse/PFConstants.h; sourceTree = ""; }; + 7E432ED6C4BACD597B5F4F2DB17116EA /* Chameleon_.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Chameleon_.m; path = "Pod/Classes/Objective-C/Chameleon_.m"; sourceTree = ""; }; + 7E9D4BAA6FB13BABFA6610DB1C1A516A /* ParseModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseModule.m; path = Parse/Internal/ParseModule.m; sourceTree = ""; }; + 7F2B4DBA35116B6042915F19733A7176 /* UIButton+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+Chameleon.h"; path = "Pod/Classes/Objective-C/UIButton+Chameleon.h"; sourceTree = ""; }; + 7F5AC19CF9E1DB86BB619A83FD60C580 /* UIViewController+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+Chameleon.m"; path = "Pod/Classes/Objective-C/UIViewController+Chameleon.m"; sourceTree = ""; }; + 7FB8156015613925F2F535F01040F256 /* PFLogInViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInViewController.h; path = ParseUI/Classes/LogInViewController/PFLogInViewController.h; sourceTree = ""; }; + 7FF0ED8615CFE41B1191D7A379331688 /* PFObjectEstimatedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectEstimatedData.h; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h; sourceTree = ""; }; + 80178C233F043FB5B04F2B531880B028 /* ChameleonFramework.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ChameleonFramework.release.xcconfig; sourceTree = ""; }; + 80476201DCD8D8BD6436D2B68B92209C /* PFLoadingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLoadingView.h; path = ParseUI/Classes/Internal/Views/PFLoadingView.h; sourceTree = ""; }; + 80A30BF5DA2904576C9A695E79AEBC44 /* FlatUIKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlatUIKit.h; path = Classes/ios/FlatUIKit.h; sourceTree = ""; }; + 80CB234E37168DF49DEAB9D544A0C5FB /* IQTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQTextView.m; path = IQKeyboardManager/IQTextView/IQTextView.m; sourceTree = ""; }; + 810047E1F16DB679BCA0CC9D8C9337B7 /* BFTask+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Private.m"; path = "Parse/Internal/BFTask+Private.m"; sourceTree = ""; }; + 81A894C8CDCCFEAB2B5E90D348379A43 /* UIBarButtonItem+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIBarButtonItem+FlatUI.h"; path = "Classes/ios/UIBarButtonItem+FlatUI.h"; sourceTree = ""; }; + 81D0A63D86D41097D8121FB31AFAFEEA /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; + 826F299C0C32FA4481DAE44FA6FA0A1E /* PFPrimaryButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPrimaryButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m; sourceTree = ""; }; + 829A5C4EB781110BB7C73A0432188FD5 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; + 82C057CF73EC05C9B670CD36A4FF9DC1 /* IQKeyboardManagerConstantsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManagerConstantsInternal.h; path = IQKeyboardManager/Constants/IQKeyboardManagerConstantsInternal.h; sourceTree = ""; }; + 831DABB79EABDA3FF9164AB3067B2154 /* PFRESTObjectBatchCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectBatchCommand.h; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.h; sourceTree = ""; }; + 836407DF9AE49E6F3CF05A57B2F3E0A1 /* PFCommandRunning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunning.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.m; sourceTree = ""; }; + 83C522A64AC5540AAD98319C36F3E135 /* PFRESTFileCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTFileCommand.h; path = Parse/Internal/Commands/PFRESTFileCommand.h; sourceTree = ""; }; + 848D623C2A83A163ACAD11BD0385C867 /* IQTitleBarButtonItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQTitleBarButtonItem.m; path = IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.m; sourceTree = ""; }; 849E5A8317B6998E948A27507E902A90 /* Pods-FoodbLog.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FoodbLog.debug.xcconfig"; sourceTree = ""; }; - 852A83DBE22D8BF63D1F7D4F20EB25EF /* PFWeakValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFWeakValue.h; path = Parse/Internal/PFWeakValue.h; sourceTree = ""; }; - 8536E7EDEE9BFAF06216BADC69B65005 /* PFActionButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActionButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m; sourceTree = ""; }; - 857F0BA6F21ED8BE24BBE09EC4796DD0 /* IQKeyboardManager.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManager.debug.xcconfig; sourceTree = ""; }; - 85DE173836F20C196CF9443BA77C76A2 /* PFPushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState.h; path = Parse/Internal/Push/State/PFPushState.h; sourceTree = ""; }; - 86017ED93042A0624A5FBBFEDCDEE976 /* PFQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState.h; path = Parse/Internal/Query/State/PFQueryState.h; sourceTree = ""; }; - 86363196FAD187D55BE15125F559D10B /* UIProgressView+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+FlatUI.h"; path = "Classes/ios/UIProgressView+FlatUI.h"; sourceTree = ""; }; - 866C32999AC6688E43E9E3A792BC2D34 /* NSArray+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+Chameleon.h"; path = "Pod/Classes/Objective-C/NSArray+Chameleon.h"; sourceTree = ""; }; - 86BD4117D04BA8012C142C487374653B /* PFActivityIndicatorTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActivityIndicatorTableViewCell.m; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m; sourceTree = ""; }; - 87D7C7463212CB7E7A2C6DDE9D75FFF5 /* PFObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectControlling.h; path = Parse/Internal/Object/Controller/PFObjectControlling.h; sourceTree = ""; }; - 8852424B3CD79FB522C7DBB741B3A915 /* AFNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-umbrella.h"; sourceTree = ""; }; - 886E9C8ED5B1B07A35329D7F11A187EC /* PFMultiProcessFileLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLock.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h; sourceTree = ""; }; - 88DBADE931198B937A907C0F4A844AB0 /* PFProduct.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProduct.m; path = Parse/PFProduct.m; sourceTree = ""; }; - 898E5A3B286DE966995F5236CA3096FB /* PFPropertyInfo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Private.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h; sourceTree = ""; }; - 8B33B936A9A7DB28766EEBFB4899F4ED /* FUIAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUIAlertView.m; path = Classes/ios/FUIAlertView.m; sourceTree = ""; }; - 8B4598F68BAD6898D603B376A1FB1A8B /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; - 8B4DD551A4377B715FBEA24BD68F23F7 /* PFGeoPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFGeoPoint.m; path = Parse/PFGeoPoint.m; sourceTree = ""; }; - 8B7DC16C982ED9197D1D5205693D4D1E /* PFInstallationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationConstants.h; path = Parse/Internal/Installation/Constants/PFInstallationConstants.h; sourceTree = ""; }; - 8B8FAEB0939BC673396EF39DB43C5723 /* FlatUIKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FlatUIKit.release.xcconfig; sourceTree = ""; }; - 8BC6A55FA3CDF0EF58B5D4BDD6F6CAD8 /* UIFont+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIFont+FlatUI.m"; path = "Classes/ios/UIFont+FlatUI.m"; sourceTree = ""; }; - 8C9643764C40666FA3BDA5483199A807 /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; - 8C9859B01D21C19A7695D3E4BC335D14 /* PFUIAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUIAlertView.m; path = ParseUI/Classes/Internal/Extensions/PFUIAlertView.m; sourceTree = ""; }; - 8D00AA339432926A0C0AD20217302F65 /* PFAnalyticsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsController.h; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.h; sourceTree = ""; }; - 8D0C6A79B925E5B8DDC09CC0D8F44006 /* PFMultiProcessFileLock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLock.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m; sourceTree = ""; }; - 8D7825E186E2129768F652FA322E5FD2 /* PFQueryState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState_Private.h; path = Parse/Internal/Query/State/PFQueryState_Private.h; sourceTree = ""; }; - 8DF6084BF27306D73EE3F7156B4A3EFD /* PFQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryController.m; path = Parse/Internal/Query/Controller/PFQueryController.m; sourceTree = ""; }; - 8E279FCCEB7C1AEB25BCE46F878D745B /* UNIUrlConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIUrlConnection.h; path = Unirest/UNIUrlConnection.h; sourceTree = ""; }; - 8E34CEB998FE5525402334C2BB80D5A3 /* PFURLSessionCommandRunner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionCommandRunner.m; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m; sourceTree = ""; }; - 8E9D2D880354EC317D86A4349D035200 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; - 8EFB510E35A2E19894B0116FF11AF2F8 /* IQUIView+IQKeyboardToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIView+IQKeyboardToolbar.h"; path = "IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h"; sourceTree = ""; }; - 8F44CE6BEBD6122876882DCE9A46EBF2 /* PFDateFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDateFormatter.m; path = Parse/Internal/PFDateFormatter.m; sourceTree = ""; }; - 8F452750888B246772EB8A6877EBAF3F /* IQUITextFieldView+Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUITextFieldView+Additions.h"; path = "IQKeyBoardManager/Categories/IQUITextFieldView+Additions.h"; sourceTree = ""; }; - 8F4B1D49F33B5E34B800900D19CA98E3 /* SDWebImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.release.xcconfig; sourceTree = ""; }; + 84E61178295191BF6E6785AA01F3B06A /* PFURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h; sourceTree = ""; }; + 84F48C253BD5BE7290BF97DBB488394B /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; + 85342B421353B094FC8A7B1ABA28B021 /* PFRelationState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState_Private.h; path = Parse/Internal/Relation/State/PFRelationState_Private.h; sourceTree = ""; }; + 857186AEF8B59B6AE45A44A595FC38D1 /* PFURLSessionCommandRunner_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h; sourceTree = ""; }; + 8727E4ED80EA777438361FDA993B9BE4 /* PFObjectEstimatedData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectEstimatedData.m; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m; sourceTree = ""; }; + 88D5A072EC90FD6AC9092E73B90F9254 /* PFFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileManager.m; path = Parse/Internal/PFFileManager.m; sourceTree = ""; }; + 8924CD04B6BFE4AAC5C88AEA98869B06 /* PFHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHash.m; path = Parse/Internal/PFHash.m; sourceTree = ""; }; + 8967DDB36504C317B821DF34152AC486 /* PFURLSessionJSONDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionJSONDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m; sourceTree = ""; }; + 89DE757655305B9DAB2E3EA0D59AE60D /* UIButton+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+Chameleon.m"; path = "Pod/Classes/Objective-C/UIButton+Chameleon.m"; sourceTree = ""; }; + 8A5E8C51D8EFCE54951AFBA268A07EC5 /* PFPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPin.m; path = Parse/Internal/LocalDataStore/Pin/PFPin.m; sourceTree = ""; }; + 8A94C4B6698BAB7FAD0158E1D025AFD0 /* UIImage+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIImage+ChameleonPrivate.h"; sourceTree = ""; }; + 8B577949D6BEA39F003EEBD1157A4423 /* IQTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQTextView.h; path = IQKeyboardManager/IQTextView/IQTextView.h; sourceTree = ""; }; + 8B7D47CF2CED52BB8C4DBF504E0FD9A5 /* PFRESTCommand_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand_Private.h; path = Parse/Internal/Commands/PFRESTCommand_Private.h; sourceTree = ""; }; + 8BAB143961E7B37C103224026BB1A6A4 /* PFSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession.h; path = Parse/PFSession.h; sourceTree = ""; }; + 8BBDBA1C6D3C481A980BC35C14B1BAEF /* UNIHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPRequest.h; path = Unirest/UNIHTTPRequest.h; sourceTree = ""; }; + 8BC693C636CC87A6217C7C5DBD4D7A4A /* PFObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController.h; path = Parse/Internal/Object/Controller/PFObjectController.h; sourceTree = ""; }; + 8C177476B0E75BABF4B4FCB549A41A30 /* IQUIScrollView+Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIScrollView+Additions.m"; path = "IQKeyboardManager/Categories/IQUIScrollView+Additions.m"; sourceTree = ""; }; + 8C31022C27A2C8C1FBE857406C9AF09F /* PFAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAssert.h; path = Parse/Internal/PFAssert.h; sourceTree = ""; }; + 8C8AC497AFA3C26AABE01AA1D7E3F66D /* PFCurrentConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentConfigController.m; path = Parse/Internal/Config/Controller/PFCurrentConfigController.m; sourceTree = ""; }; + 8E7AE561E188BF127BA12657694BA340 /* UNIBodyRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIBodyRequest.h; path = Unirest/HttpRequest/UNIBodyRequest.h; sourceTree = ""; }; 8F7F9F74CC5A4F15ADE6F15432160734 /* Pods-FoodbLog-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-FoodbLog-acknowledgements.markdown"; sourceTree = ""; }; - 8FB95CF7F41F64BD82E62CED5B594292 /* PFAnonymousUtils_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils_Private.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h; sourceTree = ""; }; - 8FBADA788C844BC035F839991DA33BC7 /* PFPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPin.h; path = Parse/Internal/LocalDataStore/Pin/PFPin.h; sourceTree = ""; }; - 8FD253470226BBD7EAC24A931D19F7D9 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; - 8FFE49908079C5362E67099F8C05E1B8 /* PFLocalization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocalization.h; path = ParseUI/Classes/Internal/PFLocalization.h; sourceTree = ""; }; - 91C373870E6D645F6FF004CCD43B21E6 /* UNIRest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIRest.m; path = Unirest/UNIRest.m; sourceTree = ""; }; - 91F6CE6961CE84A5E762D863216E0997 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; - 927DBA16CBE9B29D79E1EE774EE19F59 /* ChameleonFramework.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ChameleonFramework.modulemap; sourceTree = ""; }; + 8F975DFB0B29996EF17B1A0A3E07BC65 /* PFRESTObjectCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectCommand.h; path = Parse/Internal/Commands/PFRESTObjectCommand.h; sourceTree = ""; }; + 9005E4E32F1EF9E3F28CB2D81637B524 /* PFDismissButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDismissButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m; sourceTree = ""; }; + 9051E6207606F6E900A4A30F93EE6FE1 /* PFThreadsafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFThreadsafety.h; path = Parse/Internal/ThreadSafety/PFThreadsafety.h; sourceTree = ""; }; + 90AFF1F5771F5C74F72298841B0D450E /* UIToolbar+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIToolbar+FlatUI.m"; path = "Classes/ios/UIToolbar+FlatUI.m"; sourceTree = ""; }; + 90B7F377A6C76455F713F9A2956AE3E4 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; + 9101FCF180E53E25AAE24FD11B0AB42B /* PFTextField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTextField.h; path = ParseUI/Classes/Views/PFTextField.h; sourceTree = ""; }; + 91DA321208E1EF09682615B34F8542E4 /* PFCommandURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandURLRequestConstructor.h; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h; sourceTree = ""; }; + 920C6629AB79F0D4396D3F62D12B3527 /* PFEventuallyPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyPin.m; path = Parse/Internal/PFEventuallyPin.m; sourceTree = ""; }; + 9279D9795C913BECFB930DCA0A4CBF9B /* PFMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMacros.h; path = Parse/Internal/PFMacros.h; sourceTree = ""; }; 9295942D69DE1369ECE1A9BCC87CA017 /* Pods-FoodbLog-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FoodbLog-Info.plist"; sourceTree = ""; }; - 92C68D5FDCA38C263C5C9DA67BC52DAB /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionFileDownloadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; - 92D60EA1BE94F7CC68B03B328E9DA910 /* PFUserFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserFileCodingLogic.m; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m; sourceTree = ""; }; - 937BA62AFDBF0A1259E42BCF5763391E /* Unirest-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Unirest-umbrella.h"; sourceTree = ""; }; - 94D6AC2286C9B645008316B81D8156C7 /* UITableViewCell+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableViewCell+FlatUI.h"; path = "Classes/ios/UITableViewCell+FlatUI.h"; sourceTree = ""; }; - 9661CC0A310A5FFEF6DAC9066D0D906F /* IQUIView+Hierarchy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIView+Hierarchy.h"; path = "IQKeyBoardManager/Categories/IQUIView+Hierarchy.h"; sourceTree = ""; }; - 96B0AB09E758FB641EEAB8FB2C91C6C9 /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperation.h; path = AFNetworking/AFHTTPRequestOperation.h; sourceTree = ""; }; - 96BBE1D7671D60064CCF9BFFA76E8E28 /* PFAnalyticsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsController.m; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.m; sourceTree = ""; }; - 96E2E224B40477F06DF3B453832889DE /* PFRESTAnalyticsCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTAnalyticsCommand.m; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.m; sourceTree = ""; }; - 96FC24F36F6A0E253A147A902D4D87B3 /* PFWeakValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFWeakValue.m; path = Parse/Internal/PFWeakValue.m; sourceTree = ""; }; - 978F1D1FC858DCFF654EA8F44B32F5DF /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperationManager.m; path = AFNetworking/AFHTTPRequestOperationManager.m; sourceTree = ""; }; - 97FB31513AE2FE8E761A9C0EEB5EC31F /* PFCommandCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache.h; path = Parse/Internal/PFCommandCache.h; sourceTree = ""; }; + 92AA3B35831850C75A93CFD081927516 /* PFCachedQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCachedQueryController.m; path = Parse/Internal/Query/Controller/PFCachedQueryController.m; sourceTree = ""; }; + 93DC759AA838D19EFDB5EE39A0FD3B8A /* PFQueryTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryTableViewController.h; path = ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h; sourceTree = ""; }; + 947FF1F683D3B81772BB3703B214E58F /* PFPushPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushPrivate.h; path = Parse/Internal/Push/PFPushPrivate.h; sourceTree = ""; }; + 9493E918DE059197B488AEB66DA6E6DF /* PFURLSessionDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m; sourceTree = ""; }; + 94DF9C4055D9F72566E7A9544165FE9D /* PFDateFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDateFormatter.h; path = Parse/Internal/PFDateFormatter.h; sourceTree = ""; }; + 95314205CD5BD2133AB7512597330119 /* PFRESTCloudCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCloudCommand.m; path = Parse/Internal/Commands/PFRESTCloudCommand.m; sourceTree = ""; }; + 9569F3B77A7977F33A12712389BEACFC /* IQUIScrollView+Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIScrollView+Additions.h"; path = "IQKeyboardManager/Categories/IQUIScrollView+Additions.h"; sourceTree = ""; }; + 960742FAC6FDF1CD37B19A3DA2797830 /* PFRESTCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCommand.m; path = Parse/Internal/Commands/PFRESTCommand.m; sourceTree = ""; }; + 96430B20989715A8573563A41C2C9B2B /* IQUITextFieldView+Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUITextFieldView+Additions.h"; path = "IQKeyboardManager/Categories/IQUITextFieldView+Additions.h"; sourceTree = ""; }; + 968C1C61689C3F23A5FC509269AE1B6C /* PFProduct.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProduct.m; path = Parse/PFProduct.m; sourceTree = ""; }; + 96F352501E39A78917919E6827D9662D /* PFCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloud.m; path = Parse/PFCloud.m; sourceTree = ""; }; + 9731541F793BCF26FDF4582BC3D06C4B /* PFPurchaseTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseTableViewCell.h; path = ParseUI/Classes/Cells/PFPurchaseTableViewCell.h; sourceTree = ""; }; + 97B2351AC859811A6FD2A910BB95E71D /* UIColor+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIColor+ChameleonPrivate.m"; sourceTree = ""; }; + 97EE31EC4749C71A2BAD9783137A7666 /* IQToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQToolbar.m; path = IQKeyboardManager/IQToolbar/IQToolbar.m; sourceTree = ""; }; + 982A9041ADE39E009726C8B46D8C4515 /* ParseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseManager.h; path = Parse/Internal/ParseManager.h; sourceTree = ""; }; 98527D7196957AAB07B79E2E2AFDE23E /* IQKeyboardManager */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardManager; path = IQKeyboardManager.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 989D519E262D75CFB924E7B8A1C4ADDF /* IQUIView+Hierarchy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIView+Hierarchy.m"; path = "IQKeyBoardManager/Categories/IQUIView+Hierarchy.m"; sourceTree = ""; }; - 98B7E2A8BF0A20332398DEB41B1BB68E /* PFActivityIndicatorTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActivityIndicatorTableViewCell.h; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h; sourceTree = ""; }; - 98CE93C5090192A08CBA7E7C5BF3D0EC /* PFInstallationIdentifierStore_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore_Private.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h; sourceTree = ""; }; - 98EC7EC190408FB4A48D91C9C6E633EC /* PFProduct+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFProduct+Private.h"; path = "Parse/Internal/Product/PFProduct+Private.h"; sourceTree = ""; }; - 98FC30222B791FD6C8D1E6F1BC6F7687 /* PFKeyValueCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache.h; sourceTree = ""; }; - 991D633806D370E5A9CCBCE8F7E6CF93 /* PFFileStagingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileStagingController.m; path = Parse/Internal/File/Controller/PFFileStagingController.m; sourceTree = ""; }; - 998337F9EFB691B95AC04D0DEDFA76DF /* PFCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloud.h; path = Parse/PFCloud.h; sourceTree = ""; }; - 99FBB19FAFA339DAE8A2130BCBCD5A90 /* PFCurrentObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentObjectControlling.h; path = Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h; sourceTree = ""; }; - 9A75A05D48E060BEBF89A6B65009C577 /* ParseModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseModule.m; path = Parse/Internal/ParseModule.m; sourceTree = ""; }; - 9B994E9D8D38725EB2DBDFA907134A7C /* Parse.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.release.xcconfig; sourceTree = ""; }; - 9BC33545EC4D27DD8FBAA13A736EB786 /* UIBarButtonItem+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIBarButtonItem+FlatUI.h"; path = "Classes/ios/UIBarButtonItem+FlatUI.h"; sourceTree = ""; }; - 9CAC2D7C9A799C8A55D219041965A2B1 /* PFObjectEstimatedData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectEstimatedData.m; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m; sourceTree = ""; }; - 9CC6108EC34A6AB9D07BF82118825BE6 /* PFOfflineObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineObjectController.h; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h; sourceTree = ""; }; - 9CC658527AA6BE88A41923B795916FE0 /* PFPushManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushManager.m; path = Parse/Internal/Push/Manager/PFPushManager.m; sourceTree = ""; }; - 9CF52AD6C105BF59D3D2E0B1453E545F /* Parse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Parse.m; path = Parse/Parse.m; sourceTree = ""; }; - 9CF59640D2C379A8552A7FE126379C1A /* PFLogInViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogInViewController.m; path = ParseUI/Classes/LogInViewController/PFLogInViewController.m; sourceTree = ""; }; + 989F197281037053568D90FE2E45034F /* PFUserAuthenticationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationController.h; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h; sourceTree = ""; }; + 98F87F122A15B9E739F85D722AA24C2B /* Unirest-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Unirest-prefix.pch"; sourceTree = ""; }; + 992F6F2CF6AA0579EA8E24CB235D73BA /* UIAlertView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertView+AFNetworking.h"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.h"; sourceTree = ""; }; + 9A43EB961420A5AF4805BFDFA34DCDB3 /* ParseUI-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ParseUI-umbrella.h"; sourceTree = ""; }; + 9AC2743E8EC297C24BDC808D253215BC /* SDWebImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.release.xcconfig; sourceTree = ""; }; + 9AC40AAE4F66D4423B9D67D418FE9E45 /* PFRESTPushCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTPushCommand.h; path = Parse/Internal/Commands/PFRESTPushCommand.h; sourceTree = ""; }; + 9B208B6F44DC353307586ECDE943C9F4 /* PFURLSessionUploadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionUploadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h; sourceTree = ""; }; + 9B64FDF9AB420DD2D5082AAFDADB7FDA /* PFAnalyticsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsController.m; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.m; sourceTree = ""; }; + 9B6C075902DFE55B31A76D31208A4280 /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; + 9B84C7E4CD2F561F248C7DAD46DAB372 /* PFPushChannelsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushChannelsController.m; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.m; sourceTree = ""; }; + 9B8F1BF1B5F349B7005451DA741B0047 /* Parse.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Parse.modulemap; sourceTree = ""; }; + 9BE0320666C40F6DC06AF96C24A87FFC /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; + 9C159A4F2438A5E10FDA73505BEFA94D /* IQPreviousNextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQPreviousNextView.m; path = IQKeyboardManager/IQToolbar/IQPreviousNextView.m; sourceTree = ""; }; + 9CF35D4AC32619FDEC1F5F4FC52084A9 /* PFMutableRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableRelationState.m; path = Parse/Internal/Relation/State/PFMutableRelationState.m; sourceTree = ""; }; + 9D5F1CE5891DAE96AE6580471A3F81CD /* PFWeakValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFWeakValue.h; path = Parse/Internal/PFWeakValue.h; sourceTree = ""; }; + 9D79F1F6C34E951AA6AE27F54B6C7662 /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; + 9D7C94F9DF9D3C658BC5608AEB9B49B1 /* ParseUIConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseUIConstants.h; path = ParseUI/Other/ParseUIConstants.h; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9DA741B4EC0DCED29063435717645FC3 /* FlatUIKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FlatUIKit.debug.xcconfig; sourceTree = ""; }; - 9EB80548C95ADD762223EC007944AF45 /* PFSignUpViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSignUpViewController.m; path = ParseUI/Classes/SignUpViewController/PFSignUpViewController.m; sourceTree = ""; }; - 9EE7C503197A62ADD66AD452FCFEFAB7 /* PFURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSession.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m; sourceTree = ""; }; - 9F1D3010E400E70C042940F75036BF3D /* PFSessionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionController.m; path = Parse/Internal/Session/Controller/PFSessionController.m; sourceTree = ""; }; - 9F539BDDEF739BDE923DD4C1FC4B2894 /* PFNetworkCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkCommand.h; path = Parse/Internal/PFNetworkCommand.h; sourceTree = ""; }; + 9E818A121570D3A0F0DA80F2825AFB6D /* PFMultiProcessFileLockController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLockController.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m; sourceTree = ""; }; + 9EE458611A33294A7976CAE3AC79A962 /* PFFileStagingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileStagingController.m; path = Parse/Internal/File/Controller/PFFileStagingController.m; sourceTree = ""; }; 9F62BD8D055CECF254F18875CD46DFA2 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; - 9F8AB594F361E76ACA20213E0F3D3860 /* UNIHTTPResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPResponse.h; path = Unirest/HttpResponse/UNIHTTPResponse.h; sourceTree = ""; }; - 9F97B8CE87B16ACD8D4260933E48F819 /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; - A042B54870F2691CE1141CC51249B831 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; - A0C767F598567EAD6A78E56703F0BF49 /* PFMutablePushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutablePushState.m; path = Parse/Internal/Push/State/PFMutablePushState.m; sourceTree = ""; }; - A1C3EA21F91503CF85866B1DEBB42208 /* PFRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelationState.m; path = Parse/Internal/Relation/State/PFRelationState.m; sourceTree = ""; }; - A24E7517836476C9939D680AAF9AAF11 /* PFAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAssert.h; path = Parse/Internal/PFAssert.h; sourceTree = ""; }; - A283BA24B8BC2F745E053B68490B43ED /* UNIHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPRequest.h; path = Unirest/UNIHTTPRequest.h; sourceTree = ""; }; - A28B62FB34B8E41CEE484AD8817B831C /* Unirest-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Unirest-dummy.m"; sourceTree = ""; }; - A29FD65C70682683A3D7D37BD9F78E53 /* PFCommandRunningConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunningConstants.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h; sourceTree = ""; }; - A2C468F7EBC72EDE2DDF8B4ADEF3EFF1 /* PFRelationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationPrivate.h; path = Parse/Internal/Relation/PFRelationPrivate.h; sourceTree = ""; }; - A316237767BF661F1B6AD8F4B030AF7A /* PFURLSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h; sourceTree = ""; }; - A356B9DFCE0F6FA18DF48B6098125F04 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; - A408C24FBC30C794341C29AD9ECA2CD1 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; - A40CB3A94F942DB16FCA1145446DFA1E /* PFObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState.h; path = Parse/Internal/Object/State/PFObjectState.h; sourceTree = ""; }; + 9FAE01CF4B380A313FEBB6E495A58C24 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; + A038B70DE9AC30C4BE5735BDCF379F95 /* IQKeyboardManagerConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManagerConstants.h; path = IQKeyboardManager/Constants/IQKeyboardManagerConstants.h; sourceTree = ""; }; + A04E1674F330FF3E8705ACDA5294CAF0 /* ParseUI.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ParseUI.release.xcconfig; sourceTree = ""; }; + A0AE3560BE9FC94C3B71D94028EB8928 /* PFResources.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFResources.m; path = ParseUI/Generated/PFResources.m; sourceTree = ""; }; + A0B75CA0A1B123DC95D30ED0D3F93513 /* PFObjectFilePersistenceController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFilePersistenceController.h; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h; sourceTree = ""; }; + A1046A49BB31CE2EDA5FADB31A184D95 /* PFInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInternalUtils.h; path = Parse/Internal/PFInternalUtils.h; sourceTree = ""; }; + A1464A1B89739CFFDC2231D2B2BFEF97 /* UINavigationBar+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationBar+FlatUI.h"; path = "Classes/ios/UINavigationBar+FlatUI.h"; sourceTree = ""; }; + A25890C6749766D2FA0F6910C5AFB555 /* PFObjectPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectPrivate.h; path = Parse/Internal/Object/PFObjectPrivate.h; sourceTree = ""; }; + A37B0AEE4085E5EAF1D675B479E83F07 /* IQKeyboardReturnKeyHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardReturnKeyHandler.h; path = IQKeyboardManager/IQKeyboardReturnKeyHandler.h; sourceTree = ""; }; + A3F525305019C6D6103B6394A0D2FFAB /* PFColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFColor.m; path = ParseUI/Classes/Internal/Extensions/PFColor.m; sourceTree = ""; }; A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AFNetworking; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A4FDC68F75815A014551F0B6B572D2AF /* IQKeyboardManager.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = IQKeyboardManager.bundle; path = IQKeyBoardManager/Resources/IQKeyboardManager.bundle; sourceTree = ""; }; - A50114757684801C1DE99C04001D04C4 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; - A505892A83F06969DC7D47BC6FC72B07 /* ParseUI-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ParseUI-umbrella.h"; sourceTree = ""; }; - A515ED69EEDB97450E752EA285213DEA /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; - A586A584997D8AAB3C26BC7EA0ABE46C /* PFRESTObjectCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectCommand.m; path = Parse/Internal/Commands/PFRESTObjectCommand.m; sourceTree = ""; }; + A59BC2D719A6FE36F8A22D143D3E4E76 /* PFCloudCodeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloudCodeController.h; path = Parse/Internal/CloudCode/PFCloudCodeController.h; sourceTree = ""; }; + A5AB58CE9D615EDAA234854092081DEA /* IQUIView+IQKeyboardToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIView+IQKeyboardToolbar.m"; path = "IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m"; sourceTree = ""; }; + A5AD6E00DDF3F7D4C05FC0098C099B2E /* ParseUI.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ParseUI.modulemap; sourceTree = ""; }; + A5FAEE78A4702D335F3353DE5B22486B /* PFCommandRunningConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunningConstants.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h; sourceTree = ""; }; + A616ECB7E02535F4B9005E0B7B570609 /* UNIJsonNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIJsonNode.h; path = Unirest/HttpResponse/UNIJsonNode.h; sourceTree = ""; }; A62DEB07190D9A48B19931ABEF8231C7 /* Pods-FoodbLog.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-FoodbLog.modulemap"; sourceTree = ""; }; - A66795F738318920B0D6E941B13871CF /* UIViewController+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+Chameleon.h"; path = "Pod/Classes/Objective-C/UIViewController+Chameleon.h"; sourceTree = ""; }; - A6A36422F3C90967B88FE242E00E11EB /* PFAnonymousUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousUtils.m; path = Parse/PFAnonymousUtils.m; sourceTree = ""; }; - A6AFE5A0BB8F671D756405659A7280C4 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; - A6D188FC37D6AAAB2E2FBE6F57F7EE82 /* ParseUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseUI.h; path = ParseUI/Other/ParseUI.h; sourceTree = ""; }; - A6E6334AF3D4ABDE619C3F9F1575FA7A /* PFRESTCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCommand.m; path = Parse/Internal/Commands/PFRESTCommand.m; sourceTree = ""; }; - A70E011791587979C22032E1FB4F06F9 /* PFFile_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile_Private.h; path = Parse/Internal/File/PFFile_Private.h; sourceTree = ""; }; - A740D31E8046CDB8D8368E00E9329E79 /* ChameleonConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ChameleonConstants.m; path = "Pod/Classes/Objective-C/ChameleonConstants.m"; sourceTree = ""; }; - A745A3D33907AFBD7D9B85EC9DC35D21 /* PFUserAuthenticationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationController.h; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h; sourceTree = ""; }; - A776F03C60540FC847DC8FD81CFFD399 /* BFTask+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Private.m"; path = "Parse/Internal/BFTask+Private.m"; sourceTree = ""; }; - A78827F2D79D32394CB2A7F8AC054D28 /* PFCoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreManager.h; path = Parse/Internal/PFCoreManager.h; sourceTree = ""; }; - A7C121EE4B1DE511B784FCD1F75C3CAF /* SDWebImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.debug.xcconfig; sourceTree = ""; }; - A869D04D94D174D538E8EEC8AD639A3F /* PFPush.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPush.h; path = Parse/PFPush.h; sourceTree = ""; }; - A89D66CA82F4BB4ED27F23A368117AD8 /* UNIHTTPBinaryResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPBinaryResponse.m; path = Unirest/HttpResponse/UNIHTTPBinaryResponse.m; sourceTree = ""; }; - A9681B204C96458D2D417C45571AB098 /* FlatUIKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FlatUIKit-Info.plist"; sourceTree = ""; }; - A97F7D38BC76709C3A8940B642F9736F /* UIPopoverController+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIPopoverController+FlatUI.m"; path = "Classes/ios/UIPopoverController+FlatUI.m"; sourceTree = ""; }; - A9ACE875C5C88F2FC048BA2052E6739F /* SDWebImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SDWebImage-Info.plist"; sourceTree = ""; }; - AA2E139C45664A8F35F7CC0FC4652D64 /* PFAsyncTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAsyncTaskQueue.h; path = Parse/Internal/PFAsyncTaskQueue.h; sourceTree = ""; }; - ABFBC5AE1B18C02508CD09769DD4415A /* PFSQLiteDatabaseResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseResult.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h; sourceTree = ""; }; - AC430D908CF42C14EF7AAFD9B91F4151 /* PFObjectFilePersistenceController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFilePersistenceController.m; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m; sourceTree = ""; }; - AC8E66BCE1B2B67DA2045E7EB6549471 /* PFPaymentTransactionObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h; sourceTree = ""; }; - ACB7449F5C2B0CE0404EEF1294771367 /* PFURLSessionCommandRunner_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h; sourceTree = ""; }; - ACF7C931823A68DDBB4BD5C0A4C40927 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; - AD75432B2BF6D1FC707CFCCD3527D979 /* UNIBodyRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIBodyRequest.h; path = Unirest/HttpRequest/UNIBodyRequest.h; sourceTree = ""; }; - ADCB853B7D560FC831BF87685AD57A9B /* FUIAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUIAlertView.h; path = Classes/ios/FUIAlertView.h; sourceTree = ""; }; - AF48650F07B7D424D0C0F148D2C63F3B /* Parse.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Parse.modulemap; sourceTree = ""; }; - AF6B37C98266FCE557B14E51A8B13011 /* PFQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQuery.h; path = Parse/PFQuery.h; sourceTree = ""; }; - AFA7104945F1D9E5D257AF888DF068F6 /* PFCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCollectionViewCell.h; path = ParseUI/Classes/Cells/PFCollectionViewCell.h; sourceTree = ""; }; - AFA966371146146D7F2018130EFE0F66 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; - B088733242F6563E27BF3689B4BCA38E /* PFDefaultACLController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDefaultACLController.h; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h; sourceTree = ""; }; - B0994984629F495251BA8A149F317827 /* PFAnonymousAuthenticationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousAuthenticationProvider.m; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m; sourceTree = ""; }; + A6710EB1470E4F0F7701E1C154191C58 /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; + A672C404782F472C63BC1B4FF31B6004 /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; + A71FEF7E5647E074B2A574E5FE4CDF3E /* PFURLSessionUploadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionUploadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m; sourceTree = ""; }; + A7377E6FF89E05208972680783752B9A /* PFObjectState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState_Private.h; path = Parse/Internal/Object/State/PFObjectState_Private.h; sourceTree = ""; }; + A747F1408C49254D6028E4F8891C4084 /* ParseModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseModule.h; path = Parse/Internal/ParseModule.h; sourceTree = ""; }; + A78B6320A995FD2334C69BD6DD530AAB /* PFPropertyInfo_Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Runtime.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h; sourceTree = ""; }; + A7B79D3518D2C9F3E903CF4F1BF00D13 /* PFAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAlertView.h; path = Parse/Internal/PFAlertView.h; sourceTree = ""; }; + A7B9CAD0F05D1A202F8BFBCEC0C7F240 /* PFPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPin.h; path = Parse/Internal/LocalDataStore/Pin/PFPin.h; sourceTree = ""; }; + A7FF321DDDFD4C9D30F6C27AE6F15255 /* PFInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInternalUtils.m; path = Parse/Internal/PFInternalUtils.m; sourceTree = ""; }; + A816AB5A1E39050DB3C8267CC75B6308 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; + A86E6037DE1255155FC0C886F04E3B93 /* PFCommandResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandResult.h; path = Parse/Internal/PFCommandResult.h; sourceTree = ""; }; + A89A6272C760E24D4FCB53B305AD1CCB /* PFTextButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTextButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m; sourceTree = ""; }; + A97E94420846C84B8140C33CF337FE2C /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; + AA873AB0DE8D007CA8F0042C3B6675E3 /* PFLogInView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogInView.m; path = ParseUI/Classes/LogInViewController/PFLogInView.m; sourceTree = ""; }; + AAC5F15FE7360B5B3103BBC0CDF77057 /* PFDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDevice.h; path = Parse/Internal/PFDevice.h; sourceTree = ""; }; + AB6237226D0A898842335421FF28BB4E /* PFObjectLocalIdStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectLocalIdStore.h; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h; sourceTree = ""; }; + AC4DC6A2437F65F8A83CB36C3B66723C /* PFErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFErrorUtilities.m; path = Parse/Internal/PFErrorUtilities.m; sourceTree = ""; }; + AC7DB93B4EAA0F9CF5C79181A315DD5D /* PFSessionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionUtilities.h; path = Parse/Internal/Session/Utilities/PFSessionUtilities.h; sourceTree = ""; }; + AC9A5F70E2DE419835876FAA80A1B09C /* PFInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationController.h; path = Parse/Internal/Installation/Controller/PFInstallationController.h; sourceTree = ""; }; + AD0FE61335BED497567057BA19502825 /* PFMutableQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableQueryState.m; path = Parse/Internal/Query/State/PFMutableQueryState.m; sourceTree = ""; }; + AD86AC16AA572CE40EAE3336DB4D3602 /* UIStepper+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIStepper+FlatUI.m"; path = "Classes/ios/UIStepper+FlatUI.m"; sourceTree = ""; }; + AE235869020CAD616253B91718814EB4 /* PFFieldOperationDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperationDecoder.h; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.h; sourceTree = ""; }; + AE6967C88C45F046AD5C10E7ACE7F9DE /* PFUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserState.m; path = Parse/Internal/User/State/PFUserState.m; sourceTree = ""; }; + AF27CCB4FCEF9871BEE69541BB6C7107 /* PFFile_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile_Private.h; path = Parse/Internal/File/PFFile_Private.h; sourceTree = ""; }; + B03124BAD3BD5D9AAEFF7FC003DC0B1C /* AFNetworking.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.debug.xcconfig; sourceTree = ""; }; + B0315B64F3C557F7C3897F4E68B228A5 /* PFLoadingView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLoadingView.m; path = ParseUI/Classes/Internal/Views/PFLoadingView.m; sourceTree = ""; }; + B09F7439A6613B5442F51FD2DEE7DFB7 /* PFDefaultACLController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDefaultACLController.m; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m; sourceTree = ""; }; B0B214D775196BA7CA8E17E53048A493 /* SDWebImage */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B13866FCDF031E55F0DD3D8829D073F8 /* PFQueryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryPrivate.h; path = Parse/Internal/Query/PFQueryPrivate.h; sourceTree = ""; }; - B1A39241452F7C9E16CF2D824F7364DC /* PFRelation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelation.h; path = Parse/PFRelation.h; sourceTree = ""; }; - B1DAEDA8CCCACC84601EECDB3E6D1FF6 /* PFLogInView_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInView_Private.h; path = ParseUI/Classes/LogInViewController/PFLogInView_Private.h; sourceTree = ""; }; - B23FD0394F4B69148299C896E97C2A90 /* PFObjectConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectConstants.m; path = Parse/Internal/Object/Constants/PFObjectConstants.m; sourceTree = ""; }; - B252B37D2D546870C8A826AB65BC2B95 /* Parse-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-prefix.pch"; sourceTree = ""; }; - B2B797BD23176FC43BD0D3B5634BE059 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; - B2D681EF9EF4F360FEE47AF2D4784401 /* ParseUI-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ParseUI-Info.plist"; sourceTree = ""; }; - B2E4026B95A28F85E28276E70D07582F /* PFRESTQueryCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTQueryCommand.m; path = Parse/Internal/Commands/PFRESTQueryCommand.m; sourceTree = ""; }; - B32250A0ACFF1FD6AFA14D88511BAE8F /* PFSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h; sourceTree = ""; }; - B37DB5C5090B2B2D7BED7A2071CCDA07 /* PFPrimaryButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPrimaryButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m; sourceTree = ""; }; - B3DEB5E877C555C69169163E7AE3DCD1 /* UNIBaseRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIBaseRequest.h; path = Unirest/HttpRequest/UNIBaseRequest.h; sourceTree = ""; }; - B4B9DA35E6B073D79C38529A56AD6105 /* Lato-Regular.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "Lato-Regular.ttf"; path = "Resources/Lato-Regular.ttf"; sourceTree = ""; }; - B4E5AC1FC469AA6601F3D23C8271F2CA /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLConnectionOperation.m; path = AFNetworking/AFURLConnectionOperation.m; sourceTree = ""; }; - B517C85F24F47CE2FEA872AFC6676C80 /* AFNetworking-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "AFNetworking-Info.plist"; sourceTree = ""; }; - B5B9189D6AB1779845E876D0D0424221 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; - B5F387A157BDF133EF4E326D269BDCA9 /* PFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkActivityIndicatorManager.h; path = Parse/PFNetworkActivityIndicatorManager.h; sourceTree = ""; }; - B658BAA68F8498FD1647DDC21EFA343D /* PFObjectBatchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectBatchController.h; path = Parse/Internal/Object/BatchController/PFObjectBatchController.h; sourceTree = ""; }; - B6DC6273BB88E3B2428C06836FF537E5 /* Parse_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse_Private.h; path = Parse/Internal/Parse_Private.h; sourceTree = ""; }; - B719C90D607E7C93D3CABC47049790CB /* PFApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFApplication.h; path = Parse/Internal/PFApplication.h; sourceTree = ""; }; - B72FD366845653BD01ECF1385B7EA338 /* IQBarButtonItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQBarButtonItem.m; path = IQKeyBoardManager/IQToolbar/IQBarButtonItem.m; sourceTree = ""; }; - B76589E19EEC53370B66781B36DA63ED /* PFImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImage.h; path = ParseUI/Classes/Internal/Extensions/PFImage.h; sourceTree = ""; }; - B7D8C5668CD3DD0CB72C11E3C568BEAF /* PFBase64Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBase64Encoder.h; path = Parse/Internal/PFBase64Encoder.h; sourceTree = ""; }; - B8F7790A71F9CD28C39B9D26DA94ED71 /* PFSignUpView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSignUpView.m; path = ParseUI/Classes/SignUpViewController/PFSignUpView.m; sourceTree = ""; }; - B93D67F2A685201833890E4ADFBF1CAE /* PFObjectSubclassingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassingController.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h; sourceTree = ""; }; - B9BC37C36EDC5E7749DCC7CEC01B8E91 /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperation.m; path = AFNetworking/AFHTTPRequestOperation.m; sourceTree = ""; }; - B9DD11F8C4BB31A6C209F4164F43F64F /* PFEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEncoder.m; path = Parse/Internal/PFEncoder.m; sourceTree = ""; }; - BA5631014AC595496E91221859D20693 /* IQTitleBarButtonItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQTitleBarButtonItem.h; path = IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.h; sourceTree = ""; }; - BAD731CA6EDC2C97EDBAE9DEF5BEE3A3 /* PFObjectFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCodingLogic.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m; sourceTree = ""; }; - BB33008CB3C2594164293FDA78B53616 /* IQTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQTextView.h; path = IQKeyBoardManager/IQTextView/IQTextView.h; sourceTree = ""; }; - BBEB6900A59681CD6E50CF6B6C2D6F9A /* UIStepper+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIStepper+FlatUI.h"; path = "Classes/ios/UIStepper+FlatUI.h"; sourceTree = ""; }; - BBF5C97238A5D929CC8B153AEF2E9179 /* FUITextField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUITextField.m; path = Classes/ios/FUITextField.m; sourceTree = ""; }; - BBF6063B6F29BA7E6ACAA2D45B0000D4 /* PFGeoPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPoint.h; path = Parse/PFGeoPoint.h; sourceTree = ""; }; - BC12683ED13AF4741D430BB224279C59 /* PFMutableUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableUserState.m; path = Parse/Internal/User/State/PFMutableUserState.m; sourceTree = ""; }; - BC79A8ADF356BE7E0C97159A9173BD3E /* BFDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFDefines.h; path = Bolts/Common/BFDefines.h; sourceTree = ""; }; - BC984301125702EFEAEC41E5B9293303 /* UNIHTTPJsonResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPJsonResponse.h; path = Unirest/HttpResponse/UNIHTTPJsonResponse.h; sourceTree = ""; }; + B19AA6954ACEF35AEBBB17B964C0E14C /* PFObjectUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectUtilities.h; path = Parse/Internal/Object/Utilities/PFObjectUtilities.h; sourceTree = ""; }; + B1D876439A55825F2D698021F318F11B /* PFQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQuery.h; path = Parse/PFQuery.h; sourceTree = ""; }; + B1E5C0E4125427F0E3FDE91F5CBA4513 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; + B27416461ADADD8D3ADF8E8D35A3ACE1 /* UIAlertView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertView+AFNetworking.m"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.m"; sourceTree = ""; }; + B2ED2797E56832F52396742BD5AC40B1 /* UIColor+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+Chameleon.h"; path = "Pod/Classes/Objective-C/UIColor+Chameleon.h"; sourceTree = ""; }; + B37A54E62CF8CA8E0CAB38A547E00BBD /* PFObjectSubclassingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassingController.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h; sourceTree = ""; }; + B4749B8DD730E19C293B814FC52D7503 /* NSArray+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+Chameleon.m"; path = "Pod/Classes/Objective-C/NSArray+Chameleon.m"; sourceTree = ""; }; + B485708557E6CB2DE1F09BD5E1B8F90F /* PFRESTSessionCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTSessionCommand.h; path = Parse/Internal/Commands/PFRESTSessionCommand.h; sourceTree = ""; }; + B4B17635A35B3C414378999631FEB0AD /* UIImage+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+FlatUI.m"; path = "Classes/ios/UIImage+FlatUI.m"; sourceTree = ""; }; + B4C9DD585C2ACD9EBCBC81F91C89331A /* PFCloudCodeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloudCodeController.m; path = Parse/Internal/CloudCode/PFCloudCodeController.m; sourceTree = ""; }; + B4FA5364701AAA618A9F456A6322416E /* PFLogInView_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInView_Private.h; path = ParseUI/Classes/LogInViewController/PFLogInView_Private.h; sourceTree = ""; }; + B539B882529715D46F58AA7C0F7277A6 /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperationManager.m; path = AFNetworking/AFHTTPRequestOperationManager.m; sourceTree = ""; }; + B53CFF61083EF9E417C641E96A20A279 /* UISlider+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UISlider+FlatUI.h"; path = "Classes/ios/UISlider+FlatUI.h"; sourceTree = ""; }; + B54AB9EA09EEEF30796D34F7D163FE45 /* PFSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession_Private.h; path = Parse/Internal/Session/PFSession_Private.h; sourceTree = ""; }; + B57AB3BA641DCFA726A7D3F91B31F320 /* UNIBodyRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIBodyRequest.m; path = Unirest/HttpRequest/UNIBodyRequest.m; sourceTree = ""; }; + B585A7167FD23401CC0AC3C94F615F46 /* FUISegmentedControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUISegmentedControl.h; path = Classes/ios/FUISegmentedControl.h; sourceTree = ""; }; + B59CF43B52C3F67340E0866557906257 /* PFDismissButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDismissButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h; sourceTree = ""; }; + B62EA9E3F43DB044529820595B489487 /* AFNetworking.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AFNetworking.modulemap; sourceTree = ""; }; + B66BB1A1B150F73F53A51DB0EF89A285 /* PFKeyValueCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache_Private.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h; sourceTree = ""; }; + B6B448028CCE0AD7EDBEC9BE86199EC1 /* PFJSONSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFJSONSerialization.h; path = Parse/Internal/PFJSONSerialization.h; sourceTree = ""; }; + B6F772B42BF7CA65B75F996B143430CD /* PFAnonymousUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils.h; path = Parse/PFAnonymousUtils.h; sourceTree = ""; }; + B7308BC8BA2DF875593DADD527D898A7 /* ParseUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseUI.h; path = ParseUI/Other/ParseUI.h; sourceTree = ""; }; + B77EC240733E6F154C558B7682AB8B94 /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; + B7EF29C21D7B2E9DCDB866FFBB91594A /* PFCommandCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandCache.m; path = Parse/Internal/PFCommandCache.m; sourceTree = ""; }; + B834CB346FEDD46855AF57AD06DE5791 /* FlatUIKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FlatUIKit-dummy.m"; sourceTree = ""; }; + B8FB8CBAC0C2BDE02C1657F0EF9462AC /* SDWebImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SDWebImage-Info.plist"; sourceTree = ""; }; + B965B81CCEE7979B459AD921D6689D66 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; + B9699B645F9D9FD06B73D75CA3FB069B /* PFSQLiteDatabaseResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseResult.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m; sourceTree = ""; }; + BA8F4C6CB58404CBBBB266E5FD1A21F8 /* PFSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSession.m; path = Parse/PFSession.m; sourceTree = ""; }; + BAB3C187C0719EC147E9F61E5E85BC65 /* UIFont+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIFont+FlatUI.h"; path = "Classes/ios/UIFont+FlatUI.h"; sourceTree = ""; }; + BB0313D8856E1ACFFE80F68A9635BD01 /* Chameleon_.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Chameleon_.h; path = "Pod/Classes/Objective-C/Chameleon_.h"; sourceTree = ""; }; + BB2C9ECA5C083B1C1AB04DAF1E83046E /* PFFileStagingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileStagingController.h; path = Parse/Internal/File/Controller/PFFileStagingController.h; sourceTree = ""; }; + BB8F0303D37F7A5C0E989A3297D5D05E /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; + BC22009CD0CB35CBE3E0FE126DC1372A /* PFWeakValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFWeakValue.m; path = Parse/Internal/PFWeakValue.m; sourceTree = ""; }; + BC45FC112DCEC836AB7FC34C7DEC3DD9 /* PFPushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState.h; path = Parse/Internal/Push/State/PFPushState.h; sourceTree = ""; }; + BCA492568C51FFC3E67F860276C05E61 /* PFTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTableViewCell.m; path = ParseUI/Classes/Cells/PFTableViewCell.m; sourceTree = ""; }; BCF2FF91155574F810AA6ADB7F19CC31 /* FlatUIKit */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FlatUIKit; path = FlatUIKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BD99F6ACFEC1E975F0FE0DF810A977A0 /* PFUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserState.m; path = Parse/Internal/User/State/PFUserState.m; sourceTree = ""; }; - BDB6A8639913CC9852F97AECC7B36C74 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = en.lproj; path = Parse/Resources/en.lproj; sourceTree = ""; }; - BEE6E33A4974E21DDA04F659E990E8D5 /* PFRelation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelation.m; path = Parse/PFRelation.m; sourceTree = ""; }; - BEF1B2C844D9D029D40DCE5288DA37E5 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; - BEF3548901AFF1442D8A42CE3D5CD1A7 /* PFAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAlertView.h; path = Parse/Internal/PFAlertView.h; sourceTree = ""; }; - BF319A176D7C5D07103C1757D1C4A6FC /* PFConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfig.m; path = Parse/PFConfig.m; sourceTree = ""; }; - BF4323EB4A4B780935FB44201186AA89 /* IQKeyboardManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManager-prefix.pch"; sourceTree = ""; }; - BF47B8414383C32DD8B7B421B488B543 /* PFCommandURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandURLRequestConstructor.h; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h; sourceTree = ""; }; - BF4961A65C147D1F0F5A6BC47121CBCF /* PFOfflineStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineStore.h; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h; sourceTree = ""; }; - BF64F8F931BFD24F09DA8796A5AB8716 /* PFErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFErrorUtilities.h; path = Parse/Internal/PFErrorUtilities.h; sourceTree = ""; }; - C0186D06FBE7DA63E6E3D6BA78C59D81 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; - C034B2ACBE6538C3217772E314D8114F /* IQSegmentedNextPrevious.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQSegmentedNextPrevious.h; path = IQKeyBoardManager/IQSegmentedNextPrevious/IQSegmentedNextPrevious.h; sourceTree = ""; }; - C0AD563E6E870F9D52DAD712828C35FB /* UIBarButtonItem+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIBarButtonItem+FlatUI.m"; path = "Classes/ios/UIBarButtonItem+FlatUI.m"; sourceTree = ""; }; - C0C70DBBC50F5AFE36A69BF965DF34C8 /* IQKeyboardManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManager.modulemap; sourceTree = ""; }; - C0F69EF677BEDD5C5FA799A9275E6EAC /* PFOperationSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOperationSet.m; path = Parse/Internal/Object/OperationSet/PFOperationSet.m; sourceTree = ""; }; - C10C515D0450CC29CCEF68EA816542D5 /* PFRESTPushCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTPushCommand.m; path = Parse/Internal/Commands/PFRESTPushCommand.m; sourceTree = ""; }; - C137855C14937C945753B86B2CDA79D9 /* FUISegmentedControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUISegmentedControl.h; path = Classes/ios/FUISegmentedControl.h; sourceTree = ""; }; - C1648D08CE8E716C210353B82071411F /* PFFileDataStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileDataStream.m; path = Parse/Internal/File/FileDataStream/PFFileDataStream.m; sourceTree = ""; }; - C1A50FE4924602AEF1988B628C5A61F6 /* PFBaseState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBaseState.h; path = Parse/Internal/PFBaseState.h; sourceTree = ""; }; - C1E8E202F03E9DFA6AFB0F098ABD3A06 /* IQUIWindow+Hierarchy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIWindow+Hierarchy.h"; path = "IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.h"; sourceTree = ""; }; - C26F1D9455881336DF278C24466FBC70 /* PFCommandRunningConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunningConstants.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m; sourceTree = ""; }; - C2ACCA2ADD065408B661FC354F02DBD2 /* ChameleonFramework-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ChameleonFramework-Info.plist"; sourceTree = ""; }; - C2B65C31D9152869F1CCD359EF540969 /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionFileDownloadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; - C2CA7B1027D42D64DAA67C1E2011479E /* PFACL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACL.m; path = Parse/PFACL.m; sourceTree = ""; }; - C3E9C164B6FC7D790B44FC7EB8462572 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; - C4ECEB822EE787E43E4B3D81D192BD08 /* PFRESTCloudCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCloudCommand.m; path = Parse/Internal/Commands/PFRESTCloudCommand.m; sourceTree = ""; }; - C50F078A36FD9673AD03D42BF7FC663E /* PFProductTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductTableViewController.h; path = ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h; sourceTree = ""; }; - C571323D266A5975685DD2191C775A9A /* PFDefaultACLController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDefaultACLController.m; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m; sourceTree = ""; }; - C582F437DEEFC2DC78C169737D7E9D53 /* PFPurchase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchase.h; path = Parse/PFPurchase.h; sourceTree = ""; }; - C5C549C5C71BC97E1890902EFB8FB31F /* PFDismissButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDismissButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h; sourceTree = ""; }; - C64ACA14342A9ECCF8A0C727A2193004 /* PFRESTUserCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTUserCommand.m; path = Parse/Internal/Commands/PFRESTUserCommand.m; sourceTree = ""; }; - C6620BB5952ABF0E4296A0D2DB7BE02F /* PFKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeychainStore.h; path = Parse/Internal/PFKeychainStore.h; sourceTree = ""; }; - C6725615AB0EB3D222E0B93D2EC3C6B7 /* PFRESTObjectBatchCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectBatchCommand.h; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.h; sourceTree = ""; }; - C6C75DCA8C9E3639140AC579C4C46296 /* PFInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInternalUtils.m; path = Parse/Internal/PFInternalUtils.m; sourceTree = ""; }; - C7F69AB63C5B9D83F940D7C9CA0CE984 /* UNIHTTPStringResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPStringResponse.h; path = Unirest/HttpResponse/UNIHTTPStringResponse.h; sourceTree = ""; }; - C8CC6659A6C2F9156DD09335364D0A48 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; - C9045272DB5D24BA18512C635B70BF34 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; - CA65A1A27CD00A01A317F904467FD513 /* PFMutableACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableACLState.m; path = Parse/Internal/ACL/State/PFMutableACLState.m; sourceTree = ""; }; - CB714FA67888C5CA046827C36660588D /* PFConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConstants.h; path = Parse/PFConstants.h; sourceTree = ""; }; - CBF8069EC1EAD1EEE3C76F86B6CAEAC9 /* PFAnonymousAuthenticationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousAuthenticationProvider.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h; sourceTree = ""; }; + BD16E875A751C74763634BD2E94CEEE6 /* ChameleonFramework-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChameleonFramework-prefix.pch"; sourceTree = ""; }; + BD17758C6D9E58B355428B80263D17EA /* FUICellBackgroundView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUICellBackgroundView.h; path = Classes/ios/FUICellBackgroundView.h; sourceTree = ""; }; + BD8A148C1C76BD03BEFC12CCE8F7BB3E /* ChameleonFramework.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ChameleonFramework.debug.xcconfig; sourceTree = ""; }; + BDAEBE02C021E3A5CC6C2481DDB70A37 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; + BDB6900AC0DB1620F42D3AA6F1A09E5D /* PFActivityIndicatorTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActivityIndicatorTableViewCell.h; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h; sourceTree = ""; }; + BE02B4D17FFF5AE2EC743420048DBAFD /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = ""; }; + BE14B64B7D94E9A0E083FC542AECB820 /* UITableViewCell+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableViewCell+FlatUI.h"; path = "Classes/ios/UITableViewCell+FlatUI.h"; sourceTree = ""; }; + BE1AA56FB3518F5ACF08ABFFB8F71661 /* IQUIView+Hierarchy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIView+Hierarchy.m"; path = "IQKeyboardManager/Categories/IQUIView+Hierarchy.m"; sourceTree = ""; }; + BE438FFCF26860EECC1343543A60226D /* Bolts.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.debug.xcconfig; sourceTree = ""; }; + BE4797FEB12AB168882290F20F22E1B3 /* AFNetworking-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "AFNetworking-Info.plist"; sourceTree = ""; }; + BED06D69A31505FA7CD8316C179CDFAC /* PFResources.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFResources.h; path = ParseUI/Generated/PFResources.h; sourceTree = ""; }; + BEF4FF7171109B841E52DAB6544DCFB3 /* PFQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryState.m; path = Parse/Internal/Query/State/PFQueryState.m; sourceTree = ""; }; + BF0F1E060D039DB2ED92B2064E9324FC /* PFCommandRunning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunning.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.h; sourceTree = ""; }; + BF5D4519F2FD959DD3A51A80CF8C52D8 /* PFFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile.h; path = Parse/PFFile.h; sourceTree = ""; }; + BF72FEFBC6FF8F58CB7CB79FB1C8A7BE /* PFSessionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionController.h; path = Parse/Internal/Session/Controller/PFSessionController.h; sourceTree = ""; }; + BF928DF49EC124F57C165424C653912E /* UIColor+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+FlatUI.h"; path = "Classes/ios/UIColor+FlatUI.h"; sourceTree = ""; }; + BFB3C1E76C4F806EFCDE8512A39D23C2 /* FUIPopoverBackgroundView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUIPopoverBackgroundView.h; path = Classes/ios/FUIPopoverBackgroundView.h; sourceTree = ""; }; + BFDADA3217FE77D6F8E68621BA9FD77E /* PFHTTPURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPURLRequestConstructor.h; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h; sourceTree = ""; }; + C0A12B9EF7949B48A1FA4D686A7BA5F9 /* PFQueryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryPrivate.h; path = Parse/Internal/Query/PFQueryPrivate.h; sourceTree = ""; }; + C0B062364FAD300B57FFF2CD44278F60 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; + C0FA4E1F34830F2463FCB811EAD24A79 /* PFActivityIndicatorCollectionReusableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActivityIndicatorCollectionReusableView.m; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m; sourceTree = ""; }; + C174512300F259E9E9FF44BD14218FED /* FlatUIKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FlatUIKit-prefix.pch"; sourceTree = ""; }; + C1D45ADCE0464957F823585B3FDF82FB /* IQNSArray+Sort.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQNSArray+Sort.m"; path = "IQKeyboardManager/Categories/IQNSArray+Sort.m"; sourceTree = ""; }; + C237413667676F66D932237A4073CB42 /* PFImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImageCache.m; path = ParseUI/Classes/Internal/PFImageCache.m; sourceTree = ""; }; + C2660605B5FB0E40D12FF6A4B131C4A2 /* PFUIAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUIAlertView.m; path = ParseUI/Classes/Internal/Extensions/PFUIAlertView.m; sourceTree = ""; }; + C2D25A48A5669C4EEA1A1278B5AADCC8 /* NSString+Icons.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Icons.m"; path = "Classes/ios/NSString+Icons.m"; sourceTree = ""; }; + C317661A6C63BF31F4516396085D1DDD /* PFImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImageView.h; path = ParseUI/Classes/Views/PFImageView.h; sourceTree = ""; }; + C3AC194441355C5C035DA3351650C99E /* ChameleonFramework-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChameleonFramework-umbrella.h"; sourceTree = ""; }; + C3E2DA89B7784D376EAF5F391CD3E45B /* IQUIView+Hierarchy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIView+Hierarchy.h"; path = "IQKeyboardManager/Categories/IQUIView+Hierarchy.h"; sourceTree = ""; }; + C4239D037D62B4A06D9768E33ECD692F /* Parse.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.release.xcconfig; sourceTree = ""; }; + C45DABCF47D9B4496B4627C78ACA5F5B /* PFMutableACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableACLState.h; path = Parse/Internal/ACL/State/PFMutableACLState.h; sourceTree = ""; }; + C566D49A7C726CF5969F4B79AA9ED6C7 /* UITabBar+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITabBar+FlatUI.h"; path = "Classes/ios/UITabBar+FlatUI.h"; sourceTree = ""; }; + C6465177F56344D8A62FB5F181EEDB03 /* UIColor+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+FlatUI.m"; path = "Classes/ios/UIColor+FlatUI.m"; sourceTree = ""; }; + C64D42AAE0A0E697FE455FDDF0F6AF44 /* PFPush.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPush.h; path = Parse/PFPush.h; sourceTree = ""; }; + C7BC9D529DFB9C2876F1B26C742549E5 /* NSString+Icons.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Icons.h"; path = "Classes/ios/NSString+Icons.h"; sourceTree = ""; }; + C80EE7051488F41E849C0913BFE85299 /* PFConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig.h; path = Parse/PFConfig.h; sourceTree = ""; }; + C8C622D61D94B0BB8BC678A39B314790 /* UNIHTTPBinaryResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPBinaryResponse.h; path = Unirest/HttpResponse/UNIHTTPBinaryResponse.h; sourceTree = ""; }; + C8EA7A9046754051261628FE4A4FBC57 /* PFMutableFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableFileState.m; path = Parse/Internal/File/State/PFMutableFileState.m; sourceTree = ""; }; + C971E759236FF5C44EDF586ABA1FDD1A /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; + CA0F759EB3B8FF5747A3FF8D9A670ED4 /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; + CA81F6D4EC4A09874076DCCE8890B484 /* PFUserFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserFileCodingLogic.m; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m; sourceTree = ""; }; + CAF92C30B6888E0F131016AB7EE40127 /* fr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = fr.lproj; path = ParseUI/Resources/Localization/fr.lproj; sourceTree = ""; }; + CB00637E4C07D93AA94189E0D17D0509 /* PFSignUpView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSignUpView.h; path = ParseUI/Classes/SignUpViewController/PFSignUpView.h; sourceTree = ""; }; + CB1D7D1EE6ECB93DA929D451A913B2F9 /* IQKeyboardManager.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = IQKeyboardManager.bundle; path = IQKeyboardManager/Resources/IQKeyboardManager.bundle; sourceTree = ""; }; + CB2C2E44C04D75E24B7B90AAA247551E /* BoltsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BoltsVersion.h; path = Bolts/Common/BoltsVersion.h; sourceTree = ""; }; + CB6945F45579087C28867C89A928DECD /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue_Private.h; path = Parse/Internal/PFEventuallyQueue_Private.h; sourceTree = ""; }; + CB77AF007BC5AA8EA10347DB05702138 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; CC336EDAC9FA746257F40BD540DC9A75 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - CCE21169E91B4F413E70BB27F172E902 /* PFAnalyticsUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsUtilities.m; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m; sourceTree = ""; }; - CD104B7AD1FBF1F91303950B3BD5DE5A /* FUICellBackgroundView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUICellBackgroundView.h; path = Classes/ios/FUICellBackgroundView.h; sourceTree = ""; }; - CD3794F214603143EF12BBD7D35183B1 /* PFAsyncTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAsyncTaskQueue.m; path = Parse/Internal/PFAsyncTaskQueue.m; sourceTree = ""; }; - CD6556ADFAD1BE0857B3369A52050CC6 /* PFHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPRequest.h; path = Parse/Internal/HTTPRequest/PFHTTPRequest.h; sourceTree = ""; }; - CE8BDCF7E26F4C56C0ADF6B761072CC2 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; - CEB2A2A103376D8F9047E4F1E106E16A /* PFSessionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionController.h; path = Parse/Internal/Session/Controller/PFSessionController.h; sourceTree = ""; }; - CEB87D6EE15561B81AB4D70AD70B70FB /* IQToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQToolbar.m; path = IQKeyBoardManager/IQToolbar/IQToolbar.m; sourceTree = ""; }; - CEE21A440006EE2C4B423EFAE0DC86AB /* Unirest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Unirest.debug.xcconfig; sourceTree = ""; }; - CEE4FFACD555D625ACE047DB1EE70750 /* FUIPopoverBackgroundView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUIPopoverBackgroundView.m; path = Classes/ios/FUIPopoverBackgroundView.m; sourceTree = ""; }; - CF3F287B1CCA362FEB1A80FCD3146513 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; - CF4CF703CC1DBD333ED293E64B2816AC /* PFFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileManager.m; path = Parse/Internal/PFFileManager.m; sourceTree = ""; }; - CFFDDC90032F16F94B5EC26EFEF453DF /* PFUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUser.h; path = Parse/PFUser.h; sourceTree = ""; }; - D0687D024DA00AAE7B4F8366D819654C /* PFTextButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTextButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h; sourceTree = ""; }; - D0874E998F9E9F408D294DF2386879A8 /* PFObjectConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectConstants.h; path = Parse/Internal/Object/Constants/PFObjectConstants.h; sourceTree = ""; }; - D0A63F277F04D487A09199897B91DA43 /* PFPropertyInfo_Runtime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo_Runtime.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m; sourceTree = ""; }; - D0B9EF05BBF29D5217191E4094EB3982 /* UIColor+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+FlatUI.m"; path = "Classes/ios/UIColor+FlatUI.m"; sourceTree = ""; }; - D10834D8E017BD682BEB53FD751CEB75 /* PFMultiProcessFileLockController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLockController.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h; sourceTree = ""; }; - D1E1BEDB5A8BC95C80FA17589D69210B /* FUICellBackgroundView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUICellBackgroundView.m; path = Classes/ios/FUICellBackgroundView.m; sourceTree = ""; }; - D1EFF61D9013A9997596EE7F75AEDE3F /* ParseUI-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ParseUI-prefix.pch"; sourceTree = ""; }; - D253FAF99DE0E9661935D36E6600717C /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; - D26D67D3B6418EC0A3EC02DFD678C696 /* PFPushController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushController.m; path = Parse/Internal/Push/Controller/PFPushController.m; sourceTree = ""; }; - D3308E5C88DF7BD7EB9571B8F71861E2 /* PFRESTObjectCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectCommand.h; path = Parse/Internal/Commands/PFRESTObjectCommand.h; sourceTree = ""; }; - D34C12E4F952DB5875CBA2FC470CEA4A /* PFObjectBatchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectBatchController.m; path = Parse/Internal/Object/BatchController/PFObjectBatchController.m; sourceTree = ""; }; - D3E3071B72FB3D58BE54787E6BDFB30E /* PFTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTableViewCell.m; path = ParseUI/Classes/Cells/PFTableViewCell.m; sourceTree = ""; }; - D4481075C8CA2C7CF0F9239E68853BE6 /* IQKeyboardManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardManager-Info.plist"; sourceTree = ""; }; - D464E14984EAF6352F7E733E899C8F4A /* PFRESTConfigCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTConfigCommand.h; path = Parse/Internal/Commands/PFRESTConfigCommand.h; sourceTree = ""; }; - D49A2F201D1F072E9F700F36FB9F6B9A /* PFLogInViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInViewController.h; path = ParseUI/Classes/LogInViewController/PFLogInViewController.h; sourceTree = ""; }; - D5BCBF924ED06727AAC5736473727FB8 /* PFPrimaryButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPrimaryButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h; sourceTree = ""; }; - D6A3F777F9D72A576946C81634647411 /* PFCachedQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCachedQueryController.h; path = Parse/Internal/Query/Controller/PFCachedQueryController.h; sourceTree = ""; }; + CC3E170282FD37E519479DFEEE7D55B2 /* PFRect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRect.m; path = ParseUI/Classes/Internal/Extensions/PFRect.m; sourceTree = ""; }; + CD004273FD354237F7D844A9BEAA8D1E /* NSArray+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+Chameleon.h"; path = "Pod/Classes/Objective-C/NSArray+Chameleon.h"; sourceTree = ""; }; + CD46520D8BCDA2FED7653A676AE1DB78 /* SDWebImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.debug.xcconfig; sourceTree = ""; }; + CD550819AF8416A5DB414CAA7025CB06 /* PFLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogger.m; path = Parse/Internal/PFLogger.m; sourceTree = ""; }; + CE1D7CADD6B787D221D22A300F04F5B1 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; + CE1F8CA7790E14B93C4917A7AA6806F0 /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; + CEEB1C5E9BC1B761C1D681F6ED6D8494 /* PFAnonymousAuthenticationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousAuthenticationProvider.m; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m; sourceTree = ""; }; + CEED91958785BC6C656DF48AF67670D7 /* UIFont+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIFont+FlatUI.m"; path = "Classes/ios/UIFont+FlatUI.m"; sourceTree = ""; }; + CEFF5B62376E2591D6E5EAF93B76997E /* PFRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState.h; path = Parse/Internal/Relation/State/PFRelationState.h; sourceTree = ""; }; + CF0865463F092E74770E7110F2D76193 /* PFMutablePushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutablePushState.h; path = Parse/Internal/Push/State/PFMutablePushState.h; sourceTree = ""; }; + CF09587F6E7B5C55B2DBC4F76D84C78F /* UIImage+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIImage+ChameleonPrivate.m"; sourceTree = ""; }; + CF296274D6055775584EBDE9FFA27649 /* PFRESTCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand.h; path = Parse/Internal/Commands/PFRESTCommand.h; sourceTree = ""; }; + CF8C2D7B1873D1DE1458FA7D18F57592 /* IQKeyboardManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQKeyboardManager.m; path = IQKeyboardManager/IQKeyboardManager.m; sourceTree = ""; }; + D0C44D70A8C988A5FC533435B05B77CB /* PFObjectFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCodingLogic.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m; sourceTree = ""; }; + D13E9CC7C55D6E5308CFD2BDDF4E3E35 /* PFRESTAnalyticsCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTAnalyticsCommand.h; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.h; sourceTree = ""; }; + D2BF4F04D9236FEB54B0E9C3385222C8 /* PFCurrentUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentUserController.m; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.m; sourceTree = ""; }; + D2E0EEEC88F8887028FA6F0DDA67548B /* PFRESTPushCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTPushCommand.m; path = Parse/Internal/Commands/PFRESTPushCommand.m; sourceTree = ""; }; + D305BB43DFE0C6524796909B892CDE28 /* PFReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFReachability.m; path = Parse/Internal/PFReachability.m; sourceTree = ""; }; + D308000BF600D71810C6CD2499427CD7 /* FlatUIKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FlatUIKit-umbrella.h"; sourceTree = ""; }; + D3EE32A19F2CA37F68E600E3B1A8BAB6 /* Parse_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse_Private.h; path = Parse/Internal/Parse_Private.h; sourceTree = ""; }; + D5A1769B7D39E3622EBE828E69A03539 /* PFPushController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushController.m; path = Parse/Internal/Push/Controller/PFPushController.m; sourceTree = ""; }; + D63A69F4B3F958DFFF7944B7D8290D88 /* PFApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFApplication.m; path = Parse/Internal/PFApplication.m; sourceTree = ""; }; + D64494125FCBF8578381C4A3DFC24582 /* Base64.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Base64.m; path = Unirest/Base64.m; sourceTree = ""; }; + D69D5263055F55D91F01C506D8E89BAD /* PFInstallationIdentifierStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationIdentifierStore.m; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m; sourceTree = ""; }; + D6C2112669072AE57F3B1EF2C2D85B3D /* UNIHTTPRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPRequest.m; path = Unirest/UNIHTTPRequest.m; sourceTree = ""; }; D6CC7CC57AD4796048E05E9C30825826 /* Unirest */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Unirest; path = Unirest.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - D76E57E96B10ED8D71DC4BE92815D2B3 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; - D79C12A61A4543E416CBB738D3FF37C3 /* ChameleonFramework-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ChameleonFramework-dummy.m"; sourceTree = ""; }; - D840D2F9AFF823F94F3AB0131703459B /* PFURLSessionUploadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionUploadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m; sourceTree = ""; }; - D853E3A07CB02F8C41AC94B33D18DE6E /* PFFieldOperationDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperationDecoder.m; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.m; sourceTree = ""; }; - D918045D3E6E8340A10A1948E5BB7798 /* PFConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfigController.m; path = Parse/Internal/Config/Controller/PFConfigController.m; sourceTree = ""; }; - D93710ABE14AC931BA5E37E5461EFE9D /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; - D9C88B55C686DDE9636FBFF719E4A77D /* Base64.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Base64.m; path = Unirest/Base64.m; sourceTree = ""; }; - D9E50F16F11C26B58CB696C26DE57E74 /* PFGeoPointPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPointPrivate.h; path = Parse/Internal/PFGeoPointPrivate.h; sourceTree = ""; }; - DA0DF40D1E6DB2A9A53542C123149969 /* ChameleonFramework.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ChameleonFramework.debug.xcconfig; sourceTree = ""; }; - DAE893D8A79BCE927BD34935557FC189 /* PFInstallationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationPrivate.h; path = Parse/Internal/Installation/PFInstallationPrivate.h; sourceTree = ""; }; - DB9AB176562A9D6550C05D4A4094FF0F /* UIImage+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIImage+ChameleonPrivate.h"; sourceTree = ""; }; - DBC114B642595675D739DDEDD016E9F1 /* FUIButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUIButton.h; path = Classes/ios/FUIButton.h; sourceTree = ""; }; - DC3331AEC86B8C52429A342C01652D63 /* PFQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQuery.m; path = Parse/PFQuery.m; sourceTree = ""; }; - DC8286821540402840D2F78184926242 /* PFConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig.h; path = Parse/PFConfig.h; sourceTree = ""; }; + D72AEC533D655C8D593C07A53F1D747F /* Parse-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-umbrella.h"; sourceTree = ""; }; + D7A3AD7DED9F7674DF066157B83874E1 /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionFileDownloadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; + D81124330876EB85D8CCB6C9378D2E8C /* PFCommandResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandResult.m; path = Parse/Internal/PFCommandResult.m; sourceTree = ""; }; + D869C16E6B92E4E4DAEC9B9363D8D3F6 /* PFLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogging.h; path = Parse/Internal/PFLogging.h; sourceTree = ""; }; + D89292EA416BFB4E38CFA341905BFDFD /* PFUserConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserConstants.m; path = Parse/Internal/User/Constants/PFUserConstants.m; sourceTree = ""; }; + D8DF24ADAADAC243785A71EB5043ECB5 /* PFPrimaryButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPrimaryButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h; sourceTree = ""; }; + D9045979C5B73816C81F6DC6CB9C26C6 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; + D961C77262C7D151CC89E6164FA6D52C /* PFURLSessionCommandRunner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionCommandRunner.m; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m; sourceTree = ""; }; + D996C2666AEBC5DE15F1132F7519EEFA /* ChameleonConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ChameleonConstants.m; path = "Pod/Classes/Objective-C/ChameleonConstants.m"; sourceTree = ""; }; + D9ABEBD69361FA1FD8939A21C71A86B3 /* PFInstallationIdentifierStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h; sourceTree = ""; }; + DA7D6B40CA043E1F26CF1737EE7C2D8D /* PFUserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserConstants.h; path = Parse/Internal/User/Constants/PFUserConstants.h; sourceTree = ""; }; + DBE6819D41549A1CBD4D69F3085F2562 /* UNIHTTPStringResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPStringResponse.h; path = Unirest/HttpResponse/UNIHTTPStringResponse.h; sourceTree = ""; }; + DC1FF3B7F18FCF2F0A4EFD477BE62BAA /* PFMutableObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableObjectState.m; path = Parse/Internal/Object/State/PFMutableObjectState.m; sourceTree = ""; }; + DC28C0625C2B08E7619AEFBF99128019 /* PFAsyncTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAsyncTaskQueue.h; path = Parse/Internal/PFAsyncTaskQueue.h; sourceTree = ""; }; + DC59FC62BE26AD5C562D7BBF2224A10E /* PFSQLiteDatabaseResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseResult.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h; sourceTree = ""; }; + DC7BB69962EB8928BACCE0021E544A5E /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = en.lproj; path = ParseUI/Resources/Localization/en.lproj; sourceTree = ""; }; DC82E912A46E0D98C54FA4D7AA8638BA /* Pods-FoodbLog */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-FoodbLog"; path = Pods_FoodbLog.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DCCBF38FA67936B62300896ABA01E42F /* PFURLSessionJSONDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionJSONDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h; sourceTree = ""; }; - DD00DBDBA4AB7937FF095E5352F14E53 /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperationManager.h; path = AFNetworking/AFHTTPRequestOperationManager.h; sourceTree = ""; }; - DD38371523A69B7D5F80DEF60A1EC8D3 /* PFEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue.h; path = Parse/Internal/PFEventuallyQueue.h; sourceTree = ""; }; - DE9F993B8C26D2CD762FFC2EB4E32734 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; - DF0826136CA6F04163DCAD76EB0BE45D /* PFUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUser.m; path = Parse/PFUser.m; sourceTree = ""; }; - DF725FD55935B6C23669417D4E1B2668 /* PFReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFReachability.h; path = Parse/Internal/PFReachability.h; sourceTree = ""; }; - DFD47DBE4E7606BA4FA86C0F5919CDD5 /* PFSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession_Private.h; path = Parse/Internal/Session/PFSession_Private.h; sourceTree = ""; }; - E15E68480948E1C08CA894190BF3AF27 /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; - E2117490959B9550A4868376B6579453 /* UIColor+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+Chameleon.h"; path = "Pod/Classes/Objective-C/UIColor+Chameleon.h"; sourceTree = ""; }; - E223A483DDF7AE6383953308A7288EC6 /* PFFieldOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperation.m; path = Parse/Internal/FieldOperation/PFFieldOperation.m; sourceTree = ""; }; - E291C26D7FB8D9A151C45977AB616E47 /* UNIJsonNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIJsonNode.h; path = Unirest/HttpResponse/UNIJsonNode.h; sourceTree = ""; }; - E2D1FC6E559818FF5E899D86DFDAE1F0 /* UITableViewCell+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableViewCell+FlatUI.m"; path = "Classes/ios/UITableViewCell+FlatUI.m"; sourceTree = ""; }; - E3523BF1D55FC301141D3E8EA5BD9A1F /* UNIHTTPRequestWithBody.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPRequestWithBody.m; path = Unirest/UNIHTTPRequestWithBody.m; sourceTree = ""; }; - E36DC6F0E757E7535DDD2E9C1B846AED /* PFPinningObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningObjectStore.h; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.h; sourceTree = ""; }; - E3A5971EA076048933873A26498305DB /* PFMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMacros.h; path = Parse/Internal/PFMacros.h; sourceTree = ""; }; - E474D6AB963D4ABAFB608C01EC10CCE0 /* PFPushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushState.m; path = Parse/Internal/Push/State/PFPushState.m; sourceTree = ""; }; - E572BEF3BF5FA574EE0EE4E0D2FDB479 /* Chameleon_.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Chameleon_.h; path = "Pod/Classes/Objective-C/Chameleon_.h"; sourceTree = ""; }; - E5855B0E065B8C1A0EADD0781BD28D00 /* UIProgressView+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+FlatUI.m"; path = "Classes/ios/UIProgressView+FlatUI.m"; sourceTree = ""; }; - E594ABB625D8E0146B3BC5AF5C3BD580 /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; - E61330560D82210F3152034DA8D29E3E /* IQKeyboardManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManager-umbrella.h"; sourceTree = ""; }; - E61428FE87E53D9A77A44F2EAFA62DD6 /* UNISimpleRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNISimpleRequest.m; path = Unirest/HttpRequest/UNISimpleRequest.m; sourceTree = ""; }; - E6BA7CC067B235E0FF566A94E1581577 /* PFSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabase.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m; sourceTree = ""; }; - E715B6385F222A65C0AEDD033DAC27BF /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; - E725EA90CDD636F75AA6136536B4106E /* PFURLSessionJSONDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionJSONDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m; sourceTree = ""; }; - E743DD9EBFBFF918EF56FABFE4C5AC4D /* PFSQLiteDatabaseResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseResult.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m; sourceTree = ""; }; - E7F24C0BF2AC1D3A0AB451BCE534C2D0 /* PFUserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserConstants.h; path = Parse/Internal/User/Constants/PFUserConstants.h; sourceTree = ""; }; - E936219EC6142DBDD297B11DCA11AC0A /* PFRelationState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState_Private.h; path = Parse/Internal/Relation/State/PFRelationState_Private.h; sourceTree = ""; }; - E99932D8C34D4E771914E628104B89C5 /* ChameleonMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonMacros.h; path = "Pod/Classes/Objective-C/ChameleonMacros.h"; sourceTree = ""; }; - EA4EB23C725FCF4754FDC1ECC1A03D47 /* UINavigationBar+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UINavigationBar+FlatUI.m"; path = "Classes/ios/UINavigationBar+FlatUI.m"; sourceTree = ""; }; + DD67EEF35668EABDA6CDE4706E5C10D0 /* PFMultiProcessFileLockController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLockController.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h; sourceTree = ""; }; + DDC009A128625087767288D7706E4920 /* PFObjectFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCodingLogic.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h; sourceTree = ""; }; + DDEB824107C28055F7FDA4A9A2034A36 /* PFAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalytics.m; path = Parse/PFAnalytics.m; sourceTree = ""; }; + DE1C0FA9FAF3336E0D882CF851F8D942 /* Unirest-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Unirest-umbrella.h"; sourceTree = ""; }; + DEA92EAFBD2F6D31CC60C9BD2B8B1F9E /* PFUserAuthenticationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserAuthenticationController.m; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m; sourceTree = ""; }; + DF7780DB20224001BE268ACB15378FC2 /* FlatUIKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FlatUIKit.modulemap; sourceTree = ""; }; + DF7A671748B1795733EB163457D9959D /* PFRESTSessionCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTSessionCommand.m; path = Parse/Internal/Commands/PFRESTSessionCommand.m; sourceTree = ""; }; + E01DF6BF8E0DB15494DA23A118BCDE49 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; + E05ADC8B41F427B22AC3E815A19350EB /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; + E06A7119515F4910F956F06EF911C715 /* PFAnonymousUtils_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils_Private.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h; sourceTree = ""; }; + E074D43B725F9C362400C9DF86A4123D /* PFUIAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUIAlertView.h; path = ParseUI/Classes/Internal/Extensions/PFUIAlertView.h; sourceTree = ""; }; + E07A6A98D3D5AABF5C8EFFD18AB58BC3 /* UILabel+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UILabel+Chameleon.m"; path = "Pod/Classes/Objective-C/UILabel+Chameleon.m"; sourceTree = ""; }; + E095BAA9FC8B747A000DE925306793BE /* PFPropertyInfo_Runtime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo_Runtime.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m; sourceTree = ""; }; + E0CC60D5D61DAC18565BFA86B04B3091 /* PFSQLiteDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase_Private.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h; sourceTree = ""; }; + E0FADD9A90F6B97C2F05721EFB03C404 /* UINavigationController+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UINavigationController+Chameleon.m"; path = "Pod/Classes/Objective-C/UINavigationController+Chameleon.m"; sourceTree = ""; }; + E13BC81FEAB08337AF37599B924A0B92 /* PFAnonymousAuthenticationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousAuthenticationProvider.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h; sourceTree = ""; }; + E1429F34AED40EF32B9C37C25F4B5395 /* UNIHTTPRequestWithBody.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPRequestWithBody.h; path = Unirest/UNIHTTPRequestWithBody.h; sourceTree = ""; }; + E1507F321942D4FD208B55803D3583FF /* PFImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImageView.m; path = ParseUI/Classes/Views/PFImageView.m; sourceTree = ""; }; + E15CB84F6EAC100D531B6BCAAA2815AB /* PFAnonymousUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousUtils.m; path = Parse/PFAnonymousUtils.m; sourceTree = ""; }; + E17C805A5EBB9F99E87AE99981812FC7 /* PFObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState.h; path = Parse/Internal/Object/State/PFObjectState.h; sourceTree = ""; }; + E261E97A551F62268F5002DB529D4A74 /* PFActivityIndicatorCollectionReusableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActivityIndicatorCollectionReusableView.h; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h; sourceTree = ""; }; + E272D407AC4A249F7DCA0B9CA3115B66 /* PFQueryCollectionViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryCollectionViewController.h; path = ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h; sourceTree = ""; }; + E4ED7A0517A36ECA8CCCE78610B55016 /* PFJSONSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFJSONSerialization.m; path = Parse/Internal/PFJSONSerialization.m; sourceTree = ""; }; + E515F384B4FC8E3B8439F1DB578EB3E5 /* IQBarButtonItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQBarButtonItem.h; path = IQKeyboardManager/IQToolbar/IQBarButtonItem.h; sourceTree = ""; }; + E5673AE21FC295054FE51806B2157579 /* FUIButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUIButton.h; path = Classes/ios/FUIButton.h; sourceTree = ""; }; + E5EABACCD833603D71DDA83AF8267A78 /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; + E619BDE14AB08B9FB930109F4E31D8CD /* PFLogInView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInView.h; path = ParseUI/Classes/LogInViewController/PFLogInView.h; sourceTree = ""; }; + E6492D62837F81793852C022F8DDDE48 /* PFUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState.h; path = Parse/Internal/User/State/PFUserState.h; sourceTree = ""; }; + E65E7AF0524FDBEF23D5EFA1398195EF /* PFCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloud.h; path = Parse/PFCloud.h; sourceTree = ""; }; + E69D548BB3EF5F5499142B94DC2D4D2D /* PFCachedQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCachedQueryController.h; path = Parse/Internal/Query/Controller/PFCachedQueryController.h; sourceTree = ""; }; + E6E8FDE318E4C904383C402577CB676E /* PFMutablePushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutablePushState.m; path = Parse/Internal/Push/State/PFMutablePushState.m; sourceTree = ""; }; + E8084FC656FBBB0FFE9F542CFE82DFC8 /* PFSQLiteStatement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteStatement.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m; sourceTree = ""; }; + E82AC36F045BE087ECE7253B8EEB06EB /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; + E82CA19BA3E0DE4964F0C052630016EF /* PFTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTaskQueue.h; path = Parse/Internal/PFTaskQueue.h; sourceTree = ""; }; + E843676E8B7DE282A6605A76DC99E8D3 /* PFBase64Encoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBase64Encoder.m; path = Parse/Internal/PFBase64Encoder.m; sourceTree = ""; }; + E8530B9B30D42F583B3BC811E303DBD3 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; + E8C2D556022D673D9A39AEE75A92D7B7 /* UNIHTTPClientHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPClientHelper.m; path = Unirest/UNIHTTPClientHelper.m; sourceTree = ""; }; + E92240B95F45B88D980A83809E4BCE74 /* PFSessionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionController.m; path = Parse/Internal/Session/Controller/PFSessionController.m; sourceTree = ""; }; EA6600846C35A33A9E0A0436C4B4BC26 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; - EA75AE20BB255EFB336F605121156B56 /* PFCachedQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCachedQueryController.m; path = Parse/Internal/Query/Controller/PFCachedQueryController.m; sourceTree = ""; }; - EADC0A4005E0A455E24E378AAEACAC44 /* PFFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileManager.h; path = Parse/Internal/PFFileManager.h; sourceTree = ""; }; - EB082ABFA0DCDEA7C961D1A1D072C3B9 /* IQUIView+IQKeyboardToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIView+IQKeyboardToolbar.m"; path = "IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m"; sourceTree = ""; }; - EB1E0B109FE60D221F3E42A35EC080BC /* ParseInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseInternal.h; path = Parse/Internal/ParseInternal.h; sourceTree = ""; }; - EB2DEB083FAA7954B735F6FAF4BA4FEA /* PFACLState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState_Private.h; path = Parse/Internal/ACL/State/PFACLState_Private.h; sourceTree = ""; }; - EC3F8E5AAA0D556290B7B5552E7891B8 /* UIButton+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+Chameleon.m"; path = "Pod/Classes/Objective-C/UIButton+Chameleon.m"; sourceTree = ""; }; - EC9278D7F2E8ED952563707F9B4FB0C4 /* PFImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImageView.m; path = ParseUI/Classes/Views/PFImageView.m; sourceTree = ""; }; - ECE1874B575E1E5185B44168861EBBA9 /* PFOfflineQueryLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryLogic.m; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m; sourceTree = ""; }; - ED30F858AF7B9CE0A8573C496C34FE29 /* PFSignUpView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSignUpView.h; path = ParseUI/Classes/SignUpViewController/PFSignUpView.h; sourceTree = ""; }; - ED929F9AD4980BC36464DF3BE248120C /* IQKeyboardManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManager.h; path = IQKeyBoardManager/IQKeyboardManager.h; sourceTree = ""; }; - ED9A2647BBFB6D985C23B197AA1B2982 /* PFFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileState.m; path = Parse/Internal/File/State/PFFileState.m; sourceTree = ""; }; - EDF1B2BF95B7B8E40AF9358E2CAC9C93 /* NSArray+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+Chameleon.m"; path = "Pod/Classes/Objective-C/NSArray+Chameleon.m"; sourceTree = ""; }; - EE18541D7EEA1DE57DE7976E3835CA79 /* PFPropertyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo.m; sourceTree = ""; }; - EE1F78ECB62A69EB240E2BFAAD710CDB /* PFCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCategoryLoader.h; path = Parse/Internal/PFCategoryLoader.h; sourceTree = ""; }; - EE5ED387F92B10AA08591F932C87D0DF /* Unirest.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Unirest.modulemap; sourceTree = ""; }; - EE978A828BDE18C9C31167600F655876 /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; - EEFC9ED15A9741CB66AA57CF2B4D69FB /* PFPurchaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseController.h; path = Parse/Internal/Purchase/Controller/PFPurchaseController.h; sourceTree = ""; }; - EF607DC0E28A9F3234F18C9B3BA88690 /* PFRole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRole.h; path = Parse/PFRole.h; sourceTree = ""; }; - EF673633FFA2D7135116862CBD8BE0B9 /* PFCurrentUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentUserController.m; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.m; sourceTree = ""; }; - EFDB080D04D6824C62FACC8278749656 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; - F017C36C635B636A8A9720DF93844C2F /* PFConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig_Private.h; path = Parse/Internal/Config/PFConfig_Private.h; sourceTree = ""; }; - F01AF6F27447ED96CC1D67478AE5944A /* Parse-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Parse-Info.plist"; sourceTree = ""; }; - F032D7E1283777ACE202494C6F7BCD73 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; - F06AE122820D7A69B28B8EE2E62E85F1 /* UISlider+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UISlider+FlatUI.m"; path = "Classes/ios/UISlider+FlatUI.m"; sourceTree = ""; }; - F06ED24D1C39A0CFF4123EB0D9491BFB /* PFObjectUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectUtilities.m; path = Parse/Internal/Object/Utilities/PFObjectUtilities.m; sourceTree = ""; }; - F0849AC8F9BFE0E883A47F09527D2117 /* PFInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationController.m; path = Parse/Internal/Installation/Controller/PFInstallationController.m; sourceTree = ""; }; - F0F27237E7594BDC013703A579974879 /* PFMutableObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableObjectState.h; path = Parse/Internal/Object/State/PFMutableObjectState.h; sourceTree = ""; }; - F18000A5D7CD27A6122BE6E91FD82BC9 /* ChameleonFramework-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChameleonFramework-umbrella.h"; sourceTree = ""; }; - F19C8953497BC870280615D15B50D758 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; - F214F248D919BBE5E1846DA84E7EC571 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; - F24E7092B94D3B25D84A505A530066AE /* PFLoadingView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLoadingView.m; path = ParseUI/Classes/Internal/Views/PFLoadingView.m; sourceTree = ""; }; - F2BA222B9F01795A4208422B79E054CA /* PFAnalyticsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsUtilities.h; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h; sourceTree = ""; }; - F35C83A2CBD33B6D54CB34F091A81847 /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningEventuallyQueue.m; path = Parse/Internal/PFPinningEventuallyQueue.m; sourceTree = ""; }; - F364E09FEB64FC9E1C8B7224CDCE8E01 /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; - F38FDD5066166323AEDEE66D20C6F9C2 /* PFPushChannelsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushChannelsController.h; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.h; sourceTree = ""; }; - F3DEB5E0C029DA28C8320B373AD1B88D /* UINavigationController+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UINavigationController+Chameleon.m"; path = "Pod/Classes/Objective-C/UINavigationController+Chameleon.m"; sourceTree = ""; }; - F439F7531646055B955D7668822E655A /* PFRESTSessionCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTSessionCommand.m; path = Parse/Internal/Commands/PFRESTSessionCommand.m; sourceTree = ""; }; - F449C107CBE098205F80BDB0D60F2E22 /* PFOfflineObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineObjectController.m; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m; sourceTree = ""; }; - F44A3C87BEE43E3E45E5CF3D64032D69 /* UIImage+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+FlatUI.m"; path = "Classes/ios/UIImage+FlatUI.m"; sourceTree = ""; }; - F4555BF7ABB9786C4B80BF763FE75EA7 /* FUIButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUIButton.m; path = Classes/ios/FUIButton.m; sourceTree = ""; }; + EAA0C3C67C7D908A2F7182249E71C853 /* PFCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCollectionViewCell.m; path = ParseUI/Classes/Cells/PFCollectionViewCell.m; sourceTree = ""; }; + EACA9F3764C09E78E6A493517CC775B9 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; + EAE6707081D74AD48DDC2CD34E54F4A5 /* UNIHTTPClientHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPClientHelper.h; path = Unirest/UNIHTTPClientHelper.h; sourceTree = ""; }; + EBA6B31F193A3582597871E09B2C0D55 /* PFKeyValueCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeyValueCache.m; path = Parse/Internal/KeyValueCache/PFKeyValueCache.m; sourceTree = ""; }; + EC4A64A0CD9BB0968D9668774F8AB562 /* PFHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHash.h; path = Parse/Internal/PFHash.h; sourceTree = ""; }; + EC68094E74192E9415DE284736276F42 /* PFMutableObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableObjectState.h; path = Parse/Internal/Object/State/PFMutableObjectState.h; sourceTree = ""; }; + ECD2083274B0707629CB97D4D8099431 /* PFConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConstants.m; path = Parse/PFConstants.m; sourceTree = ""; }; + ED1B808831668BFCE5B5641495D4D294 /* UIProgressView+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+FlatUI.m"; path = "Classes/ios/UIProgressView+FlatUI.m"; sourceTree = ""; }; + ED353E01D2DC7C2CFC849BFC56253F3F /* PFOfflineQueryLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryLogic.h; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h; sourceTree = ""; }; + ED6DBBE9C8F59A2808A1B55CA7815B1A /* IQPreviousNextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQPreviousNextView.h; path = IQKeyboardManager/IQToolbar/IQPreviousNextView.h; sourceTree = ""; }; + EE0570671EA39BDDB0C88A5BB610E898 /* Parse-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-prefix.pch"; sourceTree = ""; }; + EE598A4F3D9378CEBAD8365FAB0D2291 /* PFRESTObjectBatchCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectBatchCommand.m; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.m; sourceTree = ""; }; + EE7E578477183FF7B01EB42B97FB5875 /* PFOfflineQueryLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryLogic.m; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m; sourceTree = ""; }; + EF08F0FD1BF57A2E09B192B96E023021 /* IQKeyboardManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManager-umbrella.h"; sourceTree = ""; }; + EF5EAF79A06EE932EE7BB85498679562 /* PFBase64Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBase64Encoder.h; path = Parse/Internal/PFBase64Encoder.h; sourceTree = ""; }; + EFF140CE5FEE134EEDE89A382783CD66 /* PFQueryCollectionViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryCollectionViewController.m; path = ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m; sourceTree = ""; }; + F002184D6C52C347609B0935CC6CF065 /* UNIBaseRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIBaseRequest.h; path = Unirest/HttpRequest/UNIBaseRequest.h; sourceTree = ""; }; + F051420DDB92AA7A4614BFE96C0B4881 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; + F06A9FEFC03282E0E3A86AAE7A3A6FBC /* UNIHTTPStringResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPStringResponse.m; path = Unirest/HttpResponse/UNIHTTPStringResponse.m; sourceTree = ""; }; + F0D7E94728407981CD0D00CFC842764D /* PFPushState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState_Private.h; path = Parse/Internal/Push/State/PFPushState_Private.h; sourceTree = ""; }; + F126906F253F3C3848FA05C0D242D4D9 /* ParseUI-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ParseUI-dummy.m"; sourceTree = ""; }; + F14562D32CD87B15414FD459F3B13C75 /* PFImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImage.m; path = ParseUI/Classes/Internal/Extensions/PFImage.m; sourceTree = ""; }; + F148BFBBDD8AB8A9E87918D610748144 /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningEventuallyQueue.h; path = Parse/Internal/PFPinningEventuallyQueue.h; sourceTree = ""; }; + F16B2F09DDA3B581B0D212FFDBAA7BEE /* PFEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEncoder.h; path = Parse/Internal/PFEncoder.h; sourceTree = ""; }; + F16F15C48D3F05417CA21097C2E54EDC /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; + F23678C89071A5C346F5BE0C1DFE5EC2 /* PFSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabase.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m; sourceTree = ""; }; + F30BAE81C83BFC24C3F09853774210B8 /* PFMutableUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableUserState.h; path = Parse/Internal/User/State/PFMutableUserState.h; sourceTree = ""; }; + F32062803128DABF9E52794D64204AA2 /* IQUIWindow+Hierarchy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIWindow+Hierarchy.h"; path = "IQKeyboardManager/Categories/IQUIWindow+Hierarchy.h"; sourceTree = ""; }; + F41BA5906F72B08707A6E9500176C911 /* PFQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState.h; path = Parse/Internal/Query/State/PFQueryState.h; sourceTree = ""; }; F47F6AD14A34D9AF4DC5B0EC8FF52D24 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - F494433C963318EF0C17653A4A373201 /* IQToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQToolbar.h; path = IQKeyBoardManager/IQToolbar/IQToolbar.h; sourceTree = ""; }; - F552E66B16A2615DC0009C21B50D3642 /* PFCoreManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCoreManager.m; path = Parse/Internal/PFCoreManager.m; sourceTree = ""; }; - F5B5CF62D6DD8EC2B0ABA7B384CFB873 /* PFPropertyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo.h; sourceTree = ""; }; - F6895F2BAF98D8298BFB0A2C2E84DF25 /* PFResources.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFResources.h; path = ParseUI/Generated/PFResources.h; sourceTree = ""; }; - F6B30CADFCD2F0D69405E4D939DC3BFB /* UIColor+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+Chameleon.m"; path = "Pod/Classes/Objective-C/UIColor+Chameleon.m"; sourceTree = ""; }; - F7278CD831A6A182FCEB151BD633E223 /* PFMultiProcessFileLockController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLockController.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m; sourceTree = ""; }; - F7C53E20D1BF8377618EFF47699E99E0 /* KeyboardManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KeyboardManager.h; path = IQKeyBoardManager/KeyboardManager.h; sourceTree = ""; }; + F4F2DBF73DDDA25055C195018E9186F0 /* UINavigationBar+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UINavigationBar+FlatUI.m"; path = "Classes/ios/UINavigationBar+FlatUI.m"; sourceTree = ""; }; + F60B9EE41FD4D8BAB2516F180F00B059 /* FUIAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUIAlertView.h; path = Classes/ios/FUIAlertView.h; sourceTree = ""; }; + F63505CC4ACA8270E183DAA52A22B58A /* PFLogInViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogInViewController.m; path = ParseUI/Classes/LogInViewController/PFLogInViewController.m; sourceTree = ""; }; + F6390E9096EABF37B25ABD5CAB5B561B /* UNIHTTPResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPResponse.m; path = Unirest/HttpResponse/UNIHTTPResponse.m; sourceTree = ""; }; + F6A33DD502114C23783D6D52977D75D2 /* PFLocalization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocalization.h; path = ParseUI/Classes/Internal/PFLocalization.h; sourceTree = ""; }; + F756DED267DAEAA45B7B75F44B527FE0 /* ParseInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseInternal.h; path = Parse/Internal/ParseInternal.h; sourceTree = ""; }; + F76DB2BC23017FA90C4165EAE8CFB396 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; + F83EC07F9C3FF86C4D9BD2A58B549B0E /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; + F84345E7863ED40A20705BCC540EF530 /* UNIHTTPBinaryResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPBinaryResponse.m; path = Unirest/HttpResponse/UNIHTTPBinaryResponse.m; sourceTree = ""; }; F84B331B5D6AAF1548DD1BB004AE5C2A /* Bolts */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Bolts; path = Bolts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F863D0768304DA4198F0440CDF7AA8C1 /* PFKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeychainStore.m; path = Parse/Internal/PFKeychainStore.m; sourceTree = ""; }; - F87229E5105EE0FA00DE0B0D95E67052 /* UIView+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIView+ChameleonPrivate.h"; sourceTree = ""; }; - F8778205B24E6652290E0F5E7CA361EC /* PFJSONSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFJSONSerialization.h; path = Parse/Internal/PFJSONSerialization.h; sourceTree = ""; }; - F8C8EB38499DF1B91AD5834F3D8238B6 /* PFCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloud.m; path = Parse/PFCloud.m; sourceTree = ""; }; - F9264E1D10476FDE807BE7A3F3324C1F /* UNIUrlConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIUrlConnection.m; path = Unirest/UNIUrlConnection.m; sourceTree = ""; }; - F9A8AE9C1EA56C8732FF0143F957D513 /* PFImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImageCache.m; path = ParseUI/Classes/Internal/PFImageCache.m; sourceTree = ""; }; - FABD26BF571BCC663379AABBAAE7B44B /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLConnectionOperation.h; path = AFNetworking/AFURLConnectionOperation.h; sourceTree = ""; }; - FABD3C800CB44450C92F28069681BE92 /* BoltsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BoltsVersion.h; path = Bolts/Common/BoltsVersion.h; sourceTree = ""; }; - FB8B3149AFFBFA7C33EB94E521126BBF /* PFLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogging.h; path = Parse/Internal/PFLogging.h; sourceTree = ""; }; - FC5523A002FB0121BC9A4F24743AFB0D /* PFObjectSubclassingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassingController.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m; sourceTree = ""; }; - FC83E11ABE486AAF98952F9D81D4ED34 /* PFPurchase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchase.m; path = Parse/PFPurchase.m; sourceTree = ""; }; - FCE06702DA3E947891057A5BB5C23AB1 /* PFCommandCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandCache.m; path = Parse/Internal/PFCommandCache.m; sourceTree = ""; }; - FD4E574985753AA8FBFCD4DF93047E2C /* PFErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFErrorUtilities.m; path = Parse/Internal/PFErrorUtilities.m; sourceTree = ""; }; + F84F91BBE51B1905554065F47F8129B3 /* UIColor+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+Chameleon.m"; path = "Pod/Classes/Objective-C/UIColor+Chameleon.m"; sourceTree = ""; }; + F8E604995C153FE58AF3F074F1262AEA /* UIProgressView+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+FlatUI.h"; path = "Classes/ios/UIProgressView+FlatUI.h"; sourceTree = ""; }; + FAA6B39941ACCBCAFA2A4F26CF1AF48C /* UIStepper+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIStepper+FlatUI.h"; path = "Classes/ios/UIStepper+FlatUI.h"; sourceTree = ""; }; + FB2160A0B485224469FAF6BA39EB0364 /* UISlider+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UISlider+FlatUI.m"; path = "Classes/ios/UISlider+FlatUI.m"; sourceTree = ""; }; + FB6B6FE77562EFAE3F96B1E69E8AC7BB /* PFACLState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState_Private.h; path = Parse/Internal/ACL/State/PFACLState_Private.h; sourceTree = ""; }; + FB87370F76BC674AD21F1FABEB5464F9 /* PFKeyValueCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache.h; sourceTree = ""; }; + FB9516C98F43C642D31BA9E3D82C8206 /* PFCurrentConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentConfigController.h; path = Parse/Internal/Config/Controller/PFCurrentConfigController.h; sourceTree = ""; }; + FC11F4C9F01877A5D56739B9BBA85621 /* PFPurchaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseController.h; path = Parse/Internal/Purchase/Controller/PFPurchaseController.h; sourceTree = ""; }; + FC35A11ED7B0DCD6819A7CBB019FE94C /* PFRole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRole.m; path = Parse/PFRole.m; sourceTree = ""; }; + FCD70579BE96CFBD090F1E64FC7A1E4E /* FUICellBackgroundView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUICellBackgroundView.m; path = Classes/ios/FUICellBackgroundView.m; sourceTree = ""; }; + FCDFA364DF4CC49FC21ECB8993B987F4 /* PFKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeychainStore.m; path = Parse/Internal/PFKeychainStore.m; sourceTree = ""; }; + FD5C4496FDDA02FC33B9EF297AD6BF6A /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; FD99F6C0C8D35C9AECD61CAC8D4951B4 /* Pods-FoodbLog-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FoodbLog-acknowledgements.plist"; sourceTree = ""; }; - FDB1BAB3B8D54F4259C686820194F1B4 /* PFFileDataStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileDataStream.h; path = Parse/Internal/File/FileDataStream/PFFileDataStream.h; sourceTree = ""; }; - FDBF6836162C2F1E62D2A5B6917F4F50 /* PFOfflineQueryLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryLogic.h; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h; sourceTree = ""; }; - FDFED8D0FCA171BCC518F85E9793444E /* PFRect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRect.m; path = ParseUI/Classes/Internal/Extensions/PFRect.m; sourceTree = ""; }; - FF08CF3F86D480A8166480D6782736FD /* PFMutableQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableQueryState.m; path = Parse/Internal/Query/State/PFMutableQueryState.m; sourceTree = ""; }; - FF246D759D5911D6B15A849D032F9E71 /* PFObjectEstimatedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectEstimatedData.h; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h; sourceTree = ""; }; - FF48AB657BBC095D80AA753EDFA8198E /* PFURLConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLConstructor.m; path = Parse/Internal/HTTPRequest/PFURLConstructor.m; sourceTree = ""; }; - FF6E60AD4F8CE395B8997C363B38E9FD /* ChameleonFramework-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChameleonFramework-prefix.pch"; sourceTree = ""; }; - FFDAC5862665AC65E3E4CD90C8369020 /* Bolts-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-umbrella.h"; sourceTree = ""; }; + FE4BA056F7A9AC13CC0B5DC014161925 /* UNIBaseRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIBaseRequest.m; path = Unirest/HttpRequest/UNIBaseRequest.m; sourceTree = ""; }; + FE9E03DE7A25EA6F5C94C4201C60D18B /* PFObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectController.m; path = Parse/Internal/Object/Controller/PFObjectController.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 05A298B14480994CEB5F25490E57D1CD /* Frameworks */ = { + 0AF9CF3C76DBE562539FE47E28672C5A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FDB6E1D811A52AD01DFD1128E8EF8911 /* CoreGraphics.framework in Frameworks */, + E333D533DE4361D5A3CE2F9D62281084 /* Foundation.framework in Frameworks */, + 5114F8D6A5939B847DDDC41E2B75D419 /* QuartzCore.framework in Frameworks */, + 237A599B046B4F3EB709E88AC0C2F107 /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1ACEAF5CB53FDEBADFADE9621F25DB2B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2C9ABA75D5226F81794858C2526DCC7C /* CoreGraphics.framework in Frameworks */, - 7C57153FEFBA930A0F3DE7E6A5DDFD98 /* Foundation.framework in Frameworks */, - F868175B0C271A19B75F4993EEF107D1 /* QuartzCore.framework in Frameworks */, - 7ECD6A8CE8FF5825DDD32C63DD6F2B43 /* UIKit.framework in Frameworks */, + 07A6B25857900B4C1A2C450E1B6CC2C6 /* CoreGraphics.framework in Frameworks */, + DFA57BC7705BEA564355F07D921005B0 /* Foundation.framework in Frameworks */, + 2D9C9874A5E0BFD7EC15207A5008A2E9 /* QuartzCore.framework in Frameworks */, + 7C534B05C9F8A8CA0A573629B03C076B /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 0AF9CF3C76DBE562539FE47E28672C5A /* Frameworks */ = { + 4391EAF3DDC2963B7871286D3F9D9614 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FDB6E1D811A52AD01DFD1128E8EF8911 /* CoreGraphics.framework in Frameworks */, - E333D533DE4361D5A3CE2F9D62281084 /* Foundation.framework in Frameworks */, - 5114F8D6A5939B847DDDC41E2B75D419 /* QuartzCore.framework in Frameworks */, - 237A599B046B4F3EB709E88AC0C2F107 /* UIKit.framework in Frameworks */, + 62930E5DA75B433CF56BD46ACCDF18F0 /* CoreGraphics.framework in Frameworks */, + 1EF0C2E2ADE21F09A52C24D1C6A1DEB5 /* Foundation.framework in Frameworks */, + 8169F60E91A5DCF1BCD770127B09C896 /* QuartzCore.framework in Frameworks */, + 6C0B0898DDB38E27DC6B993EFCFBEEB4 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1623,87 +1643,80 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - FF5E3D2C3355425B1E11123AF7B4DBC2 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 36D51FC3C4F0F93BF917316E39608365 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0527DDC257CC042E913C840E55B79F4B /* Core */ = { + 172C6AB29CA1720C0D85F380DD22AFB9 /* Targets Support Files */ = { isa = PBXGroup; children = ( - D76E57E96B10ED8D71DC4BE92815D2B3 /* NSData+ImageContentType.h */, - CE8BDCF7E26F4C56C0ADF6B761072CC2 /* NSData+ImageContentType.m */, - 765C0EAAC0CBC6AF531C333F05E087B9 /* SDImageCache.h */, - 3613B45ABCFAEBD5BADAE64A82A4746B /* SDImageCache.m */, - A50114757684801C1DE99C04001D04C4 /* SDWebImageCompat.h */, - A356B9DFCE0F6FA18DF48B6098125F04 /* SDWebImageCompat.m */, - 6CB133094501625DCA52F72F4C4E2B46 /* SDWebImageDecoder.h */, - 311DAB5AE58D986B329A83CDA6086370 /* SDWebImageDecoder.m */, - 7861C0328B9B37380137F55D5B766F21 /* SDWebImageDownloader.h */, - 5E6A437EBB862966A809668856F8E247 /* SDWebImageDownloader.m */, - 412765A1C5B6953A288C3BAEBC8E6B37 /* SDWebImageDownloaderOperation.h */, - 4BE6842882A4FB9F520482896F6AB111 /* SDWebImageDownloaderOperation.m */, - 305805548D87E2C5165C0A0FED697B4F /* SDWebImageManager.h */, - C9045272DB5D24BA18512C635B70BF34 /* SDWebImageManager.m */, - A042B54870F2691CE1141CC51249B831 /* SDWebImageOperation.h */, - 4DAB5D2AB74AB4E6E40BC4E2BA5EC42C /* SDWebImagePrefetcher.h */, - E715B6385F222A65C0AEDD033DAC27BF /* SDWebImagePrefetcher.m */, - 01682B06EC1A9F5115B2823C70E94CA9 /* UIButton+WebCache.h */, - 566D307A23F6EE2FF9B47E6A1C68C59E /* UIButton+WebCache.m */, - B5B9189D6AB1779845E876D0D0424221 /* UIImage+GIF.h */, - ACF7C931823A68DDBB4BD5C0A4C40927 /* UIImage+GIF.m */, - 6133AB3618602C2A8838511FEC730F13 /* UIImage+MultiFormat.h */, - 8FD253470226BBD7EAC24A931D19F7D9 /* UIImage+MultiFormat.m */, - 11DA25D5854F43477EA8697C9A8A9677 /* UIImageView+HighlightedWebCache.h */, - F032D7E1283777ACE202494C6F7BCD73 /* UIImageView+HighlightedWebCache.m */, - F19C8953497BC870280615D15B50D758 /* UIImageView+WebCache.h */, - CF3F287B1CCA362FEB1A80FCD3146513 /* UIImageView+WebCache.m */, - 1579F2982C42C23D86C4671BEFC5BC9E /* UIView+WebCacheOperation.h */, - A515ED69EEDB97450E752EA285213DEA /* UIView+WebCacheOperation.m */, + CC67B748D6D89E34B3EBA3591D5D4298 /* Pods-FoodbLog */, ); - name = Core; + name = "Targets Support Files"; sourceTree = ""; }; - 172C6AB29CA1720C0D85F380DD22AFB9 /* Targets Support Files */ = { + 1A1236C094017AC9C2C86482E88B6267 /* IQKeyboardManager */ = { isa = PBXGroup; children = ( - CC67B748D6D89E34B3EBA3591D5D4298 /* Pods-FoodbLog */, + E515F384B4FC8E3B8439F1DB578EB3E5 /* IQBarButtonItem.h */, + 3C56C342942346FB5B3BCF38AFC2442C /* IQBarButtonItem.m */, + 4012B08564DD4ED326E07CC6F074DD1B /* IQKeyboardManager.h */, + CF8C2D7B1873D1DE1458FA7D18F57592 /* IQKeyboardManager.m */, + A038B70DE9AC30C4BE5735BDCF379F95 /* IQKeyboardManagerConstants.h */, + 82C057CF73EC05C9B670CD36A4FF9DC1 /* IQKeyboardManagerConstantsInternal.h */, + A37B0AEE4085E5EAF1D675B479E83F07 /* IQKeyboardReturnKeyHandler.h */, + 3E8D9690AF80D6F60B62DDAF44050907 /* IQKeyboardReturnKeyHandler.m */, + 39A51D0C532BCF6377526E08062DE36D /* IQNSArray+Sort.h */, + C1D45ADCE0464957F823585B3FDF82FB /* IQNSArray+Sort.m */, + ED6DBBE9C8F59A2808A1B55CA7815B1A /* IQPreviousNextView.h */, + 9C159A4F2438A5E10FDA73505BEFA94D /* IQPreviousNextView.m */, + 8B577949D6BEA39F003EEBD1157A4423 /* IQTextView.h */, + 80CB234E37168DF49DEAB9D544A0C5FB /* IQTextView.m */, + 3A93EE71639FC1F292FCD2110B27A625 /* IQTitleBarButtonItem.h */, + 848D623C2A83A163ACAD11BD0385C867 /* IQTitleBarButtonItem.m */, + 744ACCE6B933BA912384E2E1F34A3BA7 /* IQToolbar.h */, + 97EE31EC4749C71A2BAD9783137A7666 /* IQToolbar.m */, + 9569F3B77A7977F33A12712389BEACFC /* IQUIScrollView+Additions.h */, + 8C177476B0E75BABF4B4FCB549A41A30 /* IQUIScrollView+Additions.m */, + 96430B20989715A8573563A41C2C9B2B /* IQUITextFieldView+Additions.h */, + 22F7F0A49C5577FAC19A72BBDAE54073 /* IQUITextFieldView+Additions.m */, + C3E2DA89B7784D376EAF5F391CD3E45B /* IQUIView+Hierarchy.h */, + BE1AA56FB3518F5ACF08ABFFB8F71661 /* IQUIView+Hierarchy.m */, + 5A8213D4F0DEBAD8576AB50551D8B094 /* IQUIView+IQKeyboardToolbar.h */, + A5AB58CE9D615EDAA234854092081DEA /* IQUIView+IQKeyboardToolbar.m */, + 33EFCD2A806F168B502839B5E06004C6 /* IQUIViewController+Additions.h */, + 7C73CA6320217923A2DFB485254CC628 /* IQUIViewController+Additions.m */, + F32062803128DABF9E52794D64204AA2 /* IQUIWindow+Hierarchy.h */, + 648C65817ACE24AD1C674B8C829B4E36 /* IQUIWindow+Hierarchy.m */, + 5346416BDCBA591CC9F9A3B964F83782 /* Resources */, + 708A68883023B96262CA436953D3A180 /* Support Files */, ); - name = "Targets Support Files"; + name = IQKeyboardManager; + path = IQKeyboardManager; sourceTree = ""; }; - 184BEF9B5CABA24D9A779A2C07AD0583 /* Support Files */ = { + 2060B9D5D3F6298565E5805102291334 /* Security */ = { isa = PBXGroup; children = ( - 45802840BA5072DF962ED54D09FE8843 /* Bolts.modulemap */, - 335A452C51FBD35625AA2BC327ADC7F5 /* Bolts-dummy.m */, - 0A509D3953B659E7181EC82469B94A9A /* Bolts-Info.plist */, - 1950AD1FE382802A49D281B1441BD20A /* Bolts-prefix.pch */, - FFDAC5862665AC65E3E4CD90C8369020 /* Bolts-umbrella.h */, - 7BE179E9C8B4046FCC237E5DA15BB57D /* Bolts.debug.xcconfig */, - 1C002313FB340FD9903A219A795BD6EE /* Bolts.release.xcconfig */, + 59ECECD66E1B23B4D503CFCF46952262 /* AFSecurityPolicy.h */, + F051420DDB92AA7A4614BFE96C0B4881 /* AFSecurityPolicy.m */, ); - name = "Support Files"; - path = "../Target Support Files/Bolts"; + name = Security; sourceTree = ""; }; - 1DAB1DDDDEABBA4EEA6A022495946264 /* NSURLConnection */ = { + 221E052A8AFDB44D77227FF60A110FF3 /* Pods */ = { isa = PBXGroup; children = ( - 96B0AB09E758FB641EEAB8FB2C91C6C9 /* AFHTTPRequestOperation.h */, - B9BC37C36EDC5E7749DCC7CEC01B8E91 /* AFHTTPRequestOperation.m */, - DD00DBDBA4AB7937FF095E5352F14E53 /* AFHTTPRequestOperationManager.h */, - 978F1D1FC858DCFF654EA8F44B32F5DF /* AFHTTPRequestOperationManager.m */, - FABD26BF571BCC663379AABBAAE7B44B /* AFURLConnectionOperation.h */, - B4E5AC1FC469AA6601F3D23C8271F2CA /* AFURLConnectionOperation.m */, + 4B623989A7584AD4A0E8CF1067329FE0 /* AFNetworking */, + 3BEF4610E16B3A9A8411E7E551A7B1CC /* Bolts */, + EED214742741A6815D2FD502A3958CC1 /* ChameleonFramework */, + 6FAFD0A27024CDBFFE2A754024EC0052 /* FlatUIKit */, + 1A1236C094017AC9C2C86482E88B6267 /* IQKeyboardManager */, + A9C390BE4A98FCC6786CE69CAF18E10B /* Parse */, + 8072B1F77714727D2BA4CDB6803AAE1F /* ParseUI */, + D05441F363DA5C39F91284F9B5CEDACC /* SDWebImage */, + 3AE7B9721CD35F860143D929B3C54A41 /* Unirest */, ); - name = NSURLConnection; + name = Pods; sourceTree = ""; }; 25EEC3565A27693E64AB8F08DCF47B36 /* iOS */ = { @@ -1726,36 +1739,50 @@ name = iOS; sourceTree = ""; }; - 2BC3E698BB02D8A2D272C4933EA4F72B /* Reachability */ = { + 29AEB72CCB634C4DC790FA617430A8A1 /* Tasks */ = { isa = PBXGroup; children = ( - 5896CFB908B877F5C2F4D5066E6E80D3 /* AFNetworkReachabilityManager.h */, - F214F248D919BBE5E1846DA84E7EC571 /* AFNetworkReachabilityManager.m */, + 53CEB84926E7FC9E2CFE13206641FDF1 /* BFCancellationToken.h */, + 78392292469D781C93066CD8051EC869 /* BFCancellationToken.m */, + 13621BDB45C7DD8B00AEED3D06BB3D73 /* BFCancellationTokenRegistration.h */, + E05ADC8B41F427B22AC3E815A19350EB /* BFCancellationTokenRegistration.m */, + CE1F8CA7790E14B93C4917A7AA6806F0 /* BFCancellationTokenSource.h */, + BB8F0303D37F7A5C0E989A3297D5D05E /* BFCancellationTokenSource.m */, + 2CD3DF3B3BA00C9C3B9025084D6018EA /* BFDefines.h */, + CA0F759EB3B8FF5747A3FF8D9A670ED4 /* BFExecutor.h */, + E8530B9B30D42F583B3BC811E303DBD3 /* BFExecutor.m */, + 9BE0320666C40F6DC06AF96C24A87FFC /* BFTask.h */, + 30900CE96B834D956AE04457A32EC9B2 /* BFTask.m */, + 27FD73571D1F0E411532F29E810FE8F4 /* BFTaskCompletionSource.h */, + 34B4C034A030FAA4EDA0401F0A8DA0E1 /* BFTaskCompletionSource.m */, + 143B16D45EA328180F3DC8ADB2E0F355 /* Bolts.h */, + B77EC240733E6F154C558B7682AB8B94 /* Bolts.m */, + CB2C2E44C04D75E24B7B90AAA247551E /* BoltsVersion.h */, ); - name = Reachability; + name = Tasks; sourceTree = ""; }; - 2FF61124D8A80D2D8DE9D6F350DE5041 /* Tasks */ = { + 2D895094421AE2644DD1699AC14C24ED /* NSURLSession */ = { isa = PBXGroup; children = ( - 4C575A54BA05AD27990EABB75C2F2926 /* BFCancellationToken.h */, - 1DEB4FC3937D0DC7EB7B1CE6AE0C79D6 /* BFCancellationToken.m */, - 6BF3E9A8E7DEEA28BC70D87AF3DBEC43 /* BFCancellationTokenRegistration.h */, - 69460567E8D0F3A25083496C96A69461 /* BFCancellationTokenRegistration.m */, - 6D76EBB2E083B394F15EA609C72DA53F /* BFCancellationTokenSource.h */, - 8C9643764C40666FA3BDA5483199A807 /* BFCancellationTokenSource.m */, - BC79A8ADF356BE7E0C97159A9173BD3E /* BFDefines.h */, - 70C2CCBB87CBCB7C3F8AED8C1396EF19 /* BFExecutor.h */, - 0FFE8C5EB6588366F5E38E8025B4CAD0 /* BFExecutor.m */, - E594ABB625D8E0146B3BC5AF5C3BD580 /* BFTask.h */, - D253FAF99DE0E9661935D36E6600717C /* BFTask.m */, - B2B797BD23176FC43BD0D3B5634BE059 /* BFTaskCompletionSource.h */, - 3C3F57E6B4F1FB2E1F1904A1F180B1D6 /* BFTaskCompletionSource.m */, - 9F97B8CE87B16ACD8D4260933E48F819 /* Bolts.h */, - E15E68480948E1C08CA894190BF3AF27 /* Bolts.m */, - FABD3C800CB44450C92F28069681BE92 /* BoltsVersion.h */, + 74D0634B76E4EE3C7476264586B47F18 /* AFHTTPSessionManager.h */, + F76DB2BC23017FA90C4165EAE8CFB396 /* AFHTTPSessionManager.m */, + 29E0F094F0637842397AB96FB4423477 /* AFURLSessionManager.h */, + F83EC07F9C3FF86C4D9BD2A58B549B0E /* AFURLSessionManager.m */, ); - name = Tasks; + name = NSURLSession; + sourceTree = ""; + }; + 2DEDCFFEE26FCED942FDE957C2A6025E /* Resources */ = { + isa = PBXGroup; + children = ( + 70B003B9161DCD2E0A45781DF2576C89 /* flat-ui-icons-regular.ttf */, + 3DC055B41165FBC9ADAFA20E9AFEC94E /* Lato-Bold.ttf */, + 2BA2B31088E6C331D800CCAB32D64F16 /* Lato-Italic.ttf */, + 19DAC19FA8196CB203717E1E2DF33FC0 /* Lato-Light.ttf */, + 02461850BFE597052075F46B27750287 /* Lato-Regular.ttf */, + ); + name = Resources; sourceTree = ""; }; 35E526B6E4CA6A7E89FE8C5A5B1F2259 /* Frameworks */ = { @@ -1766,393 +1793,713 @@ name = Frameworks; sourceTree = ""; }; - 3D9B326F58695BF3E80F4219F6DF0F72 /* Support Files */ = { + 3AE7B9721CD35F860143D929B3C54A41 /* Unirest */ = { isa = PBXGroup; children = ( - 3AE452759C3419530F9948A6E7852434 /* SDWebImage.modulemap */, - 2D3DED295E0CF4409F8BC8976A09F184 /* SDWebImage-dummy.m */, - A9ACE875C5C88F2FC048BA2052E6739F /* SDWebImage-Info.plist */, - C3E9C164B6FC7D790B44FC7EB8462572 /* SDWebImage-prefix.pch */, - 044039FB6F0BAE9C54969FBC7A846A8A /* SDWebImage-umbrella.h */, - A7C121EE4B1DE511B784FCD1F75C3CAF /* SDWebImage.debug.xcconfig */, - 8F4B1D49F33B5E34B800900D19CA98E3 /* SDWebImage.release.xcconfig */, + 06BFD711819A59BFBB5685332131E5BF /* Base64.h */, + D64494125FCBF8578381C4A3DFC24582 /* Base64.m */, + F002184D6C52C347609B0935CC6CF065 /* UNIBaseRequest.h */, + FE4BA056F7A9AC13CC0B5DC014161925 /* UNIBaseRequest.m */, + 8E7AE561E188BF127BA12657694BA340 /* UNIBodyRequest.h */, + B57AB3BA641DCFA726A7D3F91B31F320 /* UNIBodyRequest.m */, + C8C622D61D94B0BB8BC678A39B314790 /* UNIHTTPBinaryResponse.h */, + F84345E7863ED40A20705BCC540EF530 /* UNIHTTPBinaryResponse.m */, + EAE6707081D74AD48DDC2CD34E54F4A5 /* UNIHTTPClientHelper.h */, + E8C2D556022D673D9A39AEE75A92D7B7 /* UNIHTTPClientHelper.m */, + 328E074028831B7162CC31C478F53164 /* UNIHTTPJsonResponse.h */, + 0C63D8CB09610644959B555ABF676D45 /* UNIHTTPJsonResponse.m */, + 8BBDBA1C6D3C481A980BC35C14B1BAEF /* UNIHTTPRequest.h */, + D6C2112669072AE57F3B1EF2C2D85B3D /* UNIHTTPRequest.m */, + E1429F34AED40EF32B9C37C25F4B5395 /* UNIHTTPRequestWithBody.h */, + 49C9AED1403F10EAEF0BDD8C5D1D3ED4 /* UNIHTTPRequestWithBody.m */, + 7175B962AF396E26B597D16DC3A5CAAB /* UNIHTTPResponse.h */, + F6390E9096EABF37B25ABD5CAB5B561B /* UNIHTTPResponse.m */, + DBE6819D41549A1CBD4D69F3085F2562 /* UNIHTTPStringResponse.h */, + F06A9FEFC03282E0E3A86AAE7A3A6FBC /* UNIHTTPStringResponse.m */, + A616ECB7E02535F4B9005E0B7B570609 /* UNIJsonNode.h */, + 71FEF17E88601C7390E60B7D3C7D86D9 /* UNIJsonNode.m */, + 0D36B7A5D9F6AF7F4E01B2320E7BB931 /* UNIRest.h */, + 302EA9A2809EC2AE89E8395AE0606DC9 /* UNIRest.m */, + 7C46519EC14E1637D6277AAE86419317 /* UNISimpleRequest.h */, + 5ED9BE76CA272DD593432FBBB31A0802 /* UNISimpleRequest.m */, + 2BB08B7E9CFEBFDFED3FC2C86EF02981 /* UNIUrlConnection.h */, + 1D3130F150ABEFE07878D5F834F7C368 /* UNIUrlConnection.m */, + 6080B766415EA78C1E0CD3658451D1AF /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/SDWebImage"; + name = Unirest; + path = Unirest; sourceTree = ""; }; - 40907AAAD10D7320EC60B42B0F11BB6C /* Unirest */ = { + 3BEF4610E16B3A9A8411E7E551A7B1CC /* Bolts */ = { isa = PBXGroup; children = ( - 473595C4DE2B48B0D88D8F99E55C5F45 /* Base64.h */, - D9C88B55C686DDE9636FBFF719E4A77D /* Base64.m */, - B3DEB5E877C555C69169163E7AE3DCD1 /* UNIBaseRequest.h */, - 3B46EEECD7599B121204708C32CECD6C /* UNIBaseRequest.m */, - AD75432B2BF6D1FC707CFCCD3527D979 /* UNIBodyRequest.h */, - 27CF6BC1B2E5C52B3244B8D531442D06 /* UNIBodyRequest.m */, - 7A42508E95E64986B0EDAFC9E7C7942A /* UNIHTTPBinaryResponse.h */, - A89D66CA82F4BB4ED27F23A368117AD8 /* UNIHTTPBinaryResponse.m */, - 242785A2D898F8B3178C5C87B1AD01AC /* UNIHTTPClientHelper.h */, - 38FA89344906DEDDD5D2F77DE3B534B8 /* UNIHTTPClientHelper.m */, - BC984301125702EFEAEC41E5B9293303 /* UNIHTTPJsonResponse.h */, - 2B4F6F85D50E4CA8F5E785A0C0E8F842 /* UNIHTTPJsonResponse.m */, - A283BA24B8BC2F745E053B68490B43ED /* UNIHTTPRequest.h */, - 61BDE38ED20108AC210E4C985B982B1B /* UNIHTTPRequest.m */, - 843985569B6BCF4CD645497A32668195 /* UNIHTTPRequestWithBody.h */, - E3523BF1D55FC301141D3E8EA5BD9A1F /* UNIHTTPRequestWithBody.m */, - 9F8AB594F361E76ACA20213E0F3D3860 /* UNIHTTPResponse.h */, - 5272189E4887F0A7478864335C376F72 /* UNIHTTPResponse.m */, - C7F69AB63C5B9D83F940D7C9CA0CE984 /* UNIHTTPStringResponse.h */, - 7B09852DB9FD0FD28F70ECC80DCF2091 /* UNIHTTPStringResponse.m */, - E291C26D7FB8D9A151C45977AB616E47 /* UNIJsonNode.h */, - 5FE07D72A0D452DFEAACC04F124006CF /* UNIJsonNode.m */, - 6226CB7D1425E15682AC63FA51921DD7 /* UNIRest.h */, - 91C373870E6D645F6FF004CCD43B21E6 /* UNIRest.m */, - 45CDE5CE83E5FA7A91A9F1B5B0BA5342 /* UNISimpleRequest.h */, - E61428FE87E53D9A77A44F2EAFA62DD6 /* UNISimpleRequest.m */, - 8E279FCCEB7C1AEB25BCE46F878D745B /* UNIUrlConnection.h */, - F9264E1D10476FDE807BE7A3F3324C1F /* UNIUrlConnection.m */, - 6C8212FADE4F1FA885795CEDA81FBD14 /* Support Files */, + 9A3B31B4F7EA1475FF834BD44162623C /* Support Files */, + 29AEB72CCB634C4DC790FA617430A8A1 /* Tasks */, ); - name = Unirest; - path = Unirest; + name = Bolts; + path = Bolts; sourceTree = ""; }; - 42F219A198EDEA28867E3B8A76FF6399 /* IQKeyboardManager */ = { + 44789702D5917B55E9A85E1CE10515B0 /* NSURLConnection */ = { isa = PBXGroup; children = ( - 1D206417FCB7E126D2076A47DEDF1A1C /* IQBarButtonItem.h */, - B72FD366845653BD01ECF1385B7EA338 /* IQBarButtonItem.m */, - ED929F9AD4980BC36464DF3BE248120C /* IQKeyboardManager.h */, - 701A5B85169EB58682F05C75AC13EB3E /* IQKeyboardManager.m */, - 1D3240C4C5BE274F71D28337454BCF6D /* IQKeyboardManagerConstants.h */, - 015D3940BAC78105EDF03F2BB91A46E6 /* IQKeyboardManagerConstantsInternal.h */, - 1EC3FC2DD569F8D2763648C4F041C266 /* IQKeyboardReturnKeyHandler.h */, - 54B90D0232ABF1B3E61A9DC3EEAA226A /* IQKeyboardReturnKeyHandler.m */, - 36EA36B4327C3CAA76DB71E90785D0B4 /* IQNSArray+Sort.h */, - 6D30F5219BDECE4875E21C7C337CAB52 /* IQNSArray+Sort.m */, - C034B2ACBE6538C3217772E314D8114F /* IQSegmentedNextPrevious.h */, - 2C5CF7AB604577F8094BB7A4D0B1EA38 /* IQSegmentedNextPrevious.m */, - BB33008CB3C2594164293FDA78B53616 /* IQTextView.h */, - 1D3EC67DF2778EB45CB9E74820D228B3 /* IQTextView.m */, - BA5631014AC595496E91221859D20693 /* IQTitleBarButtonItem.h */, - 3EFEAE643868EF55305AEDA7B9B5EF2E /* IQTitleBarButtonItem.m */, - F494433C963318EF0C17653A4A373201 /* IQToolbar.h */, - CEB87D6EE15561B81AB4D70AD70B70FB /* IQToolbar.m */, - 8F452750888B246772EB8A6877EBAF3F /* IQUITextFieldView+Additions.h */, - 383265CA7C2F466092EF3C7F1E49C8DE /* IQUITextFieldView+Additions.m */, - 9661CC0A310A5FFEF6DAC9066D0D906F /* IQUIView+Hierarchy.h */, - 989D519E262D75CFB924E7B8A1C4ADDF /* IQUIView+Hierarchy.m */, - 8EFB510E35A2E19894B0116FF11AF2F8 /* IQUIView+IQKeyboardToolbar.h */, - EB082ABFA0DCDEA7C961D1A1D072C3B9 /* IQUIView+IQKeyboardToolbar.m */, - 6EFCD2984A81FFD36BD6341ECAD197B3 /* IQUIViewController+Additions.h */, - 4DCD97868BF52A2DA515BB0660CE3150 /* IQUIViewController+Additions.m */, - C1E8E202F03E9DFA6AFB0F098ABD3A06 /* IQUIWindow+Hierarchy.h */, - 25397001B9BF4C1125DCF8D75A89971C /* IQUIWindow+Hierarchy.m */, - F7C53E20D1BF8377618EFF47699E99E0 /* KeyboardManager.h */, - BA5F913FE40214681746B9F1CB36AD8F /* Resources */, - 4D02E934B6CF23422178CD868DB92236 /* Support Files */, + 0322D52D22023BE2411F2CCAACEE304A /* AFHTTPRequestOperation.h */, + 447A70708A6608EE3D4BD4E556895AE6 /* AFHTTPRequestOperation.m */, + 1ECD2B9CBAE08A9410E23E90B706CC79 /* AFHTTPRequestOperationManager.h */, + B539B882529715D46F58AA7C0F7277A6 /* AFHTTPRequestOperationManager.m */, + 45756B2B291EADD70CF96E443BAD2FF1 /* AFURLConnectionOperation.h */, + 57F5879358C84148A7DCDE756C38208B /* AFURLConnectionOperation.m */, ); - name = IQKeyboardManager; - path = IQKeyboardManager; + name = NSURLConnection; sourceTree = ""; }; - 4C6F811A370BAC7085002387B6FB5163 /* AFNetworking */ = { + 4B623989A7584AD4A0E8CF1067329FE0 /* AFNetworking */ = { isa = PBXGroup; children = ( - 68664BFE50321FF5CE50A110AAE7E2E5 /* AFNetworking.h */, - 1DAB1DDDDEABBA4EEA6A022495946264 /* NSURLConnection */, - 5B3F5C7632AEB22DD4907D271307F426 /* NSURLSession */, - 2BC3E698BB02D8A2D272C4933EA4F72B /* Reachability */, - A5DCF58F985CE9C88DBDDE05CF1FE71E /* Security */, - 74971D8533C6DBDC443C05EE2E7469A5 /* Serialization */, - BC7D3B67D42FFD3E1347CBCA43F97813 /* Support Files */, - D198DD0422CB3811CCB34AA14A138785 /* UIKit */, + A6710EB1470E4F0F7701E1C154191C58 /* AFNetworking.h */, + 44789702D5917B55E9A85E1CE10515B0 /* NSURLConnection */, + 2D895094421AE2644DD1699AC14C24ED /* NSURLSession */, + 8D79697AE2D866947AF882E9A01E14EE /* Reachability */, + 2060B9D5D3F6298565E5805102291334 /* Security */, + CBBBB1AC47AD554DE9F0A578ECDE67F4 /* Serialization */, + E7E648388FFBDFCD741DBEC0FA599F68 /* Support Files */, + FD3AA9CE5FEF18CC6A3164F66A98AFDD /* UIKit */, ); name = AFNetworking; path = AFNetworking; sourceTree = ""; }; - 4D02E934B6CF23422178CD868DB92236 /* Support Files */ = { + 5346416BDCBA591CC9F9A3B964F83782 /* Resources */ = { isa = PBXGroup; children = ( - C0C70DBBC50F5AFE36A69BF965DF34C8 /* IQKeyboardManager.modulemap */, - 748B0CC576A8F49BAB1FF66E84471822 /* IQKeyboardManager-dummy.m */, - D4481075C8CA2C7CF0F9239E68853BE6 /* IQKeyboardManager-Info.plist */, - BF4323EB4A4B780935FB44201186AA89 /* IQKeyboardManager-prefix.pch */, - E61330560D82210F3152034DA8D29E3E /* IQKeyboardManager-umbrella.h */, - 857F0BA6F21ED8BE24BBE09EC4796DD0 /* IQKeyboardManager.debug.xcconfig */, - 4BD4DB7C36686D11738734B18DF72463 /* IQKeyboardManager.release.xcconfig */, + CB1D7D1EE6ECB93DA929D451A913B2F9 /* IQKeyboardManager.bundle */, ); - name = "Support Files"; - path = "../Target Support Files/IQKeyboardManager"; + name = Resources; sourceTree = ""; }; - 57BC7D63782B2A635093374BF42CC3A9 /* Support Files */ = { + 562C511EFDAF67D6E1E8DC99740F61F2 /* Default */ = { isa = PBXGroup; children = ( - 170B12DAFF7BA65AF6617BDB082A0351 /* FlatUIKit.modulemap */, - 20D75D05C3716B1B1FCE88C6C2E9312D /* FlatUIKit-dummy.m */, - A9681B204C96458D2D417C45571AB098 /* FlatUIKit-Info.plist */, - 220FC34DE425735D70DB9D8C4D741695 /* FlatUIKit-prefix.pch */, - 15797AFCB16424C69558924B2C21A6E3 /* FlatUIKit-umbrella.h */, - 9DA741B4EC0DCED29063435717645FC3 /* FlatUIKit.debug.xcconfig */, - 8B8FAEB0939BC673396EF39DB43C5723 /* FlatUIKit.release.xcconfig */, + 4D7568E836055BBF820E548BA267D097 /* Chameleon.h */, + BB0313D8856E1ACFFE80F68A9635BD01 /* Chameleon_.h */, + 7E432ED6C4BACD597B5F4F2DB17116EA /* Chameleon_.m */, + 63A96BD4D5CE686506290E2B2F6864B5 /* ChameleonConstants.h */, + D996C2666AEBC5DE15F1132F7519EEFA /* ChameleonConstants.m */, + 2F7C8A872250C0A49C96DA6FE264847D /* ChameleonEnums.h */, + 40375E85CA508E2B057CECEF9AC0A466 /* ChameleonMacros.h */, + CD004273FD354237F7D844A9BEAA8D1E /* NSArray+Chameleon.h */, + B4749B8DD730E19C293B814FC52D7503 /* NSArray+Chameleon.m */, + 7F2B4DBA35116B6042915F19733A7176 /* UIButton+Chameleon.h */, + 89DE757655305B9DAB2E3EA0D59AE60D /* UIButton+Chameleon.m */, + B2ED2797E56832F52396742BD5AC40B1 /* UIColor+Chameleon.h */, + F84F91BBE51B1905554065F47F8129B3 /* UIColor+Chameleon.m */, + 6CDA46DB859C98B0E388E4E3FBFB36FB /* UIColor+ChameleonPrivate.h */, + 97B2351AC859811A6FD2A910BB95E71D /* UIColor+ChameleonPrivate.m */, + 8A94C4B6698BAB7FAD0158E1D025AFD0 /* UIImage+ChameleonPrivate.h */, + CF09587F6E7B5C55B2DBC4F76D84C78F /* UIImage+ChameleonPrivate.m */, + 68485F33091E36236F52B5769528EB54 /* UILabel+Chameleon.h */, + E07A6A98D3D5AABF5C8EFFD18AB58BC3 /* UILabel+Chameleon.m */, + 538710A479D4D4516F3473CEB00D6341 /* UINavigationController+Chameleon.h */, + E0FADD9A90F6B97C2F05721EFB03C404 /* UINavigationController+Chameleon.m */, + 73A9A926D0BDDC98D57EA6CCBC0E91AC /* UIView+ChameleonPrivate.h */, + 5D2A07DA0436A22DB926D8F8BA8F922A /* UIView+ChameleonPrivate.m */, + 5EE09B13391CB4E2288B618D9989B7CF /* UIViewController+Chameleon.h */, + 7F5AC19CF9E1DB86BB619A83FD60C580 /* UIViewController+Chameleon.m */, ); - name = "Support Files"; - path = "../Target Support Files/FlatUIKit"; + name = Default; sourceTree = ""; }; - 595CD60B097830EF6B8B59E1F985D800 /* Pods */ = { + 6080B766415EA78C1E0CD3658451D1AF /* Support Files */ = { isa = PBXGroup; children = ( - 4C6F811A370BAC7085002387B6FB5163 /* AFNetworking */, - E8942D476A67018116BB908E43FDA24B /* Bolts */, - 8EE67F52563142B064FA2D7D3BFF110C /* ChameleonFramework */, - A457854110B31D2FF17880780BF3CC9C /* FlatUIKit */, - 42F219A198EDEA28867E3B8A76FF6399 /* IQKeyboardManager */, - B3DE231F1E249B215E83E5CF5E9AD9F4 /* Parse */, - 715038D97A8E539C9D2A3F9A8C9A1176 /* ParseUI */, - 5AC431BFEE005CF60CA52C30AF6ACCF8 /* SDWebImage */, - 40907AAAD10D7320EC60B42B0F11BB6C /* Unirest */, + 3C41CA94D6F9231F57C05FC27DC0014F /* Unirest.modulemap */, + 602303506554C7182024859B53F84A23 /* Unirest-dummy.m */, + 2737B1F251EAB771EB977928EF4E9B9A /* Unirest-Info.plist */, + 98F87F122A15B9E739F85D722AA24C2B /* Unirest-prefix.pch */, + DE1C0FA9FAF3336E0D882CF851F8D942 /* Unirest-umbrella.h */, + 53AED7B37E59FD4C2906C8CD48F1549D /* Unirest.debug.xcconfig */, + 4A6D3469A0C446BC153A71D249DD118C /* Unirest.release.xcconfig */, ); - name = Pods; + name = "Support Files"; + path = "../Target Support Files/Unirest"; sourceTree = ""; }; - 5AC431BFEE005CF60CA52C30AF6ACCF8 /* SDWebImage */ = { + 68AFE8F905231F3E4C5EBFAA29AD5666 /* Support Files */ = { isa = PBXGroup; children = ( - 0527DDC257CC042E913C840E55B79F4B /* Core */, - 3D9B326F58695BF3E80F4219F6DF0F72 /* Support Files */, + BE02B4D17FFF5AE2EC743420048DBAFD /* SDWebImage.modulemap */, + 3A7B398E287C24BCC8433260FC465DB3 /* SDWebImage-dummy.m */, + B8FB8CBAC0C2BDE02C1657F0EF9462AC /* SDWebImage-Info.plist */, + 46E040DEB7A5A629D47173D5EB8CD36C /* SDWebImage-prefix.pch */, + 1222D529EEC7D53C3D01CCE61951FE2B /* SDWebImage-umbrella.h */, + CD46520D8BCDA2FED7653A676AE1DB78 /* SDWebImage.debug.xcconfig */, + 9AC2743E8EC297C24BDC808D253215BC /* SDWebImage.release.xcconfig */, ); - name = SDWebImage; - path = SDWebImage; + name = "Support Files"; + path = "../Target Support Files/SDWebImage"; sourceTree = ""; }; - 5B3F5C7632AEB22DD4907D271307F426 /* NSURLSession */ = { + 6FAFD0A27024CDBFFE2A754024EC0052 /* FlatUIKit */ = { isa = PBXGroup; children = ( - EFDB080D04D6824C62FACC8278749656 /* AFHTTPSessionManager.h */, - BEF1B2C844D9D029D40DCE5288DA37E5 /* AFHTTPSessionManager.m */, - 3667C7F789954F098ADC741D622D52B7 /* AFURLSessionManager.h */, - 7D75D7FA476F50BC5FB3F3B0641D2926 /* AFURLSessionManager.m */, + 80A30BF5DA2904576C9A695E79AEBC44 /* FlatUIKit.h */, + F60B9EE41FD4D8BAB2516F180F00B059 /* FUIAlertView.h */, + 59C4881749E08C596424F2235546B787 /* FUIAlertView.m */, + E5673AE21FC295054FE51806B2157579 /* FUIButton.h */, + 3BF939D82D860D7ABEC9DC1665E9AFFC /* FUIButton.m */, + BD17758C6D9E58B355428B80263D17EA /* FUICellBackgroundView.h */, + FCD70579BE96CFBD090F1E64FC7A1E4E /* FUICellBackgroundView.m */, + BFB3C1E76C4F806EFCDE8512A39D23C2 /* FUIPopoverBackgroundView.h */, + 518E2B391F997E4CCF271F754FA363A8 /* FUIPopoverBackgroundView.m */, + B585A7167FD23401CC0AC3C94F615F46 /* FUISegmentedControl.h */, + 3A7EC5204AF6AD0ACD56CD9B3D27A7E8 /* FUISegmentedControl.m */, + 2FE2DCAC734B4286316670697800D439 /* FUISwitch.h */, + 11570DEE95441A341ED290D310B99750 /* FUISwitch.m */, + 4576727BB25DE279D205E8F0DB89DB48 /* FUITextField.h */, + 1297CEA60937D63A7F97997D134CB8BB /* FUITextField.m */, + C7BC9D529DFB9C2876F1B26C742549E5 /* NSString+Icons.h */, + C2D25A48A5669C4EEA1A1278B5AADCC8 /* NSString+Icons.m */, + 81A894C8CDCCFEAB2B5E90D348379A43 /* UIBarButtonItem+FlatUI.h */, + 34856B703E5606ED1C3566F49C8E8DF4 /* UIBarButtonItem+FlatUI.m */, + BF928DF49EC124F57C165424C653912E /* UIColor+FlatUI.h */, + C6465177F56344D8A62FB5F181EEDB03 /* UIColor+FlatUI.m */, + BAB3C187C0719EC147E9F61E5E85BC65 /* UIFont+FlatUI.h */, + CEED91958785BC6C656DF48AF67670D7 /* UIFont+FlatUI.m */, + 4D9DF0C4B326ED5F2D1D4EAE13266284 /* UIImage+FlatUI.h */, + B4B17635A35B3C414378999631FEB0AD /* UIImage+FlatUI.m */, + A1464A1B89739CFFDC2231D2B2BFEF97 /* UINavigationBar+FlatUI.h */, + F4F2DBF73DDDA25055C195018E9186F0 /* UINavigationBar+FlatUI.m */, + 21D8E4F6E3FE9751A9C71B96F1DA3755 /* UIPopoverController+FlatUI.h */, + 7DDE204F56A235BFC67201687941B5F5 /* UIPopoverController+FlatUI.m */, + F8E604995C153FE58AF3F074F1262AEA /* UIProgressView+FlatUI.h */, + ED1B808831668BFCE5B5641495D4D294 /* UIProgressView+FlatUI.m */, + B53CFF61083EF9E417C641E96A20A279 /* UISlider+FlatUI.h */, + FB2160A0B485224469FAF6BA39EB0364 /* UISlider+FlatUI.m */, + FAA6B39941ACCBCAFA2A4F26CF1AF48C /* UIStepper+FlatUI.h */, + AD86AC16AA572CE40EAE3336DB4D3602 /* UIStepper+FlatUI.m */, + C566D49A7C726CF5969F4B79AA9ED6C7 /* UITabBar+FlatUI.h */, + 0B1DC4F3EA65E8107DBC6146CF990FFF /* UITabBar+FlatUI.m */, + BE14B64B7D94E9A0E083FC542AECB820 /* UITableViewCell+FlatUI.h */, + 46422AC887FA952A4892854E29579089 /* UITableViewCell+FlatUI.m */, + 7B72B0C51A38197D37BB6563BDCA4FC1 /* UIToolbar+FlatUI.h */, + 90AFF1F5771F5C74F72298841B0D450E /* UIToolbar+FlatUI.m */, + 2DEDCFFEE26FCED942FDE957C2A6025E /* Resources */, + 8953587DCCE207F802452186F963E590 /* Support Files */, ); - name = NSURLSession; + name = FlatUIKit; + path = FlatUIKit; sourceTree = ""; }; - 6C8212FADE4F1FA885795CEDA81FBD14 /* Support Files */ = { + 708A68883023B96262CA436953D3A180 /* Support Files */ = { isa = PBXGroup; children = ( - EE5ED387F92B10AA08591F932C87D0DF /* Unirest.modulemap */, - A28B62FB34B8E41CEE484AD8817B831C /* Unirest-dummy.m */, - 70D40D77353891DBFC1CDF8EFFB36FC5 /* Unirest-Info.plist */, - 23412283DC2CC20C08F72706EB4BF409 /* Unirest-prefix.pch */, - 937BA62AFDBF0A1259E42BCF5763391E /* Unirest-umbrella.h */, - CEE21A440006EE2C4B423EFAE0DC86AB /* Unirest.debug.xcconfig */, - 532AAB9D359ECDC94F8B03BB863AC81E /* Unirest.release.xcconfig */, + 0625A1B69859FE4C804D6DB1E4977BA5 /* IQKeyboardManager.modulemap */, + 62CF11BB195FBEDB741B155A299E3F4C /* IQKeyboardManager-dummy.m */, + 2079E3916C3DD67D0736BF3A3B847C80 /* IQKeyboardManager-Info.plist */, + 79167CD3E04E39F302F7B16FAA2250AF /* IQKeyboardManager-prefix.pch */, + EF08F0FD1BF57A2E09B192B96E023021 /* IQKeyboardManager-umbrella.h */, + 4EEBB37503F5FF0C662950C8F1DECA80 /* IQKeyboardManager.debug.xcconfig */, + 194C09CE6BAFEA2233F1C90D5FB06DE2 /* IQKeyboardManager.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/Unirest"; + path = "../Target Support Files/IQKeyboardManager"; sourceTree = ""; }; - 715038D97A8E539C9D2A3F9A8C9A1176 /* ParseUI */ = { + 75672FC68C1C2709FC8E1C7ECAFD293D /* Resources */ = { isa = PBXGroup; children = ( - A6D188FC37D6AAAB2E2FBE6F57F7EE82 /* ParseUI.h */, - 830900A05A897F050CC8C0CCDE4C4FD8 /* ParseUIConstants.h */, - 1C796738B070BC90BE32479A8A3AF602 /* PFActionButton.h */, - 8536E7EDEE9BFAF06216BADC69B65005 /* PFActionButton.m */, - 4B071309D9B499D128868D443A721FC7 /* PFActivityIndicatorCollectionReusableView.h */, - 0F03D75A8EAB99E67ACE53F63B414F22 /* PFActivityIndicatorCollectionReusableView.m */, - 98B7E2A8BF0A20332398DEB41B1BB68E /* PFActivityIndicatorTableViewCell.h */, - 86BD4117D04BA8012C142C487374653B /* PFActivityIndicatorTableViewCell.m */, - AFA7104945F1D9E5D257AF888DF068F6 /* PFCollectionViewCell.h */, - 53523337F4B830F83880CFDC298F2BC8 /* PFCollectionViewCell.m */, - 5407D6309498466D3BD9EEE5DC9171F2 /* PFColor.h */, - 171D6E3ADAA1BB99E7913D83084A2274 /* PFColor.m */, - C5C549C5C71BC97E1890902EFB8FB31F /* PFDismissButton.h */, - 2D44A8F3669FDFCF5D7BBCD8CFCD25AC /* PFDismissButton.m */, - B76589E19EEC53370B66781B36DA63ED /* PFImage.h */, - 83B8FAAF482B78AC548BDC44BA540C3A /* PFImage.m */, - 392D3E8B1EE935766CE3A0E9996B235F /* PFImageCache.h */, - F9A8AE9C1EA56C8732FF0143F957D513 /* PFImageCache.m */, - 7D6CC34BA2E5393D2D3F739F59596E4C /* PFImageView.h */, - EC9278D7F2E8ED952563707F9B4FB0C4 /* PFImageView.m */, - 0E151F5F8DCE58DAE5D1BA2B8EF1ABE8 /* PFLoadingView.h */, - F24E7092B94D3B25D84A505A530066AE /* PFLoadingView.m */, - 8FFE49908079C5362E67099F8C05E1B8 /* PFLocalization.h */, - 3EDBAED551FD57F89EBFB1F16C24A8BC /* PFLogInView.h */, - 409309719BF6A320534CB7DAFF568B83 /* PFLogInView.m */, - B1DAEDA8CCCACC84601EECDB3E6D1FF6 /* PFLogInView_Private.h */, - D49A2F201D1F072E9F700F36FB9F6B9A /* PFLogInViewController.h */, - 9CF59640D2C379A8552A7FE126379C1A /* PFLogInViewController.m */, - D5BCBF924ED06727AAC5736473727FB8 /* PFPrimaryButton.h */, - B37DB5C5090B2B2D7BED7A2071CCDA07 /* PFPrimaryButton.m */, - C50F078A36FD9673AD03D42BF7FC663E /* PFProductTableViewController.h */, - 077B7B33826673C09B30B8671D0097CF /* PFProductTableViewController.m */, - 780D44B2A921C4D352FA9A6D9693F79A /* PFPurchaseTableViewCell.h */, - 6CFB2DE553F71F9BD4D38BFE889EE5A1 /* PFPurchaseTableViewCell.m */, - 32588BB30F6E0F5B2DD13FB47DEBCC27 /* PFQueryCollectionViewController.h */, - 7A8E2C8071F308F79E8DC8D5E1A0A736 /* PFQueryCollectionViewController.m */, - 49B4F56ABCA4652DC76E6114451571CB /* PFQueryTableViewController.h */, - 7A7759BCCF26709D483AEAA4CA39B1AC /* PFQueryTableViewController.m */, - 22E7AE4FBF90398DB0FD1B35A9DD34AC /* PFRect.h */, - FDFED8D0FCA171BCC518F85E9793444E /* PFRect.m */, - F6895F2BAF98D8298BFB0A2C2E84DF25 /* PFResources.h */, - 44E593737C598C091CC7B69331EE8F5A /* PFResources.m */, - ED30F858AF7B9CE0A8573C496C34FE29 /* PFSignUpView.h */, - B8F7790A71F9CD28C39B9D26DA94ED71 /* PFSignUpView.m */, - 2FD643ED6BE8B1DFB4B3D62C42982411 /* PFSignUpViewController.h */, - 9EB80548C95ADD762223EC007944AF45 /* PFSignUpViewController.m */, - 15E60AC5AE5D9C7E54C124BD0AF98894 /* PFTableViewCell.h */, - D3E3071B72FB3D58BE54787E6BDFB30E /* PFTableViewCell.m */, - D0687D024DA00AAE7B4F8366D819654C /* PFTextButton.h */, - 50CAE388BE03392981EB34F0ED05A9DC /* PFTextButton.m */, - 819412AD0928AF8171877E3BEC3035CA /* PFTextField.h */, - 1AA2C962E61F10AADB5795A8761860F4 /* PFTextField.m */, - 2F0311DC1C98B85666BEDBEE32749F74 /* PFUIAlertView.h */, - 8C9859B01D21C19A7695D3E4BC335D14 /* PFUIAlertView.m */, - C9E21EB76BAE08F39E47EEBAA84FD02F /* Resources */, - 9F70FF0C1705B6B3A8BFD6EE508FD3A2 /* Support Files */, + DC7BB69962EB8928BACCE0021E544A5E /* en.lproj */, + CAF92C30B6888E0F131016AB7EE40127 /* fr.lproj */, + 45D59B3477CE4E1E8A8D72DAA36AE180 /* pt-BR.lproj */, ); - name = ParseUI; - path = ParseUI; + name = Resources; sourceTree = ""; }; - 74971D8533C6DBDC443C05EE2E7469A5 /* Serialization */ = { + 799A553949C56D477A1B139C6AC593AE /* Support Files */ = { isa = PBXGroup; children = ( - 47047F8FC46BB309AE276DC772A8E367 /* AFURLRequestSerialization.h */, - D93710ABE14AC931BA5E37E5461EFE9D /* AFURLRequestSerialization.m */, - 389E8A9F78577F9DC088BC37445C2F27 /* AFURLResponseSerialization.h */, - 1760FE20743A856B0B1A742482064BC4 /* AFURLResponseSerialization.m */, + A5AD6E00DDF3F7D4C05FC0098C099B2E /* ParseUI.modulemap */, + F126906F253F3C3848FA05C0D242D4D9 /* ParseUI-dummy.m */, + 0DEB54A8B8D441D44B09F0FA01E8E95B /* ParseUI-Info.plist */, + 3691B24171C74EFD1F8433B4605C38E8 /* ParseUI-prefix.pch */, + 9A43EB961420A5AF4805BFDFA34DCDB3 /* ParseUI-umbrella.h */, + 008FE4C757A98BF3F85D56B16B909C95 /* ParseUI.debug.xcconfig */, + A04E1674F330FF3E8705ACDA5294CAF0 /* ParseUI.release.xcconfig */, ); - name = Serialization; + name = "Support Files"; + path = "../Target Support Files/ParseUI"; sourceTree = ""; }; - 878B5CB6B5EAE6A1BDF0FFBC6AAB6C5E /* Resources */ = { + 802C5321FC5ACB930CE064A17957EF97 /* Support Files */ = { isa = PBXGroup; children = ( - BDB6A8639913CC9852F97AECC7B36C74 /* en.lproj */, + 9B8F1BF1B5F349B7005451DA741B0047 /* Parse.modulemap */, + 73B7094CD00334DE71FFD9ED9F4AFE8D /* Parse-dummy.m */, + 08801F02130F31B03B1B8F0EE396CC30 /* Parse-Info.plist */, + EE0570671EA39BDDB0C88A5BB610E898 /* Parse-prefix.pch */, + D72AEC533D655C8D593C07A53F1D747F /* Parse-umbrella.h */, + 67A6FB7F80EB38941450A0B66E1843B4 /* Parse.debug.xcconfig */, + C4239D037D62B4A06D9768E33ECD692F /* Parse.release.xcconfig */, ); - name = Resources; + name = "Support Files"; + path = "../Target Support Files/Parse"; sourceTree = ""; }; - 8EE67F52563142B064FA2D7D3BFF110C /* ChameleonFramework */ = { + 8072B1F77714727D2BA4CDB6803AAE1F /* ParseUI */ = { isa = PBXGroup; children = ( - 92040C15E58C872F516680892A06F6FA /* Default */, - F387619E937BAFBEDDAF6DD4559FAC1B /* Support Files */, + B7308BC8BA2DF875593DADD527D898A7 /* ParseUI.h */, + 9D7C94F9DF9D3C658BC5608AEB9B49B1 /* ParseUIConstants.h */, + 1496C6331BE5CE68663D0C65DEB7E653 /* PFActionButton.h */, + 56EFB542F9FA3A986A2C18607C6BA01A /* PFActionButton.m */, + E261E97A551F62268F5002DB529D4A74 /* PFActivityIndicatorCollectionReusableView.h */, + C0FA4E1F34830F2463FCB811EAD24A79 /* PFActivityIndicatorCollectionReusableView.m */, + BDB6900AC0DB1620F42D3AA6F1A09E5D /* PFActivityIndicatorTableViewCell.h */, + 5E1AFB8E063415AF1B76421BD1E70D71 /* PFActivityIndicatorTableViewCell.m */, + 50B6CCE1DD1F1B571E064C44E3D7CC87 /* PFCollectionViewCell.h */, + EAA0C3C67C7D908A2F7182249E71C853 /* PFCollectionViewCell.m */, + 1A16F60868674C544C93C2FC19B449CF /* PFColor.h */, + A3F525305019C6D6103B6394A0D2FFAB /* PFColor.m */, + B59CF43B52C3F67340E0866557906257 /* PFDismissButton.h */, + 9005E4E32F1EF9E3F28CB2D81637B524 /* PFDismissButton.m */, + 448743DDA2013C8A9A70568A441DEF22 /* PFImage.h */, + F14562D32CD87B15414FD459F3B13C75 /* PFImage.m */, + 18E5B4F6DD54D3DFEE040D4E42491397 /* PFImageCache.h */, + C237413667676F66D932237A4073CB42 /* PFImageCache.m */, + C317661A6C63BF31F4516396085D1DDD /* PFImageView.h */, + E1507F321942D4FD208B55803D3583FF /* PFImageView.m */, + 80476201DCD8D8BD6436D2B68B92209C /* PFLoadingView.h */, + B0315B64F3C557F7C3897F4E68B228A5 /* PFLoadingView.m */, + F6A33DD502114C23783D6D52977D75D2 /* PFLocalization.h */, + E619BDE14AB08B9FB930109F4E31D8CD /* PFLogInView.h */, + AA873AB0DE8D007CA8F0042C3B6675E3 /* PFLogInView.m */, + B4FA5364701AAA618A9F456A6322416E /* PFLogInView_Private.h */, + 7FB8156015613925F2F535F01040F256 /* PFLogInViewController.h */, + F63505CC4ACA8270E183DAA52A22B58A /* PFLogInViewController.m */, + D8DF24ADAADAC243785A71EB5043ECB5 /* PFPrimaryButton.h */, + 826F299C0C32FA4481DAE44FA6FA0A1E /* PFPrimaryButton.m */, + 0B852FCF809F069DBCAB8194541BD2D2 /* PFProductTableViewController.h */, + 7299ED8195E626646307BF4A8D40A058 /* PFProductTableViewController.m */, + 9731541F793BCF26FDF4582BC3D06C4B /* PFPurchaseTableViewCell.h */, + 209B5F6CA85EBF47851F7BAB625D9974 /* PFPurchaseTableViewCell.m */, + E272D407AC4A249F7DCA0B9CA3115B66 /* PFQueryCollectionViewController.h */, + EFF140CE5FEE134EEDE89A382783CD66 /* PFQueryCollectionViewController.m */, + 93DC759AA838D19EFDB5EE39A0FD3B8A /* PFQueryTableViewController.h */, + 47A62753B34D273314D19513D5331BC8 /* PFQueryTableViewController.m */, + 74507F19D1FF215BD94690AA2D88047B /* PFRect.h */, + CC3E170282FD37E519479DFEEE7D55B2 /* PFRect.m */, + BED06D69A31505FA7CD8316C179CDFAC /* PFResources.h */, + A0AE3560BE9FC94C3B71D94028EB8928 /* PFResources.m */, + CB00637E4C07D93AA94189E0D17D0509 /* PFSignUpView.h */, + 1A79E98AEE84BCDEC2A44AC20B564C75 /* PFSignUpView.m */, + 17A8A4A862EC921341A6294A505E8C17 /* PFSignUpViewController.h */, + 6AB0CD6365496172E27CBD57A2266391 /* PFSignUpViewController.m */, + 4DD4060F8826F9A5E5D4C4FC4E7A3256 /* PFTableViewCell.h */, + BCA492568C51FFC3E67F860276C05E61 /* PFTableViewCell.m */, + 4EDD0EDAAEC49A923F963CFF2EB1A94F /* PFTextButton.h */, + A89A6272C760E24D4FCB53B305AD1CCB /* PFTextButton.m */, + 9101FCF180E53E25AAE24FD11B0AB42B /* PFTextField.h */, + 6120BA628BADDB347735942BA78DB2BC /* PFTextField.m */, + E074D43B725F9C362400C9DF86A4123D /* PFUIAlertView.h */, + C2660605B5FB0E40D12FF6A4B131C4A2 /* PFUIAlertView.m */, + 75672FC68C1C2709FC8E1C7ECAFD293D /* Resources */, + 799A553949C56D477A1B139C6AC593AE /* Support Files */, ); - name = ChameleonFramework; - path = ChameleonFramework; + name = ParseUI; + path = ParseUI; sourceTree = ""; }; - 92040C15E58C872F516680892A06F6FA /* Default */ = { + 8953587DCCE207F802452186F963E590 /* Support Files */ = { isa = PBXGroup; children = ( - 59CCCB05A2EBA3189A6BE62B37274EC2 /* Chameleon.h */, - E572BEF3BF5FA574EE0EE4E0D2FDB479 /* Chameleon_.h */, - 1A5FB006DED3350DEBDAA366AA9B3C93 /* Chameleon_.m */, - 3C1BEBF049C3CF3B9440DB6E9743072A /* ChameleonConstants.h */, - A740D31E8046CDB8D8368E00E9329E79 /* ChameleonConstants.m */, - 1BBB82019D63DE4FA7F0B92670365270 /* ChameleonEnums.h */, - E99932D8C34D4E771914E628104B89C5 /* ChameleonMacros.h */, - 866C32999AC6688E43E9E3A792BC2D34 /* NSArray+Chameleon.h */, - EDF1B2BF95B7B8E40AF9358E2CAC9C93 /* NSArray+Chameleon.m */, - 7C5002465C0FC38F707FE42128EF8087 /* UIButton+Chameleon.h */, - EC3F8E5AAA0D556290B7B5552E7891B8 /* UIButton+Chameleon.m */, - E2117490959B9550A4868376B6579453 /* UIColor+Chameleon.h */, - F6B30CADFCD2F0D69405E4D939DC3BFB /* UIColor+Chameleon.m */, - 24DB6CC2B14662F6E9B1E046CD7199F7 /* UIColor+ChameleonPrivate.h */, - 27E94F52DD7FEA4FD150E6DFECA07CF1 /* UIColor+ChameleonPrivate.m */, - DB9AB176562A9D6550C05D4A4094FF0F /* UIImage+ChameleonPrivate.h */, - 44E08AAB6C070B945737B41031CFCAC4 /* UIImage+ChameleonPrivate.m */, - 7DAFE2C00F715262F9AF47201AE5B463 /* UILabel+Chameleon.h */, - 0263C9D12EC81C1962B428D0F0711A32 /* UILabel+Chameleon.m */, - 65C5E78DF211DF65F36E36C9FC0D1B01 /* UINavigationController+Chameleon.h */, - F3DEB5E0C029DA28C8320B373AD1B88D /* UINavigationController+Chameleon.m */, - F87229E5105EE0FA00DE0B0D95E67052 /* UIView+ChameleonPrivate.h */, - 464C0397F3E6DFAFEB38909A49A88023 /* UIView+ChameleonPrivate.m */, - A66795F738318920B0D6E941B13871CF /* UIViewController+Chameleon.h */, - 656E2AE30EB08EBE4FFC367B7AE4DEAE /* UIViewController+Chameleon.m */, + DF7780DB20224001BE268ACB15378FC2 /* FlatUIKit.modulemap */, + B834CB346FEDD46855AF57AD06DE5791 /* FlatUIKit-dummy.m */, + 217CAA0272C352818C8E463AFB4904F7 /* FlatUIKit-Info.plist */, + C174512300F259E9E9FF44BD14218FED /* FlatUIKit-prefix.pch */, + D308000BF600D71810C6CD2499427CD7 /* FlatUIKit-umbrella.h */, + 25AE04E3363DD54258BA17EE714BC7DE /* FlatUIKit.debug.xcconfig */, + 564869040FE2AC538A52B329B2EE83BE /* FlatUIKit.release.xcconfig */, ); - name = Default; + name = "Support Files"; + path = "../Target Support Files/FlatUIKit"; sourceTree = ""; }; - 9F70FF0C1705B6B3A8BFD6EE508FD3A2 /* Support Files */ = { + 8D79697AE2D866947AF882E9A01E14EE /* Reachability */ = { isa = PBXGroup; children = ( - 021C106DF227E61ECA4E5555FF2F7CD6 /* ParseUI.modulemap */, - 586F2194798AE4805A6F8FE5E6F506DE /* ParseUI-dummy.m */, - B2D681EF9EF4F360FEE47AF2D4784401 /* ParseUI-Info.plist */, - D1EFF61D9013A9997596EE7F75AEDE3F /* ParseUI-prefix.pch */, - A505892A83F06969DC7D47BC6FC72B07 /* ParseUI-umbrella.h */, - 80331DEE2BF41B2AD40413E3C5DB2B28 /* ParseUI.debug.xcconfig */, - 3C1AC1660363A329A284E332A3E5298C /* ParseUI.release.xcconfig */, + 7491B40A0184FAC7223E8121B02FB307 /* AFNetworkReachabilityManager.h */, + F16F15C48D3F05417CA21097C2E54EDC /* AFNetworkReachabilityManager.m */, ); - name = "Support Files"; - path = "../Target Support Files/ParseUI"; + name = Reachability; sourceTree = ""; }; - A457854110B31D2FF17880780BF3CC9C /* FlatUIKit */ = { + 9A3B31B4F7EA1475FF834BD44162623C /* Support Files */ = { isa = PBXGroup; children = ( - 44C38AD5632D2AB0489B5A84DAE0E5C3 /* FlatUIKit.h */, - ADCB853B7D560FC831BF87685AD57A9B /* FUIAlertView.h */, - 8B33B936A9A7DB28766EEBFB4899F4ED /* FUIAlertView.m */, - DBC114B642595675D739DDEDD016E9F1 /* FUIButton.h */, - F4555BF7ABB9786C4B80BF763FE75EA7 /* FUIButton.m */, - CD104B7AD1FBF1F91303950B3BD5DE5A /* FUICellBackgroundView.h */, - D1E1BEDB5A8BC95C80FA17589D69210B /* FUICellBackgroundView.m */, - 23D27BEF28A85F709CBDB0B8CB65DE48 /* FUIPopoverBackgroundView.h */, - CEE4FFACD555D625ACE047DB1EE70750 /* FUIPopoverBackgroundView.m */, - C137855C14937C945753B86B2CDA79D9 /* FUISegmentedControl.h */, - 2A6C012A4F3D5A672788A760562623DA /* FUISegmentedControl.m */, - 3B28432D4AB483D9A86C6817FB52BF45 /* FUISwitch.h */, - 48E6A4215AF02A0535DF6FEEA6CF7E97 /* FUISwitch.m */, - 4D4160C37DEDD4C39102E2A7D159A51F /* FUITextField.h */, - BBF5C97238A5D929CC8B153AEF2E9179 /* FUITextField.m */, - 22F5A1329C6658B77CE9B997619A6610 /* NSString+Icons.h */, - 81311E91F15A9ACF24DDCF24A36B0F39 /* NSString+Icons.m */, - 9BC33545EC4D27DD8FBAA13A736EB786 /* UIBarButtonItem+FlatUI.h */, - C0AD563E6E870F9D52DAD712828C35FB /* UIBarButtonItem+FlatUI.m */, - 73B12CABD664167D981D0544B9928022 /* UIColor+FlatUI.h */, - D0B9EF05BBF29D5217191E4094EB3982 /* UIColor+FlatUI.m */, - 2B3157DA60A76070C8C1BC098218AB51 /* UIFont+FlatUI.h */, - 8BC6A55FA3CDF0EF58B5D4BDD6F6CAD8 /* UIFont+FlatUI.m */, - 0071EAC09DA0FFDA8FB3410D2936CA80 /* UIImage+FlatUI.h */, - F44A3C87BEE43E3E45E5CF3D64032D69 /* UIImage+FlatUI.m */, - 788310F842000FA289D2F1CDCD98A85C /* UINavigationBar+FlatUI.h */, - EA4EB23C725FCF4754FDC1ECC1A03D47 /* UINavigationBar+FlatUI.m */, - 11779F8DF80724C9D85DA16EE6D8F4EB /* UIPopoverController+FlatUI.h */, - A97F7D38BC76709C3A8940B642F9736F /* UIPopoverController+FlatUI.m */, - 86363196FAD187D55BE15125F559D10B /* UIProgressView+FlatUI.h */, - E5855B0E065B8C1A0EADD0781BD28D00 /* UIProgressView+FlatUI.m */, - 8442B999E5775411EEFFBC7781637303 /* UISlider+FlatUI.h */, - F06AE122820D7A69B28B8EE2E62E85F1 /* UISlider+FlatUI.m */, - BBEB6900A59681CD6E50CF6B6C2D6F9A /* UIStepper+FlatUI.h */, - 4436838248BB3C88A53FD7F6F9B1BDBF /* UIStepper+FlatUI.m */, - 71F87070D4783A8D6F354D8BCAB875C3 /* UITabBar+FlatUI.h */, - 04E51A30E638BD5F2089972DC7339D76 /* UITabBar+FlatUI.m */, - 94D6AC2286C9B645008316B81D8156C7 /* UITableViewCell+FlatUI.h */, - E2D1FC6E559818FF5E899D86DFDAE1F0 /* UITableViewCell+FlatUI.m */, - 20B6097286CC2E4C80A144D823873289 /* UIToolbar+FlatUI.h */, - 5EB12118FD4DE039BC62EF0E15829099 /* UIToolbar+FlatUI.m */, - FCCC03A49F4A917E53DF929ED3AE9864 /* Resources */, - 57BC7D63782B2A635093374BF42CC3A9 /* Support Files */, + 5B6D1ADF24E834ADDC3684C7A9BEBA9A /* Bolts.modulemap */, + 07A0976E8712629AD60DA98871FCF0DE /* Bolts-dummy.m */, + 6720A87D6066BFEDE6B83971F452B9BD /* Bolts-Info.plist */, + 9D79F1F6C34E951AA6AE27F54B6C7662 /* Bolts-prefix.pch */, + 3689BC9116ABAB64895F8C584E42DFC6 /* Bolts-umbrella.h */, + BE438FFCF26860EECC1343543A60226D /* Bolts.debug.xcconfig */, + 22E30A762CBA7D97BB4E81283F3DACDA /* Bolts.release.xcconfig */, ); - name = FlatUIKit; - path = FlatUIKit; + name = "Support Files"; + path = "../Target Support Files/Bolts"; sourceTree = ""; }; - A5DCF58F985CE9C88DBDDE05CF1FE71E /* Security */ = { + A9C390BE4A98FCC6786CE69CAF18E10B /* Parse */ = { isa = PBXGroup; children = ( - 10047E16CC827DC41FA3CA3C588A92AA /* AFSecurityPolicy.h */, - 00D07CDF153D8265CAE511A266EBBD92 /* AFSecurityPolicy.m */, + 405B14A1911C958897CB6F7AA3CA87B0 /* BFTask+Private.h */, + 810047E1F16DB679BCA0CC9D8C9337B7 /* BFTask+Private.m */, + 6B9244AA4FFAD4954BC0B0ACB67D2F4C /* Parse.h */, + 7063EC865492F550FE5219FA73C9583A /* Parse.m */, + D3EE32A19F2CA37F68E600E3B1A8BAB6 /* Parse_Private.h */, + F756DED267DAEAA45B7B75F44B527FE0 /* ParseInternal.h */, + 982A9041ADE39E009726C8B46D8C4515 /* ParseManager.h */, + 58D1011532F802CDF880D3B55F389975 /* ParseManager.m */, + A747F1408C49254D6028E4F8891C4084 /* ParseModule.h */, + 7E9D4BAA6FB13BABFA6610DB1C1A516A /* ParseModule.m */, + 0B4B936F403CF30DCA18AD72190FCFC9 /* PFACL.h */, + 0528637876B6E3CD1CC1904766E72FCF /* PFACL.m */, + 32917B1510914295787D683689498DCC /* PFACLPrivate.h */, + 4E759BDB2280614B1E223A5BF6593C20 /* PFACLState.h */, + 2DC55D2B463E6818D02D571FF341E73B /* PFACLState.m */, + FB6B6FE77562EFAE3F96B1E69E8AC7BB /* PFACLState_Private.h */, + A7B79D3518D2C9F3E903CF4F1BF00D13 /* PFAlertView.h */, + 463691C0AD9E31BB5AD4BDB493C34D0D /* PFAlertView.m */, + 2EE2A8D1E5AFBD0420E65DA1389499B3 /* PFAnalytics.h */, + DDEB824107C28055F7FDA4A9A2034A36 /* PFAnalytics.m */, + 1BAEDB2E65A042469BB0C6C0651AD122 /* PFAnalytics_Private.h */, + 0F8F1DF2A2E6067126652008A009717A /* PFAnalyticsController.h */, + 9B64FDF9AB420DD2D5082AAFDADB7FDA /* PFAnalyticsController.m */, + 75D3AA3139CAC105C690DB23C90E64BF /* PFAnalyticsUtilities.h */, + 57EE6DBB3BE682C35873FDA83F44B5FC /* PFAnalyticsUtilities.m */, + E13BC81FEAB08337AF37599B924A0B92 /* PFAnonymousAuthenticationProvider.h */, + CEEB1C5E9BC1B761C1D681F6ED6D8494 /* PFAnonymousAuthenticationProvider.m */, + B6F772B42BF7CA65B75F996B143430CD /* PFAnonymousUtils.h */, + E15CB84F6EAC100D531B6BCAAA2815AB /* PFAnonymousUtils.m */, + E06A7119515F4910F956F06EF911C715 /* PFAnonymousUtils_Private.h */, + 279C7B8C6BAEF8CDFC3B4C468EA5C328 /* PFApplication.h */, + D63A69F4B3F958DFFF7944B7D8290D88 /* PFApplication.m */, + 8C31022C27A2C8C1FBE857406C9AF09F /* PFAssert.h */, + DC28C0625C2B08E7619AEFBF99128019 /* PFAsyncTaskQueue.h */, + 3870EE2EF73F00569F66764B6840BA48 /* PFAsyncTaskQueue.m */, + EF5EAF79A06EE932EE7BB85498679562 /* PFBase64Encoder.h */, + E843676E8B7DE282A6605A76DC99E8D3 /* PFBase64Encoder.m */, + 1698F26D15551C1829449B813F474E0F /* PFBaseState.h */, + 6F3BF9878F0834C3730E36D502F45185 /* PFBaseState.m */, + E69D548BB3EF5F5499142B94DC2D4D2D /* PFCachedQueryController.h */, + 92AA3B35831850C75A93CFD081927516 /* PFCachedQueryController.m */, + 089CCF84955BA2531A9DA4EB301EE774 /* PFCategoryLoader.h */, + 5B85775602BF2725E42724F544D6ECD0 /* PFCategoryLoader.m */, + E65E7AF0524FDBEF23D5EFA1398195EF /* PFCloud.h */, + 96F352501E39A78917919E6827D9662D /* PFCloud.m */, + A59BC2D719A6FE36F8A22D143D3E4E76 /* PFCloudCodeController.h */, + B4C9DD585C2ACD9EBCBC81F91C89331A /* PFCloudCodeController.m */, + 13E84B7E5A4B30014D5A54B0F163A44F /* PFCommandCache.h */, + B7EF29C21D7B2E9DCDB866FFBB91594A /* PFCommandCache.m */, + 692F0A966BB11E58EB1DF1EFEEE973F3 /* PFCommandCache_Private.h */, + A86E6037DE1255155FC0C886F04E3B93 /* PFCommandResult.h */, + D81124330876EB85D8CCB6C9378D2E8C /* PFCommandResult.m */, + BF0F1E060D039DB2ED92B2064E9324FC /* PFCommandRunning.h */, + 836407DF9AE49E6F3CF05A57B2F3E0A1 /* PFCommandRunning.m */, + A5FAEE78A4702D335F3353DE5B22486B /* PFCommandRunningConstants.h */, + 4557A74A01F29629FD85B18F24E777A5 /* PFCommandRunningConstants.m */, + 91DA321208E1EF09682615B34F8542E4 /* PFCommandURLRequestConstructor.h */, + 487BDB4CA79192A229759CBAEB510235 /* PFCommandURLRequestConstructor.m */, + C80EE7051488F41E849C0913BFE85299 /* PFConfig.h */, + 67B1DADD0464EB28623E46BA51F4E731 /* PFConfig.m */, + 793A3BFEC9783DDC1830CDC4663B9EC4 /* PFConfig_Private.h */, + 4133DB2BFB881FA9162EC51EF7038118 /* PFConfigController.h */, + 3FB02385D3C2C2A0EB07A7BD82B8DE4B /* PFConfigController.m */, + 7DDFDA2543E81B2D6485145052BA73C2 /* PFConstants.h */, + ECD2083274B0707629CB97D4D8099431 /* PFConstants.m */, + 4373AB8A755D4DB6F49BA37DEFE4C9CF /* PFCoreDataProvider.h */, + 1DA0612D4D7F2E82006DC4C386EE7835 /* PFCoreManager.h */, + 144E3BE8EEEEF124C9859E3D7ADBE20F /* PFCoreManager.m */, + FB9516C98F43C642D31BA9E3D82C8206 /* PFCurrentConfigController.h */, + 8C8AC497AFA3C26AABE01AA1D7E3F66D /* PFCurrentConfigController.m */, + 283A6A064CA65E920533C0B11919385E /* PFCurrentInstallationController.h */, + 73E92AE01951AA70475BDC4CB43A6528 /* PFCurrentInstallationController.m */, + 1F899C2DE9446CFBD4258DF3146777DA /* PFCurrentObjectControlling.h */, + 109E7534E27B2BE53FBD782EF3EA62A9 /* PFCurrentUserController.h */, + D2BF4F04D9236FEB54B0E9C3385222C8 /* PFCurrentUserController.m */, + 023393764250C8DBC9744BAAF26A4B90 /* PFDataProvider.h */, + 94DF9C4055D9F72566E7A9544165FE9D /* PFDateFormatter.h */, + 0B0FFF3EEE8DA5E91EDEB8EA6DD38164 /* PFDateFormatter.m */, + 35ACB630538A121CBF33BD2A43D210F7 /* PFDecoder.h */, + 41C1D92DF62E21AFDBB85A53A4D4712E /* PFDecoder.m */, + 39A9911126C27100A1F40C2590B1A921 /* PFDefaultACLController.h */, + B09F7439A6613B5442F51FD2DEE7DFB7 /* PFDefaultACLController.m */, + AAC5F15FE7360B5B3103BBC0CDF77057 /* PFDevice.h */, + 2C3AAD13195F59C43C31D7B68EBD3011 /* PFDevice.m */, + F16B2F09DDA3B581B0D212FFDBAA7BEE /* PFEncoder.h */, + 029C15EA534199B8D6FF5549EDA5174A /* PFEncoder.m */, + 131DCAADD2A7478906370E28CF44D71A /* PFErrorUtilities.h */, + AC4DC6A2437F65F8A83CB36C3B66723C /* PFErrorUtilities.m */, + 444C17DA53AAC790C006E8C77C606141 /* PFEventuallyPin.h */, + 920C6629AB79F0D4396D3F62D12B3527 /* PFEventuallyPin.m */, + 1A2E073D3DA8C342D0440403A0447C26 /* PFEventuallyQueue.h */, + 7C2680C64F9681DB935CEC6C07AECD7F /* PFEventuallyQueue.m */, + CB6945F45579087C28867C89A928DECD /* PFEventuallyQueue_Private.h */, + 036DE49E350AD26884D01409BB02CCEF /* PFFieldOperation.h */, + 7013A29B1EA77F5E42B21D0847570E86 /* PFFieldOperation.m */, + AE235869020CAD616253B91718814EB4 /* PFFieldOperationDecoder.h */, + 2F817FA3B2D6B6B355ABF9815AD40608 /* PFFieldOperationDecoder.m */, + BF5D4519F2FD959DD3A51A80CF8C52D8 /* PFFile.h */, + 19D22DE6F0EF2AF9D2D7C2F20FD61ADD /* PFFile.m */, + AF27CCB4FCEF9871BEE69541BB6C7107 /* PFFile_Private.h */, + 6FC877593D9C3597554FD4F63EA7265D /* PFFileController.h */, + 52F2CC34E25309A7D0C44241B0F15DEB /* PFFileController.m */, + 3F5D0B6D294347476FD73D958F09ED17 /* PFFileDataStream.h */, + 1CF00F1FC0F39F69845946C2AD585948 /* PFFileDataStream.m */, + 1E5C55CFEDDC650E3CDF3F59B2865200 /* PFFileManager.h */, + 88D5A072EC90FD6AC9092E73B90F9254 /* PFFileManager.m */, + BB2C9ECA5C083B1C1AB04DAF1E83046E /* PFFileStagingController.h */, + 9EE458611A33294A7976CAE3AC79A962 /* PFFileStagingController.m */, + 28B369CD0FD6B2267684D60BAD74B807 /* PFFileState.h */, + 2DD6269DBB74E9E2A4341B46B3B2240C /* PFFileState.m */, + 67C82E63D914F4652D462D1EF746789E /* PFFileState_Private.h */, + 2AECBBD0EFF420415B93C5A23FCB6BCD /* PFGeoPoint.h */, + 2AEE82C4E7D4C887B812D322BF6616C6 /* PFGeoPoint.m */, + 51829BFD42C53387BD853B53595A4859 /* PFGeoPointPrivate.h */, + EC4A64A0CD9BB0968D9668774F8AB562 /* PFHash.h */, + 8924CD04B6BFE4AAC5C88AEA98869B06 /* PFHash.m */, + 65BFCDD2C8EE6E26312798F208A450E4 /* PFHTTPRequest.h */, + BFDADA3217FE77D6F8E68621BA9FD77E /* PFHTTPURLRequestConstructor.h */, + 22EC91ED4B69A438A78BF10A844BE247 /* PFHTTPURLRequestConstructor.m */, + 39D6DC64510F8D6816ED4A2F7DFB52AF /* PFInstallation.h */, + 3E6B3CC888343CC69943B63141268699 /* PFInstallation.m */, + 5BC3203CA8DEAE4E766361C3772E32DF /* PFInstallationConstants.h */, + 74D802D8056ADFE99B20602EAA26F7B2 /* PFInstallationConstants.m */, + AC9A5F70E2DE419835876FAA80A1B09C /* PFInstallationController.h */, + 62292C896B27EDFF3089011E9218A54F /* PFInstallationController.m */, + D9ABEBD69361FA1FD8939A21C71A86B3 /* PFInstallationIdentifierStore.h */, + D69D5263055F55D91F01C506D8E89BAD /* PFInstallationIdentifierStore.m */, + 3B8B26D22A8D50D5756DCEABC1E2F39B /* PFInstallationIdentifierStore_Private.h */, + 4FCCA3A37B3313BAF696EBB3102DF427 /* PFInstallationPrivate.h */, + A1046A49BB31CE2EDA5FADB31A184D95 /* PFInternalUtils.h */, + A7FF321DDDFD4C9D30F6C27AE6F15255 /* PFInternalUtils.m */, + B6B448028CCE0AD7EDBEC9BE86199EC1 /* PFJSONSerialization.h */, + E4ED7A0517A36ECA8CCCE78610B55016 /* PFJSONSerialization.m */, + 79FD47C9A55EA483579D7171540525DC /* PFKeychainStore.h */, + FCDFA364DF4CC49FC21ECB8993B987F4 /* PFKeychainStore.m */, + FB87370F76BC674AD21F1FABEB5464F9 /* PFKeyValueCache.h */, + EBA6B31F193A3582597871E09B2C0D55 /* PFKeyValueCache.m */, + B66BB1A1B150F73F53A51DB0EF89A285 /* PFKeyValueCache_Private.h */, + 14B527B21E752166A0ECE57755F5B742 /* PFLocationManager.h */, + 312CFE7334F9820D693DB8F87FDF58BA /* PFLocationManager.m */, + 3552A7840686D24CD44668B0CDA0BF24 /* PFLogger.h */, + CD550819AF8416A5DB414CAA7025CB06 /* PFLogger.m */, + D869C16E6B92E4E4DAEC9B9363D8D3F6 /* PFLogging.h */, + 9279D9795C913BECFB930DCA0A4CBF9B /* PFMacros.h */, + 7D24DD97B5EB009793F423B2E12526C9 /* PFMulticastDelegate.h */, + 69EB7978B5C927F6B8DB109710F1A3A9 /* PFMulticastDelegate.m */, + 3F123ABB578E3F518DF039070BC96D0B /* PFMultiProcessFileLock.h */, + 078CF89D1976FA56CB71DB442293247A /* PFMultiProcessFileLock.m */, + DD67EEF35668EABDA6CDE4706E5C10D0 /* PFMultiProcessFileLockController.h */, + 9E818A121570D3A0F0DA80F2825AFB6D /* PFMultiProcessFileLockController.m */, + C45DABCF47D9B4496B4627C78ACA5F5B /* PFMutableACLState.h */, + 2D0B8387029A2FBE4D1B3128F06E3921 /* PFMutableACLState.m */, + 78698705CCE8B41B0BB2C29A99DAED74 /* PFMutableFileState.h */, + C8EA7A9046754051261628FE4A4FBC57 /* PFMutableFileState.m */, + EC68094E74192E9415DE284736276F42 /* PFMutableObjectState.h */, + DC1FF3B7F18FCF2F0A4EFD477BE62BAA /* PFMutableObjectState.m */, + CF0865463F092E74770E7110F2D76193 /* PFMutablePushState.h */, + E6E8FDE318E4C904383C402577CB676E /* PFMutablePushState.m */, + 3CB6840C12F6DE61721C1D23DAD8176F /* PFMutableQueryState.h */, + AD0FE61335BED497567057BA19502825 /* PFMutableQueryState.m */, + 435F2CA4899F4863E2CCBD079FDB969F /* PFMutableRelationState.h */, + 9CF35D4AC32619FDEC1F5F4FC52084A9 /* PFMutableRelationState.m */, + F30BAE81C83BFC24C3F09853774210B8 /* PFMutableUserState.h */, + 46CD8E4F61AC27B42941BB20FCCC1C2F /* PFMutableUserState.m */, + 384BDE20DFFC6A0E2458D1BC282F4420 /* PFNetworkActivityIndicatorManager.h */, + 2C6149FA7454A58C374DE984CBB2B5D5 /* PFNetworkActivityIndicatorManager.m */, + 5E6BF5C5D003F29D1B91F74088E1F30B /* PFNetworkCommand.h */, + 69AB457D67396F5B1AE602EB9BE91C33 /* PFNullability.h */, + 3424FEAC2E4DE6A897AE678346A16EB3 /* PFObject.h */, + 150F4AC40940FEC7C1C20AAD696887E5 /* PFObject.m */, + 17F49279416DD3E891AA4D2508E5DEDA /* PFObject+Subclass.h */, + 7A7B4A661CDD8F7A507BC897C1C1F57D /* PFObjectBatchController.h */, + 4A99D12CF0886074F54F4101B90E0209 /* PFObjectBatchController.m */, + 735FD83521BA17D09CAE866022FD78C7 /* PFObjectConstants.h */, + 6B6F63E91EEC4427BD74F56EC4CDA08B /* PFObjectConstants.m */, + 8BC693C636CC87A6217C7C5DBD4D7A4A /* PFObjectController.h */, + FE9E03DE7A25EA6F5C94C4201C60D18B /* PFObjectController.m */, + 6627F2203B9CE43FB51C48DEC6485120 /* PFObjectController_Private.h */, + 4DFE6A76A1CE11D7A2988AB23405FE3D /* PFObjectControlling.h */, + 7FF0ED8615CFE41B1191D7A379331688 /* PFObjectEstimatedData.h */, + 8727E4ED80EA777438361FDA993B9BE4 /* PFObjectEstimatedData.m */, + 201D0AF4758543C8B03C221952439864 /* PFObjectFileCoder.h */, + 0D50D22BBDCF4938379296E2F238F866 /* PFObjectFileCoder.m */, + DDC009A128625087767288D7706E4920 /* PFObjectFileCodingLogic.h */, + D0C44D70A8C988A5FC533435B05B77CB /* PFObjectFileCodingLogic.m */, + A0B75CA0A1B123DC95D30ED0D3F93513 /* PFObjectFilePersistenceController.h */, + 42BF37A08F24B8A4D646021BAC4A89B8 /* PFObjectFilePersistenceController.m */, + AB6237226D0A898842335421FF28BB4E /* PFObjectLocalIdStore.h */, + 7259AEBFEEBDDB3685DB53543C199135 /* PFObjectLocalIdStore.m */, + A25890C6749766D2FA0F6910C5AFB555 /* PFObjectPrivate.h */, + E17C805A5EBB9F99E87AE99981812FC7 /* PFObjectState.h */, + 033CF3680745525AA290EAA350C6D644 /* PFObjectState.m */, + A7377E6FF89E05208972680783752B9A /* PFObjectState_Private.h */, + 3A8E778140C33BF8B75C390520FC2B65 /* PFObjectSubclassInfo.h */, + 3F8393736BD5D73AC01DBCF37963E6EA /* PFObjectSubclassInfo.m */, + B37A54E62CF8CA8E0CAB38A547E00BBD /* PFObjectSubclassingController.h */, + 39E688412771E938F26B8F10C0191798 /* PFObjectSubclassingController.m */, + B19AA6954ACEF35AEBBB17B964C0E14C /* PFObjectUtilities.h */, + 764482CB123621C18470E54689AE1D1A /* PFObjectUtilities.m */, + 287B74C03E5984086449C9EC4671728B /* PFOfflineObjectController.h */, + 183F4922424C98CDCBAF70F6694F7186 /* PFOfflineObjectController.m */, + 73BC7B9783D64F0A868195064BC3BE46 /* PFOfflineQueryController.h */, + 57F620D9F908B6A65FB1CEE68626BF6E /* PFOfflineQueryController.m */, + ED353E01D2DC7C2CFC849BFC56253F3F /* PFOfflineQueryLogic.h */, + EE7E578477183FF7B01EB42B97FB5875 /* PFOfflineQueryLogic.m */, + 6C279362F3C05B272F24D95D7C88397A /* PFOfflineStore.h */, + 0B36583C8B8073E88C7FBCEDD319D548 /* PFOfflineStore.m */, + 2E056AC96A8AACCF1DD32256DE702C88 /* PFOperationSet.h */, + 20B2A45932656A04E9A644FBC0DA4689 /* PFOperationSet.m */, + 1934CD496BF357F3D85BDB55F2D42649 /* PFPaymentTransactionObserver.h */, + 339B985FE4916FC0EAD33315A7189218 /* PFPaymentTransactionObserver.m */, + 4D093C8CB7A26243277525B5AAEEFDAC /* PFPaymentTransactionObserver_Private.h */, + A7B9CAD0F05D1A202F8BFBCEC0C7F240 /* PFPin.h */, + 8A5E8C51D8EFCE54951AFBA268A07EC5 /* PFPin.m */, + F148BFBBDD8AB8A9E87918D610748144 /* PFPinningEventuallyQueue.h */, + 5170BF555CAA15C414E5FFBAFBA0560C /* PFPinningEventuallyQueue.m */, + 2100573153580E93D49B528DA64E5E5F /* PFPinningObjectStore.h */, + 7625D472ACC8D44E3E9CF86870FB700F /* PFPinningObjectStore.m */, + 0C01979AC575C3DF44D871EBE33C80D1 /* PFProduct.h */, + 968C1C61689C3F23A5FC509269AE1B6C /* PFProduct.m */, + 0264EE9F5AFC365618A7A86369BDF5E5 /* PFProduct+Private.h */, + 58A2B45D80BC9668A48207A6F9EEC39D /* PFProductsRequestHandler.h */, + 560C0E4A9A88A8BCA7929A45B476EDE1 /* PFProductsRequestHandler.m */, + 0211A72E4EA58246830A20585FB161A7 /* PFPropertyInfo.h */, + 0415F5BE04092407D9C3DF323C2DDA93 /* PFPropertyInfo.m */, + 0B1D30808B74647E6437CF9F248FF87E /* PFPropertyInfo_Private.h */, + A78B6320A995FD2334C69BD6DD530AAB /* PFPropertyInfo_Runtime.h */, + E095BAA9FC8B747A000DE925306793BE /* PFPropertyInfo_Runtime.m */, + 1AF187A6BDAC9D45C8425EE5D9869AA9 /* PFPurchase.h */, + 08CFC3FCA7FE77B46041821976AF2BA6 /* PFPurchase.m */, + FC11F4C9F01877A5D56739B9BBA85621 /* PFPurchaseController.h */, + 331297A6C5AA9401BD6372032CD02FED /* PFPurchaseController.m */, + C64D42AAE0A0E697FE455FDDF0F6AF44 /* PFPush.h */, + 0E42C21E2CF24EB6317C3418E412FAC0 /* PFPush.m */, + 212A31C3327EAA3D513C3DE44A109768 /* PFPushChannelsController.h */, + 9B84C7E4CD2F561F248C7DAD46DAB372 /* PFPushChannelsController.m */, + 5B765AFD4A4848FC69B9C8A2E9F26602 /* PFPushController.h */, + D5A1769B7D39E3622EBE828E69A03539 /* PFPushController.m */, + 6360B90072C4B548E77BF105665B6C37 /* PFPushManager.h */, + 0600787BA30BFE74CE957F9E90F3BBBA /* PFPushManager.m */, + 947FF1F683D3B81772BB3703B214E58F /* PFPushPrivate.h */, + BC45FC112DCEC836AB7FC34C7DEC3DD9 /* PFPushState.h */, + 3E6F93F75316C1B80CAAF5C92F8366AF /* PFPushState.m */, + F0D7E94728407981CD0D00CFC842764D /* PFPushState_Private.h */, + 2A163F69034220CA4460D8608674DCAD /* PFPushUtilities.h */, + 603FE11A5C1B8C0DC8233656AE9ED2CA /* PFPushUtilities.m */, + B1D876439A55825F2D698021F318F11B /* PFQuery.h */, + 4FB30C451B1E7FFB9382796A11C5943B /* PFQuery.m */, + 70E696DD69E7E5ED847216871E48280C /* PFQueryController.h */, + 33A844344DE513F67DA9B594005E312F /* PFQueryController.m */, + C0A12B9EF7949B48A1FA4D686A7BA5F9 /* PFQueryPrivate.h */, + F41BA5906F72B08707A6E9500176C911 /* PFQueryState.h */, + BEF4FF7171109B841E52DAB6544DCFB3 /* PFQueryState.m */, + 25A6BCE1E348D02F01E197A0C48E07E7 /* PFQueryState_Private.h */, + 58AE592385190B7467E751B3B8DACB38 /* PFQueryUtilities.h */, + 5D48E39DBDC5F4A1596DCF448DB2C584 /* PFQueryUtilities.m */, + 5942670B140FE51902C19AA1DE9A9F3C /* PFReachability.h */, + D305BB43DFE0C6524796909B892CDE28 /* PFReachability.m */, + 373B403D2BC5D282CCC10F9AF474DEE1 /* PFRelation.h */, + 532DBEDE2A0498233B11E32D118785DB /* PFRelation.m */, + 6DAEBE8AEEE1FAA4664DBEB20E14CE68 /* PFRelationPrivate.h */, + CEFF5B62376E2591D6E5EAF93B76997E /* PFRelationState.h */, + 7A264B2075C9820174A1D049067B3CBF /* PFRelationState.m */, + 85342B421353B094FC8A7B1ABA28B021 /* PFRelationState_Private.h */, + D13E9CC7C55D6E5308CFD2BDDF4E3E35 /* PFRESTAnalyticsCommand.h */, + 1E425907A301715A116FF9A3132EFC63 /* PFRESTAnalyticsCommand.m */, + 41B531CB3F68644A7CA2E2C2C2A0A399 /* PFRESTCloudCommand.h */, + 95314205CD5BD2133AB7512597330119 /* PFRESTCloudCommand.m */, + CF296274D6055775584EBDE9FFA27649 /* PFRESTCommand.h */, + 960742FAC6FDF1CD37B19A3DA2797830 /* PFRESTCommand.m */, + 8B7D47CF2CED52BB8C4DBF504E0FD9A5 /* PFRESTCommand_Private.h */, + 16A83694A1281D2628E8C6E4A5050DE4 /* PFRESTConfigCommand.h */, + 033347FAE6C04EC4566EFBDC24DB4DC8 /* PFRESTConfigCommand.m */, + 83C522A64AC5540AAD98319C36F3E135 /* PFRESTFileCommand.h */, + 436C46A02A32E7AC27D14D39EC7C1837 /* PFRESTFileCommand.m */, + 831DABB79EABDA3FF9164AB3067B2154 /* PFRESTObjectBatchCommand.h */, + EE598A4F3D9378CEBAD8365FAB0D2291 /* PFRESTObjectBatchCommand.m */, + 8F975DFB0B29996EF17B1A0A3E07BC65 /* PFRESTObjectCommand.h */, + 041219D95934148272D9D11F04A65097 /* PFRESTObjectCommand.m */, + 9AC40AAE4F66D4423B9D67D418FE9E45 /* PFRESTPushCommand.h */, + D2E0EEEC88F8887028FA6F0DDA67548B /* PFRESTPushCommand.m */, + 6784E3A646029063B6761DB858CC2A64 /* PFRESTQueryCommand.h */, + 5D2CC7EA24171E936D65F3D1CE945A69 /* PFRESTQueryCommand.m */, + B485708557E6CB2DE1F09BD5E1B8F90F /* PFRESTSessionCommand.h */, + DF7A671748B1795733EB163457D9959D /* PFRESTSessionCommand.m */, + 0644AF28ADE45E9FB2616BBB3A6B43F3 /* PFRESTUserCommand.h */, + 78DF666508E81974752F6338C9BD57F0 /* PFRESTUserCommand.m */, + 3A9951560A51BC6B7877E46E76741F7E /* PFRole.h */, + FC35A11ED7B0DCD6819A7CBB019FE94C /* PFRole.m */, + 8BAB143961E7B37C103224026BB1A6A4 /* PFSession.h */, + BA8F4C6CB58404CBBBB266E5FD1A21F8 /* PFSession.m */, + B54AB9EA09EEEF30796D34F7D163FE45 /* PFSession_Private.h */, + BF72FEFBC6FF8F58CB7CB79FB1C8A7BE /* PFSessionController.h */, + E92240B95F45B88D980A83809E4BCE74 /* PFSessionController.m */, + AC7DB93B4EAA0F9CF5C79181A315DD5D /* PFSessionUtilities.h */, + 36829EB394DB6476915698282D533FA4 /* PFSessionUtilities.m */, + 47DEEC6F87A4C44266E60D0FE9D3CD84 /* PFSQLiteDatabase.h */, + F23678C89071A5C346F5BE0C1DFE5EC2 /* PFSQLiteDatabase.m */, + E0CC60D5D61DAC18565BFA86B04B3091 /* PFSQLiteDatabase_Private.h */, + 120FA99F09676AEC262A7A964B7F118B /* PFSQLiteDatabaseController.h */, + 3A621B8940AFC7648C5072806B4B9311 /* PFSQLiteDatabaseController.m */, + DC59FC62BE26AD5C562D7BBF2224A10E /* PFSQLiteDatabaseResult.h */, + B9699B645F9D9FD06B73D75CA3FB069B /* PFSQLiteDatabaseResult.m */, + 66D7E61A2DA0CCA139659AE3C52ADAC5 /* PFSQLiteStatement.h */, + E8084FC656FBBB0FFE9F542CFE82DFC8 /* PFSQLiteStatement.m */, + 59579E28C00752CB33687F0116BCE918 /* PFSubclassing.h */, + E82CA19BA3E0DE4964F0C052630016EF /* PFTaskQueue.h */, + 4DC5561D6E88870E46F7C10C1B8A21CC /* PFTaskQueue.m */, + 9051E6207606F6E900A4A30F93EE6FE1 /* PFThreadsafety.h */, + 2C77C2B15C731F7A514C22FFCFAD61F4 /* PFThreadsafety.m */, + 5F2C6A11EEEA34D04A61B4281AC80E6C /* PFURLConstructor.h */, + 4EC3750FD01543193A7B71DB65C65C6C /* PFURLConstructor.m */, + 84E61178295191BF6E6785AA01F3B06A /* PFURLSession.h */, + 524E125E9BB16B2EA346C11FA2CCF3DB /* PFURLSession.m */, + 44A129BE492571A758DC14026E10AB87 /* PFURLSession_Private.h */, + 09E57153667D515CCBCF5953009ED8FC /* PFURLSessionCommandRunner.h */, + D961C77262C7D151CC89E6164FA6D52C /* PFURLSessionCommandRunner.m */, + 857186AEF8B59B6AE45A44A595FC38D1 /* PFURLSessionCommandRunner_Private.h */, + 2D29EBF6D740449C59B201746886CD2A /* PFURLSessionDataTaskDelegate.h */, + 9493E918DE059197B488AEB66DA6E6DF /* PFURLSessionDataTaskDelegate.m */, + 3DA5EF8C3E29EFFDABDC9EE3902FE630 /* PFURLSessionDataTaskDelegate_Private.h */, + 562ED9F06683670B4C58AD183A5119AE /* PFURLSessionFileDownloadTaskDelegate.h */, + D7A3AD7DED9F7674DF066157B83874E1 /* PFURLSessionFileDownloadTaskDelegate.m */, + 2C29C184DBBCE87B995B672F7F51F2EA /* PFURLSessionJSONDataTaskDelegate.h */, + 8967DDB36504C317B821DF34152AC486 /* PFURLSessionJSONDataTaskDelegate.m */, + 9B208B6F44DC353307586ECDE943C9F4 /* PFURLSessionUploadTaskDelegate.h */, + A71FEF7E5647E074B2A574E5FE4CDF3E /* PFURLSessionUploadTaskDelegate.m */, + 0A13FE5C7D35D0AE5753E0BBDB76B4DD /* PFUser.h */, + 4ED9C82C3A61619800659B958E8E749E /* PFUser.m */, + 989F197281037053568D90FE2E45034F /* PFUserAuthenticationController.h */, + DEA92EAFBD2F6D31CC60C9BD2B8B1F9E /* PFUserAuthenticationController.m */, + 10327370A383E65FA840807957C88BCD /* PFUserAuthenticationDelegate.h */, + DA7D6B40CA043E1F26CF1737EE7C2D8D /* PFUserConstants.h */, + D89292EA416BFB4E38CFA341905BFDFD /* PFUserConstants.m */, + 5BA130676F12B046A542250B72B807BA /* PFUserController.h */, + 5D0A81E8C2565C9257E716AD6F1840C1 /* PFUserController.m */, + 385FE35508EFAD1A522AC72D9A9F3F0D /* PFUserFileCodingLogic.h */, + CA81F6D4EC4A09874076DCCE8890B484 /* PFUserFileCodingLogic.m */, + 249176052C8E9FF258B54C64D59D6DD2 /* PFUserPrivate.h */, + E6492D62837F81793852C022F8DDDE48 /* PFUserState.h */, + AE6967C88C45F046AD5C10E7ACE7F9DE /* PFUserState.m */, + 571A49A343233979AB4B93973BE75E50 /* PFUserState_Private.h */, + 9D5F1CE5891DAE96AE6580471A3F81CD /* PFWeakValue.h */, + BC22009CD0CB35CBE3E0FE126DC1372A /* PFWeakValue.m */, + F2917A2EA574FD298D50A6BBF6D9FBE1 /* Resources */, + 802C5321FC5ACB930CE064A17957EF97 /* Support Files */, ); - name = Security; + name = Parse; + path = Parse; sourceTree = ""; }; ACE7852A20DA825AE217649C3D71EFB7 /* Products */ = { @@ -2172,389 +2519,51 @@ name = Products; sourceTree = ""; }; - B3DE231F1E249B215E83E5CF5E9AD9F4 /* Parse */ = { - isa = PBXGroup; - children = ( - 151EC16230A016E1E972D02CF9AFCF34 /* BFTask+Private.h */, - A776F03C60540FC847DC8FD81CFFD399 /* BFTask+Private.m */, - 0C58B900BAB52BE6C1A6AC9401D85688 /* Parse.h */, - 9CF52AD6C105BF59D3D2E0B1453E545F /* Parse.m */, - B6DC6273BB88E3B2428C06836FF537E5 /* Parse_Private.h */, - EB1E0B109FE60D221F3E42A35EC080BC /* ParseInternal.h */, - 065EC0B26F5FCC313BF0CC772F0AAFCD /* ParseManager.h */, - 2A30756FBB458B3FFBE25E41C6A39E07 /* ParseManager.m */, - 54A49B5066DC5E2D106E4AB7EC84E310 /* ParseModule.h */, - 9A75A05D48E060BEBF89A6B65009C577 /* ParseModule.m */, - 38BB302FD9DECD313D93E13A55C5A724 /* PFACL.h */, - C2CA7B1027D42D64DAA67C1E2011479E /* PFACL.m */, - 485733735128D4A7D968200F60AE577F /* PFACLPrivate.h */, - 41C24ABA60DD2C0A252F655A688A17C6 /* PFACLState.h */, - 81509BFE89D1F42DFC217BFFCC77885F /* PFACLState.m */, - EB2DEB083FAA7954B735F6FAF4BA4FEA /* PFACLState_Private.h */, - BEF3548901AFF1442D8A42CE3D5CD1A7 /* PFAlertView.h */, - 1479D081320EC36085B8B30288068183 /* PFAlertView.m */, - 63E672189DC0628FEE2AF3B6EF6CE5F6 /* PFAnalytics.h */, - 2028AA6088F4575DAF17E2F06D2DC064 /* PFAnalytics.m */, - 22B70DF0AA41BAA3C080197E5CC5D07B /* PFAnalytics_Private.h */, - 8D00AA339432926A0C0AD20217302F65 /* PFAnalyticsController.h */, - 96BBE1D7671D60064CCF9BFFA76E8E28 /* PFAnalyticsController.m */, - F2BA222B9F01795A4208422B79E054CA /* PFAnalyticsUtilities.h */, - CCE21169E91B4F413E70BB27F172E902 /* PFAnalyticsUtilities.m */, - CBF8069EC1EAD1EEE3C76F86B6CAEAC9 /* PFAnonymousAuthenticationProvider.h */, - B0994984629F495251BA8A149F317827 /* PFAnonymousAuthenticationProvider.m */, - 139DF95532D69618F5A132FBD855F503 /* PFAnonymousUtils.h */, - A6A36422F3C90967B88FE242E00E11EB /* PFAnonymousUtils.m */, - 8FB95CF7F41F64BD82E62CED5B594292 /* PFAnonymousUtils_Private.h */, - B719C90D607E7C93D3CABC47049790CB /* PFApplication.h */, - 24FF581FD822FC0314972728E320502B /* PFApplication.m */, - A24E7517836476C9939D680AAF9AAF11 /* PFAssert.h */, - AA2E139C45664A8F35F7CC0FC4652D64 /* PFAsyncTaskQueue.h */, - CD3794F214603143EF12BBD7D35183B1 /* PFAsyncTaskQueue.m */, - B7D8C5668CD3DD0CB72C11E3C568BEAF /* PFBase64Encoder.h */, - 2046774BE36FD33388E4E6602AF763A0 /* PFBase64Encoder.m */, - C1A50FE4924602AEF1988B628C5A61F6 /* PFBaseState.h */, - 5F6C72DA72BB9A832890E4D4C02C794A /* PFBaseState.m */, - D6A3F777F9D72A576946C81634647411 /* PFCachedQueryController.h */, - EA75AE20BB255EFB336F605121156B56 /* PFCachedQueryController.m */, - EE1F78ECB62A69EB240E2BFAAD710CDB /* PFCategoryLoader.h */, - 37FA8F56A1FA6A8339B3BF6A946BAEE1 /* PFCategoryLoader.m */, - 998337F9EFB691B95AC04D0DEDFA76DF /* PFCloud.h */, - F8C8EB38499DF1B91AD5834F3D8238B6 /* PFCloud.m */, - 2A5EFD08535330BF7DE6E1D3E60F0FDF /* PFCloudCodeController.h */, - 69A510A1BF3A452173802E1908C71DB3 /* PFCloudCodeController.m */, - 97FB31513AE2FE8E761A9C0EEB5EC31F /* PFCommandCache.h */, - FCE06702DA3E947891057A5BB5C23AB1 /* PFCommandCache.m */, - 633C5F1F9DDC345F9BDF689B08C71651 /* PFCommandCache_Private.h */, - 73A911C862B60EA923C814A7824ED72E /* PFCommandResult.h */, - 4D0DB85E2D94B47CB63F50784F0CCD01 /* PFCommandResult.m */, - 7B4F9159794FFF9BEDDFCBAA5965C056 /* PFCommandRunning.h */, - 5A5D2EBF57F51AF57F8C4C497E5D6AEA /* PFCommandRunning.m */, - A29FD65C70682683A3D7D37BD9F78E53 /* PFCommandRunningConstants.h */, - C26F1D9455881336DF278C24466FBC70 /* PFCommandRunningConstants.m */, - BF47B8414383C32DD8B7B421B488B543 /* PFCommandURLRequestConstructor.h */, - 809F219DA65FEDD9A6F8E2DF586F7D62 /* PFCommandURLRequestConstructor.m */, - DC8286821540402840D2F78184926242 /* PFConfig.h */, - BF319A176D7C5D07103C1757D1C4A6FC /* PFConfig.m */, - F017C36C635B636A8A9720DF93844C2F /* PFConfig_Private.h */, - 5D2AE97133B1C7AD99D02E0CBDFB4DE9 /* PFConfigController.h */, - D918045D3E6E8340A10A1948E5BB7798 /* PFConfigController.m */, - CB714FA67888C5CA046827C36660588D /* PFConstants.h */, - 09EA67B03147905558D01B94F40D3B87 /* PFConstants.m */, - 7C823BA36B3996A5B127FB928AAFB071 /* PFCoreDataProvider.h */, - A78827F2D79D32394CB2A7F8AC054D28 /* PFCoreManager.h */, - F552E66B16A2615DC0009C21B50D3642 /* PFCoreManager.m */, - 52EDE9D3C5F9D0F9C4068C669A7F7141 /* PFCurrentConfigController.h */, - 34D23B3A862EAC73082D325761E92C03 /* PFCurrentConfigController.m */, - 241D90B262CD5D9CA1CE4E85B2753446 /* PFCurrentInstallationController.h */, - 3F4D59B74D186D3A1C07E193A4B8E5BA /* PFCurrentInstallationController.m */, - 99FBB19FAFA339DAE8A2130BCBCD5A90 /* PFCurrentObjectControlling.h */, - 0CC62DFCDBE9FE6C3218D149D055F4E7 /* PFCurrentUserController.h */, - EF673633FFA2D7135116862CBD8BE0B9 /* PFCurrentUserController.m */, - 41A0FAD2BC796F0C43E5AD3DFB8BF253 /* PFDataProvider.h */, - 497EC4624AF81526C5C1ADB7FE648185 /* PFDateFormatter.h */, - 8F44CE6BEBD6122876882DCE9A46EBF2 /* PFDateFormatter.m */, - 7188A502AE1E58CD7A9DBA3B6C887DF0 /* PFDecoder.h */, - 3D6B4E7FA130709BC2B2CD4708AB3B01 /* PFDecoder.m */, - B088733242F6563E27BF3689B4BCA38E /* PFDefaultACLController.h */, - C571323D266A5975685DD2191C775A9A /* PFDefaultACLController.m */, - 45505F5B25D4570A45EFBA3FB9E5650D /* PFDevice.h */, - 4F3997BE1E4CB1C34C279A257963F192 /* PFDevice.m */, - 0BE58929E3D2856E2FF1200233D5AEB2 /* PFEncoder.h */, - B9DD11F8C4BB31A6C209F4164F43F64F /* PFEncoder.m */, - BF64F8F931BFD24F09DA8796A5AB8716 /* PFErrorUtilities.h */, - FD4E574985753AA8FBFCD4DF93047E2C /* PFErrorUtilities.m */, - 7870F841A362ED1E4FFA8F36CA9D297E /* PFEventuallyPin.h */, - 3EBF18A4C5D5CB1C2B68379E0F011BC7 /* PFEventuallyPin.m */, - DD38371523A69B7D5F80DEF60A1EC8D3 /* PFEventuallyQueue.h */, - 3E4C754AF717C0F9578078037DD972B7 /* PFEventuallyQueue.m */, - 2DB558CB27C9B59F1418AA3959C1070B /* PFEventuallyQueue_Private.h */, - 2697B93401DB7B2F5E39F3CF9BC4DCB3 /* PFFieldOperation.h */, - E223A483DDF7AE6383953308A7288EC6 /* PFFieldOperation.m */, - 35AB26F5A3AAAB62DB4FDBFA45B6AE7B /* PFFieldOperationDecoder.h */, - D853E3A07CB02F8C41AC94B33D18DE6E /* PFFieldOperationDecoder.m */, - 614FAF041CF57C25CF92549363DC2B35 /* PFFile.h */, - 419788502E9D2F50B77877AEE03ECD01 /* PFFile.m */, - A70E011791587979C22032E1FB4F06F9 /* PFFile_Private.h */, - 113A9AE0365FCE4FF2F8C95725E6A010 /* PFFileController.h */, - 1FC94E4C9D7446F799F1571C5E5D24B3 /* PFFileController.m */, - FDB1BAB3B8D54F4259C686820194F1B4 /* PFFileDataStream.h */, - C1648D08CE8E716C210353B82071411F /* PFFileDataStream.m */, - EADC0A4005E0A455E24E378AAEACAC44 /* PFFileManager.h */, - CF4CF703CC1DBD333ED293E64B2816AC /* PFFileManager.m */, - 641771E5ACE52EEBF054DF88C734432B /* PFFileStagingController.h */, - 991D633806D370E5A9CCBCE8F7E6CF93 /* PFFileStagingController.m */, - 0480814245A7B51C8119FEB8A9BB24EF /* PFFileState.h */, - ED9A2647BBFB6D985C23B197AA1B2982 /* PFFileState.m */, - 5BB3E23687BDA8DF4EC8C90366A7F21E /* PFFileState_Private.h */, - BBF6063B6F29BA7E6ACAA2D45B0000D4 /* PFGeoPoint.h */, - 8B4DD551A4377B715FBEA24BD68F23F7 /* PFGeoPoint.m */, - D9E50F16F11C26B58CB696C26DE57E74 /* PFGeoPointPrivate.h */, - 5A930BF850559AE082DDFACF6887C72E /* PFHash.h */, - 636B22993762DB16840604D7D3A30F70 /* PFHash.m */, - CD6556ADFAD1BE0857B3369A52050CC6 /* PFHTTPRequest.h */, - 1CFB142945D82B4D948325BA5F017A04 /* PFHTTPURLRequestConstructor.h */, - 2C225A32BD5AB6FEB97D66740F1E0931 /* PFHTTPURLRequestConstructor.m */, - 623E4161A8235BF36BEE1C200D5F8E72 /* PFInstallation.h */, - 7DDF020AF63A140F55102296DFDB9C66 /* PFInstallation.m */, - 8B7DC16C982ED9197D1D5205693D4D1E /* PFInstallationConstants.h */, - 1ABE08EED6D9D0788D5D114EB8073400 /* PFInstallationConstants.m */, - 60EC5380A05609AFEADD93175936D23A /* PFInstallationController.h */, - F0849AC8F9BFE0E883A47F09527D2117 /* PFInstallationController.m */, - 6CDDE8A709E5616D62A31C917FE40D76 /* PFInstallationIdentifierStore.h */, - 21915C1929F889B9A02A6D8BD071D10B /* PFInstallationIdentifierStore.m */, - 98CE93C5090192A08CBA7E7C5BF3D0EC /* PFInstallationIdentifierStore_Private.h */, - DAE893D8A79BCE927BD34935557FC189 /* PFInstallationPrivate.h */, - 74B88130F8B1AC90AC1CA346D577FB27 /* PFInternalUtils.h */, - C6C75DCA8C9E3639140AC579C4C46296 /* PFInternalUtils.m */, - F8778205B24E6652290E0F5E7CA361EC /* PFJSONSerialization.h */, - 4A670E98EA122B6C249D0794F87C5973 /* PFJSONSerialization.m */, - C6620BB5952ABF0E4296A0D2DB7BE02F /* PFKeychainStore.h */, - F863D0768304DA4198F0440CDF7AA8C1 /* PFKeychainStore.m */, - 98FC30222B791FD6C8D1E6F1BC6F7687 /* PFKeyValueCache.h */, - 624695D19509BEA6FDB8926119091B30 /* PFKeyValueCache.m */, - 0F31C3824F949AF1259C33FE153A1EA9 /* PFKeyValueCache_Private.h */, - 255D9757582A2D903E70F23C181DF04B /* PFLocationManager.h */, - 3661E7338F270E4C60D4CB7618DACD33 /* PFLocationManager.m */, - 1C7B8B94263BB8F789B6BD083776BBFC /* PFLogger.h */, - 3ECA32B49BAEAD29BCA93D40EE9CC6B7 /* PFLogger.m */, - FB8B3149AFFBFA7C33EB94E521126BBF /* PFLogging.h */, - E3A5971EA076048933873A26498305DB /* PFMacros.h */, - 61E8FE17B430924B29695138E0ACFA96 /* PFMulticastDelegate.h */, - 53977B705B1F2FD103C89A12B9885AA3 /* PFMulticastDelegate.m */, - 886E9C8ED5B1B07A35329D7F11A187EC /* PFMultiProcessFileLock.h */, - 8D0C6A79B925E5B8DDC09CC0D8F44006 /* PFMultiProcessFileLock.m */, - D10834D8E017BD682BEB53FD751CEB75 /* PFMultiProcessFileLockController.h */, - F7278CD831A6A182FCEB151BD633E223 /* PFMultiProcessFileLockController.m */, - 6E80233019F4EE7D4C240660178775ED /* PFMutableACLState.h */, - CA65A1A27CD00A01A317F904467FD513 /* PFMutableACLState.m */, - 1401F53C5562661D42BA72E3554ABA2B /* PFMutableFileState.h */, - 70A3394AFCD610A0CB8D77E3345EDC43 /* PFMutableFileState.m */, - F0F27237E7594BDC013703A579974879 /* PFMutableObjectState.h */, - 352A7DFC0FAD78D5F39DDCF907D02C5F /* PFMutableObjectState.m */, - 4B9C6B10499E423A5444CE2864F26C4C /* PFMutablePushState.h */, - A0C767F598567EAD6A78E56703F0BF49 /* PFMutablePushState.m */, - 46C0C4F037BDBC97CB84248D3C6354F7 /* PFMutableQueryState.h */, - FF08CF3F86D480A8166480D6782736FD /* PFMutableQueryState.m */, - 2641B578F87B9B95E398CE86A132190C /* PFMutableRelationState.h */, - 25714ADEA4E375B6832A9DF56A53F64C /* PFMutableRelationState.m */, - 02CAE2970238AAA1CC6CCF79D78A95D9 /* PFMutableUserState.h */, - BC12683ED13AF4741D430BB224279C59 /* PFMutableUserState.m */, - B5F387A157BDF133EF4E326D269BDCA9 /* PFNetworkActivityIndicatorManager.h */, - 1C38C5BECC83269A118226CDCB9D7F23 /* PFNetworkActivityIndicatorManager.m */, - 9F539BDDEF739BDE923DD4C1FC4B2894 /* PFNetworkCommand.h */, - 5E3AAE5A1E6096A049F4DA5D191CBADC /* PFNullability.h */, - 2247D4BD60404A85E31A8014A3D24BB5 /* PFObject.h */, - 5545F56CBCA1961E8A999F7257C1FA51 /* PFObject.m */, - 390E345239D63E6785408FCCB29AA27C /* PFObject+Subclass.h */, - B658BAA68F8498FD1647DDC21EFA343D /* PFObjectBatchController.h */, - D34C12E4F952DB5875CBA2FC470CEA4A /* PFObjectBatchController.m */, - D0874E998F9E9F408D294DF2386879A8 /* PFObjectConstants.h */, - B23FD0394F4B69148299C896E97C2A90 /* PFObjectConstants.m */, - 80865A22558AC6423CFCE3A112073FD6 /* PFObjectController.h */, - 609DBFC143F8CA52ECA2DC3956D4ADC3 /* PFObjectController.m */, - 4ECC7AE2129119EE9949BB6A2DBA3907 /* PFObjectController_Private.h */, - 87D7C7463212CB7E7A2C6DDE9D75FFF5 /* PFObjectControlling.h */, - FF246D759D5911D6B15A849D032F9E71 /* PFObjectEstimatedData.h */, - 9CAC2D7C9A799C8A55D219041965A2B1 /* PFObjectEstimatedData.m */, - 6E0AF3C159D4C8B5EB68C6ADB8FB55A2 /* PFObjectFileCoder.h */, - 13F31358F978DB7AE6B1DDF2572DD630 /* PFObjectFileCoder.m */, - 5D0E7ECA8260E9EE58E2D1D581456EE6 /* PFObjectFileCodingLogic.h */, - BAD731CA6EDC2C97EDBAE9DEF5BEE3A3 /* PFObjectFileCodingLogic.m */, - 3F9F93F92926388C8FFB4EC13EA0DEBD /* PFObjectFilePersistenceController.h */, - AC430D908CF42C14EF7AAFD9B91F4151 /* PFObjectFilePersistenceController.m */, - 065E4ABAE71F00350CBF5E154707399C /* PFObjectLocalIdStore.h */, - 49C9D42C27DD2AE3AAB32AE24D2EBF53 /* PFObjectLocalIdStore.m */, - 45D7D6B01B2B8A0D96A29F97BC24C01A /* PFObjectPrivate.h */, - A40CB3A94F942DB16FCA1145446DFA1E /* PFObjectState.h */, - 51223661224A51BA99F43A7498640E0A /* PFObjectState.m */, - 66B92824AD49FBB9390D23A0ECEC41CD /* PFObjectState_Private.h */, - 4B6815C329F8604653FA7EB39FBF3DC2 /* PFObjectSubclassInfo.h */, - 83F94635DF5FD3CB6C04F66A51892F22 /* PFObjectSubclassInfo.m */, - B93D67F2A685201833890E4ADFBF1CAE /* PFObjectSubclassingController.h */, - FC5523A002FB0121BC9A4F24743AFB0D /* PFObjectSubclassingController.m */, - 08FAD9262BEE1666BF4D27626214085C /* PFObjectUtilities.h */, - F06ED24D1C39A0CFF4123EB0D9491BFB /* PFObjectUtilities.m */, - 9CC6108EC34A6AB9D07BF82118825BE6 /* PFOfflineObjectController.h */, - F449C107CBE098205F80BDB0D60F2E22 /* PFOfflineObjectController.m */, - 6A63A0131E42676B37B1723606FB5076 /* PFOfflineQueryController.h */, - 4AB3B84C7DF66F47815CEE5E52615C7A /* PFOfflineQueryController.m */, - FDBF6836162C2F1E62D2A5B6917F4F50 /* PFOfflineQueryLogic.h */, - ECE1874B575E1E5185B44168861EBBA9 /* PFOfflineQueryLogic.m */, - BF4961A65C147D1F0F5A6BC47121CBCF /* PFOfflineStore.h */, - 4CACE40B53562456C7355A1BD4B3BF59 /* PFOfflineStore.m */, - 5E69CBD775346A00D22D02F01FAEEE59 /* PFOperationSet.h */, - C0F69EF677BEDD5C5FA799A9275E6EAC /* PFOperationSet.m */, - AC8E66BCE1B2B67DA2045E7EB6549471 /* PFPaymentTransactionObserver.h */, - 687B09B7B61E7AD8BBFAD05917EA3836 /* PFPaymentTransactionObserver.m */, - 318C56533FDD447102932A6E5A233A7E /* PFPaymentTransactionObserver_Private.h */, - 8FBADA788C844BC035F839991DA33BC7 /* PFPin.h */, - 83026E30E5879736A329148544ED9B28 /* PFPin.m */, - 0D716BF50FFA96153B62E0AE932F3E47 /* PFPinningEventuallyQueue.h */, - F35C83A2CBD33B6D54CB34F091A81847 /* PFPinningEventuallyQueue.m */, - E36DC6F0E757E7535DDD2E9C1B846AED /* PFPinningObjectStore.h */, - 666458A8556D81D46682CDDE3C99CFBD /* PFPinningObjectStore.m */, - 255CEDD6FA71975460137BA3F1A2CC30 /* PFProduct.h */, - 88DBADE931198B937A907C0F4A844AB0 /* PFProduct.m */, - 98EC7EC190408FB4A48D91C9C6E633EC /* PFProduct+Private.h */, - 6C1F692004740EFBE7FF1FF61AB5529B /* PFProductsRequestHandler.h */, - 52CD825D9A1511054A1A5701A737B96F /* PFProductsRequestHandler.m */, - F5B5CF62D6DD8EC2B0ABA7B384CFB873 /* PFPropertyInfo.h */, - EE18541D7EEA1DE57DE7976E3835CA79 /* PFPropertyInfo.m */, - 898E5A3B286DE966995F5236CA3096FB /* PFPropertyInfo_Private.h */, - 0725DB534BB32F744586EC0F2357B78B /* PFPropertyInfo_Runtime.h */, - D0A63F277F04D487A09199897B91DA43 /* PFPropertyInfo_Runtime.m */, - C582F437DEEFC2DC78C169737D7E9D53 /* PFPurchase.h */, - FC83E11ABE486AAF98952F9D81D4ED34 /* PFPurchase.m */, - EEFC9ED15A9741CB66AA57CF2B4D69FB /* PFPurchaseController.h */, - 0E00B62CEE59E199D07EB3F3B4F2710F /* PFPurchaseController.m */, - A869D04D94D174D538E8EEC8AD639A3F /* PFPush.h */, - 05FE2E6BDD950A5BDE5209E33B3C42DF /* PFPush.m */, - F38FDD5066166323AEDEE66D20C6F9C2 /* PFPushChannelsController.h */, - 20BC97E813BBBC1228B843C37193A581 /* PFPushChannelsController.m */, - 38D7F1933A49B1054CE8669A45108CF3 /* PFPushController.h */, - D26D67D3B6418EC0A3EC02DFD678C696 /* PFPushController.m */, - 467740A6E9FE2B669577C05571B6DC7F /* PFPushManager.h */, - 9CC658527AA6BE88A41923B795916FE0 /* PFPushManager.m */, - 41729ECC74ACE0C2F2268BD56ABD77D5 /* PFPushPrivate.h */, - 85DE173836F20C196CF9443BA77C76A2 /* PFPushState.h */, - E474D6AB963D4ABAFB608C01EC10CCE0 /* PFPushState.m */, - 5F6FFE987901F200ABA41215EC6603C5 /* PFPushState_Private.h */, - 5EDC42BD069E7A8A5E8A432640A1F523 /* PFPushUtilities.h */, - 341193ADAA541B40C6DC994505AA1FD6 /* PFPushUtilities.m */, - AF6B37C98266FCE557B14E51A8B13011 /* PFQuery.h */, - DC3331AEC86B8C52429A342C01652D63 /* PFQuery.m */, - 4AE1A480AE466808EAF88E6FA440AA1F /* PFQueryController.h */, - 8DF6084BF27306D73EE3F7156B4A3EFD /* PFQueryController.m */, - B13866FCDF031E55F0DD3D8829D073F8 /* PFQueryPrivate.h */, - 86017ED93042A0624A5FBBFEDCDEE976 /* PFQueryState.h */, - 0766F2D21D2ED224A3E82F26E0B5CD52 /* PFQueryState.m */, - 8D7825E186E2129768F652FA322E5FD2 /* PFQueryState_Private.h */, - 61FF4D40E535915FF2A5E6013656D65F /* PFQueryUtilities.h */, - 345CA40D5F45AD04D24CC17ABE86B911 /* PFQueryUtilities.m */, - DF725FD55935B6C23669417D4E1B2668 /* PFReachability.h */, - 09135BA358F372DFAB44C8FB18692D6C /* PFReachability.m */, - B1A39241452F7C9E16CF2D824F7364DC /* PFRelation.h */, - BEE6E33A4974E21DDA04F659E990E8D5 /* PFRelation.m */, - A2C468F7EBC72EDE2DDF8B4ADEF3EFF1 /* PFRelationPrivate.h */, - 67CE6D4D9A7B520EA991DDC9419C137E /* PFRelationState.h */, - A1C3EA21F91503CF85866B1DEBB42208 /* PFRelationState.m */, - E936219EC6142DBDD297B11DCA11AC0A /* PFRelationState_Private.h */, - 1B4159A9FBBE236E3AC1B55F41CC8C84 /* PFRESTAnalyticsCommand.h */, - 96E2E224B40477F06DF3B453832889DE /* PFRESTAnalyticsCommand.m */, - 0670C245E4B747809A451258C962EA4C /* PFRESTCloudCommand.h */, - C4ECEB822EE787E43E4B3D81D192BD08 /* PFRESTCloudCommand.m */, - 385261552CFAF1B884CE31C0FDFAC71A /* PFRESTCommand.h */, - A6E6334AF3D4ABDE619C3F9F1575FA7A /* PFRESTCommand.m */, - 320F50071C407D10444E25E65E981EAB /* PFRESTCommand_Private.h */, - D464E14984EAF6352F7E733E899C8F4A /* PFRESTConfigCommand.h */, - 818DBD3B6CFCFF9DC445CD8574113BAA /* PFRESTConfigCommand.m */, - 1C31C458F86FD36FC07384D563ADFBF2 /* PFRESTFileCommand.h */, - 48347C3BCE6F2F0E9F400C6727FC975A /* PFRESTFileCommand.m */, - C6725615AB0EB3D222E0B93D2EC3C6B7 /* PFRESTObjectBatchCommand.h */, - 4CA05D6E4244A871551EC80C2CDCCEC1 /* PFRESTObjectBatchCommand.m */, - D3308E5C88DF7BD7EB9571B8F71861E2 /* PFRESTObjectCommand.h */, - A586A584997D8AAB3C26BC7EA0ABE46C /* PFRESTObjectCommand.m */, - 5BAFC8795A0D106AB97B4408C85D0A49 /* PFRESTPushCommand.h */, - C10C515D0450CC29CCEF68EA816542D5 /* PFRESTPushCommand.m */, - 26C5CC23FF12B866E1AD73E2DC206622 /* PFRESTQueryCommand.h */, - B2E4026B95A28F85E28276E70D07582F /* PFRESTQueryCommand.m */, - 6B117E2539ED9DDF90DCCD6AC02BA037 /* PFRESTSessionCommand.h */, - F439F7531646055B955D7668822E655A /* PFRESTSessionCommand.m */, - 7A28FD3FB992F202D240D12E7F2B7FD5 /* PFRESTUserCommand.h */, - C64ACA14342A9ECCF8A0C727A2193004 /* PFRESTUserCommand.m */, - EF607DC0E28A9F3234F18C9B3BA88690 /* PFRole.h */, - 44C79E1505808F22B40DEDC10582999E /* PFRole.m */, - 80684463B172C7670EDABBAB1D1D3482 /* PFSession.h */, - 3448DBBDFED1AD82ECE8A1B07DD53EB0 /* PFSession.m */, - DFD47DBE4E7606BA4FA86C0F5919CDD5 /* PFSession_Private.h */, - CEB2A2A103376D8F9047E4F1E106E16A /* PFSessionController.h */, - 9F1D3010E400E70C042940F75036BF3D /* PFSessionController.m */, - 62FADD9376E95D055AF0A96D39FD267C /* PFSessionUtilities.h */, - 072BA5A6E13B9A44E938BDEC145CD4DD /* PFSessionUtilities.m */, - B32250A0ACFF1FD6AFA14D88511BAE8F /* PFSQLiteDatabase.h */, - E6BA7CC067B235E0FF566A94E1581577 /* PFSQLiteDatabase.m */, - 4075748CA8F21BAC0F4620D185E8FD8E /* PFSQLiteDatabase_Private.h */, - 1DF2C8BE2B249F69FCE01059E5C2E34E /* PFSQLiteDatabaseController.h */, - 150C19C70C597D439FA96FCB3A6B68AC /* PFSQLiteDatabaseController.m */, - ABFBC5AE1B18C02508CD09769DD4415A /* PFSQLiteDatabaseResult.h */, - E743DD9EBFBFF918EF56FABFE4C5AC4D /* PFSQLiteDatabaseResult.m */, - 6AC19EA4CDEEFAFF25CAB498F92DE3C8 /* PFSQLiteStatement.h */, - 40284536A49434B0DD0358F33A4F8172 /* PFSQLiteStatement.m */, - 0982CCB6B201941BA02A2C5BED20003D /* PFSubclassing.h */, - 28965A0B0DA8E71614774B97CBEF38BB /* PFTaskQueue.h */, - 2699550AAFB04BB17916C59A6B1FC51D /* PFTaskQueue.m */, - 7B2C31800C645ACA08536F0A681E03CF /* PFThreadsafety.h */, - 24776F7FEE23D85F92F28624333EF3EC /* PFThreadsafety.m */, - 09FF643952C8AE70189400301DA35699 /* PFURLConstructor.h */, - FF48AB657BBC095D80AA753EDFA8198E /* PFURLConstructor.m */, - 73CC3349EC3533415793CF755807650A /* PFURLSession.h */, - 9EE7C503197A62ADD66AD452FCFEFAB7 /* PFURLSession.m */, - A316237767BF661F1B6AD8F4B030AF7A /* PFURLSession_Private.h */, - 5358009CFED1962F15A2280446DB04A7 /* PFURLSessionCommandRunner.h */, - 8E34CEB998FE5525402334C2BB80D5A3 /* PFURLSessionCommandRunner.m */, - ACB7449F5C2B0CE0404EEF1294771367 /* PFURLSessionCommandRunner_Private.h */, - 68183AD738E931701FD0AD3DF16E94B9 /* PFURLSessionDataTaskDelegate.h */, - 46AA5FBD23466BC2877613E9ED755E8F /* PFURLSessionDataTaskDelegate.m */, - 71906898F9D4CCF17CBD5FC16B0E40FB /* PFURLSessionDataTaskDelegate_Private.h */, - C2B65C31D9152869F1CCD359EF540969 /* PFURLSessionFileDownloadTaskDelegate.h */, - 92C68D5FDCA38C263C5C9DA67BC52DAB /* PFURLSessionFileDownloadTaskDelegate.m */, - DCCBF38FA67936B62300896ABA01E42F /* PFURLSessionJSONDataTaskDelegate.h */, - E725EA90CDD636F75AA6136536B4106E /* PFURLSessionJSONDataTaskDelegate.m */, - 30897A1EF233A016A554F6A64222767E /* PFURLSessionUploadTaskDelegate.h */, - D840D2F9AFF823F94F3AB0131703459B /* PFURLSessionUploadTaskDelegate.m */, - CFFDDC90032F16F94B5EC26EFEF453DF /* PFUser.h */, - DF0826136CA6F04163DCAD76EB0BE45D /* PFUser.m */, - A745A3D33907AFBD7D9B85EC9DC35D21 /* PFUserAuthenticationController.h */, - 4A7D177985593F94AB3C85D6D51C42C6 /* PFUserAuthenticationController.m */, - 7F2689D7BF9856AA54533AE6210302B0 /* PFUserAuthenticationDelegate.h */, - E7F24C0BF2AC1D3A0AB451BCE534C2D0 /* PFUserConstants.h */, - 19176755A633092BD34527BD97CC9A2D /* PFUserConstants.m */, - 73ACD345C800D725173F90C44EFD0B3A /* PFUserController.h */, - 0225577578F0F538D3E335508E84D451 /* PFUserController.m */, - 326B3BC55A45A42DE61D2F9FD6215A24 /* PFUserFileCodingLogic.h */, - 92D60EA1BE94F7CC68B03B328E9DA910 /* PFUserFileCodingLogic.m */, - 50662E86832F5B9AA451BDE684D8D13D /* PFUserPrivate.h */, - 0FF78B4C18BD5E661C223DA05F706583 /* PFUserState.h */, - BD99F6ACFEC1E975F0FE0DF810A977A0 /* PFUserState.m */, - 4A6886AC956A814ACE7382CC7A019CD2 /* PFUserState_Private.h */, - 852A83DBE22D8BF63D1F7D4F20EB25EF /* PFWeakValue.h */, - 96FC24F36F6A0E253A147A902D4D87B3 /* PFWeakValue.m */, - 878B5CB6B5EAE6A1BDF0FFBC6AAB6C5E /* Resources */, - CE24BD2F839421EACDDDAC644746E6D9 /* Support Files */, - ); - name = Parse; - path = Parse; - sourceTree = ""; - }; - BA5F913FE40214681746B9F1CB36AD8F /* Resources */ = { + CAE3BE3C05705C076B1EC906EE735FF6 /* Core */ = { isa = PBXGroup; children = ( - A4FDC68F75815A014551F0B6B572D2AF /* IQKeyboardManager.bundle */, + C971E759236FF5C44EDF586ABA1FDD1A /* NSData+ImageContentType.h */, + 64197C6CBE27CDF8450C86E247333C27 /* NSData+ImageContentType.m */, + A672C404782F472C63BC1B4FF31B6004 /* SDImageCache.h */, + 7B54797159113BD42DEF825808E96506 /* SDImageCache.m */, + 4C112C5EA6B10F17C8A8DC5699FFED81 /* SDWebImageCompat.h */, + 3A0B96CBB6636A7BDCBA964478F20F8F /* SDWebImageCompat.m */, + 110AAF7EB53ECB71214D319069E26CBB /* SDWebImageDecoder.h */, + 41755FA2662E2489FEB0E6FEC30BCAE0 /* SDWebImageDecoder.m */, + D9045979C5B73816C81F6DC6CB9C26C6 /* SDWebImageDownloader.h */, + 5896B97D426354756157FC55B080FD82 /* SDWebImageDownloader.m */, + 18D28DEFCE0FAFDD3C9195B9594781FC /* SDWebImageDownloaderOperation.h */, + 13BA722BB3C5D60330A639CBB1030486 /* SDWebImageDownloaderOperation.m */, + B1E5C0E4125427F0E3FDE91F5CBA4513 /* SDWebImageManager.h */, + 6721C44FB15736B15A7A9FF9DEE5BA27 /* SDWebImageManager.m */, + 32719F277BAE80948D0BEA83DAC8F658 /* SDWebImageOperation.h */, + 1D7FFC332FE37C75EC2BBEEB205C3392 /* SDWebImagePrefetcher.h */, + 6C66681DF328D06725C4357E76019D12 /* SDWebImagePrefetcher.m */, + 90B7F377A6C76455F713F9A2956AE3E4 /* UIButton+WebCache.h */, + 9B6C075902DFE55B31A76D31208A4280 /* UIButton+WebCache.m */, + B965B81CCEE7979B459AD921D6689D66 /* UIImage+GIF.h */, + 81D0A63D86D41097D8121FB31AFAFEEA /* UIImage+GIF.m */, + 829A5C4EB781110BB7C73A0432188FD5 /* UIImage+MultiFormat.h */, + 84F48C253BD5BE7290BF97DBB488394B /* UIImage+MultiFormat.m */, + E82AC36F045BE087ECE7253B8EEB06EB /* UIImageView+HighlightedWebCache.h */, + 7158256AD2EEA035C9BB1BF017053123 /* UIImageView+HighlightedWebCache.m */, + EACA9F3764C09E78E6A493517CC775B9 /* UIImageView+WebCache.h */, + C0B062364FAD300B57FFF2CD44278F60 /* UIImageView+WebCache.m */, + 4E4DAF9930C43CB43E5BF52055CD68F1 /* UIView+WebCacheOperation.h */, + BDAEBE02C021E3A5CC6C2481DDB70A37 /* UIView+WebCacheOperation.m */, ); - name = Resources; - sourceTree = ""; - }; - BC7D3B67D42FFD3E1347CBCA43F97813 /* Support Files */ = { - isa = PBXGroup; - children = ( - 265A36A163461FAFE8B22F91E5FF5839 /* AFNetworking.modulemap */, - 91F6CE6961CE84A5E762D863216E0997 /* AFNetworking-dummy.m */, - B517C85F24F47CE2FEA872AFC6676C80 /* AFNetworking-Info.plist */, - A6AFE5A0BB8F671D756405659A7280C4 /* AFNetworking-prefix.pch */, - 8852424B3CD79FB522C7DBB741B3A915 /* AFNetworking-umbrella.h */, - 7AB05A9755C75CB37B4B278883D9ECBE /* AFNetworking.debug.xcconfig */, - 4AB7F6659411A2066C581E0CA1DB5C65 /* AFNetworking.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/AFNetworking"; + name = Core; sourceTree = ""; }; - C9E21EB76BAE08F39E47EEBAA84FD02F /* Resources */ = { + CBBBB1AC47AD554DE9F0A578ECDE67F4 /* Serialization */ = { isa = PBXGroup; children = ( - 2A04E1624A7D22B26C4108F5511DBA59 /* en.lproj */, + 0B559DA039E8A1B57AA78991E706A8C2 /* AFURLRequestSerialization.h */, + 5F468E6B33E9C6CF3D86F7DE8C388C8B /* AFURLRequestSerialization.m */, + E01DF6BF8E0DB15494DA23A118BCDE49 /* AFURLResponseSerialization.h */, + CB77AF007BC5AA8EA10347DB05702138 /* AFURLResponseSerialization.m */, ); - name = Resources; + name = Serialization; sourceTree = ""; }; CC67B748D6D89E34B3EBA3591D5D4298 /* Pods-FoodbLog */ = { @@ -2574,94 +2583,100 @@ path = "Target Support Files/Pods-FoodbLog"; sourceTree = ""; }; - CE24BD2F839421EACDDDAC644746E6D9 /* Support Files */ = { - isa = PBXGroup; - children = ( - AF48650F07B7D424D0C0F148D2C63F3B /* Parse.modulemap */, - 12EE481EE7117C1AC26F8C373608E91D /* Parse-dummy.m */, - F01AF6F27447ED96CC1D67478AE5944A /* Parse-Info.plist */, - B252B37D2D546870C8A826AB65BC2B95 /* Parse-prefix.pch */, - 43ED988181D6943C924184E66A36963B /* Parse-umbrella.h */, - 38F8E3AFD6049401797C7A47018A213A /* Parse.debug.xcconfig */, - 9B994E9D8D38725EB2DBDFA907134A7C /* Parse.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Parse"; - sourceTree = ""; - }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, 35E526B6E4CA6A7E89FE8C5A5B1F2259 /* Frameworks */, - 595CD60B097830EF6B8B59E1F985D800 /* Pods */, + 221E052A8AFDB44D77227FF60A110FF3 /* Pods */, ACE7852A20DA825AE217649C3D71EFB7 /* Products */, 172C6AB29CA1720C0D85F380DD22AFB9 /* Targets Support Files */, ); sourceTree = ""; }; - D198DD0422CB3811CCB34AA14A138785 /* UIKit */ = { + D05441F363DA5C39F91284F9B5CEDACC /* SDWebImage */ = { isa = PBXGroup; children = ( - C0186D06FBE7DA63E6E3D6BA78C59D81 /* AFNetworkActivityIndicatorManager.h */, - 8B4598F68BAD6898D603B376A1FB1A8B /* AFNetworkActivityIndicatorManager.m */, - 246514DFF438978008D8FA6C3DB62A87 /* UIActivityIndicatorView+AFNetworking.h */, - AFA966371146146D7F2018130EFE0F66 /* UIActivityIndicatorView+AFNetworking.m */, - 13D51BF48F5AB0EACFEFDE67304AE0AE /* UIAlertView+AFNetworking.h */, - 18507E1294DADA225725E281BEEF80DD /* UIAlertView+AFNetworking.m */, - EE978A828BDE18C9C31167600F655876 /* UIButton+AFNetworking.h */, - 40668A53B58A0048FA222C4AB7E2189E /* UIButton+AFNetworking.m */, - F364E09FEB64FC9E1C8B7224CDCE8E01 /* UIImage+AFNetworking.h */, - 8E9D2D880354EC317D86A4349D035200 /* UIImageView+AFNetworking.h */, - A408C24FBC30C794341C29AD9ECA2CD1 /* UIImageView+AFNetworking.m */, - DE9F993B8C26D2CD762FFC2EB4E32734 /* UIKit+AFNetworking.h */, - 0F396B4049BADC218F3C27A0FB8AF963 /* UIProgressView+AFNetworking.h */, - 51CF4033E47188387317DC9CBC5EBBA3 /* UIProgressView+AFNetworking.m */, - C8CC6659A6C2F9156DD09335364D0A48 /* UIRefreshControl+AFNetworking.h */, - 76CB784D54B055F86031B44399CB67A2 /* UIRefreshControl+AFNetworking.m */, - 7DE2D5472532E535898481C5442AAA5B /* UIWebView+AFNetworking.h */, - 7E737BD38A79BE130905DB568587BBC4 /* UIWebView+AFNetworking.m */, + CAE3BE3C05705C076B1EC906EE735FF6 /* Core */, + 68AFE8F905231F3E4C5EBFAA29AD5666 /* Support Files */, ); - name = UIKit; + name = SDWebImage; + path = SDWebImage; sourceTree = ""; }; - E8942D476A67018116BB908E43FDA24B /* Bolts */ = { + D8002BE0C5AD88976C0807FA9C6685B5 /* Support Files */ = { isa = PBXGroup; children = ( - 184BEF9B5CABA24D9A779A2C07AD0583 /* Support Files */, - 2FF61124D8A80D2D8DE9D6F350DE5041 /* Tasks */, + 7C92F31D9E400B1B46DA37ADD0B84189 /* ChameleonFramework.modulemap */, + 3D2290841E77758DEB6EAFA4F67271A3 /* ChameleonFramework-dummy.m */, + 4117F3C2B16BF78B5EBD1BEACABFF34B /* ChameleonFramework-Info.plist */, + BD16E875A751C74763634BD2E94CEEE6 /* ChameleonFramework-prefix.pch */, + C3AC194441355C5C035DA3351650C99E /* ChameleonFramework-umbrella.h */, + BD8A148C1C76BD03BEFC12CCE8F7BB3E /* ChameleonFramework.debug.xcconfig */, + 80178C233F043FB5B04F2B531880B028 /* ChameleonFramework.release.xcconfig */, ); - name = Bolts; - path = Bolts; + name = "Support Files"; + path = "../Target Support Files/ChameleonFramework"; sourceTree = ""; }; - F387619E937BAFBEDDAF6DD4559FAC1B /* Support Files */ = { + E7E648388FFBDFCD741DBEC0FA599F68 /* Support Files */ = { isa = PBXGroup; children = ( - 927DBA16CBE9B29D79E1EE774EE19F59 /* ChameleonFramework.modulemap */, - D79C12A61A4543E416CBB738D3FF37C3 /* ChameleonFramework-dummy.m */, - C2ACCA2ADD065408B661FC354F02DBD2 /* ChameleonFramework-Info.plist */, - FF6E60AD4F8CE395B8997C363B38E9FD /* ChameleonFramework-prefix.pch */, - F18000A5D7CD27A6122BE6E91FD82BC9 /* ChameleonFramework-umbrella.h */, - DA0DF40D1E6DB2A9A53542C123149969 /* ChameleonFramework.debug.xcconfig */, - 7142851694FCB943E670DC3C15E92EBF /* ChameleonFramework.release.xcconfig */, + B62EA9E3F43DB044529820595B489487 /* AFNetworking.modulemap */, + CE1D7CADD6B787D221D22A300F04F5B1 /* AFNetworking-dummy.m */, + BE4797FEB12AB168882290F20F22E1B3 /* AFNetworking-Info.plist */, + 7DB4F4E4B2256634770AE493DF1F4302 /* AFNetworking-prefix.pch */, + 2809CC499F34E67434A2065F3F90217D /* AFNetworking-umbrella.h */, + B03124BAD3BD5D9AAEFF7FC003DC0B1C /* AFNetworking.debug.xcconfig */, + 59340BADC818D8D3EE97EF49C93B9657 /* AFNetworking.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/ChameleonFramework"; + path = "../Target Support Files/AFNetworking"; sourceTree = ""; }; - FCCC03A49F4A917E53DF929ED3AE9864 /* Resources */ = { + EED214742741A6815D2FD502A3958CC1 /* ChameleonFramework */ = { isa = PBXGroup; children = ( - 7389E3A97A4248463F61AE93C1902809 /* flat-ui-icons-regular.ttf */, - 416EF6ABD24C5B14BDDDADF319BC2942 /* Lato-Bold.ttf */, - 64999537AFDE8F90807B5B5991781283 /* Lato-Italic.ttf */, - 4313FC1E27E9B9A96CC0E86A9963B5EE /* Lato-Light.ttf */, - B4B9DA35E6B073D79C38529A56AD6105 /* Lato-Regular.ttf */, + 562C511EFDAF67D6E1E8DC99740F61F2 /* Default */, + D8002BE0C5AD88976C0807FA9C6685B5 /* Support Files */, + ); + name = ChameleonFramework; + path = ChameleonFramework; + sourceTree = ""; + }; + F2917A2EA574FD298D50A6BBF6D9FBE1 /* Resources */ = { + isa = PBXGroup; + children = ( + 6142F4E83D523220AAA5D1451FD4BD96 /* en.lproj */, ); name = Resources; sourceTree = ""; }; + FD3AA9CE5FEF18CC6A3164F66A98AFDD /* UIKit */ = { + isa = PBXGroup; + children = ( + A97E94420846C84B8140C33CF337FE2C /* AFNetworkActivityIndicatorManager.h */, + 749D4221E99EEA9B5BC4964E736739C2 /* AFNetworkActivityIndicatorManager.m */, + 4A8B03638085EFF11C1EAAF09ED235E2 /* UIActivityIndicatorView+AFNetworking.h */, + 1D60463E70F6B8741716B5430ED6586F /* UIActivityIndicatorView+AFNetworking.m */, + 992F6F2CF6AA0579EA8E24CB235D73BA /* UIAlertView+AFNetworking.h */, + B27416461ADADD8D3ADF8E8D35A3ACE1 /* UIAlertView+AFNetworking.m */, + 32D1EED54067102FB95B998DE807EB80 /* UIButton+AFNetworking.h */, + 523B0739D98E30356009D72E50CC1DDB /* UIButton+AFNetworking.m */, + 4DA03E39CAF7E8EFC0E5EDDCBC9F3BD0 /* UIImage+AFNetworking.h */, + 9FAE01CF4B380A313FEBB6E495A58C24 /* UIImageView+AFNetworking.h */, + 73CC9A342B0099AB7F2D13D603FCFC71 /* UIImageView+AFNetworking.m */, + 58C02A1A5B90D578646A551B3EE8B09B /* UIKit+AFNetworking.h */, + 1FA89EADBEBD0F217B329170BCD40A4C /* UIProgressView+AFNetworking.h */, + 0CAAD28C58C66EB0A98AA015C265FDCE /* UIProgressView+AFNetworking.m */, + A816AB5A1E39050DB3C8267CC75B6308 /* UIRefreshControl+AFNetworking.h */, + 719F3201FA8FF71792294DDA9C2E0678 /* UIRefreshControl+AFNetworking.m */, + FD5C4496FDDA02FC33B9EF297AD6BF6A /* UIWebView+AFNetworking.h */, + E5EABACCD833603D71DDA83AF8267A78 /* UIWebView+AFNetworking.m */, + ); + name = UIKit; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -2716,6 +2731,30 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 3D06C26E89812FB5A93DD6138024C08C /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 590AD04854053AF10E3397F20A648CFF /* IQBarButtonItem.h in Headers */, + EC1CBC5AB12E4C488819653A72B5E19F /* IQKeyboardManager.h in Headers */, + EC13F1DF9025A5C3E0CB90E9376BD62F /* IQKeyboardManager-umbrella.h in Headers */, + 4CFA03024DDB3D22E34E21E6B93577B9 /* IQKeyboardManagerConstants.h in Headers */, + 48E6C81111ABE83FB43D7E16A07D423B /* IQKeyboardManagerConstantsInternal.h in Headers */, + 0B59DB8E6AB6779CC25A6E28EF151996 /* IQKeyboardReturnKeyHandler.h in Headers */, + D184483D8564CEEE9E25688918814972 /* IQNSArray+Sort.h in Headers */, + 4DA3E886A13F59B8C595071C71911700 /* IQPreviousNextView.h in Headers */, + 3AF7CAD58044A895437E02A54D89803F /* IQTextView.h in Headers */, + FB3FC81067E5C451ADFBFF6918D8FFCA /* IQTitleBarButtonItem.h in Headers */, + 9E4F5CDEEE091D095F1769FD0423C07C /* IQToolbar.h in Headers */, + 8C450FC7E1CB66D28CD46981530E0A8C /* IQUIScrollView+Additions.h in Headers */, + A4C736E58BDA8172D6667A19851FDEC2 /* IQUITextFieldView+Additions.h in Headers */, + 8EEF8A9731DE9C088F894071C9248FB3 /* IQUIView+Hierarchy.h in Headers */, + D5B1F28C17002CBE60420F56B85DC2BF /* IQUIView+IQKeyboardToolbar.h in Headers */, + C7F5E4E05604B5ABC2B37F8FA933A19F /* IQUIViewController+Additions.h in Headers */, + F3FE63C82D6575686809B65BB48AE8C8 /* IQUIWindow+Hierarchy.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 43FD6D86FE03BF966B0926576933AC19 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -2739,67 +2778,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 6F3D3020832CEDA9562C661557CD8F6B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - E9301E9CC4AAB6DCE8FAEE224E15F583 /* ParseUI.h in Headers */, - 79E628F0D120F5718AF6A64BDA3BFB05 /* ParseUI-umbrella.h in Headers */, - 01903DCA721AA027FF2C4BFB3235968F /* ParseUIConstants.h in Headers */, - 4088CBC095D20D651F6BA5F7A3FED8FE /* PFActionButton.h in Headers */, - 747E24F16EF4878D1A18D93BB11C1E48 /* PFActivityIndicatorCollectionReusableView.h in Headers */, - 1B1F1AF2A1AB6F428F22E527890F4BD2 /* PFActivityIndicatorTableViewCell.h in Headers */, - B79B6F2E53077EAEBD1BCDA3DF97E926 /* PFCollectionViewCell.h in Headers */, - 70BCB2E06955566BC275547B1CE87E1E /* PFColor.h in Headers */, - DA15806CB1F348AB5EDB812656E228F2 /* PFDismissButton.h in Headers */, - 3005D65B0D40094D6DA7A7D7213106DF /* PFImage.h in Headers */, - E0689342829558FC97ECA6AE5B078183 /* PFImageCache.h in Headers */, - E57913A90FF880A05C0C1CBA7C10F570 /* PFImageView.h in Headers */, - 30DE4D927EC179D0C616A2855CDB459A /* PFLoadingView.h in Headers */, - 7D712156EAFC4E82DB10F63FF6DE9688 /* PFLocalization.h in Headers */, - 343BA4FDC3A386CEC60414AF4686A9B9 /* PFLogInView.h in Headers */, - 0433ED820B0734E79BC0D1269B11B1DF /* PFLogInView_Private.h in Headers */, - 617837DA00E113ED6434856AFD3B0655 /* PFLogInViewController.h in Headers */, - 96F1A018D913D4362A1013D53C417E4F /* PFPrimaryButton.h in Headers */, - BC976BE2061D253EDB43A6E3CD2BD60E /* PFProductTableViewController.h in Headers */, - 82A7493CFF424B02B1EA1D347F3EF1B5 /* PFPurchaseTableViewCell.h in Headers */, - B2F619610C5E641B67EDF4E366C0E073 /* PFQueryCollectionViewController.h in Headers */, - E11481C2A7C5F0D2D2B514972DC3BD75 /* PFQueryTableViewController.h in Headers */, - BB37D3123E1BA2AAB5924D33133261F3 /* PFRect.h in Headers */, - 18F82D1C6E5E33BAFAD4215A6CC4ADD3 /* PFResources.h in Headers */, - BB59A06B6A75653CECA76692FBABC24B /* PFSignUpView.h in Headers */, - 6482EBE780EB543371D426AC31797DAE /* PFSignUpViewController.h in Headers */, - 2FAA5B2F5F9FDDE4AA56578E1EAC701A /* PFTableViewCell.h in Headers */, - A1C35F6CD4D45B271A2E74D7A7CC1A86 /* PFTextButton.h in Headers */, - D8E2653DA4361CAA33F7832803BD676C /* PFTextField.h in Headers */, - 09256B3E535A3C628240CF7C752E131C /* PFUIAlertView.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6F84814001FC54309657F31682B0B240 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 755D05098517A360EA8B6BF70AED2F97 /* IQBarButtonItem.h in Headers */, - 0C26152F6C1310B04B876FD3B44B1021 /* IQKeyboardManager.h in Headers */, - 05BD04A5F73E3D27A7D713F3C5CB5F7A /* IQKeyboardManager-umbrella.h in Headers */, - D6E746CCAE091711861229C64E08D878 /* IQKeyboardManagerConstants.h in Headers */, - 999D42B892A6FFA309196DA2508021E1 /* IQKeyboardManagerConstantsInternal.h in Headers */, - 3DC92CBA93056F0AB9A06A9690F79256 /* IQKeyboardReturnKeyHandler.h in Headers */, - DAE230257B3B2669C1587D2039114C8F /* IQNSArray+Sort.h in Headers */, - C912666A5A195657F1BADD12361FA838 /* IQSegmentedNextPrevious.h in Headers */, - 6544222D2E3DD831AFFA9A3DCF39345D /* IQTextView.h in Headers */, - 31185487A9186107B6DE9891D14BFE90 /* IQTitleBarButtonItem.h in Headers */, - 7D753DB6C985E2BA23D16756811EE941 /* IQToolbar.h in Headers */, - 5EF07666094CCCAD7F7FD9C75E1B1A39 /* IQUITextFieldView+Additions.h in Headers */, - B38703522CBD2E293FD804AD58121426 /* IQUIView+Hierarchy.h in Headers */, - 818582725BCC7A824799342881C7FB4D /* IQUIView+IQKeyboardToolbar.h in Headers */, - 4E1AD5C16CF7F3F2397F4A106F313096 /* IQUIViewController+Additions.h in Headers */, - 4B9F5156E5DDC40B87884E5C37B1153B /* IQUIWindow+Hierarchy.h in Headers */, - BD0BF44B4A873132D7BEE79DC691F996 /* KeyboardManager.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 869988D1C6EFA80212F480B9CFCD1838 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -3034,6 +3012,43 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + D6AF2AB76DD4558E64A5D5ECCDC58114 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 2B08FFD13779AF38637AE45D96FC4539 /* ParseUI.h in Headers */, + B4EC18486C52A92FE8E7BD6F5CA0CC07 /* ParseUI-umbrella.h in Headers */, + 44E515AEC571BC7E0022D7EC3E46C355 /* ParseUIConstants.h in Headers */, + EBE6A0A4F9476D021AF772A03BCA694A /* PFActionButton.h in Headers */, + 467950FEB327FA58BF3AB19866202783 /* PFActivityIndicatorCollectionReusableView.h in Headers */, + B2AC279F28767EE398BD6A3187018651 /* PFActivityIndicatorTableViewCell.h in Headers */, + BB197948814E822050EAD045575FA763 /* PFCollectionViewCell.h in Headers */, + F2A824CD4CFB7203FD1871E0F3BE5EBD /* PFColor.h in Headers */, + B82E90F4E6AE4160EAC6E395B4D91A73 /* PFDismissButton.h in Headers */, + 57372144DB1FA2903B634AF173F67242 /* PFImage.h in Headers */, + 54C7D79891D053A424B0DF7E9E73B36A /* PFImageCache.h in Headers */, + 9411A8D1DF493F321B801931CFB501E5 /* PFImageView.h in Headers */, + 112A2B2F920B6739EF4388D9F5F09D1D /* PFLoadingView.h in Headers */, + E2FF904D58EF803363F83C88EFDC1EBC /* PFLocalization.h in Headers */, + D041E5A116E9A902A377085D66C03139 /* PFLogInView.h in Headers */, + 676779CDA73D9EB7101859B2DEFD12C2 /* PFLogInView_Private.h in Headers */, + 1CC6FFF7532AECCB61FF240C59D3748E /* PFLogInViewController.h in Headers */, + 9C13735A4125C01C40EBD9209594EAD7 /* PFPrimaryButton.h in Headers */, + 1723BEF336768A66DA2AF9BCF2BE3BB2 /* PFProductTableViewController.h in Headers */, + E15EBFD04B36AD3E47934A1D0EDE2A76 /* PFPurchaseTableViewCell.h in Headers */, + 0136E37C32D8DE8DF43162608ACD7EF5 /* PFQueryCollectionViewController.h in Headers */, + 31F9A88DA1F14642D4C4092CE9F01590 /* PFQueryTableViewController.h in Headers */, + 303EF0EA5F4EC4173321804ADF5C4A8E /* PFRect.h in Headers */, + 9C0514948A37A2930EC6A3B4F5DF52AE /* PFResources.h in Headers */, + 1A30E79E21EC2187DB34AA1B105B741A /* PFSignUpView.h in Headers */, + 34FB30E858367D47FED90E6B3E4605AA /* PFSignUpViewController.h in Headers */, + 4835ED1722E656D7F6B5E9FD14D4F5DB /* PFTableViewCell.h in Headers */, + 0D7ACCD56C3A035010D6E8DE07225906 /* PFTextButton.h in Headers */, + EE537F59676DDE713D6A023B2C160F03 /* PFTextField.h in Headers */, + C47ED1A4BB88FE7511F228BF5BA3EB4A /* PFUIAlertView.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; E697802B9834E2C0A31B1FCFE32EF0C2 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -3112,15 +3127,15 @@ buildRules = ( ); dependencies = ( - EDECE1205B730A5E7D0180F8AD80432E /* PBXTargetDependency */, - 24F464CC0E8B4E4F2EEFA03F92B39FAB /* PBXTargetDependency */, - 31C75145ABB32D28C86E8463012A82F4 /* PBXTargetDependency */, - 545135E68A48EFAF18694F358ADC1EC2 /* PBXTargetDependency */, - B7B913213EE748F5FC38D91A88A2057B /* PBXTargetDependency */, - ABBCC4D5C9A5FA0B6EF9D801BD7C4918 /* PBXTargetDependency */, - 67D4132B453E02D129AD8AB0BC7C585F /* PBXTargetDependency */, - 378D961612F78BB22DC1CB320CFEBE31 /* PBXTargetDependency */, - 7D0610D3D336E130A02996F82893C374 /* PBXTargetDependency */, + 26BF577E7B6AB6B8E19156AB9DB4BA52 /* PBXTargetDependency */, + 65F67EB6EC701BCE75030C640F9F851F /* PBXTargetDependency */, + E466FC4A03782CB442B9DB914BBB5B41 /* PBXTargetDependency */, + 2CB5F1640B51D4E4170CF354596B5722 /* PBXTargetDependency */, + 8286090C9B7C7B47BC58A472692A10D1 /* PBXTargetDependency */, + 2805B3CE7B8E2979AA8738EFC581B4EF /* PBXTargetDependency */, + F2A7B5854CB8644CD1E570D37F1A7D83 /* PBXTargetDependency */, + 2796E28D440467C05BA6F4D2A79E232B /* PBXTargetDependency */, + FD01863452BB1B46FA0095C41DE220F5 /* PBXTargetDependency */, ); name = "Pods-FoodbLog"; productName = Pods_FoodbLog; @@ -3193,7 +3208,7 @@ buildRules = ( ); dependencies = ( - 11E1920315684F86EADC632C76C8587C /* PBXTargetDependency */, + A6C7988E73C1F39B88F674770DE63408 /* PBXTargetDependency */, ); name = Parse; productName = Parse; @@ -3220,18 +3235,18 @@ }; 96F971576D7B3914510B0B2FB38F43A2 /* ParseUI */ = { isa = PBXNativeTarget; - buildConfigurationList = 206CFF50794E2F033F8F7D1CA4B6D926 /* Build configuration list for PBXNativeTarget "ParseUI" */; + buildConfigurationList = 225DCE9719E06BEB65BC55637D5998C0 /* Build configuration list for PBXNativeTarget "ParseUI" */; buildPhases = ( - 6F3D3020832CEDA9562C661557CD8F6B /* Headers */, - 2F695D4796FBFFD8A259731172B38526 /* Sources */, - 05A298B14480994CEB5F25490E57D1CD /* Frameworks */, - B73CE196DD2B14CEF2F1B93698B71DCB /* Resources */, + D6AF2AB76DD4558E64A5D5ECCDC58114 /* Headers */, + 49D6EB242F9E9605EEC5CC9C048B0190 /* Sources */, + 4391EAF3DDC2963B7871286D3F9D9614 /* Frameworks */, + 593F70588ECEAAB42FA1D6F7FD4CA1F3 /* Resources */, ); buildRules = ( ); dependencies = ( - 9CE0CCA8DA2FE46BEB7DFE0A10B6CA0D /* PBXTargetDependency */, - 8F09761C4AE4FC754A7AA2DE94709F8F /* PBXTargetDependency */, + 6CB9C230B737011EF57D334F2EA7B206 /* PBXTargetDependency */, + D83A001559C85060CAF0B02C23E211DB /* PBXTargetDependency */, ); name = ParseUI; productName = ParseUI; @@ -3262,12 +3277,12 @@ }; FBA456CB50E371584C11231929A0971E /* IQKeyboardManager */ = { isa = PBXNativeTarget; - buildConfigurationList = 290794F1B7C30B95EDA1658C9F5C37E9 /* Build configuration list for PBXNativeTarget "IQKeyboardManager" */; + buildConfigurationList = DBB7F00CC890AE3895D236A12C324870 /* Build configuration list for PBXNativeTarget "IQKeyboardManager" */; buildPhases = ( - 6F84814001FC54309657F31682B0B240 /* Headers */, - 8F8CD7DFEE02805BBEAA0910B4914994 /* Sources */, - FF5E3D2C3355425B1E11123AF7B4DBC2 /* Frameworks */, - 3F2BEB6F19A3B7B33306FEB5E210ACEF /* Resources */, + 3D06C26E89812FB5A93DD6138024C08C /* Headers */, + FC82330E982EC0FB6691A0ADFAB122E5 /* Sources */, + 1ACEAF5CB53FDEBADFADE9621F25DB2B /* Frameworks */, + FF40B8A71F1A94BD6D0340E8636CFA7C /* Resources */, ); buildRules = ( ); @@ -3294,6 +3309,8 @@ knownRegions = ( Base, en, + fr, + "pt-BR", ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; productRefGroup = ACE7852A20DA825AE217649C3D71EFB7 /* Products */; @@ -3349,18 +3366,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 3F2BEB6F19A3B7B33306FEB5E210ACEF /* Resources */ = { + 47D8DA7F169DE7BD5DBCB36D514E3F59 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6CC8DAFDF47415C82B325AB167FB27C2 /* IQKeyboardManager.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 47D8DA7F169DE7BD5DBCB36D514E3F59 /* Resources */ = { + 593F70588ECEAAB42FA1D6F7FD4CA1F3 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 2FFABE52A081FE4BE451A2B1F06E2149 /* en.lproj in Resources */, + 23852A0A5F7CE41D512D4613ECBD39DA /* fr.lproj in Resources */, + 6C9D9AB66755FD1D4F7DA70220CAE7DA /* pt-BR.lproj in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3385,11 +3404,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B73CE196DD2B14CEF2F1B93698B71DCB /* Resources */ = { + FF40B8A71F1A94BD6D0340E8636CFA7C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2552EF538219FE248A64E2D5ECE1F267 /* en.lproj in Resources */, + B2F43ACBCFE5596CE46D95C7AA1399D1 /* IQKeyboardManager.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3623,57 +3642,36 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 2F695D4796FBFFD8A259731172B38526 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 492386F98E4215A5AD79F9CC7670AED3 /* ParseUI-dummy.m in Sources */, - 7F1A3ACA61A193AE5AC994B81D58AA12 /* PFActionButton.m in Sources */, - 98F1DA4E3B5EF713459CCDB878C388A4 /* PFActivityIndicatorCollectionReusableView.m in Sources */, - 70E7F7CC26DD49AF7C5F885CBFED80EE /* PFActivityIndicatorTableViewCell.m in Sources */, - 6B4EAD36189A20ACB81F4AF6B62EDC93 /* PFCollectionViewCell.m in Sources */, - 8BE7480FA5E61B80FCDAF98F65677B11 /* PFColor.m in Sources */, - CFC88C3F705FA4DCFC03D3A2B773C54B /* PFDismissButton.m in Sources */, - 96D0CF407A2B521A9A520132685C2A53 /* PFImage.m in Sources */, - 6A204352C2657039376D9B800EEA73DC /* PFImageCache.m in Sources */, - 9FB642D753999CE0D817238756960E9A /* PFImageView.m in Sources */, - 6449D6FF9A736A7B47059C6C6207F2E1 /* PFLoadingView.m in Sources */, - DC7016A3F483CE9795D9BC1B478A6FB2 /* PFLogInView.m in Sources */, - 1A871FF7D4F4A5A7CA464BE20B506535 /* PFLogInViewController.m in Sources */, - 8C2E6C32E366F961F86C99CE651AF056 /* PFPrimaryButton.m in Sources */, - 7D626270AE9630C1EC494E72B53795C5 /* PFProductTableViewController.m in Sources */, - 015904FC34AD7AC33B5C17A8B4DC2E5E /* PFPurchaseTableViewCell.m in Sources */, - 056D70251AC8E24C6BF38B23DD1714E8 /* PFQueryCollectionViewController.m in Sources */, - 20868FC093029679C5D39FF2B3620B1D /* PFQueryTableViewController.m in Sources */, - B060B84D7C08761A91B38892D95643E6 /* PFRect.m in Sources */, - 6607A316934DC065E94AA70556947F1E /* PFResources.m in Sources */, - 7C2D840346C748D52A6E325D25703569 /* PFSignUpView.m in Sources */, - D0CF387D344B15D8630064997043503C /* PFSignUpViewController.m in Sources */, - 2572640CFC23B4C317C822B8F7052777 /* PFTableViewCell.m in Sources */, - CE27939928BB4A1DB0706AC1C8A61541 /* PFTextButton.m in Sources */, - FB0309CEBF4E3B4B5E2857A88AD60698 /* PFTextField.m in Sources */, - 99819454185035CCC28034E61522B9C9 /* PFUIAlertView.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8F8CD7DFEE02805BBEAA0910B4914994 /* Sources */ = { + 49D6EB242F9E9605EEC5CC9C048B0190 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 08F77CB26BD05FE1B343D55D81CBEAD3 /* IQBarButtonItem.m in Sources */, - C45E267982D6D19F30F6E9E63F3DE81E /* IQKeyboardManager.m in Sources */, - 29BBF790B6F414BA173B1B782F99AB27 /* IQKeyboardManager-dummy.m in Sources */, - 7FC33645ED6F5B7A52A793A1F647EB67 /* IQKeyboardReturnKeyHandler.m in Sources */, - 0D86170F1985007D9E2EB7D2CAFE1BCE /* IQNSArray+Sort.m in Sources */, - 6740D1151D0F74B100B549BA5D8068DB /* IQSegmentedNextPrevious.m in Sources */, - 3491354D5E3DF8A5EFB4DB1ACBAB9B29 /* IQTextView.m in Sources */, - B5A96ABEBC622D7ADE04769DE77CA8FC /* IQTitleBarButtonItem.m in Sources */, - A57280D5D9EF86E700F1B12266FABBC7 /* IQToolbar.m in Sources */, - EE3C0F724C90FE75756273DAD768D769 /* IQUITextFieldView+Additions.m in Sources */, - E93714A40956181311573F34E143DB3C /* IQUIView+Hierarchy.m in Sources */, - 16765937127A9DE7C2E2BB1C5F588B65 /* IQUIView+IQKeyboardToolbar.m in Sources */, - FC6F96892F863F4088B93B5BC78CF60E /* IQUIViewController+Additions.m in Sources */, - 4896AA0698E4DAD2C367D7660C9257A6 /* IQUIWindow+Hierarchy.m in Sources */, + 7879E7CFEED86DB1E505DC098A9897C6 /* ParseUI-dummy.m in Sources */, + 0925FC3D640ECBAF8B8D0AA184F95BEF /* PFActionButton.m in Sources */, + F816F1EB5E6293AEB6C05213922DD332 /* PFActivityIndicatorCollectionReusableView.m in Sources */, + D79592AB3645A0C669F9F71022E80008 /* PFActivityIndicatorTableViewCell.m in Sources */, + FA71321B6035542D5D30B828DB77FB8C /* PFCollectionViewCell.m in Sources */, + 1891EB569E88E565A1387A243A000F4A /* PFColor.m in Sources */, + D62B907A64D301A42B3CE20A27B9DD20 /* PFDismissButton.m in Sources */, + 244DC49E1540D69F3CF41F9E39418FD4 /* PFImage.m in Sources */, + DE0A0C5803FF6B8465951B95A6EE1AF8 /* PFImageCache.m in Sources */, + 881A85BA5B670D61BFD52254E3C8239C /* PFImageView.m in Sources */, + 049FE09CD66461A8ABBDCD0F41EA4532 /* PFLoadingView.m in Sources */, + 196100D6BA1B2CA2FC16F09196B9F48C /* PFLogInView.m in Sources */, + 8F17B1B66C878E45560A44574817D6E1 /* PFLogInViewController.m in Sources */, + 0BFBDC63C826F1DAD4758E0549141BE7 /* PFPrimaryButton.m in Sources */, + 8ACA8ACCF631EB59400D1E29CE40C30A /* PFProductTableViewController.m in Sources */, + A652CE778B758C13386CAA2CE8285644 /* PFPurchaseTableViewCell.m in Sources */, + 661AE9E6CC11D489ACDAA85361690949 /* PFQueryCollectionViewController.m in Sources */, + B90CAC2F3B9B544961A70A906B16CC1C /* PFQueryTableViewController.m in Sources */, + 9F3D52953CC0694BC6FDE81CD221A27C /* PFRect.m in Sources */, + 91498D9A5A6A6D196994EF09622612CF /* PFResources.m in Sources */, + 265EC3AA4B084F65A25382B691F9B3A7 /* PFSignUpView.m in Sources */, + AF27938E3A4D924379F07AD58990CC7F /* PFSignUpViewController.m in Sources */, + 1BE7576A9CF85332BF9CE0A20A4654FE /* PFTableViewCell.m in Sources */, + 424186E1571F6A9EA76817C716384271 /* PFTextButton.m in Sources */, + 8AF62FF179A471E00F0F81C59A82DFD2 /* PFTextField.m in Sources */, + F58ECDD2CAFE685F6DACB73F5451956A /* PFUIAlertView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3766,84 +3764,135 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + FC82330E982EC0FB6691A0ADFAB122E5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CC1B6334BB55493205C13E94D92F3421 /* IQBarButtonItem.m in Sources */, + 4F8534F0CB4CD037ACE1B5BF6460999D /* IQKeyboardManager.m in Sources */, + D17AEA993640DA0427EAEEEBF50DA02F /* IQKeyboardManager-dummy.m in Sources */, + 50C18B976C17A2FBB0886EA75DF5BAAA /* IQKeyboardReturnKeyHandler.m in Sources */, + B5D2DB65CD96809A3E305A54A7A9D2D4 /* IQNSArray+Sort.m in Sources */, + 2FCE284E00285EE0D6C39B4039CD0621 /* IQPreviousNextView.m in Sources */, + 99BD144694112221EBA83A41C8D34F77 /* IQTextView.m in Sources */, + 40EE14623331B78066A61917BB957969 /* IQTitleBarButtonItem.m in Sources */, + 20E7C991D833842AC8BD7B3F676A5CCE /* IQToolbar.m in Sources */, + 519234A19A528D630BC6A20215E7B467 /* IQUIScrollView+Additions.m in Sources */, + 0918720A79F5B3CE0D7CCB713DCD4F16 /* IQUITextFieldView+Additions.m in Sources */, + CAC05D738F63DFDB78C95C9EE1E6FC8C /* IQUIView+Hierarchy.m in Sources */, + A8689F6902D3755B75C02E5ED73DD9DD /* IQUIView+IQKeyboardToolbar.m in Sources */, + 0D433D2B67E6C443BD7CE63B01107D09 /* IQUIViewController+Additions.m in Sources */, + 9B651075445D3C80AF9F6C538F4B04FE /* IQUIWindow+Hierarchy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 11E1920315684F86EADC632C76C8587C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Bolts; - target = 42465A188431886AB035275F049824D3 /* Bolts */; - targetProxy = 570B15215E9310693D397DC3282CE4B4 /* PBXContainerItemProxy */; - }; - 24F464CC0E8B4E4F2EEFA03F92B39FAB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Bolts; - target = 42465A188431886AB035275F049824D3 /* Bolts */; - targetProxy = A896BC871784B8F9F89ED5DE758218C4 /* PBXContainerItemProxy */; - }; - 31C75145ABB32D28C86E8463012A82F4 /* PBXTargetDependency */ = { + 26BF577E7B6AB6B8E19156AB9DB4BA52 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = ChameleonFramework; - target = 28BFDC89BA4363F4F3576DEC70EE10AE /* ChameleonFramework */; - targetProxy = C4176BB50DC5E33A6948CCDE5C9DB79C /* PBXContainerItemProxy */; + name = AFNetworking; + target = 0130B3724283586C0E9D2A112D4F2AA1 /* AFNetworking */; + targetProxy = E3C263ED9E54BDFD17A2DAECF7277C9D /* PBXContainerItemProxy */; }; - 378D961612F78BB22DC1CB320CFEBE31 /* PBXTargetDependency */ = { + 2796E28D440467C05BA6F4D2A79E232B /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SDWebImage; target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; - targetProxy = F85AB62DE4BDFE183DF7AC74A4381B9B /* PBXContainerItemProxy */; + targetProxy = FDC3896FC173C665902C83FA3FA7B269 /* PBXContainerItemProxy */; + }; + 2805B3CE7B8E2979AA8738EFC581B4EF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Parse; + target = 7F3FE5658AEC4AF2B296EDA73A218182 /* Parse */; + targetProxy = 6EC43FB8FA6F24A56C8B29A3321EE415 /* PBXContainerItemProxy */; }; - 545135E68A48EFAF18694F358ADC1EC2 /* PBXTargetDependency */ = { + 2CB5F1640B51D4E4170CF354596B5722 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = FlatUIKit; target = 923099EAAC66CBEDD533E3FE43830166 /* FlatUIKit */; - targetProxy = BB8AEE89F14DC93554130618C695B195 /* PBXContainerItemProxy */; + targetProxy = E1E69F9F813F9240A8C96E8C112A0D1C /* PBXContainerItemProxy */; }; - 67D4132B453E02D129AD8AB0BC7C585F /* PBXTargetDependency */ = { + 65F67EB6EC701BCE75030C640F9F851F /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = ParseUI; - target = 96F971576D7B3914510B0B2FB38F43A2 /* ParseUI */; - targetProxy = 631FEB8D5D54757C74C640EC60514AD8 /* PBXContainerItemProxy */; + name = Bolts; + target = 42465A188431886AB035275F049824D3 /* Bolts */; + targetProxy = 85555F6EC589E33A03E90D2664B57C19 /* PBXContainerItemProxy */; }; - 7D0610D3D336E130A02996F82893C374 /* PBXTargetDependency */ = { + 6CB9C230B737011EF57D334F2EA7B206 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Unirest; - target = DD9AC66E330E40497F19A867C63FBAAA /* Unirest */; - targetProxy = B7D7D2C4956FA3742D5187D428DDE8F8 /* PBXContainerItemProxy */; + name = Bolts; + target = 42465A188431886AB035275F049824D3 /* Bolts */; + targetProxy = 6C7FDBC1A588296B19BD2ECF54A19EC8 /* PBXContainerItemProxy */; }; - 8F09761C4AE4FC754A7AA2DE94709F8F /* PBXTargetDependency */ = { + 8286090C9B7C7B47BC58A472692A10D1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Parse; - target = 7F3FE5658AEC4AF2B296EDA73A218182 /* Parse */; - targetProxy = 97F1B36C623FCCA4AA918D6FC51650CA /* PBXContainerItemProxy */; + name = IQKeyboardManager; + target = FBA456CB50E371584C11231929A0971E /* IQKeyboardManager */; + targetProxy = 5CB0E17673C4FF6B06461CFF4BE9F890 /* PBXContainerItemProxy */; }; - 9CE0CCA8DA2FE46BEB7DFE0A10B6CA0D /* PBXTargetDependency */ = { + A6C7988E73C1F39B88F674770DE63408 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Bolts; target = 42465A188431886AB035275F049824D3 /* Bolts */; - targetProxy = 023419A71D4C5BEBC9D817ADC6C3092B /* PBXContainerItemProxy */; + targetProxy = 4534AFDCFE4E3F47A2AAF5DE9AA0B163 /* PBXContainerItemProxy */; }; - ABBCC4D5C9A5FA0B6EF9D801BD7C4918 /* PBXTargetDependency */ = { + D83A001559C85060CAF0B02C23E211DB /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Parse; target = 7F3FE5658AEC4AF2B296EDA73A218182 /* Parse */; - targetProxy = C217FDF16F9F1EFC2C5534E7024BB879 /* PBXContainerItemProxy */; + targetProxy = 8D628D385D9F5A838D8C30142748A1ED /* PBXContainerItemProxy */; }; - B7B913213EE748F5FC38D91A88A2057B /* PBXTargetDependency */ = { + E466FC4A03782CB442B9DB914BBB5B41 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = IQKeyboardManager; - target = FBA456CB50E371584C11231929A0971E /* IQKeyboardManager */; - targetProxy = 70CDEE1F31046DF7D58238DE342DC5CB /* PBXContainerItemProxy */; + name = ChameleonFramework; + target = 28BFDC89BA4363F4F3576DEC70EE10AE /* ChameleonFramework */; + targetProxy = 98BDC34B972C5A1BDCE7F5F879B31FBF /* PBXContainerItemProxy */; }; - EDECE1205B730A5E7D0180F8AD80432E /* PBXTargetDependency */ = { + F2A7B5854CB8644CD1E570D37F1A7D83 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = AFNetworking; - target = 0130B3724283586C0E9D2A112D4F2AA1 /* AFNetworking */; - targetProxy = 0CBD9EA31DDA34BF819A5EA071433D98 /* PBXContainerItemProxy */; + name = ParseUI; + target = 96F971576D7B3914510B0B2FB38F43A2 /* ParseUI */; + targetProxy = 725D87B5A2A247E05A8144C4ADDAFBE9 /* PBXContainerItemProxy */; + }; + FD01863452BB1B46FA0095C41DE220F5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Unirest; + target = DD9AC66E330E40497F19A867C63FBAAA /* Unirest */; + targetProxy = 791C3327C12F11ED3A0B6E43F941ECB7 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ + 08B18FA0B78A34282230CC927E31789D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 008FE4C757A98BF3F85D56B16B909C95 /* ParseUI.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ParseUI/ParseUI-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/ParseUI/ParseUI.modulemap"; + PRODUCT_MODULE_NAME = ParseUI; + PRODUCT_NAME = ParseUI; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 0D60DD6112F6671B16910B7B1747C274 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 5E8A133C5B52375ED7ED0B08ADBD8537 /* Pods-FoodbLog.release.xcconfig */; @@ -3879,7 +3928,7 @@ }; 18EA0B983E6EB47AF0ACD58C619C7056 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CEE21A440006EE2C4B423EFAE0DC86AB /* Unirest.debug.xcconfig */; + baseConfigurationReference = 53AED7B37E59FD4C2906C8CD48F1549D /* Unirest.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -3908,7 +3957,7 @@ }; 1A58A82F0ADB9BB12FD2E22EA42491CB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9DA741B4EC0DCED29063435717645FC3 /* FlatUIKit.debug.xcconfig */; + baseConfigurationReference = 25AE04E3363DD54258BA17EE714BC7DE /* FlatUIKit.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -3937,7 +3986,7 @@ }; 1C5BBD4AB5852DA8628B9B0B467FC2D1 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DA0DF40D1E6DB2A9A53542C123149969 /* ChameleonFramework.debug.xcconfig */; + baseConfigurationReference = BD8A148C1C76BD03BEFC12CCE8F7BB3E /* ChameleonFramework.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4032,7 +4081,7 @@ }; 2ED5CD13F515BB46B86F73C5F9569190 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A7C121EE4B1DE511B784FCD1F75C3CAF /* SDWebImage.debug.xcconfig */; + baseConfigurationReference = CD46520D8BCDA2FED7653A676AE1DB78 /* SDWebImage.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4061,7 +4110,7 @@ }; 3DCA5EA2D1CF284CFB76122F415EC323 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38F8E3AFD6049401797C7A47018A213A /* Parse.debug.xcconfig */; + baseConfigurationReference = 67A6FB7F80EB38941450A0B66E1843B4 /* Parse.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4088,9 +4137,9 @@ }; name = Debug; }; - 48A647147535E94A048A0C5CF01D4F30 /* Debug */ = { + 611349415B19BCC31ECDED761F0D6598 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 80331DEE2BF41B2AD40413E3C5DB2B28 /* ParseUI.debug.xcconfig */; + baseConfigurationReference = 4EEBB37503F5FF0C662950C8F1DECA80 /* IQKeyboardManager.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4100,14 +4149,14 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ParseUI/ParseUI-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManager/IQKeyboardManager-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/ParseUI/ParseUI.modulemap"; - PRODUCT_MODULE_NAME = ParseUI; - PRODUCT_NAME = ParseUI; + MODULEMAP_FILE = "Target Support Files/IQKeyboardManager/IQKeyboardManager.modulemap"; + PRODUCT_MODULE_NAME = IQKeyboardManager; + PRODUCT_NAME = IQKeyboardManager; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -4117,9 +4166,9 @@ }; name = Debug; }; - 5AC3F337A5C43C8D86E64EB328D04643 /* Debug */ = { + 896E5365E81BD3F8C6C88FB93B68E518 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 857F0BA6F21ED8BE24BBE09EC4796DD0 /* IQKeyboardManager.debug.xcconfig */; + baseConfigurationReference = BE438FFCF26860EECC1343543A60226D /* Bolts.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4129,14 +4178,14 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManager/IQKeyboardManager-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts/Bolts-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/IQKeyboardManager/IQKeyboardManager.modulemap"; - PRODUCT_MODULE_NAME = IQKeyboardManager; - PRODUCT_NAME = IQKeyboardManager; + MODULEMAP_FILE = "Target Support Files/Bolts/Bolts.modulemap"; + PRODUCT_MODULE_NAME = Bolts; + PRODUCT_NAME = Bolts; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -4146,9 +4195,9 @@ }; name = Debug; }; - 896E5365E81BD3F8C6C88FB93B68E518 /* Debug */ = { + 8E7C2EF045FC4D43603B34ED3A15D8D5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7BE179E9C8B4046FCC237E5DA15BB57D /* Bolts.debug.xcconfig */; + baseConfigurationReference = 59340BADC818D8D3EE97EF49C93B9657 /* AFNetworking.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4158,26 +4207,27 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts/Bolts-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFNetworking/AFNetworking-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts/Bolts.modulemap"; - PRODUCT_MODULE_NAME = Bolts; - PRODUCT_NAME = Bolts; + MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; + PRODUCT_MODULE_NAME = AFNetworking; + PRODUCT_NAME = AFNetworking; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 8E7C2EF045FC4D43603B34ED3A15D8D5 /* Release */ = { + A0F3E496548323F9AAA4C6102BA74A51 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4AB7F6659411A2066C581E0CA1DB5C65 /* AFNetworking.release.xcconfig */; + baseConfigurationReference = A04E1674F330FF3E8705ACDA5294CAF0 /* ParseUI.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4187,14 +4237,14 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AFNetworking/AFNetworking-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ParseUI/ParseUI-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; - PRODUCT_MODULE_NAME = AFNetworking; - PRODUCT_NAME = AFNetworking; + MODULEMAP_FILE = "Target Support Files/ParseUI/ParseUI.modulemap"; + PRODUCT_MODULE_NAME = ParseUI; + PRODUCT_NAME = ParseUI; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -4207,7 +4257,7 @@ }; ABC30FFB3EDCDFCAC5B1A78670EF35E3 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9B994E9D8D38725EB2DBDFA907134A7C /* Parse.release.xcconfig */; + baseConfigurationReference = C4239D037D62B4A06D9768E33ECD692F /* Parse.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4237,7 +4287,7 @@ }; B1B099CA53143C14AB8ABB66233C5E16 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7142851694FCB943E670DC3C15E92EBF /* ChameleonFramework.release.xcconfig */; + baseConfigurationReference = 80178C233F043FB5B04F2B531880B028 /* ChameleonFramework.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4267,7 +4317,7 @@ }; BCF92E5B31213776C06023CF06FF4752 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 532AAB9D359ECDC94F8B03BB863AC81E /* Unirest.release.xcconfig */; + baseConfigurationReference = 4A6D3469A0C446BC153A71D249DD118C /* Unirest.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4297,7 +4347,7 @@ }; BE81F1587DEF06899DC8A41C82965A3B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1C002313FB340FD9903A219A795BD6EE /* Bolts.release.xcconfig */; + baseConfigurationReference = 22E30A762CBA7D97BB4E81283F3DACDA /* Bolts.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4327,7 +4377,7 @@ }; C23C19FB5166B259C259D5E10A59B962 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8F4B1D49F33B5E34B800900D19CA98E3 /* SDWebImage.release.xcconfig */; + baseConfigurationReference = 9AC2743E8EC297C24BDC808D253215BC /* SDWebImage.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4451,7 +4501,7 @@ }; DA9EDB729F9EB20F25FDC5AF8A359308 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8B8FAEB0939BC673396EF39DB43C5723 /* FlatUIKit.release.xcconfig */; + baseConfigurationReference = 564869040FE2AC538A52B329B2EE83BE /* FlatUIKit.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4479,39 +4529,9 @@ }; name = Release; }; - E64BC1A70B89068042A58AD86BFD95E8 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4BD4DB7C36686D11738734B18DF72463 /* IQKeyboardManager.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManager/IQKeyboardManager-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/IQKeyboardManager/IQKeyboardManager.modulemap"; - PRODUCT_MODULE_NAME = IQKeyboardManager; - PRODUCT_NAME = IQKeyboardManager; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; EBA37623EE3EB2AAB64FA97FE5883854 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AB05A9755C75CB37B4B278883D9ECBE /* AFNetworking.debug.xcconfig */; + baseConfigurationReference = B03124BAD3BD5D9AAEFF7FC003DC0B1C /* AFNetworking.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4538,9 +4558,9 @@ }; name = Debug; }; - F836CE25A5EADCDC1C73656BB667A944 /* Release */ = { + FB6EAF2137BDA97B913D7E7834164A18 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C1AC1660363A329A284E332A3E5298C /* ParseUI.release.xcconfig */; + baseConfigurationReference = 194C09CE6BAFEA2233F1C90D5FB06DE2 /* IQKeyboardManager.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -4550,14 +4570,14 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ParseUI/ParseUI-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManager/IQKeyboardManager-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/ParseUI/ParseUI.modulemap"; - PRODUCT_MODULE_NAME = ParseUI; - PRODUCT_NAME = ParseUI; + MODULEMAP_FILE = "Target Support Files/IQKeyboardManager/IQKeyboardManager.modulemap"; + PRODUCT_MODULE_NAME = IQKeyboardManager; + PRODUCT_NAME = IQKeyboardManager; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -4571,20 +4591,11 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 206CFF50794E2F033F8F7D1CA4B6D926 /* Build configuration list for PBXNativeTarget "ParseUI" */ = { + 225DCE9719E06BEB65BC55637D5998C0 /* Build configuration list for PBXNativeTarget "ParseUI" */ = { isa = XCConfigurationList; buildConfigurations = ( - 48A647147535E94A048A0C5CF01D4F30 /* Debug */, - F836CE25A5EADCDC1C73656BB667A944 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 290794F1B7C30B95EDA1658C9F5C37E9 /* Build configuration list for PBXNativeTarget "IQKeyboardManager" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5AC3F337A5C43C8D86E64EB328D04643 /* Debug */, - E64BC1A70B89068042A58AD86BFD95E8 /* Release */, + 08B18FA0B78A34282230CC927E31789D /* Debug */, + A0F3E496548323F9AAA4C6102BA74A51 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -4661,6 +4672,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + DBB7F00CC890AE3895D236A12C324870 /* Build configuration list for PBXNativeTarget "IQKeyboardManager" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 611349415B19BCC31ECDED761F0D6598 /* Debug */, + FB6EAF2137BDA97B913D7E7834164A18 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; EA7ABE50FB6EA7A4A6CAA4A5C5380BD6 /* Build configuration list for PBXNativeTarget "Unirest" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/xcschememanagement.plist b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/xcschememanagement.plist index b117633..9c66a92 100644 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/xcschememanagement.plist @@ -8,51 +8,71 @@ isShown + orderHint + 0 Bolts.xcscheme isShown + orderHint + 1 ChameleonFramework.xcscheme isShown + orderHint + 2 FlatUIKit.xcscheme isShown + orderHint + 3 IQKeyboardManager.xcscheme isShown + orderHint + 4 Parse.xcscheme isShown + orderHint + 5 ParseUI.xcscheme isShown + orderHint + 6 Pods-FoodbLog.xcscheme isShown + orderHint + 7 SDWebImage.xcscheme isShown + orderHint + 8 Unirest.xcscheme isShown + orderHint + 9 SuppressBuildableAutocreation diff --git a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist index 6791bb8..b6ba043 100644 --- a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist +++ b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.3.2 + 4.0.11 CFBundleSignature ???? CFBundleVersion diff --git a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-umbrella.h b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-umbrella.h index 3c0c2ec..4d6aae4 100644 --- a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-umbrella.h +++ b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-umbrella.h @@ -11,6 +11,7 @@ #endif #import "IQNSArray+Sort.h" +#import "IQUIScrollView+Additions.h" #import "IQUITextFieldView+Additions.h" #import "IQUIView+Hierarchy.h" #import "IQUIViewController+Additions.h" @@ -19,13 +20,12 @@ #import "IQKeyboardManagerConstantsInternal.h" #import "IQKeyboardManager.h" #import "IQKeyboardReturnKeyHandler.h" -#import "IQSegmentedNextPrevious.h" #import "IQTextView.h" #import "IQBarButtonItem.h" +#import "IQPreviousNextView.h" #import "IQTitleBarButtonItem.h" #import "IQToolbar.h" #import "IQUIView+IQKeyboardToolbar.h" -#import "KeyboardManager.h" FOUNDATION_EXPORT double IQKeyboardManagerVersionNumber; FOUNDATION_EXPORT const unsigned char IQKeyboardManagerVersionString[]; diff --git a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.debug.xcconfig b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.debug.xcconfig index 1e6d6cd..98e1bb3 100644 --- a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.debug.xcconfig +++ b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.debug.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.release.xcconfig b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.release.xcconfig index 1e6d6cd..98e1bb3 100644 --- a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.release.xcconfig +++ b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.release.xcconfig @@ -1,6 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-Info.plist b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-Info.plist index c243c02..2a9158a 100644 --- a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-Info.plist +++ b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.1.6 + 1.2.0 CFBundleSignature ???? CFBundleVersion diff --git a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.markdown b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.markdown index a9df48a..1359783 100644 --- a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.markdown +++ b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.markdown @@ -113,7 +113,7 @@ IQKeyboardManager license The MIT License (MIT) -Copyright (c) 2013-14 Iftekhar Qurashi +Copyright (c) 2013-16 Iftekhar Qurashi Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.plist b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.plist index 9480957..ee40b92 100644 --- a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.plist +++ b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.plist @@ -148,7 +148,7 @@ THE SOFTWARE. The MIT License (MIT) -Copyright (c) 2013-14 Iftekhar Qurashi +Copyright (c) 2013-16 Iftekhar Qurashi Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in From 096113b6fadc84b31fc1abf3789b43eb7bb9b8ec Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Wed, 5 Apr 2023 10:20:26 +0100 Subject: [PATCH 07/29] replace food2fork API with to forkify API since it was shutdown --- FoodbLog/FoodbLog/FoodFeedViewController.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FoodbLog/FoodbLog/FoodFeedViewController.m b/FoodbLog/FoodbLog/FoodFeedViewController.m index a5fe759..a886763 100644 --- a/FoodbLog/FoodbLog/FoodFeedViewController.m +++ b/FoodbLog/FoodbLog/FoodFeedViewController.m @@ -169,7 +169,7 @@ - (void)recipeRequestForString:(NSString *)string { string = [string stringByReplacingOccurrencesOfString:@" " withString:@"%20"]; - NSString *URLString = [NSString stringWithFormat:@"http://food2fork.com/api/search?key=54f7d87124b73e5b6ea3a30f7ec3eb54&q=%@", string]; + NSString *URLString = [NSString stringWithFormat:@"https://forkify-api.herokuapp.com/api/search?q=%@", string]; AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc]init]; From 378712b3e07bc1fe258fc0d926e8ce37fdc7c7ea Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Wed, 5 Apr 2023 11:00:47 +0100 Subject: [PATCH 08/29] refactor FoodbLogCollectionViewController to swift file --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 14 +-- FoodbLog/FoodbLog/Base.lproj/Main.storyboard | 4 +- .../FoodbLog/FoodLogCollectionViewVC.swift | 80 ++++++++++++++ FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h | 5 +- .../FoodbLogCollectionViewController.h | 18 ---- .../FoodbLogCollectionViewController.m | 102 ------------------ FoodbLog/FoodbLog/RootTabBarVC.swift | 6 +- 7 files changed, 96 insertions(+), 133 deletions(-) create mode 100644 FoodbLog/FoodbLog/FoodLogCollectionViewVC.swift delete mode 100644 FoodbLog/FoodbLog/FoodbLogCollectionViewController.h delete mode 100644 FoodbLog/FoodbLog/FoodbLogCollectionViewController.m diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index d88deee..6374c09 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -21,7 +21,6 @@ 50967FD11BD5E36F0029D6AB /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 50967FD01BD5E36F0029D6AB /* Launch Screen.storyboard */; }; 50967FD41BD6F6930029D6AB /* RecipeTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 50967FD31BD6F6930029D6AB /* RecipeTableViewController.m */; }; 50A3C2C41BCAE4AD0077F79B /* InstagramImagePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 50A3C2C31BCAE4AD0077F79B /* InstagramImagePicker.m */; }; - 50D767B21BCC785000C82B8B /* FoodbLogCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 50D767B11BCC785000C82B8B /* FoodbLogCollectionViewController.m */; }; 50D767B81BCC895900C82B8B /* FoodFeedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 50D767B71BCC895900C82B8B /* FoodFeedViewController.m */; }; 50EC0D181BD0545C0045B513 /* RestaurantPickerTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 50EC0D171BD0545C0045B513 /* RestaurantPickerTableViewController.m */; }; 50F7C6781BCAF72B00A969D1 /* InstagramImagePickerCustomCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F7C6771BCAF72B00A969D1 /* InstagramImagePickerCustomCell.m */; }; @@ -32,6 +31,7 @@ 7FB90DEB29DD630F00A50433 /* ParseDBAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */; }; 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEC29DD635600A50433 /* ChemeleonAppDelegate.swift */; }; 7FB90DF129DD668400A50433 /* RootTabBarVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DF029DD668400A50433 /* RootTabBarVC.swift */; }; + 7FB90DF329DD756000A50433 /* FoodLogCollectionViewVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DF229DD756000A50433 /* FoodLogCollectionViewVC.swift */; }; 98DA133F1216497FA2A9B319 /* (null) in Frameworks */ = {isa = PBXBuildFile; settings = {ATTRIBUTES = (Weak, ); }; }; C3B336E8EF6CFBF4BDE8E605 /* Pods_FoodbLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFC92113A3941C665760DE31 /* Pods_FoodbLog.framework */; }; /* End PBXBuildFile section */ @@ -82,8 +82,6 @@ 50967FD31BD6F6930029D6AB /* RecipeTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecipeTableViewController.m; sourceTree = ""; }; 50A3C2C21BCAE4AD0077F79B /* InstagramImagePicker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InstagramImagePicker.h; sourceTree = ""; }; 50A3C2C31BCAE4AD0077F79B /* InstagramImagePicker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InstagramImagePicker.m; sourceTree = ""; }; - 50D767B01BCC785000C82B8B /* FoodbLogCollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodbLogCollectionViewController.h; sourceTree = ""; }; - 50D767B11BCC785000C82B8B /* FoodbLogCollectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodbLogCollectionViewController.m; sourceTree = ""; }; 50D767B61BCC895900C82B8B /* FoodFeedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodFeedViewController.h; sourceTree = ""; }; 50D767B71BCC895900C82B8B /* FoodFeedViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodFeedViewController.m; sourceTree = ""; }; 50EC0D161BD0545C0045B513 /* RestaurantPickerTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RestaurantPickerTableViewController.h; sourceTree = ""; }; @@ -101,6 +99,7 @@ 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseDBAppDelegate.swift; sourceTree = ""; }; 7FB90DEC29DD635600A50433 /* ChemeleonAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChemeleonAppDelegate.swift; sourceTree = ""; }; 7FB90DF029DD668400A50433 /* RootTabBarVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootTabBarVC.swift; sourceTree = ""; }; + 7FB90DF229DD756000A50433 /* FoodLogCollectionViewVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogCollectionViewVC.swift; sourceTree = ""; }; AFC92113A3941C665760DE31 /* Pods_FoodbLog.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FoodbLog.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FCF5CA5CCBE07821CE7C4EE2 /* Pods-FoodbLog.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FoodbLog.release.xcconfig"; path = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -184,8 +183,7 @@ 294C32C01C9489E300795520 /* FoodbLog View Controllers */ = { isa = PBXGroup; children = ( - 50D767B01BCC785000C82B8B /* FoodbLogCollectionViewController.h */, - 50D767B11BCC785000C82B8B /* FoodbLogCollectionViewController.m */, + 7FB90DF229DD756000A50433 /* FoodLogCollectionViewVC.swift */, 2984719E1BD406A8006282CC /* FoodLogDetailViewController.h */, 2984719F1BD406A8006282CC /* FoodLogDetailViewController.m */, 294C32C11C948A0800795520 /* CreateLog View Controllers */, @@ -282,6 +280,7 @@ 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */, 7FB90DE729DD5E6500A50433 /* FoodbLog-Bridging-Header.h */, 29E25D511BCAB8480015A16F /* Main.storyboard */, + 7FB90DF029DD668400A50433 /* RootTabBarVC.swift */, 294C32BC1C93182200795520 /* Model */, 294C32BD1C93183F00795520 /* Views */, 294C32BB1C93181400795520 /* Controllers */, @@ -289,7 +288,6 @@ 50967FD01BD5E36F0029D6AB /* Launch Screen.storyboard */, 29E25D591BCAB8480015A16F /* Info.plist */, 29E25D481BCAB8480015A16F /* Supporting Files */, - 7FB90DF029DD668400A50433 /* RootTabBarVC.swift */, ); path = FoodbLog; sourceTree = SOURCE_ROOT; @@ -540,7 +538,7 @@ 7FB90DF129DD668400A50433 /* RootTabBarVC.swift in Sources */, 7FB90DEB29DD630F00A50433 /* ParseDBAppDelegate.swift in Sources */, 50F7C6781BCAF72B00A969D1 /* InstagramImagePickerCustomCell.m in Sources */, - 50D767B21BCC785000C82B8B /* FoodbLogCollectionViewController.m in Sources */, + 7FB90DF329DD756000A50433 /* FoodLogCollectionViewVC.swift in Sources */, 50EC0D181BD0545C0045B513 /* RestaurantPickerTableViewController.m in Sources */, 50A3C2C41BCAE4AD0077F79B /* InstagramImagePicker.m in Sources */, 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */, @@ -685,6 +683,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 69A81EF376647BA708026D38 /* Pods-FoodbLog.debug.xcconfig */; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_ENABLE_MODULES = YES; @@ -705,6 +704,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = FCF5CA5CCBE07821CE7C4EE2 /* Pods-FoodbLog.release.xcconfig */; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_ENABLE_MODULES = YES; diff --git a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard index 444b605..246c60d 100644 --- a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard +++ b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard @@ -10,7 +10,7 @@ - + @@ -111,7 +111,7 @@ - + diff --git a/FoodbLog/FoodbLog/FoodLogCollectionViewVC.swift b/FoodbLog/FoodbLog/FoodLogCollectionViewVC.swift new file mode 100644 index 0000000..debaeac --- /dev/null +++ b/FoodbLog/FoodbLog/FoodLogCollectionViewVC.swift @@ -0,0 +1,80 @@ +// +// FoodLogCollectionViewVC.swift +// FoodbLog +// +// Created by Ikmal Azman on 05/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import UIKit +import Parse + +final class FoodLogCollectionViewVC: UICollectionViewController { + + var allFoodbLogObjects : [FoodLog] = [] + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + navigationItem.titleView = UIImageView(image: UIImage(named: "FoodbLog_White_Logo.png")) + + let horizontalPadding : CGFloat = 6.0 + let numberOfItemPerRow : CGFloat = 3.0 + let heightAdjustment : CGFloat = 30.0 + let width = (collectionView.frame.width - horizontalPadding) / numberOfItemPerRow + + let layout = UICollectionViewFlowLayout() + layout.itemSize = CGSize(width: width, height: width + heightAdjustment) + + collectionView.collectionViewLayout = layout + } +} + +extension FoodLogCollectionViewVC { + override func collectionView( + _ collectionView: UICollectionView, + numberOfItemsInSection section: Int + ) -> Int { + return allFoodbLogObjects.count + } + + override func collectionView( + _ collectionView: UICollectionView, + cellForItemAt indexPath: IndexPath + ) -> UICollectionViewCell { + let log = allFoodbLogObjects[indexPath.row] + + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "FoodbLogCustomCell", for: indexPath) as! FoodbLogCustomCell + cell.foodbLogImage.file = log.image + cell.foodbLogImage.loadInBackground() + cell.layer.masksToBounds = true + + return cell + } +} + +extension FoodLogCollectionViewVC { + override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + let log = allFoodbLogObjects[indexPath.row] + + let foodDetailVC = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "FoodLogDetailViewController") as! FoodLogDetailViewController + foodDetailVC.foodbLogObject = log + + navigationController?.pushViewController(foodDetailVC, animated: true) + } +} + +extension FoodLogCollectionViewVC { + func pullDataFromParse() { + let query = PFQuery(className: "\(FoodLog.self)") + query.findObjectsInBackground { objects, error in + + guard let pfObjects = objects, let foodObject = pfObjects as? [FoodLog] else {return} + self.allFoodbLogObjects.append(contentsOf: foodObject) + + DispatchQueue.main.async { + self.collectionView.reloadData() + } + } + } +} diff --git a/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h b/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h index 81441ad..b30f7a0 100644 --- a/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h +++ b/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h @@ -3,5 +3,8 @@ // #import "FoodLog.h" -#import "FoodbLogCollectionViewController.h" #import "FoodFeedViewController.h" +#import "FoodbLogCustomCell.h" +#import "FoodLog.h" +#import "FoodLog.m" +#import "FoodLogDetailViewController.h" diff --git a/FoodbLog/FoodbLog/FoodbLogCollectionViewController.h b/FoodbLog/FoodbLog/FoodbLogCollectionViewController.h deleted file mode 100644 index e912483..0000000 --- a/FoodbLog/FoodbLog/FoodbLogCollectionViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// FoodbLog.h -// FoodbLog -// -// Created by Jovanny Espinal on 10/12/15. -// Copyright © 2015 Ayuna Vogel. All rights reserved. -// - -#import - -#import "FoodLog.h" -#import "FoodbLogCustomCell.h" - -@interface FoodbLogCollectionViewController : UICollectionViewController - -@property (nonatomic) NSArray *allFoodbLogObjects; - -@end diff --git a/FoodbLog/FoodbLog/FoodbLogCollectionViewController.m b/FoodbLog/FoodbLog/FoodbLogCollectionViewController.m deleted file mode 100644 index b576f57..0000000 --- a/FoodbLog/FoodbLog/FoodbLogCollectionViewController.m +++ /dev/null @@ -1,102 +0,0 @@ -// -// FoodbLog.m -// FoodbLog -// -// Created by Jovanny Espinal on 10/12/15. -// Copyright © 2015 Ayuna Vogel. All rights reserved. -// - -#import -#import -#import - -#import "FoodLog.h" -#import "FoodbLogCollectionViewController.h" -#import "FoodbLogCustomCell.h" -#import "FoodLogDetailViewController.h" - -@interface FoodbLogCollectionViewController () - -@end - - -@implementation FoodbLogCollectionViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - [self setupUI]; -} - -- (void)setupUI { - self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"FoodbLog_White_Logo.png"]]; - - CGFloat leftAndRightPaddings = 6.0; - CGFloat numberOfItemsPerRow = 3.0; - - CGFloat heightAdjustment = 30.0; - CGFloat width = (CGRectGetWidth(self.collectionView.frame) - leftAndRightPaddings)/numberOfItemsPerRow; - - UICollectionViewFlowLayout *layout = self.collectionViewLayout; - layout.itemSize = CGSizeMake(width, width + heightAdjustment); -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - [self pullDataFromParse]; -} - -- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { - return 1; -} - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return self.allFoodbLogObjects.count; -} - -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - - FoodbLogCustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"FoodbLogCustomCell" forIndexPath:indexPath]; - - FoodLog *log = self.allFoodbLogObjects[indexPath.row]; - - cell.foodbLogImage.file = log.image; - [cell.foodbLogImage loadInBackground]; - - cell.layer.masksToBounds = YES; - - return cell; -} - - -#pragma mark - Parse methods - -- (void)pullDataFromParse { - - PFQuery *query = [PFQuery queryWithClassName:[FoodLog parseClassName]]; - - [query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) { - self.allFoodbLogObjects = objects; - [self.collectionView reloadData]; - }]; - -} - -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - - if ([segue.identifier isEqualToString:@"FoodLogDetailVCSegueIdentifier"]) { - - FoodLogDetailViewController *foodLogDetailVC = segue.destinationViewController; - - NSIndexPath *indexPath = [self.collectionView indexPathForCell:sender]; - - FoodLog *passedFoodbLogObject = [self.allFoodbLogObjects objectAtIndex:indexPath.row]; - - // Pass the selected object to the new view controller. - foodLogDetailVC.foodbLogObject = passedFoodbLogObject; - } - -} - -@end diff --git a/FoodbLog/FoodbLog/RootTabBarVC.swift b/FoodbLog/FoodbLog/RootTabBarVC.swift index 78ac5c9..30b8dca 100644 --- a/FoodbLog/FoodbLog/RootTabBarVC.swift +++ b/FoodbLog/FoodbLog/RootTabBarVC.swift @@ -25,10 +25,10 @@ final class RootTabBarVC: UITabBarController { private extension RootTabBarVC { func firstTabBar() -> UIViewController { - let vc = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "\(FoodbLogCollectionViewController.self)") as! FoodbLogCollectionViewController - + let vc = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "\(FoodLogCollectionViewVC.self)") as! FoodLogCollectionViewVC + - return createNavigationController(for: vc, title: "Food bLog", image: UIImage(named: "Literature Filled-25")) + return createNavigationController(for: vc, title: "Food bLog", image: UIImage(named: "Literature Filled-25")) } func secondTabBar() -> UIViewController { From 16d3f3be502ae14a3b4a11936669495bee12c16e Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Wed, 5 Apr 2023 14:08:59 +0100 Subject: [PATCH 09/29] Fix navigation bar transparent which cause the navigation bar style not apply style due to changes in iOS 15 UINavigationBarApperance API --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 2 + FoodbLog/FoodbLog/AppDelegate.swift | 2 +- FoodbLog/FoodbLog/Base.lproj/Main.storyboard | 198 +++++++++---------- FoodbLog/FoodbLog/RootTabBarVC.swift | 14 ++ 4 files changed, 108 insertions(+), 108 deletions(-) diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index 6374c09..1398eba 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -690,6 +690,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; INFOPLIST_FILE = FoodbLog/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.ayunavogel.FoodbLog; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -711,6 +712,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; INFOPLIST_FILE = FoodbLog/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.ayunavogel.FoodbLog; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/FoodbLog/FoodbLog/AppDelegate.swift b/FoodbLog/FoodbLog/AppDelegate.swift index e8ece00..8906e27 100644 --- a/FoodbLog/FoodbLog/AppDelegate.swift +++ b/FoodbLog/FoodbLog/AppDelegate.swift @@ -16,8 +16,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. - self.configureWindow() + for service in services { _ = service.application?(application, didFinishLaunchingWithOptions: launchOptions) } diff --git a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard index 246c60d..87cca86 100644 --- a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard +++ b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard @@ -1,9 +1,10 @@ - + + @@ -11,28 +12,24 @@ - - - - - - + + Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. - + - - - + + + + + - + + + - - - - - - - - - - + + + + + + + @@ -95,6 +86,7 @@ + @@ -106,7 +98,7 @@ - + @@ -167,22 +159,18 @@ - + - - - - - - + + @@ -192,7 +180,7 @@ - + @@ -268,8 +256,8 @@ - - + + @@ -279,14 +267,16 @@ + - - - - - - + + + + + + + @@ -315,10 +305,6 @@ - - - - @@ -352,14 +338,15 @@ + - - + + - + - + @@ -386,6 +373,7 @@ + @@ -396,31 +384,26 @@ - + - - - - - - + + - - - + + @@ -433,38 +416,38 @@ - - + + - - - - + + - - + + @@ -478,45 +461,46 @@ - - + + + - - + + - + - + - - - - - + + + + + - + - - + + - - + + - + @@ -549,7 +533,7 @@ - + @@ -602,7 +586,7 @@ - + @@ -666,7 +650,7 @@ - + @@ -710,7 +694,7 @@ - + diff --git a/FoodbLog/FoodbLog/RootTabBarVC.swift b/FoodbLog/FoodbLog/RootTabBarVC.swift index 30b8dca..b4d06c6 100644 --- a/FoodbLog/FoodbLog/RootTabBarVC.swift +++ b/FoodbLog/FoodbLog/RootTabBarVC.swift @@ -12,6 +12,7 @@ final class RootTabBarVC: UITabBarController { override func viewDidLoad() { super.viewDidLoad() + configureNavigationBarApperance() setupVCs() } @@ -24,6 +25,18 @@ final class RootTabBarVC: UITabBarController { } private extension RootTabBarVC { + + func configureNavigationBarApperance() { + // White non-transucent navigation bar, supports dark appearance + if #available(iOS 15, *) { + let appearance = UINavigationBarAppearance() + appearance.configureWithOpaqueBackground() + appearance.titleTextAttributes = [.foregroundColor: UIColor.white] + appearance.backgroundColor = .systemOrange + UINavigationBar.appearance().standardAppearance = appearance + UINavigationBar.appearance().scrollEdgeAppearance = appearance + } + } func firstTabBar() -> UIViewController { let vc = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "\(FoodLogCollectionViewVC.self)") as! FoodLogCollectionViewVC @@ -52,6 +65,7 @@ private extension RootTabBarVC { title : String, image : UIImage?, preferLargeTitles : Bool = false) -> UIViewController { let navController = UINavigationController(rootViewController: rootViewController) + navController.tabBarItem.title = title navController.tabBarItem.image = image if #available(iOS 11.0, *) { From a90754413552d1d1b090c394ae550acf60ff2333 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Wed, 5 Apr 2023 14:14:45 +0100 Subject: [PATCH 10/29] add additional location privacy usage description --- FoodbLog/FoodbLog/Info.plist | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/FoodbLog/FoodbLog/Info.plist b/FoodbLog/FoodbLog/Info.plist index f1f57df..d54b711 100644 --- a/FoodbLog/FoodbLog/Info.plist +++ b/FoodbLog/FoodbLog/Info.plist @@ -27,10 +27,12 @@ NSAllowsArbitraryLoads + NSLocationAlwaysAndWhenInUseUsageDescription + The app need to access your location to search for restaurant NSLocationAlwaysUsageDescription - App use Locations service mode Always + The app need to access your location to search for restaurant NSLocationWhenInUseUsageDescription - + The app need to access your location to search for restaurant UIAppFonts SignPainter-HouseScript.ttf From 8272048ec9c0762b89bf16b03d1bb6851343c321 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Wed, 5 Apr 2023 14:42:33 +0100 Subject: [PATCH 11/29] refactor FoodLogDetailViewController to swift file --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 10 +-- FoodbLog/FoodbLog/Base.lproj/Main.storyboard | 16 ++-- .../FoodbLog/FoodLogCollectionViewVC.swift | 47 +++++++---- FoodbLog/FoodbLog/FoodLogDetailVC.swift | 61 +++++++++++++++ .../FoodbLog/FoodLogDetailViewController.h | 17 ---- .../FoodbLog/FoodLogDetailViewController.m | 78 ------------------- FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h | 1 - 7 files changed, 104 insertions(+), 126 deletions(-) create mode 100644 FoodbLog/FoodbLog/FoodLogDetailVC.swift delete mode 100644 FoodbLog/FoodbLog/FoodLogDetailViewController.h delete mode 100644 FoodbLog/FoodbLog/FoodLogDetailViewController.m diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index 1398eba..0632435 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -7,7 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 298471A01BD406A8006282CC /* FoodLogDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2984719F1BD406A8006282CC /* FoodLogDetailViewController.m */; }; 298471A31BD4097A006282CC /* FoodFeedDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 298471A21BD4097A006282CC /* FoodFeedDetailViewController.m */; }; 29E25D531BCAB8480015A16F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 29E25D511BCAB8480015A16F /* Main.storyboard */; }; 29E25D551BCAB8480015A16F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 29E25D541BCAB8480015A16F /* Assets.xcassets */; }; @@ -27,6 +26,7 @@ 50F7C67E1BCB08BA00A969D1 /* FoodFeedCustomCVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F7C67D1BCB08BA00A969D1 /* FoodFeedCustomCVC.m */; }; 5D2957241BD3F8FE0029FD65 /* FoodFeedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D2957231BD3F8FE0029FD65 /* FoodFeedObject.m */; }; 5DAB1BE71BCDD7480088D08D /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DAB1BE61BCDD7480088D08D /* CoreLocation.framework */; }; + 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */; }; 7FB90DE929DD5E6600A50433 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */; }; 7FB90DEB29DD630F00A50433 /* ParseDBAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */; }; 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEC29DD635600A50433 /* ChemeleonAppDelegate.swift */; }; @@ -54,8 +54,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 2984719E1BD406A8006282CC /* FoodLogDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodLogDetailViewController.h; sourceTree = ""; }; - 2984719F1BD406A8006282CC /* FoodLogDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodLogDetailViewController.m; sourceTree = ""; }; 298471A11BD4097A006282CC /* FoodFeedDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodFeedDetailViewController.h; sourceTree = ""; }; 298471A21BD4097A006282CC /* FoodFeedDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodFeedDetailViewController.m; sourceTree = ""; }; 29E25D451BCAB8480015A16F /* FoodbLog.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FoodbLog.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -94,6 +92,7 @@ 5D2957231BD3F8FE0029FD65 /* FoodFeedObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodFeedObject.m; sourceTree = ""; }; 5DAB1BE61BCDD7480088D08D /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; 69A81EF376647BA708026D38 /* Pods-FoodbLog.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FoodbLog.debug.xcconfig"; path = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog.debug.xcconfig"; sourceTree = ""; }; + 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogDetailVC.swift; sourceTree = ""; }; 7FB90DE729DD5E6500A50433 /* FoodbLog-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FoodbLog-Bridging-Header.h"; sourceTree = ""; }; 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseDBAppDelegate.swift; sourceTree = ""; }; @@ -184,8 +183,7 @@ isa = PBXGroup; children = ( 7FB90DF229DD756000A50433 /* FoodLogCollectionViewVC.swift */, - 2984719E1BD406A8006282CC /* FoodLogDetailViewController.h */, - 2984719F1BD406A8006282CC /* FoodLogDetailViewController.m */, + 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */, 294C32C11C948A0800795520 /* CreateLog View Controllers */, ); name = "FoodbLog View Controllers"; @@ -541,6 +539,7 @@ 7FB90DF329DD756000A50433 /* FoodLogCollectionViewVC.swift in Sources */, 50EC0D181BD0545C0045B513 /* RestaurantPickerTableViewController.m in Sources */, 50A3C2C41BCAE4AD0077F79B /* InstagramImagePicker.m in Sources */, + 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */, 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */, 5D2957241BD3F8FE0029FD65 /* FoodFeedObject.m in Sources */, 50967FD41BD6F6930029D6AB /* RecipeTableViewController.m in Sources */, @@ -549,7 +548,6 @@ 507F55891BD965B10059C2B3 /* RecipeTableViewCell.m in Sources */, 298471A31BD4097A006282CC /* FoodFeedDetailViewController.m in Sources */, 50D767B81BCC895900C82B8B /* FoodFeedViewController.m in Sources */, - 298471A01BD406A8006282CC /* FoodLogDetailViewController.m in Sources */, 50F7C67E1BCB08BA00A969D1 /* FoodFeedCustomCVC.m in Sources */, 29E25D801BCAC9D50015A16F /* CreateLogViewController.m in Sources */, 7FB90DE929DD5E6600A50433 /* AppDelegate.swift in Sources */, diff --git a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard index 87cca86..494002c 100644 --- a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard +++ b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard @@ -8,10 +8,10 @@ - + - + @@ -89,11 +89,11 @@ - - - - - + + + + + @@ -505,11 +505,11 @@ - + diff --git a/FoodbLog/FoodbLog/FoodLogCollectionViewVC.swift b/FoodbLog/FoodbLog/FoodLogCollectionViewVC.swift index debaeac..637db5b 100644 --- a/FoodbLog/FoodbLog/FoodLogCollectionViewVC.swift +++ b/FoodbLog/FoodbLog/FoodLogCollectionViewVC.swift @@ -10,23 +10,17 @@ import UIKit import Parse final class FoodLogCollectionViewVC: UICollectionViewController { - + var allFoodbLogObjects : [FoodLog] = [] + override func viewDidLoad() { + super.viewDidLoad() + setupUI() + } + override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) - - navigationItem.titleView = UIImageView(image: UIImage(named: "FoodbLog_White_Logo.png")) - - let horizontalPadding : CGFloat = 6.0 - let numberOfItemPerRow : CGFloat = 3.0 - let heightAdjustment : CGFloat = 30.0 - let width = (collectionView.frame.width - horizontalPadding) / numberOfItemPerRow - - let layout = UICollectionViewFlowLayout() - layout.itemSize = CGSize(width: width, height: width + heightAdjustment) - - collectionView.collectionViewLayout = layout + pullDataFromParse() } } @@ -38,7 +32,7 @@ extension FoodLogCollectionViewVC { return allFoodbLogObjects.count } - override func collectionView( + override func collectionView( _ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath ) -> UICollectionViewCell { @@ -57,8 +51,8 @@ extension FoodLogCollectionViewVC { override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { let log = allFoodbLogObjects[indexPath.row] - let foodDetailVC = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "FoodLogDetailViewController") as! FoodLogDetailViewController - foodDetailVC.foodbLogObject = log + let foodDetailVC = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "FoodLogDetailVC") as! FoodLogDetailVC + foodDetailVC.foodLogObject = log navigationController?.pushViewController(foodDetailVC, animated: true) } @@ -68,6 +62,9 @@ extension FoodLogCollectionViewVC { func pullDataFromParse() { let query = PFQuery(className: "\(FoodLog.self)") query.findObjectsInBackground { objects, error in + if let error = error { + print("Error find objects from PFQuery : \(error.localizedDescription)") + } guard let pfObjects = objects, let foodObject = pfObjects as? [FoodLog] else {return} self.allFoodbLogObjects.append(contentsOf: foodObject) @@ -78,3 +75,21 @@ extension FoodLogCollectionViewVC { } } } + + +private extension FoodLogCollectionViewVC { + func setupUI() { + + navigationItem.titleView = UIImageView(image: UIImage(named: "FoodbLog_White_Logo.png")) + + let horizontalPadding : CGFloat = 6.0 + let numberOfItemPerRow : CGFloat = 3.0 + let heightAdjustment : CGFloat = 30.0 + let width = (collectionView.frame.width - horizontalPadding) / numberOfItemPerRow + + let layout = UICollectionViewFlowLayout() + layout.itemSize = CGSize(width: width, height: width + heightAdjustment) + + collectionView.collectionViewLayout = layout + } +} diff --git a/FoodbLog/FoodbLog/FoodLogDetailVC.swift b/FoodbLog/FoodbLog/FoodLogDetailVC.swift new file mode 100644 index 0000000..2c318c9 --- /dev/null +++ b/FoodbLog/FoodbLog/FoodLogDetailVC.swift @@ -0,0 +1,61 @@ +// +// FoodLogDetailVC.swift +// FoodbLog +// +// Created by Ikmal Azman on 05/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import UIKit + +final class FoodLogDetailVC: UIViewController { + + @IBOutlet weak var foodLogImageView : UIImageView! + @IBOutlet weak var recipeButton : UIButton! + @IBOutlet weak var restaurantNameLabel : UILabel! + @IBOutlet weak var dishNameLabel : UILabel! + @IBOutlet weak var foodLogDescription : UITextView! + + var foodLogObject : FoodLog? + + override func viewDidLoad() { + super.viewDidLoad() + setupUI() + requestFoodLogImage() + } + + func setupUI() { + navigationItem.titleView = UIImageView(image: UIImage(named: "FoodbLog_White_Logo.png")) + + if #available(iOS 11.0, *) { + UIScrollView.appearance().contentInsetAdjustmentBehavior = .never + } else { + automaticallyAdjustsScrollViewInsets = false + } + + foodLogImageView.clipsToBounds = true + + recipeButton.setTitleColor(.flatBlue(), for: .normal) + recipeButton.contentHorizontalAlignment = .left + + restaurantNameLabel.textColor = .flatGray() + restaurantNameLabel.text = foodLogObject?.restaurantName + + dishNameLabel.textColor = .flatOrange() + dishNameLabel.text = foodLogObject?.name + + foodLogDescription.font = .systemFont(ofSize: 24) + foodLogDescription.text = foodLogObject?.notes + } + + func requestFoodLogImage() { + let imageFile = self.foodLogObject?.image + imageFile?.getDataInBackground { data, error in + guard let data = data else {return} + + DispatchQueue.main.async { + self.foodLogImageView.image = UIImage(data: data) + } + } + } +} diff --git a/FoodbLog/FoodbLog/FoodLogDetailViewController.h b/FoodbLog/FoodbLog/FoodLogDetailViewController.h deleted file mode 100644 index 6cd0dff..0000000 --- a/FoodbLog/FoodbLog/FoodLogDetailViewController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FoodLogDetailViewController.h -// FoodbLog -// -// Created by Ayuna Vogel on 10/18/15. -// Copyright © 2015 Ayuna Vogel. All rights reserved. -// - -#import - -#import "FoodLog.h" - -@interface FoodLogDetailViewController : UIViewController - -@property (nonatomic) FoodLog *foodbLogObject; - -@end diff --git a/FoodbLog/FoodbLog/FoodLogDetailViewController.m b/FoodbLog/FoodbLog/FoodLogDetailViewController.m deleted file mode 100644 index 929e1bf..0000000 --- a/FoodbLog/FoodbLog/FoodLogDetailViewController.m +++ /dev/null @@ -1,78 +0,0 @@ -// -// FoodLogDetailViewController.m -// FoodbLog -// -// Created by Ayuna Vogel on 10/18/15. -// Copyright © 2015 Ayuna Vogel. All rights reserved. -// - -#import - -#import "FoodLogDetailViewController.h" - -@interface FoodLogDetailViewController () - -@property (weak, nonatomic) IBOutlet UIImageView *foodLogImageView; // food image -@property (weak, nonatomic) IBOutlet UIButton *recipeButton; -@property (weak, nonatomic) IBOutlet UILabel *restaurantNameLabel; -@property (weak, nonatomic) IBOutlet UILabel *dishNameLabel; // dish title -@property (weak, nonatomic) IBOutlet UITextView *foodLogDescription; // notes - -@end - - -@implementation FoodLogDetailViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - [self fetchDataAndSetupUI]; -} - -- (void)fetchDataAndSetupUI { - - self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"FoodbLog_White_Logo.png"]]; - - self.automaticallyAdjustsScrollViewInsets = NO; - - // image (top of the screen) - - self.foodLogImageView.clipsToBounds = YES; - - PFFile *imageFile = self.foodbLogObject.image; - - [imageFile getDataInBackgroundWithBlock:^(NSData *data, NSError *error) { - if (!data) { - return NSLog(@"%@", error); - } - self.foodLogImageView.image = [UIImage imageWithData:data]; - }]; - - // recipe - - [self.recipeButton setTitleColor:[UIColor flatBlueColor] forState:UIControlStateNormal]; - self.recipeButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; - - // restaurant - - self.restaurantNameLabel.textColor =[UIColor flatGrayColorDark]; - self.restaurantNameLabel.text = self.foodbLogObject.restaurantName; - - // dish name - - self.dishNameLabel.textColor = [UIColor flatOrangeColor]; - self.dishNameLabel.text = self.foodbLogObject.name; - - - // description/notes - - self.foodLogDescription.text = self.foodbLogObject.notes; - [self.foodLogDescription setFont:[UIFont systemFontOfSize:24.0f]]; - -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; -} - -@end diff --git a/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h b/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h index b30f7a0..4cb8541 100644 --- a/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h +++ b/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h @@ -7,4 +7,3 @@ #import "FoodbLogCustomCell.h" #import "FoodLog.h" #import "FoodLog.m" -#import "FoodLogDetailViewController.h" From 724777b58fdd324c34cfd76bfe8fac43718024e0 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Wed, 5 Apr 2023 14:44:37 +0100 Subject: [PATCH 12/29] Fix launch screen contraints --- FoodbLog/FoodbLog/Launch Screen.storyboard | 42 +++++++++++----------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/FoodbLog/FoodbLog/Launch Screen.storyboard b/FoodbLog/FoodbLog/Launch Screen.storyboard index 96c20c9..25d841c 100644 --- a/FoodbLog/FoodbLog/Launch Screen.storyboard +++ b/FoodbLog/FoodbLog/Launch Screen.storyboard @@ -1,46 +1,44 @@ - - + + + - - + + + + - - - - - + - - + + - - - - + + + + + - + From 83001109cc3adf9ce498d91555c670f1415eda17 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Wed, 5 Apr 2023 18:57:01 +0100 Subject: [PATCH 13/29] refactor CreateLogViewController to swift file --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 4 + FoodbLog/FoodbLog/Base.lproj/Main.storyboard | 31 +- FoodbLog/FoodbLog/CreateLogVC.swift | 493 +++++++++++++++++++ FoodbLog/FoodbLog/CreateLogViewController.m | 40 +- FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h | 5 + FoodbLog/FoodbLog/Info.plist | 2 + 6 files changed, 523 insertions(+), 52 deletions(-) create mode 100644 FoodbLog/FoodbLog/CreateLogVC.swift diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index 0632435..f09fc69 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -27,6 +27,7 @@ 5D2957241BD3F8FE0029FD65 /* FoodFeedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D2957231BD3F8FE0029FD65 /* FoodFeedObject.m */; }; 5DAB1BE71BCDD7480088D08D /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DAB1BE61BCDD7480088D08D /* CoreLocation.framework */; }; 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */; }; + 7F8CC93E29DDB3200050C281 /* CreateLogVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */; }; 7FB90DE929DD5E6600A50433 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */; }; 7FB90DEB29DD630F00A50433 /* ParseDBAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */; }; 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEC29DD635600A50433 /* ChemeleonAppDelegate.swift */; }; @@ -93,6 +94,7 @@ 5DAB1BE61BCDD7480088D08D /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; 69A81EF376647BA708026D38 /* Pods-FoodbLog.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FoodbLog.debug.xcconfig"; path = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog.debug.xcconfig"; sourceTree = ""; }; 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogDetailVC.swift; sourceTree = ""; }; + 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateLogVC.swift; sourceTree = ""; }; 7FB90DE729DD5E6500A50433 /* FoodbLog-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FoodbLog-Bridging-Header.h"; sourceTree = ""; }; 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseDBAppDelegate.swift; sourceTree = ""; }; @@ -192,6 +194,7 @@ 294C32C11C948A0800795520 /* CreateLog View Controllers */ = { isa = PBXGroup; children = ( + 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */, 29E25D7E1BCAC9D50015A16F /* CreateLogViewController.h */, 29E25D7F1BCAC9D50015A16F /* CreateLogViewController.m */, 294C32C51C95DD6700795520 /* Pick Image From Instagram */, @@ -537,6 +540,7 @@ 7FB90DEB29DD630F00A50433 /* ParseDBAppDelegate.swift in Sources */, 50F7C6781BCAF72B00A969D1 /* InstagramImagePickerCustomCell.m in Sources */, 7FB90DF329DD756000A50433 /* FoodLogCollectionViewVC.swift in Sources */, + 7F8CC93E29DDB3200050C281 /* CreateLogVC.swift in Sources */, 50EC0D181BD0545C0045B513 /* RestaurantPickerTableViewController.m in Sources */, 50A3C2C41BCAE4AD0077F79B /* InstagramImagePicker.m in Sources */, 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */, diff --git a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard index 494002c..f8ce2df 100644 --- a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard +++ b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard @@ -13,23 +13,23 @@ - + - + Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. - + @@ -98,7 +98,7 @@ - + @@ -139,7 +139,6 @@ - @@ -389,7 +388,7 @@ - + @@ -428,14 +427,14 @@ - + @@ -522,13 +521,13 @@ - - - - - - - + + + + + + + diff --git a/FoodbLog/FoodbLog/CreateLogVC.swift b/FoodbLog/FoodbLog/CreateLogVC.swift new file mode 100644 index 0000000..22925f8 --- /dev/null +++ b/FoodbLog/FoodbLog/CreateLogVC.swift @@ -0,0 +1,493 @@ +// +// CreateLogVC.swift +// FoodbLog +// +// Created by Ikmal Azman on 05/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import UIKit +import SDWebImage +import Parse + +final class CreateLogVC: UIViewController { + @IBOutlet weak var foodLogTitleTextField : UITextField! + @IBOutlet weak var snapAPhotoButton : UIButton! + @IBOutlet weak var searchAPicButton : UIButton! + @IBOutlet weak var foodLogImageView : UIImageView! + @IBOutlet weak var restaurantSearchTextField: UITextField! + @IBOutlet weak var recipeSearchTextField: UITextField! + @IBOutlet weak var foodExperienceTextView : UITextView! + + var foodLogImage : UIImage? + var recipeIngredientsToSave : String? + var imagePickerController : UIImagePickerController = UIImagePickerController() + var lastChosenMediaType : String? + var shouldPresentPhotoCaptureController : Bool = false + var locationManager : CLLocationManager = CLLocationManager() + + var userLocation : CLLocation? + + + var fileUploadBackgroundTaskID : UIBackgroundTaskIdentifier = UIBackgroundTaskIdentifier(rawValue: 1) + var photoPostBackgroundTaskID : UIBackgroundTaskIdentifier = UIBackgroundTaskIdentifier(rawValue: 2) + + override func viewDidLoad() { + super.viewDidLoad() + setupNavigationBar() + setupLocationManager() + setupTextEditor() + setupImagePicker() + } + + override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + view.endEditing(true) + } +} + +extension CreateLogVC { + @IBAction func searcAPicOnIntagramButtonTapped(_ sender : UIButton) { + instagramRequestForTag(foodLogTitleTextField.text ?? "-") + } + + @IBAction func snapAPhotoButtonTapped(_ sender : UIButton) { + let alertControler = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) + + let takePhoto = UIAlertAction(title: "Take Photo", style: .default, handler: shouldStartCameraController(_:)) + let choosePhoto = UIAlertAction(title: "Choose Photo", style: .default, handler: shouldStartPhotoLibraryPickerController(_:)) + let cancelMediaSelection = UIAlertAction(title: "Cancel", style: .cancel) + + alertControler.addAction(takePhoto) + alertControler.addAction(choosePhoto) + alertControler.addAction(cancelMediaSelection) + present(alertControler, animated: true) + } +} + +extension CreateLogVC { + func saveDataToParse() { + let imageToBeSave = foodLogImageView.image ?? UIImage() + let data = imageToBeSave.jpegData(compressionQuality: 0.5) ?? Data() + let imageFileToBeSavedOnParse = PFFile(data: data, contentType: "image/png") + + // sending data to and storing it on Parse + let foodLog = FoodLog() + foodLog.name = foodLogTitleTextField.text + foodLog.image = imageFileToBeSavedOnParse + foodLog.notes = foodExperienceTextView.text + foodLog.restaurantName = restaurantSearchTextField.text + foodLog.recipeName = recipeSearchTextField.text + + let uiApplication = UIApplication.shared + + fileUploadBackgroundTaskID = uiApplication.beginBackgroundTask { + uiApplication.endBackgroundTask(self.fileUploadBackgroundTaskID) + } + + foodLog.saveInBackground { _, _ in + self.dismiss(animated: true) + } + + UIImageWriteToSavedPhotosAlbum(imageToBeSave, nil, nil, nil) + } +} + +extension CreateLogVC { + func shouldStartPhotoLibraryPickerController(_ action :UIAlertAction?) { + imagePickerController.sourceType = .photoLibrary + imagePickerController.delegate = self + + present(imagePickerController, animated: true) + } + + func shouldStartCameraController(_ action : UIAlertAction?) { + imagePickerController.sourceType = .camera + present(imagePickerController, animated: true) + } +} + +extension CreateLogVC : CLLocationManagerDelegate { + func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { + + self.userLocation = locations.last + locationManager.stopUpdatingLocation() + } + + func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { + print("Error retrieving location : \(error.localizedDescription)") + + let alert = UIAlertController( + title: "Error", + message: "There was an error retrieving your location", + preferredStyle: .alert) + let okButton = UIAlertAction(title: "OK", style: .default) + alert.addAction(okButton) + + self.present(alert, animated: true) + } +} + +extension CreateLogVC : UITextFieldDelegate { + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + + if textField == restaurantSearchTextField { + requestRestaurantName(textField.text ?? "-") + } else if textField == recipeSearchTextField { + recipeRequestForString(textField.text ?? "-") + } + + return true + } + +} + +extension CreateLogVC : UITextViewDelegate { + func textViewDidBeginEditing(_ textView: UITextView) { + textView.text = "" + textView.textColor = .black + } + + func textViewDidEndEditing(_ textView: UITextView) { + guard textView.text == "" else {return} + textView.text = "Wanna Save Some Notes?" + textView.textColor = .lightGray + } +} + +extension CreateLogVC : UIImagePickerControllerDelegate, UINavigationControllerDelegate { + func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { + guard let foodImage = info[.originalImage] as? UIImage else {return} + foodLogImageView.image = foodImage + foodLogImageView.layer.masksToBounds = true + foodLogImageView.layer.cornerRadius = 10 + + picker.dismiss(animated: true) + } +} + +extension CreateLogVC : RestaurantPickerTableViewDelegate { + func didSelectRestaurant(_ restaurant: String!) { + restaurantSearchTextField.text = restaurant + } +} + +extension CreateLogVC : RecipeTableViewDelegate { + func didSelectRecipe(_ recipe: String!, withIngredients ingredients: String!) { + recipeSearchTextField.text = recipe + recipeIngredientsToSave = ingredients + navigationController?.popViewController(animated: true) + } + +} + +extension CreateLogVC : InstagramImagePickerDelegate { + func imagePickerDidSelectImage(withURL url: String!) { + guard let url = URL(string: url) else {return} + self.foodLogImageView.setImageWith(url, placeholderImage: UIImage()) { image, error, _ in + self.foodLogImageView.image = image + } + } +} + +extension CreateLogVC { + func actionSheet(_ actionSheet : UIActionSheet, clickedButtonAtIndex buttonIndex : Int) { + if buttonIndex == 0 { + shouldStartCameraController(nil) + } else { + shouldStartPhotoLibraryPickerController(nil) + } + } +} + +extension CreateLogVC { + // MARK: Fousquare API Request method + func requestRestaurantName(_ name : String) { + let query = name + let latitude : Double = userLocation?.coordinate.latitude ?? 0.0 + let longitute : Double = userLocation?.coordinate.longitude ?? 0.0 + + let urlString = "https://api.foursquare.com/v2/venues/search?client_id=VENOVOCEM4E1QVRTGNOCNO40V32YHQ4FMRD0M3K4WBMYQWPS&client_secret=QVM22AMEWXEZ54VBHMGOHYE2JNMMLTQYKOKOSAK0JTGDQBLT&v=20130815&ll=\(latitude),\(longitute)&query=\(query)&radius=2000" + + guard let url = URL(string: urlString) else {return} + + let header = [ + "accept": "application/json", + "Authorization": "fsq330X+8o6/JsdNbbyzjYaEqXORJTZvanpmRWgb4MVsW8E=" + ] + + var urlRequest = URLRequest(url: url) + urlRequest.httpMethod = "GET" + urlRequest.allHTTPHeaderFields = header + + let task = URLSession.shared.dataTask(with: urlRequest) { data, _, error in + if let error = error { + print("Error to search restaurant name : \(error.localizedDescription)") + print("You are at \(latitude) & \(longitute)") + } + + guard let data = data else {return} + + let decoder = JSONDecoder() + decoder.keyDecodingStrategy = .convertFromSnakeCase + + do { + let restaurants = try decoder.decode(RestaurantResponse.self, from: data) + self.displaySearchResults(restaurants.results) + + } catch { + print("Error decode data : \(error.localizedDescription)") + } + } + + task.resume() + } + + func displaySearchResults(_ results : [Restaurant]) { + let restaurantPickerTVC = storyboard?.instantiateViewController(withIdentifier: "RestaurantPickerTableViewController") as! RestaurantPickerTableViewController + #warning("replace with restaurant object once this refactoringt complete") + restaurantPickerTVC.restaurantData = [[:]] + restaurantPickerTVC.delegate = self + + navigationController?.pushViewController(restaurantPickerTVC, animated: true) + } + + // MARK: Recipes API Request method + #warning("need to replace with other recipe api due the current API provider was shut down") + func recipeRequestForString(_ recipe : String) { + let formattedInputString = recipe.replacingOccurrences(of: " ", with: "%20") + + let urlString = "https://forkify-api.herokuapp.com/api/get?rId=%\(formattedInputString)" + + guard let url = URL(string: urlString) else {return} + + let urlRequest = URLRequest(url: url) + + let task = URLSession.shared.dataTask(with: urlRequest) { data, _, error in + if let error = error { + print("Error to request recipe for \(recipe) : \(error.localizedDescription)") + } + + guard let data = data else {return} + + let decoder = JSONDecoder() + decoder.keyDecodingStrategy = .convertFromSnakeCase + + do { + let recipes = try decoder.decode(RecipeResponse.self, from: data) + self.displayRecipeResults(recipes.recipes) + + } catch { + print("Error decode data : \(error.localizedDescription)") + } + } + + task.resume() + } + + func displayRecipeResults(_ recipes : [Recipe]) { + let recipeTVC = storyboard?.instantiateViewController(withIdentifier: "RecipeTableViewController") as! RecipeTableViewController +#warning("replace with recipe object once this refactoringt complete") + recipeTVC.recipeResultsArray = [] + recipeTVC.delegate = self + + self.navigationController?.pushViewController(recipeTVC, animated: true) + } + + // MARK: Instagram Image API Request method + func instagramRequestForTag(_ foodName : String) { + let foodName = foodName.replacingOccurrences(of: " ", with: "") + + let urlString = "https://api.instagram.com/v1/tags/\(foodName)/media/recent?client_id=ac0ee52ebb154199bfabfb15b498c067" + + guard let url = URL(string: urlString) else {return} + + let urlRequest = URLRequest(url: url) + + let task = URLSession.shared.dataTask(with: urlRequest) { data, _, error in + if let error = error { + print("Error to request tag for \(foodName) : \(error.localizedDescription)") + } + + guard let data = data else {return} + + let decoder = JSONDecoder() + decoder.keyDecodingStrategy = .convertFromSnakeCase + + do { + let recipes = try decoder.decode(TagResponse.self, from: data) + self.displayTagResults(recipes.data) + + } catch { + print("Error decode data : \(error.localizedDescription)") + } + } + + task.resume() + + } + + func displayTagResults(_ tags : [Tag]) { + let instagramPickerVC = storyboard?.instantiateViewController(withIdentifier: "InstagramImagePickerViewController") as! InstagramImagePicker + + +#warning("replace with tags object once this refactoringt complete") + instagramPickerVC.imageURLArray = [] + instagramPickerVC.delegate = self + + navigationController?.pushViewController(instagramPickerVC, animated: true) + } +} + +private extension CreateLogVC { + func setupImagePicker() { + imagePickerController.delegate = self + + snapAPhotoButton.backgroundColor = .white + searchAPicButton.backgroundColor = .white + + foodLogImageView.layer.masksToBounds = true + foodLogImageView.layer.cornerRadius = 10 + + } + + func setupTextEditor() { + foodLogTitleTextField.delegate = self + setTextFieldFormatting(foodLogTitleTextField) + + restaurantSearchTextField.delegate = self + setTextFieldFormatting(restaurantSearchTextField) + + recipeSearchTextField.delegate = self + setTextFieldFormatting(recipeSearchTextField) + + foodExperienceTextView.delegate = self + } + + func setTextFieldFormatting(_ textfield : UITextField) { + textfield.layer.borderWidth = 1 + textfield.layer.cornerRadius = 2 + textfield.layer.masksToBounds = true + textfield.layer.borderColor = UIColor.flatOrange().cgColor + textfield.inputAccessoryView = UIView() + } + + func setupLocationManager() { + locationManager = CLLocationManager() + locationManager.desiredAccuracy = kCLLocationAccuracyBest + locationManager.delegate = self + locationManager.requestAlwaysAuthorization() + locationManager.startUpdatingLocation() + } + + func setupNavigationBar() { + navigationItem.title = "🍴🍜🍟🍤🍴" + + navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(cancelButtonTapped(_:))) + navigationItem.leftBarButtonItem?.tintColor = .white + + navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .save, target: self, action: #selector(saveButtonTapped(_:))) + navigationItem.rightBarButtonItem?.tintColor = .white + } + + @objc func cancelButtonTapped(_ button : UIBarButtonItem) { + self.dismiss(animated: true) + } + + @objc func saveButtonTapped(_ button : UIBarButtonItem) { + saveDataToParse() + + } +} + +//import Foundation +// +//let headers = [ +// "accept": "application/json", +// "Authorization": "fsq330X+8o6/JsdNbbyzjYaEqXORJTZvanpmRWgb4MVsW8E=" +//] +// +//let request = NSMutableURLRequest(url: NSURL(string: "https://api.foursquare.com/v3/places/search?query=donut&ll=38.656555%2C-77.250441&radius=2000")! as URL, +// cachePolicy: .useProtocolCachePolicy, +// timeoutInterval: 10.0) +//request.httpMethod = "GET" +//request.allHTTPHeaderFields = headers +// +//let session = URLSession.shared +//let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in +// if (error != nil) { +// print(error as Any) +// } else { +// let httpResponse = response as? HTTPURLResponse +// print(httpResponse) +// } +//}) + +// dataTask.resume() + +//{ +// "results": [ +// { +// "fsq_id": "4b61ab65f964a520881c2ae3", +// "categories": [ +// { +// "id": 13001, +// "name": "Bagel Shop", +// "icon": { +// "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bagels_", +// "suffix": ".png" +// } +// } +// ], +// "link": "/v3/places/4b61ab65f964a520881c2ae3", +// "location": { +// "address": "13607 Richmond Hwy", +// "census_block": "511539006021000", +// "country": "US", +// "cross_street": "", +// "dma": "Washington, Dc-Hagrstwn", +// "formatted_address": "13607 Richmond Hwy, Woodbridge, VA 22191", +// "locality": "Woodbridge", +// "postcode": "22191", +// "region": "VA" +// }, +// "name": "Dunkin'", +// "related_places": {}, +// "timezone": "America/New_York" +// } +// ], +//} + +struct RestaurantResponse : Decodable { + let results : [Restaurant] +} + +struct Restaurant : Decodable { + let name : String? + let location : RestaurantLocation? +} + +struct RestaurantLocation : Decodable { + let formattedAddress : String +} + +struct RecipeResponse : Decodable { + let recipes : [Recipe] +} + +struct Recipe : Decodable { + let imageURL : String + let recipeID : String + let title : String +} + + +struct TagResponse : Decodable { + let data : [Tag] +} + +struct Tag : Decodable { + let images : [String] + let standardResolution : String + let URL : String +} diff --git a/FoodbLog/FoodbLog/CreateLogViewController.m b/FoodbLog/FoodbLog/CreateLogViewController.m index 3a25460..3812147 100644 --- a/FoodbLog/FoodbLog/CreateLogViewController.m +++ b/FoodbLog/FoodbLog/CreateLogViewController.m @@ -42,14 +42,14 @@ @interface CreateLogViewController () @property (weak, nonatomic) IBOutlet UIButton *snapAPhotoButton; @property (weak, nonatomic) IBOutlet UIButton *searchAPicButton; @property (weak, nonatomic) IBOutlet UIImageView *foodLogImageView; -@property (strong, nonatomic) UIImage *foodLogImage; + @property (nonatomic) IBOutlet UITextField *restaurantSearchTextField; @property (weak, nonatomic) IBOutlet UITextField *recipeSearchTextField; -@property (nonatomic) NSString *recipeIngredientsToSave; - @property (weak, nonatomic) IBOutlet UITextView *foodExperienceTextView; +@property (strong, nonatomic) UIImage *foodLogImage; +@property (nonatomic) NSString *recipeIngredientsToSave; @property (nonatomic) UIImagePickerController *imagePickerController; @property (copy, nonatomic) NSString *lastChosenMediaType; - (BOOL)shouldPresentPhotoCaptureController; @@ -223,7 +223,7 @@ - (void)recipeRequestForString:(NSString *)string { NSString *formattedInputString = [string stringByReplacingOccurrencesOfString:@" " withString:@"%20"]; - NSString *URLString = [NSString stringWithFormat:@"http://food2fork.com/api/search?key=54f7d87124b73e5b6ea3a30f7ec3eb54&q=%@", formattedInputString]; + NSString *URLString = [NSString stringWithFormat:@"https://forkify-api.herokuapp.com/api/get?rId=%@", formattedInputString]; AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc]init]; @@ -479,38 +479,6 @@ - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { } -#pragma mark - Save Image Data to Parse - -- (void)saveImageDataToParseRemoteDatabase { - - UIImage *imageToBeSavedOnParse = self.foodLogImageView.image; - - // Convert to JPEG with 50% quality - NSData* data = UIImageJPEGRepresentation(imageToBeSavedOnParse, 0.5f); - PFFile *imageFileToBeSavedOnParse = [PFFile fileWithName:@"Image.jpg" data:data]; - - // Save the image to Parse - - [imageFileToBeSavedOnParse saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { - if (!error) { - // The image has now been uploaded to Parse. Associate it with a new object. - FoodLog *foodLog = [[FoodLog alloc] init]; - foodLog.image = imageFileToBeSavedOnParse; - - [foodLog saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { - if (!error) { - NSLog(@"Saved"); - } - else{ - // Error - NSLog(@"Error: %@ %@", error, [error userInfo]); - } - }]; - } - }]; -} - - #pragma mark - TextField Return and Editing methods - (BOOL)textFieldShouldReturn:(UITextField *)textField { diff --git a/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h b/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h index 4cb8541..9722e0c 100644 --- a/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h +++ b/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h @@ -5,5 +5,10 @@ #import "FoodLog.h" #import "FoodFeedViewController.h" #import "FoodbLogCustomCell.h" +#import "CreateLogViewController.h" +#import "RestaurantPickerTableViewController.h" +#import "RecipeTableViewController.h" +#import "InstagramImagePicker.h" #import "FoodLog.h" +#import "FoodFeedObject.h" #import "FoodLog.m" diff --git a/FoodbLog/FoodbLog/Info.plist b/FoodbLog/FoodbLog/Info.plist index d54b711..b34f8a2 100644 --- a/FoodbLog/FoodbLog/Info.plist +++ b/FoodbLog/FoodbLog/Info.plist @@ -33,6 +33,8 @@ The app need to access your location to search for restaurant NSLocationWhenInUseUsageDescription The app need to access your location to search for restaurant + NSPhotoLibraryUsageDescription + The app need to access your album to select photo image UIAppFonts SignPainter-HouseScript.ttf From 1a8b84227ec1286c8b061be2f6d9ff66255b45c6 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Wed, 5 Apr 2023 19:13:18 +0100 Subject: [PATCH 14/29] create FoodLogService to handle and decode api get request --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 12 ++++++ FoodbLog/FoodbLog/FoodLogService.swift | 41 +++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 FoodbLog/FoodbLog/FoodLogService.swift diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index f09fc69..88b73d6 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -28,6 +28,7 @@ 5DAB1BE71BCDD7480088D08D /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DAB1BE61BCDD7480088D08D /* CoreLocation.framework */; }; 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */; }; 7F8CC93E29DDB3200050C281 /* CreateLogVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */; }; + 7F8CC94129DDF1730050C281 /* FoodLogService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC94029DDF1730050C281 /* FoodLogService.swift */; }; 7FB90DE929DD5E6600A50433 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */; }; 7FB90DEB29DD630F00A50433 /* ParseDBAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */; }; 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEC29DD635600A50433 /* ChemeleonAppDelegate.swift */; }; @@ -95,6 +96,7 @@ 69A81EF376647BA708026D38 /* Pods-FoodbLog.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FoodbLog.debug.xcconfig"; path = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog.debug.xcconfig"; sourceTree = ""; }; 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogDetailVC.swift; sourceTree = ""; }; 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateLogVC.swift; sourceTree = ""; }; + 7F8CC94029DDF1730050C281 /* FoodLogService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogService.swift; sourceTree = ""; }; 7FB90DE729DD5E6500A50433 /* FoodbLog-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FoodbLog-Bridging-Header.h"; sourceTree = ""; }; 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseDBAppDelegate.swift; sourceTree = ""; }; @@ -278,6 +280,7 @@ 29E25D471BCAB8480015A16F /* FoodbLog */ = { isa = PBXGroup; children = ( + 7F8CC93F29DDF15D0050C281 /* Service */, 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */, 7FB90DE729DD5E6500A50433 /* FoodbLog-Bridging-Header.h */, 29E25D511BCAB8480015A16F /* Main.storyboard */, @@ -330,6 +333,14 @@ path = Pods; sourceTree = ""; }; + 7F8CC93F29DDF15D0050C281 /* Service */ = { + isa = PBXGroup; + children = ( + 7F8CC94029DDF1730050C281 /* FoodLogService.swift */, + ); + name = Service; + sourceTree = ""; + }; AEE7B9CF621872427CD71282 /* Frameworks */ = { isa = PBXGroup; children = ( @@ -546,6 +557,7 @@ 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */, 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */, 5D2957241BD3F8FE0029FD65 /* FoodFeedObject.m in Sources */, + 7F8CC94129DDF1730050C281 /* FoodLogService.swift in Sources */, 50967FD41BD6F6930029D6AB /* RecipeTableViewController.m in Sources */, 29F703A31BD08C5C009B7A82 /* FoodLog.m in Sources */, 29F703611BCB923F009B7A82 /* FoodbLogCustomCell.m in Sources */, diff --git a/FoodbLog/FoodbLog/FoodLogService.swift b/FoodbLog/FoodbLog/FoodLogService.swift new file mode 100644 index 0000000..324e412 --- /dev/null +++ b/FoodbLog/FoodbLog/FoodLogService.swift @@ -0,0 +1,41 @@ +// +// FoodLogService.swift +// FoodbLog +// +// Created by Ikmal Azman on 05/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import Foundation + +final class FoodLogService { + let session = URLSession.shared + + private var decoder : JSONDecoder = { + let decoder = JSONDecoder() + decoder.keyDecodingStrategy = .convertFromSnakeCase + return decoder + }() + + func requestAPI(for url : URLRequest, _ type : Element.Type, _ completion : @escaping ((Result)->Void)) { + + session.dataTask(with: url) { data, response, error in + + if let error = error { + print("Error requesting API : \(error.localizedDescription)") + completion(.failure(error)) + } + + guard let data = data else {return} + + do { + let element = try self.decoder.decode(Element.self, from: data) + completion(.success(element)) + } catch { + print("Error to decode data : \(error.localizedDescription)") + completion(.failure(error)) + } + } + .resume() + } +} From 38c598664378525d2a453879e7dbb2f99a385f43 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Wed, 5 Apr 2023 19:19:06 +0100 Subject: [PATCH 15/29] create URLSessionContract to enable testability for networking --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 232 +++++++++++++------- FoodbLog/FoodbLog/FoodLogService.swift | 7 +- FoodbLog/FoodbLog/URLSessionContract.swift | 15 ++ 3 files changed, 170 insertions(+), 84 deletions(-) create mode 100644 FoodbLog/FoodbLog/URLSessionContract.swift diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index 88b73d6..c2e7163 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -10,7 +10,6 @@ 298471A31BD4097A006282CC /* FoodFeedDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 298471A21BD4097A006282CC /* FoodFeedDetailViewController.m */; }; 29E25D531BCAB8480015A16F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 29E25D511BCAB8480015A16F /* Main.storyboard */; }; 29E25D551BCAB8480015A16F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 29E25D541BCAB8480015A16F /* Assets.xcassets */; }; - 29E25D631BCAB8490015A16F /* FoodbLogTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 29E25D621BCAB8490015A16F /* FoodbLogTests.m */; }; 29E25D6E1BCAB8490015A16F /* FoodbLogUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 29E25D6D1BCAB8490015A16F /* FoodbLogUITests.m */; }; 29E25D801BCAC9D50015A16F /* CreateLogViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 29E25D7F1BCAC9D50015A16F /* CreateLogViewController.m */; }; 29F703611BCB923F009B7A82 /* FoodbLogCustomCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 29F703601BCB923F009B7A82 /* FoodbLogCustomCell.m */; }; @@ -29,6 +28,9 @@ 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */; }; 7F8CC93E29DDB3200050C281 /* CreateLogVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */; }; 7F8CC94129DDF1730050C281 /* FoodLogService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC94029DDF1730050C281 /* FoodLogService.swift */; }; + 7F8CC96329DDF2210050C281 /* FoodbLogTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC96229DDF2210050C281 /* FoodbLogTests.swift */; }; + 7F8CC96A29DDF23E0050C281 /* FoodLogServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC96929DDF23E0050C281 /* FoodLogServiceTests.swift */; }; + 7F8CC96C29DDF2D10050C281 /* URLSessionContract.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC96B29DDF2D10050C281 /* URLSessionContract.swift */; }; 7FB90DE929DD5E6600A50433 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */; }; 7FB90DEB29DD630F00A50433 /* ParseDBAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */; }; 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEC29DD635600A50433 /* ChemeleonAppDelegate.swift */; }; @@ -39,14 +41,14 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 29E25D5F1BCAB8480015A16F /* PBXContainerItemProxy */ = { + 29E25D6A1BCAB8490015A16F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29E25D3D1BCAB8480015A16F /* Project object */; proxyType = 1; remoteGlobalIDString = 29E25D441BCAB8480015A16F; remoteInfo = FoodbLog; }; - 29E25D6A1BCAB8490015A16F /* PBXContainerItemProxy */ = { + 7F8CC96429DDF2210050C281 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29E25D3D1BCAB8480015A16F /* Project object */; proxyType = 1; @@ -62,9 +64,6 @@ 29E25D521BCAB8480015A16F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 29E25D541BCAB8480015A16F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 29E25D591BCAB8480015A16F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 29E25D5E1BCAB8480015A16F /* FoodbLogTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FoodbLogTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 29E25D621BCAB8490015A16F /* FoodbLogTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FoodbLogTests.m; sourceTree = ""; }; - 29E25D641BCAB8490015A16F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 29E25D691BCAB8490015A16F /* FoodbLogUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FoodbLogUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 29E25D6D1BCAB8490015A16F /* FoodbLogUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FoodbLogUITests.m; sourceTree = ""; }; 29E25D6F1BCAB8490015A16F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -97,6 +96,10 @@ 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogDetailVC.swift; sourceTree = ""; }; 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateLogVC.swift; sourceTree = ""; }; 7F8CC94029DDF1730050C281 /* FoodLogService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogService.swift; sourceTree = ""; }; + 7F8CC96029DDF2210050C281 /* FoodbLogTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FoodbLogTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 7F8CC96229DDF2210050C281 /* FoodbLogTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodbLogTests.swift; sourceTree = ""; }; + 7F8CC96929DDF23E0050C281 /* FoodLogServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogServiceTests.swift; sourceTree = ""; }; + 7F8CC96B29DDF2D10050C281 /* URLSessionContract.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLSessionContract.swift; sourceTree = ""; }; 7FB90DE729DD5E6500A50433 /* FoodbLog-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FoodbLog-Bridging-Header.h"; sourceTree = ""; }; 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseDBAppDelegate.swift; sourceTree = ""; }; @@ -118,14 +121,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 29E25D5B1BCAB8480015A16F /* Frameworks */ = { + 29E25D661BCAB8490015A16F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 29E25D661BCAB8490015A16F /* Frameworks */ = { + 7F8CC95D29DDF2210050C281 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -259,8 +262,8 @@ isa = PBXGroup; children = ( 29E25D471BCAB8480015A16F /* FoodbLog */, - 29E25D611BCAB8480015A16F /* FoodbLogTests */, 29E25D6C1BCAB8490015A16F /* FoodbLogUITests */, + 7F8CC96129DDF2210050C281 /* FoodbLogTests */, 29E25D461BCAB8480015A16F /* Products */, AEE7B9CF621872427CD71282 /* Frameworks */, 672B5A81475EC2F3CBACC423 /* Pods */, @@ -271,8 +274,8 @@ isa = PBXGroup; children = ( 29E25D451BCAB8480015A16F /* FoodbLog.app */, - 29E25D5E1BCAB8480015A16F /* FoodbLogTests.xctest */, 29E25D691BCAB8490015A16F /* FoodbLogUITests.xctest */, + 7F8CC96029DDF2210050C281 /* FoodbLogTests.xctest */, ); name = Products; sourceTree = ""; @@ -306,15 +309,6 @@ name = "Supporting Files"; sourceTree = ""; }; - 29E25D611BCAB8480015A16F /* FoodbLogTests */ = { - isa = PBXGroup; - children = ( - 29E25D621BCAB8490015A16F /* FoodbLogTests.m */, - 29E25D641BCAB8490015A16F /* Info.plist */, - ); - path = FoodbLogTests; - sourceTree = ""; - }; 29E25D6C1BCAB8490015A16F /* FoodbLogUITests */ = { isa = PBXGroup; children = ( @@ -337,10 +331,20 @@ isa = PBXGroup; children = ( 7F8CC94029DDF1730050C281 /* FoodLogService.swift */, + 7F8CC96B29DDF2D10050C281 /* URLSessionContract.swift */, ); name = Service; sourceTree = ""; }; + 7F8CC96129DDF2210050C281 /* FoodbLogTests */ = { + isa = PBXGroup; + children = ( + 7F8CC96229DDF2210050C281 /* FoodbLogTests.swift */, + 7F8CC96929DDF23E0050C281 /* FoodLogServiceTests.swift */, + ); + path = FoodbLogTests; + sourceTree = ""; + }; AEE7B9CF621872427CD71282 /* Frameworks */ = { isa = PBXGroup; children = ( @@ -372,24 +376,6 @@ productReference = 29E25D451BCAB8480015A16F /* FoodbLog.app */; productType = "com.apple.product-type.application"; }; - 29E25D5D1BCAB8480015A16F /* FoodbLogTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 29E25D751BCAB8490015A16F /* Build configuration list for PBXNativeTarget "FoodbLogTests" */; - buildPhases = ( - 29E25D5A1BCAB8480015A16F /* Sources */, - 29E25D5B1BCAB8480015A16F /* Frameworks */, - 29E25D5C1BCAB8480015A16F /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 29E25D601BCAB8480015A16F /* PBXTargetDependency */, - ); - name = FoodbLogTests; - productName = FoodbLogTests; - productReference = 29E25D5E1BCAB8480015A16F /* FoodbLogTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; 29E25D681BCAB8490015A16F /* FoodbLogUITests */ = { isa = PBXNativeTarget; buildConfigurationList = 29E25D781BCAB8490015A16F /* Build configuration list for PBXNativeTarget "FoodbLogUITests" */; @@ -408,12 +394,31 @@ productReference = 29E25D691BCAB8490015A16F /* FoodbLogUITests.xctest */; productType = "com.apple.product-type.bundle.ui-testing"; }; + 7F8CC95F29DDF2210050C281 /* FoodbLogTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7F8CC96629DDF2210050C281 /* Build configuration list for PBXNativeTarget "FoodbLogTests" */; + buildPhases = ( + 7F8CC95C29DDF2210050C281 /* Sources */, + 7F8CC95D29DDF2210050C281 /* Frameworks */, + 7F8CC95E29DDF2210050C281 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 7F8CC96529DDF2210050C281 /* PBXTargetDependency */, + ); + name = FoodbLogTests; + productName = FoodbLogTests; + productReference = 7F8CC96029DDF2210050C281 /* FoodbLogTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 29E25D3D1BCAB8480015A16F /* Project object */ = { isa = PBXProject; attributes = { + LastSwiftUpdateCheck = 1420; LastUpgradeCheck = 0700; ORGANIZATIONNAME = "Ayuna Vogel"; TargetAttributes = { @@ -422,14 +427,15 @@ DevelopmentTeam = N48NM3R37Q; LastSwiftMigration = 1420; }; - 29E25D5D1BCAB8480015A16F = { + 29E25D681BCAB8490015A16F = { CreatedOnToolsVersion = 7.0.1; DevelopmentTeam = N48NM3R37Q; TestTargetID = 29E25D441BCAB8480015A16F; }; - 29E25D681BCAB8490015A16F = { - CreatedOnToolsVersion = 7.0.1; - DevelopmentTeam = N48NM3R37Q; + 7F8CC95F29DDF2210050C281 = { + CreatedOnToolsVersion = 14.2; + DevelopmentTeam = 66846BKCQ4; + ProvisioningStyle = Automatic; TestTargetID = 29E25D441BCAB8480015A16F; }; }; @@ -449,8 +455,8 @@ projectRoot = ""; targets = ( 29E25D441BCAB8480015A16F /* FoodbLog */, - 29E25D5D1BCAB8480015A16F /* FoodbLogTests */, 29E25D681BCAB8490015A16F /* FoodbLogUITests */, + 7F8CC95F29DDF2210050C281 /* FoodbLogTests */, ); }; /* End PBXProject section */ @@ -467,14 +473,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 29E25D5C1BCAB8480015A16F /* Resources */ = { + 29E25D671BCAB8490015A16F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 29E25D671BCAB8490015A16F /* Resources */ = { + 7F8CC95E29DDF2210050C281 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -553,6 +559,7 @@ 7FB90DF329DD756000A50433 /* FoodLogCollectionViewVC.swift in Sources */, 7F8CC93E29DDB3200050C281 /* CreateLogVC.swift in Sources */, 50EC0D181BD0545C0045B513 /* RestaurantPickerTableViewController.m in Sources */, + 7F8CC96C29DDF2D10050C281 /* URLSessionContract.swift in Sources */, 50A3C2C41BCAE4AD0077F79B /* InstagramImagePicker.m in Sources */, 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */, 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */, @@ -570,34 +577,35 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 29E25D5A1BCAB8480015A16F /* Sources */ = { + 29E25D651BCAB8490015A16F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 29E25D631BCAB8490015A16F /* FoodbLogTests.m in Sources */, + 29E25D6E1BCAB8490015A16F /* FoodbLogUITests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 29E25D651BCAB8490015A16F /* Sources */ = { + 7F8CC95C29DDF2210050C281 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 29E25D6E1BCAB8490015A16F /* FoodbLogUITests.m in Sources */, + 7F8CC96A29DDF23E0050C281 /* FoodLogServiceTests.swift in Sources */, + 7F8CC96329DDF2210050C281 /* FoodbLogTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 29E25D601BCAB8480015A16F /* PBXTargetDependency */ = { + 29E25D6B1BCAB8490015A16F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 29E25D441BCAB8480015A16F /* FoodbLog */; - targetProxy = 29E25D5F1BCAB8480015A16F /* PBXContainerItemProxy */; + targetProxy = 29E25D6A1BCAB8490015A16F /* PBXContainerItemProxy */; }; - 29E25D6B1BCAB8490015A16F /* PBXTargetDependency */ = { + 7F8CC96529DDF2210050C281 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 29E25D441BCAB8480015A16F /* FoodbLog */; - targetProxy = 29E25D6A1BCAB8490015A16F /* PBXContainerItemProxy */; + targetProxy = 7F8CC96429DDF2210050C281 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -736,55 +744,115 @@ }; name = Release; }; - 29E25D761BCAB8490015A16F /* Debug */ = { + 29E25D791BCAB8490015A16F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - BUNDLE_LOADER = "$(TEST_HOST)"; - INFOPLIST_FILE = FoodbLogTests/Info.plist; + INFOPLIST_FILE = FoodbLogUITests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.ayunavogel.FoodbLogTests; + PRODUCT_BUNDLE_IDENTIFIER = com.ayunavogel.FoodbLogUITests; PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FoodbLog.app/FoodbLog"; + TEST_TARGET_NAME = FoodbLog; + USES_XCTRUNNER = YES; }; name = Debug; }; - 29E25D771BCAB8490015A16F /* Release */ = { + 29E25D7A1BCAB8490015A16F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - BUNDLE_LOADER = "$(TEST_HOST)"; - INFOPLIST_FILE = FoodbLogTests/Info.plist; + INFOPLIST_FILE = FoodbLogUITests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.ayunavogel.FoodbLogTests; + PRODUCT_BUNDLE_IDENTIFIER = com.ayunavogel.FoodbLogUITests; PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FoodbLog.app/FoodbLog"; + TEST_TARGET_NAME = FoodbLog; + USES_XCTRUNNER = YES; }; name = Release; }; - 29E25D791BCAB8490015A16F /* Debug */ = { + 7F8CC96729DDF2210050C281 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - INFOPLIST_FILE = FoodbLogUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.ayunavogel.FoodbLogUITests; + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 66846BKCQ4; + GCC_C_LANGUAGE_STANDARD = gnu11; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; + MACOSX_DEPLOYMENT_TARGET = 13.0; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.esikmalazman.FoodbLogTests; PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_TARGET_NAME = FoodbLog; - USES_XCTRUNNER = YES; + SDKROOT = auto; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FoodbLog.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/FoodbLog"; }; name = Debug; }; - 29E25D7A1BCAB8490015A16F /* Release */ = { + 7F8CC96829DDF2210050C281 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - INFOPLIST_FILE = FoodbLogUITests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.ayunavogel.FoodbLogUITests; + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 66846BKCQ4; + GCC_C_LANGUAGE_STANDARD = gnu11; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; + MACOSX_DEPLOYMENT_TARGET = 13.0; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.esikmalazman.FoodbLogTests; PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_TARGET_NAME = FoodbLog; - USES_XCTRUNNER = YES; + SDKROOT = auto; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FoodbLog.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/FoodbLog"; }; name = Release; }; @@ -809,20 +877,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 29E25D751BCAB8490015A16F /* Build configuration list for PBXNativeTarget "FoodbLogTests" */ = { + 29E25D781BCAB8490015A16F /* Build configuration list for PBXNativeTarget "FoodbLogUITests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 29E25D761BCAB8490015A16F /* Debug */, - 29E25D771BCAB8490015A16F /* Release */, + 29E25D791BCAB8490015A16F /* Debug */, + 29E25D7A1BCAB8490015A16F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 29E25D781BCAB8490015A16F /* Build configuration list for PBXNativeTarget "FoodbLogUITests" */ = { + 7F8CC96629DDF2210050C281 /* Build configuration list for PBXNativeTarget "FoodbLogTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 29E25D791BCAB8490015A16F /* Debug */, - 29E25D7A1BCAB8490015A16F /* Release */, + 7F8CC96729DDF2210050C281 /* Debug */, + 7F8CC96829DDF2210050C281 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/FoodbLog/FoodbLog/FoodLogService.swift b/FoodbLog/FoodbLog/FoodLogService.swift index 324e412..8f44789 100644 --- a/FoodbLog/FoodbLog/FoodLogService.swift +++ b/FoodbLog/FoodbLog/FoodLogService.swift @@ -9,7 +9,11 @@ import Foundation final class FoodLogService { - let session = URLSession.shared + let session : URLSessionContract + + init(_ session : URLSessionContract = URLSession.shared) { + self.session = session + } private var decoder : JSONDecoder = { let decoder = JSONDecoder() @@ -18,7 +22,6 @@ final class FoodLogService { }() func requestAPI(for url : URLRequest, _ type : Element.Type, _ completion : @escaping ((Result)->Void)) { - session.dataTask(with: url) { data, response, error in if let error = error { diff --git a/FoodbLog/FoodbLog/URLSessionContract.swift b/FoodbLog/FoodbLog/URLSessionContract.swift new file mode 100644 index 0000000..b0ef73f --- /dev/null +++ b/FoodbLog/FoodbLog/URLSessionContract.swift @@ -0,0 +1,15 @@ +// +// URLSessionContract.swift +// FoodbLog +// +// Created by Ikmal Azman on 05/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import Foundation + +protocol URLSessionContract { + func dataTask(with request: URLRequest, completionHandler: @escaping @Sendable (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask +} + +extension URLSession : URLSessionContract {} From c3e4dded605d66e7f38dd3710618941137202180 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Wed, 5 Apr 2023 19:44:25 +0100 Subject: [PATCH 16/29] create MockURLSession class --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 4 ++ .../FoodbLogTests/FoodLogServiceTests.swift | 9 +++++ FoodbLog/FoodbLogTests/FoodbLogTests.m | 39 ------------------- FoodbLog/FoodbLogTests/FoodbLogTests.swift | 36 +++++++++++++++++ FoodbLog/FoodbLogTests/Info.plist | 24 ------------ FoodbLog/FoodbLogTests/MockURLSession.swift | 33 ++++++++++++++++ 6 files changed, 82 insertions(+), 63 deletions(-) create mode 100644 FoodbLog/FoodbLogTests/FoodLogServiceTests.swift delete mode 100644 FoodbLog/FoodbLogTests/FoodbLogTests.m create mode 100644 FoodbLog/FoodbLogTests/FoodbLogTests.swift delete mode 100644 FoodbLog/FoodbLogTests/Info.plist create mode 100644 FoodbLog/FoodbLogTests/MockURLSession.swift diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index c2e7163..6c2314e 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -31,6 +31,7 @@ 7F8CC96329DDF2210050C281 /* FoodbLogTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC96229DDF2210050C281 /* FoodbLogTests.swift */; }; 7F8CC96A29DDF23E0050C281 /* FoodLogServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC96929DDF23E0050C281 /* FoodLogServiceTests.swift */; }; 7F8CC96C29DDF2D10050C281 /* URLSessionContract.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC96B29DDF2D10050C281 /* URLSessionContract.swift */; }; + 7F8CC96E29DDF3630050C281 /* MockURLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC96D29DDF3630050C281 /* MockURLSession.swift */; }; 7FB90DE929DD5E6600A50433 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */; }; 7FB90DEB29DD630F00A50433 /* ParseDBAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */; }; 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEC29DD635600A50433 /* ChemeleonAppDelegate.swift */; }; @@ -100,6 +101,7 @@ 7F8CC96229DDF2210050C281 /* FoodbLogTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodbLogTests.swift; sourceTree = ""; }; 7F8CC96929DDF23E0050C281 /* FoodLogServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogServiceTests.swift; sourceTree = ""; }; 7F8CC96B29DDF2D10050C281 /* URLSessionContract.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLSessionContract.swift; sourceTree = ""; }; + 7F8CC96D29DDF3630050C281 /* MockURLSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockURLSession.swift; sourceTree = ""; }; 7FB90DE729DD5E6500A50433 /* FoodbLog-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FoodbLog-Bridging-Header.h"; sourceTree = ""; }; 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseDBAppDelegate.swift; sourceTree = ""; }; @@ -341,6 +343,7 @@ children = ( 7F8CC96229DDF2210050C281 /* FoodbLogTests.swift */, 7F8CC96929DDF23E0050C281 /* FoodLogServiceTests.swift */, + 7F8CC96D29DDF3630050C281 /* MockURLSession.swift */, ); path = FoodbLogTests; sourceTree = ""; @@ -589,6 +592,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 7F8CC96E29DDF3630050C281 /* MockURLSession.swift in Sources */, 7F8CC96A29DDF23E0050C281 /* FoodLogServiceTests.swift in Sources */, 7F8CC96329DDF2210050C281 /* FoodbLogTests.swift in Sources */, ); diff --git a/FoodbLog/FoodbLogTests/FoodLogServiceTests.swift b/FoodbLog/FoodbLogTests/FoodLogServiceTests.swift new file mode 100644 index 0000000..632f130 --- /dev/null +++ b/FoodbLog/FoodbLogTests/FoodLogServiceTests.swift @@ -0,0 +1,9 @@ +// +// FoodLogServiceTests.swift +// FoodbLogTests +// +// Created by Ikmal Azman on 05/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import Foundation diff --git a/FoodbLog/FoodbLogTests/FoodbLogTests.m b/FoodbLog/FoodbLogTests/FoodbLogTests.m deleted file mode 100644 index 680d8f3..0000000 --- a/FoodbLog/FoodbLogTests/FoodbLogTests.m +++ /dev/null @@ -1,39 +0,0 @@ -// -// FoodbLogTests.m -// FoodbLogTests -// -// Created by Ayuna Vogel on 10/11/15. -// Copyright © 2015 Ayuna Vogel. All rights reserved. -// - -#import - -@interface FoodbLogTests : XCTestCase - -@end - -@implementation FoodbLogTests - -- (void)setUp { - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown { - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -- (void)testExample { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. -} - -- (void)testPerformanceExample { - // This is an example of a performance test case. - [self measureBlock:^{ - // Put the code you want to measure the time of here. - }]; -} - -@end diff --git a/FoodbLog/FoodbLogTests/FoodbLogTests.swift b/FoodbLog/FoodbLogTests/FoodbLogTests.swift new file mode 100644 index 0000000..797352a --- /dev/null +++ b/FoodbLog/FoodbLogTests/FoodbLogTests.swift @@ -0,0 +1,36 @@ +// +// FoodbLogTests.swift +// FoodbLogTests +// +// Created by Ikmal Azman on 05/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import XCTest + +final class FoodbLogTests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + // Any test you write for XCTest can be annotated as throws and async. + // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. + // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. + } + + func testPerformanceExample() throws { + // This is an example of a performance test case. + measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/FoodbLog/FoodbLogTests/Info.plist b/FoodbLog/FoodbLogTests/Info.plist deleted file mode 100644 index ba72822..0000000 --- a/FoodbLog/FoodbLogTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/FoodbLog/FoodbLogTests/MockURLSession.swift b/FoodbLog/FoodbLogTests/MockURLSession.swift new file mode 100644 index 0000000..a805357 --- /dev/null +++ b/FoodbLog/FoodbLogTests/MockURLSession.swift @@ -0,0 +1,33 @@ +// +// MockURLSession.swift +// FoodbLogTests +// +// Created by Ikmal Azman on 05/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// +@testable import FoodbLog +import Foundation +import XCTest + +final class MockURLSession : URLSessionContract { + var dataTaskCallCount = 0 + var capturedRequest : [URLRequest] = [] + var capturedCompletionHandler : [(Data?, URLResponse?, Error?)->Void] = [] + + func dataTask(with request: URLRequest, completionHandler: @escaping @Sendable (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask { + dataTaskCallCount = dataTaskCallCount + 1 + capturedRequest.append(request) + capturedCompletionHandler.append(completionHandler) + + return DummyURLSessionDataTask() + } + + /// Method to make sure the request made from client side similar with request send to handler + func verifyDataTask(with request : URLRequest, file : StaticString = #file, line : UInt = #line) { + XCTAssertEqual(request, capturedRequest.first, "networkRequest", file: file, line: line) + } +} + +final class DummyURLSessionDataTask : URLSessionDataTask { + override func resume() {} +} From 620b025f2cbf31d387266fdba7dcfb915ce39f21 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Sun, 9 Apr 2023 10:17:12 +0100 Subject: [PATCH 17/29] create http client for network request --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 16 +++--- FoodbLog/FoodbLog/FoodLogService.swift | 44 --------------- FoodbLog/FoodbLog/HttpClient.swift | 56 +++++++++++++++++++ .../FoodbLogTests/FoodLogServiceTests.swift | 16 +++--- 4 files changed, 72 insertions(+), 60 deletions(-) delete mode 100644 FoodbLog/FoodbLog/FoodLogService.swift create mode 100644 FoodbLog/FoodbLog/HttpClient.swift diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index 6c2314e..c2765fc 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -25,13 +25,13 @@ 50F7C67E1BCB08BA00A969D1 /* FoodFeedCustomCVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F7C67D1BCB08BA00A969D1 /* FoodFeedCustomCVC.m */; }; 5D2957241BD3F8FE0029FD65 /* FoodFeedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D2957231BD3F8FE0029FD65 /* FoodFeedObject.m */; }; 5DAB1BE71BCDD7480088D08D /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DAB1BE61BCDD7480088D08D /* CoreLocation.framework */; }; + 7F6967B229E2B5E600A8A71B /* HttpClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F6967B129E2B5E600A8A71B /* HttpClient.swift */; }; 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */; }; 7F8CC93E29DDB3200050C281 /* CreateLogVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */; }; - 7F8CC94129DDF1730050C281 /* FoodLogService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC94029DDF1730050C281 /* FoodLogService.swift */; }; 7F8CC96329DDF2210050C281 /* FoodbLogTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC96229DDF2210050C281 /* FoodbLogTests.swift */; }; - 7F8CC96A29DDF23E0050C281 /* FoodLogServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC96929DDF23E0050C281 /* FoodLogServiceTests.swift */; }; 7F8CC96C29DDF2D10050C281 /* URLSessionContract.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC96B29DDF2D10050C281 /* URLSessionContract.swift */; }; 7F8CC96E29DDF3630050C281 /* MockURLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC96D29DDF3630050C281 /* MockURLSession.swift */; }; + 7F8CC97029DDF91E0050C281 /* FoodLogServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC96F29DDF91E0050C281 /* FoodLogServiceTests.swift */; }; 7FB90DE929DD5E6600A50433 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */; }; 7FB90DEB29DD630F00A50433 /* ParseDBAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */; }; 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEC29DD635600A50433 /* ChemeleonAppDelegate.swift */; }; @@ -94,14 +94,14 @@ 5D2957231BD3F8FE0029FD65 /* FoodFeedObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodFeedObject.m; sourceTree = ""; }; 5DAB1BE61BCDD7480088D08D /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; 69A81EF376647BA708026D38 /* Pods-FoodbLog.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FoodbLog.debug.xcconfig"; path = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog.debug.xcconfig"; sourceTree = ""; }; + 7F6967B129E2B5E600A8A71B /* HttpClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HttpClient.swift; sourceTree = ""; }; 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogDetailVC.swift; sourceTree = ""; }; 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateLogVC.swift; sourceTree = ""; }; - 7F8CC94029DDF1730050C281 /* FoodLogService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogService.swift; sourceTree = ""; }; 7F8CC96029DDF2210050C281 /* FoodbLogTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FoodbLogTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 7F8CC96229DDF2210050C281 /* FoodbLogTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodbLogTests.swift; sourceTree = ""; }; - 7F8CC96929DDF23E0050C281 /* FoodLogServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogServiceTests.swift; sourceTree = ""; }; 7F8CC96B29DDF2D10050C281 /* URLSessionContract.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLSessionContract.swift; sourceTree = ""; }; 7F8CC96D29DDF3630050C281 /* MockURLSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockURLSession.swift; sourceTree = ""; }; + 7F8CC96F29DDF91E0050C281 /* FoodLogServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogServiceTests.swift; sourceTree = ""; }; 7FB90DE729DD5E6500A50433 /* FoodbLog-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FoodbLog-Bridging-Header.h"; sourceTree = ""; }; 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseDBAppDelegate.swift; sourceTree = ""; }; @@ -332,8 +332,8 @@ 7F8CC93F29DDF15D0050C281 /* Service */ = { isa = PBXGroup; children = ( - 7F8CC94029DDF1730050C281 /* FoodLogService.swift */, 7F8CC96B29DDF2D10050C281 /* URLSessionContract.swift */, + 7F6967B129E2B5E600A8A71B /* HttpClient.swift */, ); name = Service; sourceTree = ""; @@ -342,8 +342,8 @@ isa = PBXGroup; children = ( 7F8CC96229DDF2210050C281 /* FoodbLogTests.swift */, - 7F8CC96929DDF23E0050C281 /* FoodLogServiceTests.swift */, 7F8CC96D29DDF3630050C281 /* MockURLSession.swift */, + 7F8CC96F29DDF91E0050C281 /* FoodLogServiceTests.swift */, ); path = FoodbLogTests; sourceTree = ""; @@ -567,13 +567,13 @@ 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */, 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */, 5D2957241BD3F8FE0029FD65 /* FoodFeedObject.m in Sources */, - 7F8CC94129DDF1730050C281 /* FoodLogService.swift in Sources */, 50967FD41BD6F6930029D6AB /* RecipeTableViewController.m in Sources */, 29F703A31BD08C5C009B7A82 /* FoodLog.m in Sources */, 29F703611BCB923F009B7A82 /* FoodbLogCustomCell.m in Sources */, 507F55891BD965B10059C2B3 /* RecipeTableViewCell.m in Sources */, 298471A31BD4097A006282CC /* FoodFeedDetailViewController.m in Sources */, 50D767B81BCC895900C82B8B /* FoodFeedViewController.m in Sources */, + 7F6967B229E2B5E600A8A71B /* HttpClient.swift in Sources */, 50F7C67E1BCB08BA00A969D1 /* FoodFeedCustomCVC.m in Sources */, 29E25D801BCAC9D50015A16F /* CreateLogViewController.m in Sources */, 7FB90DE929DD5E6600A50433 /* AppDelegate.swift in Sources */, @@ -593,8 +593,8 @@ buildActionMask = 2147483647; files = ( 7F8CC96E29DDF3630050C281 /* MockURLSession.swift in Sources */, - 7F8CC96A29DDF23E0050C281 /* FoodLogServiceTests.swift in Sources */, 7F8CC96329DDF2210050C281 /* FoodbLogTests.swift in Sources */, + 7F8CC97029DDF91E0050C281 /* FoodLogServiceTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/FoodbLog/FoodbLog/FoodLogService.swift b/FoodbLog/FoodbLog/FoodLogService.swift deleted file mode 100644 index 8f44789..0000000 --- a/FoodbLog/FoodbLog/FoodLogService.swift +++ /dev/null @@ -1,44 +0,0 @@ -// -// FoodLogService.swift -// FoodbLog -// -// Created by Ikmal Azman on 05/04/2023. -// Copyright © 2023 Ayuna Vogel. All rights reserved. -// - -import Foundation - -final class FoodLogService { - let session : URLSessionContract - - init(_ session : URLSessionContract = URLSession.shared) { - self.session = session - } - - private var decoder : JSONDecoder = { - let decoder = JSONDecoder() - decoder.keyDecodingStrategy = .convertFromSnakeCase - return decoder - }() - - func requestAPI(for url : URLRequest, _ type : Element.Type, _ completion : @escaping ((Result)->Void)) { - session.dataTask(with: url) { data, response, error in - - if let error = error { - print("Error requesting API : \(error.localizedDescription)") - completion(.failure(error)) - } - - guard let data = data else {return} - - do { - let element = try self.decoder.decode(Element.self, from: data) - completion(.success(element)) - } catch { - print("Error to decode data : \(error.localizedDescription)") - completion(.failure(error)) - } - } - .resume() - } -} diff --git a/FoodbLog/FoodbLog/HttpClient.swift b/FoodbLog/FoodbLog/HttpClient.swift new file mode 100644 index 0000000..e7af77d --- /dev/null +++ b/FoodbLog/FoodbLog/HttpClient.swift @@ -0,0 +1,56 @@ +// +// HttpClient.swift +// FoodbLog +// +// Created by Ikmal Azman on 09/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import Foundation + +final class HttpClient { + + private let session : URLSessionContract + + init(session: URLSessionContract = URLSession.shared) { + self.session = session + } + + func performRequest(_ request : URLRequest, + _ model : Element.Type, + _ completion : @escaping (Result)->Void) { + + downloadData(withURLRequest: request) { result in + switch result { + case .success(let data): + do { + let object = try self.processData(data, model) + completion(.success(object)) + } catch { + completion(.failure(error)) + } + + case .failure(let failure): + completion(.failure(failure)) + } + } + } + + func downloadData(withURLRequest request : URLRequest, _ completion : @escaping (Result)-> Void) { + let task = session.dataTask(with: request) { data, _, error in + if let error = error { + completion(.failure(error)) + } + + guard let data = data else {return} + completion(.success(data)) + } + task.resume() + } + + func processData(_ data : Data, _ model : Element.Type) throws -> Element { + let decoder = JSONDecoder() + let content = try decoder.decode(model, from: data) + return content + } +} diff --git a/FoodbLog/FoodbLogTests/FoodLogServiceTests.swift b/FoodbLog/FoodbLogTests/FoodLogServiceTests.swift index 632f130..67331ec 100644 --- a/FoodbLog/FoodbLogTests/FoodLogServiceTests.swift +++ b/FoodbLog/FoodbLogTests/FoodLogServiceTests.swift @@ -1,9 +1,9 @@ -// -// FoodLogServiceTests.swift -// FoodbLogTests -// -// Created by Ikmal Azman on 05/04/2023. -// Copyright © 2023 Ayuna Vogel. All rights reserved. -// +@testable import FoodbLog +import XCTest -import Foundation +final class FoodLogServiceTests: XCTestCase { + + func test_zero() throws { + XCTFail("Tests not yet implemented in FoodLogServiceTests") + } +} From f9facb6c94dc097228786feba91d0fb8ebea5ee7 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Sun, 9 Apr 2023 10:23:17 +0100 Subject: [PATCH 18/29] prepare mock for network request and json decoding test --- FoodbLog/FoodbLogTests/MockURLSession.swift | 23 +++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/FoodbLog/FoodbLogTests/MockURLSession.swift b/FoodbLog/FoodbLogTests/MockURLSession.swift index a805357..0fdf6c4 100644 --- a/FoodbLog/FoodbLogTests/MockURLSession.swift +++ b/FoodbLog/FoodbLogTests/MockURLSession.swift @@ -10,16 +10,21 @@ import Foundation import XCTest final class MockURLSession : URLSessionContract { + var dataTaskCallCount = 0 var capturedRequest : [URLRequest] = [] - var capturedCompletionHandler : [(Data?, URLResponse?, Error?)->Void] = [] + var data : Data? + var error : Error? func dataTask(with request: URLRequest, completionHandler: @escaping @Sendable (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask { dataTaskCallCount = dataTaskCallCount + 1 capturedRequest.append(request) - capturedCompletionHandler.append(completionHandler) + let data = self.data + let error = self.error - return DummyURLSessionDataTask() + return DummyURLSessionDataTask { + completionHandler(data, nil, error) + } } /// Method to make sure the request made from client side similar with request send to handler @@ -29,5 +34,15 @@ final class MockURLSession : URLSessionContract { } final class DummyURLSessionDataTask : URLSessionDataTask { - override func resume() {} + private let closure : ()-> Void + + init(_ closure : @escaping ()-> Void) { + self.closure = closure + } + + override func resume() { + closure() + } } + + From 5ba48692eba735a2745f91206f0577fcb931e1a3 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Sun, 9 Apr 2023 21:38:38 +0100 Subject: [PATCH 19/29] create FoodbLog service for foursquare api and endpoint --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 12 +++++++ FoodbLog/FoodbLog/APIService.swift | 28 ++++++++++++++++ FoodbLog/FoodbLog/FoodbLogService.swift | 36 +++++++++++++++++++++ 3 files changed, 76 insertions(+) create mode 100644 FoodbLog/FoodbLog/APIService.swift create mode 100644 FoodbLog/FoodbLog/FoodbLogService.swift diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index c2765fc..e6d362c 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -25,6 +25,7 @@ 50F7C67E1BCB08BA00A969D1 /* FoodFeedCustomCVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F7C67D1BCB08BA00A969D1 /* FoodFeedCustomCVC.m */; }; 5D2957241BD3F8FE0029FD65 /* FoodFeedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D2957231BD3F8FE0029FD65 /* FoodFeedObject.m */; }; 5DAB1BE71BCDD7480088D08D /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DAB1BE61BCDD7480088D08D /* CoreLocation.framework */; }; + 7F003D3529E358EA00439CF8 /* APIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F003D3429E358EA00439CF8 /* APIService.swift */; }; 7F6967B229E2B5E600A8A71B /* HttpClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F6967B129E2B5E600A8A71B /* HttpClient.swift */; }; 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */; }; 7F8CC93E29DDB3200050C281 /* CreateLogVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */; }; @@ -37,6 +38,8 @@ 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEC29DD635600A50433 /* ChemeleonAppDelegate.swift */; }; 7FB90DF129DD668400A50433 /* RootTabBarVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DF029DD668400A50433 /* RootTabBarVC.swift */; }; 7FB90DF329DD756000A50433 /* FoodLogCollectionViewVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DF229DD756000A50433 /* FoodLogCollectionViewVC.swift */; }; + 7FDC775F29E33261002E6677 /* FoodbLogService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FDC775E29E33261002E6677 /* FoodbLogService.swift */; }; + 7FDC776129E335FC002E6677 /* FoodbLogInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FDC776029E335FC002E6677 /* FoodbLogInteractor.swift */; }; 98DA133F1216497FA2A9B319 /* (null) in Frameworks */ = {isa = PBXBuildFile; settings = {ATTRIBUTES = (Weak, ); }; }; C3B336E8EF6CFBF4BDE8E605 /* Pods_FoodbLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFC92113A3941C665760DE31 /* Pods_FoodbLog.framework */; }; /* End PBXBuildFile section */ @@ -94,6 +97,7 @@ 5D2957231BD3F8FE0029FD65 /* FoodFeedObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodFeedObject.m; sourceTree = ""; }; 5DAB1BE61BCDD7480088D08D /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; 69A81EF376647BA708026D38 /* Pods-FoodbLog.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FoodbLog.debug.xcconfig"; path = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog.debug.xcconfig"; sourceTree = ""; }; + 7F003D3429E358EA00439CF8 /* APIService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIService.swift; sourceTree = ""; }; 7F6967B129E2B5E600A8A71B /* HttpClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HttpClient.swift; sourceTree = ""; }; 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogDetailVC.swift; sourceTree = ""; }; 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateLogVC.swift; sourceTree = ""; }; @@ -108,6 +112,8 @@ 7FB90DEC29DD635600A50433 /* ChemeleonAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChemeleonAppDelegate.swift; sourceTree = ""; }; 7FB90DF029DD668400A50433 /* RootTabBarVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootTabBarVC.swift; sourceTree = ""; }; 7FB90DF229DD756000A50433 /* FoodLogCollectionViewVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogCollectionViewVC.swift; sourceTree = ""; }; + 7FDC775E29E33261002E6677 /* FoodbLogService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodbLogService.swift; sourceTree = ""; }; + 7FDC776029E335FC002E6677 /* FoodbLogInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodbLogInteractor.swift; sourceTree = ""; }; AFC92113A3941C665760DE31 /* Pods_FoodbLog.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FoodbLog.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FCF5CA5CCBE07821CE7C4EE2 /* Pods-FoodbLog.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FoodbLog.release.xcconfig"; path = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -334,6 +340,9 @@ children = ( 7F8CC96B29DDF2D10050C281 /* URLSessionContract.swift */, 7F6967B129E2B5E600A8A71B /* HttpClient.swift */, + 7FDC775E29E33261002E6677 /* FoodbLogService.swift */, + 7FDC776029E335FC002E6677 /* FoodbLogInteractor.swift */, + 7F003D3429E358EA00439CF8 /* APIService.swift */, ); name = Service; sourceTree = ""; @@ -573,9 +582,12 @@ 507F55891BD965B10059C2B3 /* RecipeTableViewCell.m in Sources */, 298471A31BD4097A006282CC /* FoodFeedDetailViewController.m in Sources */, 50D767B81BCC895900C82B8B /* FoodFeedViewController.m in Sources */, + 7FDC775F29E33261002E6677 /* FoodbLogService.swift in Sources */, 7F6967B229E2B5E600A8A71B /* HttpClient.swift in Sources */, + 7FDC776129E335FC002E6677 /* FoodbLogInteractor.swift in Sources */, 50F7C67E1BCB08BA00A969D1 /* FoodFeedCustomCVC.m in Sources */, 29E25D801BCAC9D50015A16F /* CreateLogViewController.m in Sources */, + 7F003D3529E358EA00439CF8 /* APIService.swift in Sources */, 7FB90DE929DD5E6600A50433 /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/FoodbLog/FoodbLog/APIService.swift b/FoodbLog/FoodbLog/APIService.swift new file mode 100644 index 0000000..bec2bcc --- /dev/null +++ b/FoodbLog/FoodbLog/APIService.swift @@ -0,0 +1,28 @@ +// +// APIService.swift +// FoodbLog +// +// Created by Ikmal Azman on 09/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import Foundation + +protocol APIService { + var baseURL : APIProvider {get} + var endpoint : String {get} + func createEndpoint(_ endpoint : String)-> String +} + +enum APIProvider { + case foursquare +} + +extension APIProvider { + var url : String { + switch self { + case .foursquare: + return "https://api.foursquare.com/v3/" + } + } +} diff --git a/FoodbLog/FoodbLog/FoodbLogService.swift b/FoodbLog/FoodbLog/FoodbLogService.swift new file mode 100644 index 0000000..00687e4 --- /dev/null +++ b/FoodbLog/FoodbLog/FoodbLogService.swift @@ -0,0 +1,36 @@ +// +// FoodbLogService.swift +// FoodbLog +// +// Created by Ikmal Azman on 09/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import Foundation + +enum FoodbLogService { + case searchRestaurant(query:String, latitute: String, longitude: String) +} + +extension FoodbLogService : APIService { + var baseURL : APIProvider { + switch self { + case .searchRestaurant: + return .foursquare + } + } + + var endpoint : String { + switch self { + case .searchRestaurant(let query, let latitute, let longitude): + return createEndpoint("search?query=\(query)&ll=\(latitute)%2C\(longitude)&radius=30000") + } + } + + func createEndpoint(_ endpoint : String)->String { + switch self { + case .searchRestaurant: + return "\(baseURL.url)places/\(endpoint)" + } + } +} From 8003af9f281037449055170ea1bd7f9510bffdf3 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Sun, 9 Apr 2023 22:06:32 +0100 Subject: [PATCH 20/29] complete refactor api call for restaurant search --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 16 +++ FoodbLog/FoodbLog/CreateLogVC.swift | 137 ++++---------------- FoodbLog/FoodbLog/FoodbLogInteractor.swift | 44 +++++++ FoodbLog/FoodbLog/FoodbLogService.swift | 2 +- FoodbLog/FoodbLog/Restaurant.swift | 26 ++++ FoodbLog/FoodbLog/SearchRestaurant.json | 45 +++++++ 6 files changed, 154 insertions(+), 116 deletions(-) create mode 100644 FoodbLog/FoodbLog/FoodbLogInteractor.swift create mode 100644 FoodbLog/FoodbLog/Restaurant.swift create mode 100644 FoodbLog/FoodbLog/SearchRestaurant.json diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index e6d362c..d476f04 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -26,6 +26,8 @@ 5D2957241BD3F8FE0029FD65 /* FoodFeedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D2957231BD3F8FE0029FD65 /* FoodFeedObject.m */; }; 5DAB1BE71BCDD7480088D08D /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DAB1BE61BCDD7480088D08D /* CoreLocation.framework */; }; 7F003D3529E358EA00439CF8 /* APIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F003D3429E358EA00439CF8 /* APIService.swift */; }; + 7F003D3A29E35E0E00439CF8 /* SearchRestaurant.json in Resources */ = {isa = PBXBuildFile; fileRef = 7F003D3929E35E0E00439CF8 /* SearchRestaurant.json */; }; + 7F003D3C29E35FA300439CF8 /* Restaurant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F003D3B29E35FA300439CF8 /* Restaurant.swift */; }; 7F6967B229E2B5E600A8A71B /* HttpClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F6967B129E2B5E600A8A71B /* HttpClient.swift */; }; 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */; }; 7F8CC93E29DDB3200050C281 /* CreateLogVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */; }; @@ -98,6 +100,8 @@ 5DAB1BE61BCDD7480088D08D /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; 69A81EF376647BA708026D38 /* Pods-FoodbLog.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FoodbLog.debug.xcconfig"; path = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog.debug.xcconfig"; sourceTree = ""; }; 7F003D3429E358EA00439CF8 /* APIService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIService.swift; sourceTree = ""; }; + 7F003D3929E35E0E00439CF8 /* SearchRestaurant.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = SearchRestaurant.json; sourceTree = ""; }; + 7F003D3B29E35FA300439CF8 /* Restaurant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Restaurant.swift; sourceTree = ""; }; 7F6967B129E2B5E600A8A71B /* HttpClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HttpClient.swift; sourceTree = ""; }; 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogDetailVC.swift; sourceTree = ""; }; 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateLogVC.swift; sourceTree = ""; }; @@ -162,6 +166,7 @@ 29F703A21BD08C5C009B7A82 /* FoodLog.m */, 5D2957221BD3F8FE0029FD65 /* FoodFeedObject.h */, 5D2957231BD3F8FE0029FD65 /* FoodFeedObject.m */, + 7F003D3B29E35FA300439CF8 /* Restaurant.swift */, ); name = Model; sourceTree = ""; @@ -291,6 +296,7 @@ 29E25D471BCAB8480015A16F /* FoodbLog */ = { isa = PBXGroup; children = ( + 7F003D3629E35DC200439CF8 /* Stubs */, 7F8CC93F29DDF15D0050C281 /* Service */, 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */, 7FB90DE729DD5E6500A50433 /* FoodbLog-Bridging-Header.h */, @@ -335,6 +341,14 @@ path = Pods; sourceTree = ""; }; + 7F003D3629E35DC200439CF8 /* Stubs */ = { + isa = PBXGroup; + children = ( + 7F003D3929E35E0E00439CF8 /* SearchRestaurant.json */, + ); + name = Stubs; + sourceTree = ""; + }; 7F8CC93F29DDF15D0050C281 /* Service */ = { isa = PBXGroup; children = ( @@ -479,6 +493,7 @@ buildActionMask = 2147483647; files = ( 50967FC71BD5C8F40029D6AB /* SignPainter-HouseScript.ttf in Resources */, + 7F003D3A29E35E0E00439CF8 /* SearchRestaurant.json in Resources */, 29E25D551BCAB8480015A16F /* Assets.xcassets in Resources */, 50967FD11BD5E36F0029D6AB /* Launch Screen.storyboard in Resources */, 29E25D531BCAB8480015A16F /* Main.storyboard in Resources */, @@ -575,6 +590,7 @@ 50A3C2C41BCAE4AD0077F79B /* InstagramImagePicker.m in Sources */, 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */, 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */, + 7F003D3C29E35FA300439CF8 /* Restaurant.swift in Sources */, 5D2957241BD3F8FE0029FD65 /* FoodFeedObject.m in Sources */, 50967FD41BD6F6930029D6AB /* RecipeTableViewController.m in Sources */, 29F703A31BD08C5C009B7A82 /* FoodLog.m in Sources */, diff --git a/FoodbLog/FoodbLog/CreateLogVC.swift b/FoodbLog/FoodbLog/CreateLogVC.swift index 22925f8..8b16655 100644 --- a/FoodbLog/FoodbLog/CreateLogVC.swift +++ b/FoodbLog/FoodbLog/CreateLogVC.swift @@ -25,9 +25,9 @@ final class CreateLogVC: UIViewController { var lastChosenMediaType : String? var shouldPresentPhotoCaptureController : Bool = false var locationManager : CLLocationManager = CLLocationManager() - - var userLocation : CLLocation? + var foodbLogInteractor = FoodbLogInteractorImpl() + var userLocation : CLLocation? var fileUploadBackgroundTaskID : UIBackgroundTaskIdentifier = UIBackgroundTaskIdentifier(rawValue: 1) var photoPostBackgroundTaskID : UIBackgroundTaskIdentifier = UIBackgroundTaskIdentifier(rawValue: 2) @@ -204,56 +204,34 @@ extension CreateLogVC { // MARK: Fousquare API Request method func requestRestaurantName(_ name : String) { let query = name - let latitude : Double = userLocation?.coordinate.latitude ?? 0.0 - let longitute : Double = userLocation?.coordinate.longitude ?? 0.0 - - let urlString = "https://api.foursquare.com/v2/venues/search?client_id=VENOVOCEM4E1QVRTGNOCNO40V32YHQ4FMRD0M3K4WBMYQWPS&client_secret=QVM22AMEWXEZ54VBHMGOHYE2JNMMLTQYKOKOSAK0JTGDQBLT&v=20130815&ll=\(latitude),\(longitute)&query=\(query)&radius=2000" - - guard let url = URL(string: urlString) else {return} + let latitude = "\(userLocation?.coordinate.latitude ?? 0.0)" + let longitute = "\( userLocation?.coordinate.longitude ?? 0.0)" - let header = [ - "accept": "application/json", - "Authorization": "fsq330X+8o6/JsdNbbyzjYaEqXORJTZvanpmRWgb4MVsW8E=" - ] - - var urlRequest = URLRequest(url: url) - urlRequest.httpMethod = "GET" - urlRequest.allHTTPHeaderFields = header - - let task = URLSession.shared.dataTask(with: urlRequest) { data, _, error in - if let error = error { - print("Error to search restaurant name : \(error.localizedDescription)") - print("You are at \(latitude) & \(longitute)") - } + foodbLogInteractor.requestRestaurantName(query, latitude, longitute) { result in - guard let data = data else {return} - - let decoder = JSONDecoder() - decoder.keyDecodingStrategy = .convertFromSnakeCase - - do { - let restaurants = try decoder.decode(RestaurantResponse.self, from: data) - self.displaySearchResults(restaurants.results) - - } catch { - print("Error decode data : \(error.localizedDescription)") + switch result { + case .success(let data): + self.displaySearchResults(data.results) + case .failure(let error): + print("Failed fetch searched restaurant : \(error.localizedDescription)") } } - - task.resume() } func displaySearchResults(_ results : [Restaurant]) { - let restaurantPickerTVC = storyboard?.instantiateViewController(withIdentifier: "RestaurantPickerTableViewController") as! RestaurantPickerTableViewController - #warning("replace with restaurant object once this refactoringt complete") - restaurantPickerTVC.restaurantData = [[:]] - restaurantPickerTVC.delegate = self - - navigationController?.pushViewController(restaurantPickerTVC, animated: true) + DispatchQueue.main.async { + let restaurantPickerTVC = self.storyboard?.instantiateViewController(withIdentifier: "RestaurantPickerTableViewController") as! RestaurantPickerTableViewController + #warning("replace with restaurant object once this refactoringt complete") + restaurantPickerTVC.restaurantData = [[:]] + restaurantPickerTVC.delegate = self + + self.navigationController?.pushViewController(restaurantPickerTVC, animated: true) + } + } // MARK: Recipes API Request method - #warning("need to replace with other recipe api due the current API provider was shut down") +#warning("need to replace with other recipe api due the current API provider was shut down") func recipeRequestForString(_ recipe : String) { let formattedInputString = recipe.replacingOccurrences(of: " ", with: "%20") @@ -313,7 +291,7 @@ extension CreateLogVC { let decoder = JSONDecoder() decoder.keyDecodingStrategy = .convertFromSnakeCase - + do { let recipes = try decoder.decode(TagResponse.self, from: data) self.displayTagResults(recipes.data) @@ -396,81 +374,10 @@ private extension CreateLogVC { @objc func saveButtonTapped(_ button : UIBarButtonItem) { saveDataToParse() - + } } -//import Foundation -// -//let headers = [ -// "accept": "application/json", -// "Authorization": "fsq330X+8o6/JsdNbbyzjYaEqXORJTZvanpmRWgb4MVsW8E=" -//] -// -//let request = NSMutableURLRequest(url: NSURL(string: "https://api.foursquare.com/v3/places/search?query=donut&ll=38.656555%2C-77.250441&radius=2000")! as URL, -// cachePolicy: .useProtocolCachePolicy, -// timeoutInterval: 10.0) -//request.httpMethod = "GET" -//request.allHTTPHeaderFields = headers -// -//let session = URLSession.shared -//let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in -// if (error != nil) { -// print(error as Any) -// } else { -// let httpResponse = response as? HTTPURLResponse -// print(httpResponse) -// } -//}) - -// dataTask.resume() - -//{ -// "results": [ -// { -// "fsq_id": "4b61ab65f964a520881c2ae3", -// "categories": [ -// { -// "id": 13001, -// "name": "Bagel Shop", -// "icon": { -// "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bagels_", -// "suffix": ".png" -// } -// } -// ], -// "link": "/v3/places/4b61ab65f964a520881c2ae3", -// "location": { -// "address": "13607 Richmond Hwy", -// "census_block": "511539006021000", -// "country": "US", -// "cross_street": "", -// "dma": "Washington, Dc-Hagrstwn", -// "formatted_address": "13607 Richmond Hwy, Woodbridge, VA 22191", -// "locality": "Woodbridge", -// "postcode": "22191", -// "region": "VA" -// }, -// "name": "Dunkin'", -// "related_places": {}, -// "timezone": "America/New_York" -// } -// ], -//} - -struct RestaurantResponse : Decodable { - let results : [Restaurant] -} - -struct Restaurant : Decodable { - let name : String? - let location : RestaurantLocation? -} - -struct RestaurantLocation : Decodable { - let formattedAddress : String -} - struct RecipeResponse : Decodable { let recipes : [Recipe] } diff --git a/FoodbLog/FoodbLog/FoodbLogInteractor.swift b/FoodbLog/FoodbLog/FoodbLogInteractor.swift new file mode 100644 index 0000000..585fcf0 --- /dev/null +++ b/FoodbLog/FoodbLog/FoodbLogInteractor.swift @@ -0,0 +1,44 @@ +// +// FoodbLogInteractor.swift +// FoodbLog +// +// Created by Ikmal Azman on 09/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import Foundation + +final class FoodbLogInteractorImpl { + + let client : HttpClient + + init(client: HttpClient = HttpClient()) { + self.client = client + } + + func requestRestaurantName(_ name : String, + _ latitute: String, + _ longitude:String , _ completion : @escaping (Result)->Void) { + print(FoodbLogService.searchRestaurant(query: name, latitute: latitute, longitude: longitude).endpoint) + guard let url = URL(string: FoodbLogService.searchRestaurant(query: name, latitute: latitute, longitude: longitude).endpoint) else { + return + } + + let headers = [ + "accept": "application/json", + "Authorization": "fsq330X+8o6/JsdNbbyzjYaEqXORJTZvanpmRWgb4MVsW8E=" + ] + + var request = URLRequest(url: url) + request.allHTTPHeaderFields = headers + client.performRequest(request, RestaurantResponse.self) { result in + switch result { + case .success(let data): + completion(.success(data)) + case .failure(let error): + print(error) + completion(.failure(error)) + } + } + } +} diff --git a/FoodbLog/FoodbLog/FoodbLogService.swift b/FoodbLog/FoodbLog/FoodbLogService.swift index 00687e4..26c89db 100644 --- a/FoodbLog/FoodbLog/FoodbLogService.swift +++ b/FoodbLog/FoodbLog/FoodbLogService.swift @@ -23,7 +23,7 @@ extension FoodbLogService : APIService { var endpoint : String { switch self { case .searchRestaurant(let query, let latitute, let longitude): - return createEndpoint("search?query=\(query)&ll=\(latitute)%2C\(longitude)&radius=30000") + return createEndpoint("search?v=\(query)&ll=\(latitute)%2C\(longitude)&radius=5000&categories=13000") } } diff --git a/FoodbLog/FoodbLog/Restaurant.swift b/FoodbLog/FoodbLog/Restaurant.swift new file mode 100644 index 0000000..dc7ca4b --- /dev/null +++ b/FoodbLog/FoodbLog/Restaurant.swift @@ -0,0 +1,26 @@ +// +// Restaurant.swift +// FoodbLog +// +// Created by Ikmal Azman on 09/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import Foundation + +struct RestaurantResponse : Decodable { + let results : [Restaurant] +} + +struct Restaurant : Decodable { + let name : String? + let location : RestaurantLocation? +} + +struct RestaurantLocation : Decodable { + let formattedAddress : String + + enum CodingKeys : String, CodingKey { + case formattedAddress = "formatted_address" + } +} diff --git a/FoodbLog/FoodbLog/SearchRestaurant.json b/FoodbLog/FoodbLog/SearchRestaurant.json new file mode 100644 index 0000000..2d58bbe --- /dev/null +++ b/FoodbLog/FoodbLog/SearchRestaurant.json @@ -0,0 +1,45 @@ +{ + "results":[ + { + "fsq_id":"50b91cf3e4b07e5a14f8432a", + "categories":[ + { + "id":13383, + "name":"Steakhouse", + "icon":{ + "prefix":"https://ss3.4sqi.net/img/categories_v2/food/steakhouse_", + "suffix":".png" + } + } + ], + "chains":[], + "distance":395, + "geocodes":{ + "main":{ + "latitude":51.512179, + "longitude":-0.138367 + }, + "roof":{ + "latitude":51.512179, + "longitude":-0.138367 + } + }, + "link":"/v3/places/50b91cf3e4b07e5a14f8432a", + "location":{ + "address":"17 Beak St", + "admin_region":"England", + "country":"GB", + "formatted_address":"17 Beak St, London, Greater London, W1F 9RW", + "locality":"London", + "post_town":"London", + "postcode":"W1F 9RW", + "region":"Greater London" + }, + "name":"Flat Iron", + "related_places":{ + + }, + "timezone":"Europe/London" + } + ] +} From 92ae7cd9c6fb628f587f7bdeefce1ff51102225e Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Mon, 10 Apr 2023 18:01:09 +0100 Subject: [PATCH 21/29] complete refactor api call for recipes search --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 8 ++ FoodbLog/FoodbLog/APIService.swift | 3 + FoodbLog/FoodbLog/CreateLogVC.swift | 56 +++--------- FoodbLog/FoodbLog/FoodbLogInteractor.swift | 22 +++++ FoodbLog/FoodbLog/FoodbLogService.swift | 7 ++ FoodbLog/FoodbLog/HttpClient.swift | 5 +- FoodbLog/FoodbLog/Recipe.swift | 24 ++++++ FoodbLog/FoodbLog/SearchRecipe.json | 94 +++++++++++++++++++++ 8 files changed, 176 insertions(+), 43 deletions(-) create mode 100644 FoodbLog/FoodbLog/Recipe.swift create mode 100644 FoodbLog/FoodbLog/SearchRecipe.json diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index d476f04..0bea78d 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -28,6 +28,8 @@ 7F003D3529E358EA00439CF8 /* APIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F003D3429E358EA00439CF8 /* APIService.swift */; }; 7F003D3A29E35E0E00439CF8 /* SearchRestaurant.json in Resources */ = {isa = PBXBuildFile; fileRef = 7F003D3929E35E0E00439CF8 /* SearchRestaurant.json */; }; 7F003D3C29E35FA300439CF8 /* Restaurant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F003D3B29E35FA300439CF8 /* Restaurant.swift */; }; + 7F1217C229E4757D007913F1 /* SearchRecipe.json in Resources */ = {isa = PBXBuildFile; fileRef = 7F1217C129E4757D007913F1 /* SearchRecipe.json */; }; + 7F1217C429E477E0007913F1 /* Recipe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1217C329E477E0007913F1 /* Recipe.swift */; }; 7F6967B229E2B5E600A8A71B /* HttpClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F6967B129E2B5E600A8A71B /* HttpClient.swift */; }; 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */; }; 7F8CC93E29DDB3200050C281 /* CreateLogVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */; }; @@ -102,6 +104,8 @@ 7F003D3429E358EA00439CF8 /* APIService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIService.swift; sourceTree = ""; }; 7F003D3929E35E0E00439CF8 /* SearchRestaurant.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = SearchRestaurant.json; sourceTree = ""; }; 7F003D3B29E35FA300439CF8 /* Restaurant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Restaurant.swift; sourceTree = ""; }; + 7F1217C129E4757D007913F1 /* SearchRecipe.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = SearchRecipe.json; sourceTree = ""; }; + 7F1217C329E477E0007913F1 /* Recipe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Recipe.swift; sourceTree = ""; }; 7F6967B129E2B5E600A8A71B /* HttpClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HttpClient.swift; sourceTree = ""; }; 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogDetailVC.swift; sourceTree = ""; }; 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateLogVC.swift; sourceTree = ""; }; @@ -167,6 +171,7 @@ 5D2957221BD3F8FE0029FD65 /* FoodFeedObject.h */, 5D2957231BD3F8FE0029FD65 /* FoodFeedObject.m */, 7F003D3B29E35FA300439CF8 /* Restaurant.swift */, + 7F1217C329E477E0007913F1 /* Recipe.swift */, ); name = Model; sourceTree = ""; @@ -345,6 +350,7 @@ isa = PBXGroup; children = ( 7F003D3929E35E0E00439CF8 /* SearchRestaurant.json */, + 7F1217C129E4757D007913F1 /* SearchRecipe.json */, ); name = Stubs; sourceTree = ""; @@ -493,6 +499,7 @@ buildActionMask = 2147483647; files = ( 50967FC71BD5C8F40029D6AB /* SignPainter-HouseScript.ttf in Resources */, + 7F1217C229E4757D007913F1 /* SearchRecipe.json in Resources */, 7F003D3A29E35E0E00439CF8 /* SearchRestaurant.json in Resources */, 29E25D551BCAB8480015A16F /* Assets.xcassets in Resources */, 50967FD11BD5E36F0029D6AB /* Launch Screen.storyboard in Resources */, @@ -603,6 +610,7 @@ 7FDC776129E335FC002E6677 /* FoodbLogInteractor.swift in Sources */, 50F7C67E1BCB08BA00A969D1 /* FoodFeedCustomCVC.m in Sources */, 29E25D801BCAC9D50015A16F /* CreateLogViewController.m in Sources */, + 7F1217C429E477E0007913F1 /* Recipe.swift in Sources */, 7F003D3529E358EA00439CF8 /* APIService.swift in Sources */, 7FB90DE929DD5E6600A50433 /* AppDelegate.swift in Sources */, ); diff --git a/FoodbLog/FoodbLog/APIService.swift b/FoodbLog/FoodbLog/APIService.swift index bec2bcc..35778a3 100644 --- a/FoodbLog/FoodbLog/APIService.swift +++ b/FoodbLog/FoodbLog/APIService.swift @@ -16,6 +16,7 @@ protocol APIService { enum APIProvider { case foursquare + case fork2forkCA } extension APIProvider { @@ -23,6 +24,8 @@ extension APIProvider { switch self { case .foursquare: return "https://api.foursquare.com/v3/" + case .fork2forkCA : + return "https://food2fork.ca/api/recipe/" } } } diff --git a/FoodbLog/FoodbLog/CreateLogVC.swift b/FoodbLog/FoodbLog/CreateLogVC.swift index 8b16655..e372f59 100644 --- a/FoodbLog/FoodbLog/CreateLogVC.swift +++ b/FoodbLog/FoodbLog/CreateLogVC.swift @@ -231,45 +231,28 @@ extension CreateLogVC { } // MARK: Recipes API Request method -#warning("need to replace with other recipe api due the current API provider was shut down") func recipeRequestForString(_ recipe : String) { let formattedInputString = recipe.replacingOccurrences(of: " ", with: "%20") - let urlString = "https://forkify-api.herokuapp.com/api/get?rId=%\(formattedInputString)" - - guard let url = URL(string: urlString) else {return} - - let urlRequest = URLRequest(url: url) - - let task = URLSession.shared.dataTask(with: urlRequest) { data, _, error in - if let error = error { - print("Error to request recipe for \(recipe) : \(error.localizedDescription)") - } - - guard let data = data else {return} - - let decoder = JSONDecoder() - decoder.keyDecodingStrategy = .convertFromSnakeCase - - do { - let recipes = try decoder.decode(RecipeResponse.self, from: data) - self.displayRecipeResults(recipes.recipes) - - } catch { - print("Error decode data : \(error.localizedDescription)") + foodbLogInteractor.requestRecipes(formattedInputString) { result in + switch result { + case .success(let data): + self.displayRecipeResults(data.results) + case .failure(let failure): + print("Failure to fetch recipes : \(failure.localizedDescription)") } } - - task.resume() } func displayRecipeResults(_ recipes : [Recipe]) { - let recipeTVC = storyboard?.instantiateViewController(withIdentifier: "RecipeTableViewController") as! RecipeTableViewController -#warning("replace with recipe object once this refactoringt complete") - recipeTVC.recipeResultsArray = [] - recipeTVC.delegate = self - - self.navigationController?.pushViewController(recipeTVC, animated: true) + DispatchQueue.main.async { + let recipeTVC = self.storyboard?.instantiateViewController(withIdentifier: "RecipeTableViewController") as! RecipeTableViewController + #warning("replace with recipe object once this refactoringt complete") + recipeTVC.recipeResultsArray = [] + recipeTVC.delegate = self + + self.navigationController?.pushViewController(recipeTVC, animated: true) + } } // MARK: Instagram Image API Request method @@ -378,17 +361,6 @@ private extension CreateLogVC { } } -struct RecipeResponse : Decodable { - let recipes : [Recipe] -} - -struct Recipe : Decodable { - let imageURL : String - let recipeID : String - let title : String -} - - struct TagResponse : Decodable { let data : [Tag] } diff --git a/FoodbLog/FoodbLog/FoodbLogInteractor.swift b/FoodbLog/FoodbLog/FoodbLogInteractor.swift index 585fcf0..83d4f98 100644 --- a/FoodbLog/FoodbLog/FoodbLogInteractor.swift +++ b/FoodbLog/FoodbLog/FoodbLogInteractor.swift @@ -41,4 +41,26 @@ final class FoodbLogInteractorImpl { } } } + + func requestRecipes(_ name : String, _ completion : @escaping (Result)->Void) { + guard let url = URL(string: FoodbLogService.searchRecipes(query: name).endpoint) else { + return + } + + let headers = [ + "Authorization": "Token 9c8b06d329136da358c2d00e76946b0111ce2c48" + ] + + var request = URLRequest(url: url) + request.allHTTPHeaderFields = headers + client.performRequest(request, RecipeResponse.self) { result in + switch result { + case .success(let data): + completion(.success(data)) + case .failure(let error): + print(error) + completion(.failure(error)) + } + } + } } diff --git a/FoodbLog/FoodbLog/FoodbLogService.swift b/FoodbLog/FoodbLog/FoodbLogService.swift index 26c89db..b807957 100644 --- a/FoodbLog/FoodbLog/FoodbLogService.swift +++ b/FoodbLog/FoodbLog/FoodbLogService.swift @@ -10,6 +10,7 @@ import Foundation enum FoodbLogService { case searchRestaurant(query:String, latitute: String, longitude: String) + case searchRecipes(query :String) } extension FoodbLogService : APIService { @@ -17,11 +18,15 @@ extension FoodbLogService : APIService { switch self { case .searchRestaurant: return .foursquare + case .searchRecipes: + return .fork2forkCA } } var endpoint : String { switch self { + case .searchRecipes(query: let query): + return createEndpoint("?query=\(query)") case .searchRestaurant(let query, let latitute, let longitude): return createEndpoint("search?v=\(query)&ll=\(latitute)%2C\(longitude)&radius=5000&categories=13000") } @@ -31,6 +36,8 @@ extension FoodbLogService : APIService { switch self { case .searchRestaurant: return "\(baseURL.url)places/\(endpoint)" + case .searchRecipes: + return "\(baseURL.url)search/\(endpoint)" } } } diff --git a/FoodbLog/FoodbLog/HttpClient.swift b/FoodbLog/FoodbLog/HttpClient.swift index e7af77d..7d6ae0e 100644 --- a/FoodbLog/FoodbLog/HttpClient.swift +++ b/FoodbLog/FoodbLog/HttpClient.swift @@ -42,7 +42,10 @@ final class HttpClient { completion(.failure(error)) } - guard let data = data else {return} + guard let data = data else { + completion(.failure(NSError(domain: "Invalid Data", code: 1))) + return + } completion(.success(data)) } task.resume() diff --git a/FoodbLog/FoodbLog/Recipe.swift b/FoodbLog/FoodbLog/Recipe.swift new file mode 100644 index 0000000..aca4df8 --- /dev/null +++ b/FoodbLog/FoodbLog/Recipe.swift @@ -0,0 +1,24 @@ +// +// Recipe.swift +// FoodbLog +// +// Created by Ikmal Azman on 10/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import Foundation + +struct RecipeResponse : Decodable { + let results : [Recipe] +} + +struct Recipe : Decodable { + let imageURL : String + let title : String + let ingredients : [String] + + enum CodingKeys : String, CodingKey { + case title, ingredients + case imageURL = "featured_image" + } +} diff --git a/FoodbLog/FoodbLog/SearchRecipe.json b/FoodbLog/FoodbLog/SearchRecipe.json new file mode 100644 index 0000000..f9aef8d --- /dev/null +++ b/FoodbLog/FoodbLog/SearchRecipe.json @@ -0,0 +1,94 @@ +{ + "count":3016, + "next":"https://food2fork.ca/api/recipe/search/?page=2&query=donut+", + "previous":null, + "results":[ + { + "pk":1, + "title":"Cauldron Cakes - Home - Pastry Affair", + "publisher":"blake", + "featured_image":"https://nyc3.digitaloceanspaces.com/food2fork/food2fork-static/featured_images/1/featured_image.png", + "rating":22, + "source_url":"http://www.thepastryaffair.com/blog/2011/7/12/cauldron-cakes.html", + "description":"N/A", + "cooking_instructions":null, + "ingredients":[ + "12", + "cupcakes", + "devil's food", + "Chocolate Glaze", + "Edible gold glitter", + "4 tablespoons butter", + "1 recipe for Chocolate Glaze (below)", + "Approximately 1/2 cup chocolate chips", + "1 recipe for Marshmallow Filling (below)", + "6 ounces (1 cup) semi-sweet chocolate chips" + ], + "date_added":"November 11 2020", + "date_updated":"November 11 2020", + "long_date_added":1606348709, + "long_date_updated":1606348709 + }, + { + "pk":2, + "title":"Banana Cream Pie Recipe", + "publisher":"blake", + "featured_image":"https://nyc3.digitaloceanspaces.com/food2fork/food2fork-static/featured_images/2/featured_image.png", + "rating":34, + "source_url":"http://www.aspicyperspective.com/2013/03/banana-cream-pie-recipe.html", + "description":"N/A", + "cooking_instructions":null, + "ingredients":[ + "3 Tb. sugar", + "1-2 Tb. water", + "1/4 cup sugar", + "Pinch of salt", + "4-5 ripe bananas", + "1/2 tsp. cinnamon", + "6 Tb. melted butter", + "For the Pie Filling", + "1 tsp. vanilla extract", + "1/2 cup toasted coconut", + "1 cup cold California milk", + "For the Graham Cracker Crust", + "8 oz. California cream cheese", + "14 oz. sweetened condensed milk", + "14 whole graham crackers, about 7 oz.", + "2 cup heavy cream, whipped and divided", + "1 - 3.4 oz. box instant vanilla pudding" + ], + "date_added":"November 11 2020", + "date_updated":"November 11 2020", + "long_date_added":1606348709, + "long_date_updated":1606348709 + }, + { + "pk":3, + "title":"Easy Crockpot Pulled Pork", + "publisher":"mitch", + "featured_image":"https://nyc3.digitaloceanspaces.com/food2fork/food2fork-static/featured_images/3/featured_image.png", + "rating":13, + "source_url":"http://www.mybakingaddiction.com/easy-crockpot-pulled-pork-recipe/", + "description":"N/A", + "cooking_instructions":null, + "ingredients":[ + " cup cider vinegar", + "1 teaspoons sugar", + "1 tablespoon paprika", + " teaspoon garlic salt", + " teaspoons dry mustard", + "2 teaspoon kosher salt", + "2 tablespoons brown sugar", + "4 teaspoons Worcestershire sauce", + "1 large Vidalia onion, sliced thin", + " teaspoon freshly ground black pepper", + "1 teaspoons crushed red pepper flakes", + "1 (4-6 lb) boneless pork butt or shoulder" + ], + "date_added":"November 11 2020", + "date_updated":"November 11 2020", + "long_date_added":1606348709, + "long_date_updated":1606348709 + }, + ] +} From dfe773ebfe0e2ddd654f41cebfa0e4a9c5307dc5 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Fri, 14 Apr 2023 18:54:38 +0100 Subject: [PATCH 22/29] create secrets file --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 4 ++++ FoodbLog/FoodbLog/Secrets.swift | 11 +++++++++++ 2 files changed, 15 insertions(+) create mode 100644 FoodbLog/FoodbLog/Secrets.swift diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index 0bea78d..3fcbda2 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -30,6 +30,7 @@ 7F003D3C29E35FA300439CF8 /* Restaurant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F003D3B29E35FA300439CF8 /* Restaurant.swift */; }; 7F1217C229E4757D007913F1 /* SearchRecipe.json in Resources */ = {isa = PBXBuildFile; fileRef = 7F1217C129E4757D007913F1 /* SearchRecipe.json */; }; 7F1217C429E477E0007913F1 /* Recipe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1217C329E477E0007913F1 /* Recipe.swift */; }; + 7F5B461129E9CAAB00EC67FC /* Secrets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F5B461029E9CAAB00EC67FC /* Secrets.swift */; }; 7F6967B229E2B5E600A8A71B /* HttpClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F6967B129E2B5E600A8A71B /* HttpClient.swift */; }; 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */; }; 7F8CC93E29DDB3200050C281 /* CreateLogVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */; }; @@ -106,6 +107,7 @@ 7F003D3B29E35FA300439CF8 /* Restaurant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Restaurant.swift; sourceTree = ""; }; 7F1217C129E4757D007913F1 /* SearchRecipe.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = SearchRecipe.json; sourceTree = ""; }; 7F1217C329E477E0007913F1 /* Recipe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Recipe.swift; sourceTree = ""; }; + 7F5B461029E9CAAB00EC67FC /* Secrets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Secrets.swift; sourceTree = ""; }; 7F6967B129E2B5E600A8A71B /* HttpClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HttpClient.swift; sourceTree = ""; }; 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogDetailVC.swift; sourceTree = ""; }; 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateLogVC.swift; sourceTree = ""; }; @@ -324,6 +326,7 @@ 50967FC61BD5C8F40029D6AB /* SignPainter-HouseScript.ttf */, 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */, 7FB90DEC29DD635600A50433 /* ChemeleonAppDelegate.swift */, + 7F5B461029E9CAAB00EC67FC /* Secrets.swift */, ); name = "Supporting Files"; sourceTree = ""; @@ -606,6 +609,7 @@ 298471A31BD4097A006282CC /* FoodFeedDetailViewController.m in Sources */, 50D767B81BCC895900C82B8B /* FoodFeedViewController.m in Sources */, 7FDC775F29E33261002E6677 /* FoodbLogService.swift in Sources */, + 7F5B461129E9CAAB00EC67FC /* Secrets.swift in Sources */, 7F6967B229E2B5E600A8A71B /* HttpClient.swift in Sources */, 7FDC776129E335FC002E6677 /* FoodbLogInteractor.swift in Sources */, 50F7C67E1BCB08BA00A969D1 /* FoodFeedCustomCVC.m in Sources */, diff --git a/FoodbLog/FoodbLog/Secrets.swift b/FoodbLog/FoodbLog/Secrets.swift new file mode 100644 index 0000000..8916d8d --- /dev/null +++ b/FoodbLog/FoodbLog/Secrets.swift @@ -0,0 +1,11 @@ +// +// Secrets.swift +// FoodbLog +// +// Created by Ikmal Azman on 14/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import Foundation + +let API_KEY_UNSPLASH = "FAKE_API_KEY" From 14ebe63ed6487ab939cfce844703b5fcf0264f09 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Fri, 14 Apr 2023 19:12:58 +0100 Subject: [PATCH 23/29] complete refactor api call for food images search, replace IG Api with Unsplash --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 8 + FoodbLog/FoodbLog/APIService.swift | 3 + FoodbLog/FoodbLog/Base.lproj/Main.storyboard | 2 +- FoodbLog/FoodbLog/CreateLogVC.swift | 72 +- FoodbLog/FoodbLog/FoodbLogInteractor.swift | 17 + FoodbLog/FoodbLog/FoodbLogService.swift | 7 + FoodbLog/FoodbLog/SearchFoods.json | 673 +++++++++++++++++++ FoodbLog/FoodbLog/Tag.swift | 33 + 8 files changed, 763 insertions(+), 52 deletions(-) create mode 100644 FoodbLog/FoodbLog/SearchFoods.json create mode 100644 FoodbLog/FoodbLog/Tag.swift diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index 3fcbda2..3d7c998 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -31,6 +31,8 @@ 7F1217C229E4757D007913F1 /* SearchRecipe.json in Resources */ = {isa = PBXBuildFile; fileRef = 7F1217C129E4757D007913F1 /* SearchRecipe.json */; }; 7F1217C429E477E0007913F1 /* Recipe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1217C329E477E0007913F1 /* Recipe.swift */; }; 7F5B461129E9CAAB00EC67FC /* Secrets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F5B461029E9CAAB00EC67FC /* Secrets.swift */; }; + 7F5B461329E9CB1800EC67FC /* SearchFoods.json in Resources */ = {isa = PBXBuildFile; fileRef = 7F5B461229E9CB1800EC67FC /* SearchFoods.json */; }; + 7F5B461529E9CD4C00EC67FC /* Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F5B461429E9CD4C00EC67FC /* Tag.swift */; }; 7F6967B229E2B5E600A8A71B /* HttpClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F6967B129E2B5E600A8A71B /* HttpClient.swift */; }; 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */; }; 7F8CC93E29DDB3200050C281 /* CreateLogVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */; }; @@ -108,6 +110,8 @@ 7F1217C129E4757D007913F1 /* SearchRecipe.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = SearchRecipe.json; sourceTree = ""; }; 7F1217C329E477E0007913F1 /* Recipe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Recipe.swift; sourceTree = ""; }; 7F5B461029E9CAAB00EC67FC /* Secrets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Secrets.swift; sourceTree = ""; }; + 7F5B461229E9CB1800EC67FC /* SearchFoods.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = SearchFoods.json; sourceTree = ""; }; + 7F5B461429E9CD4C00EC67FC /* Tag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tag.swift; sourceTree = ""; }; 7F6967B129E2B5E600A8A71B /* HttpClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HttpClient.swift; sourceTree = ""; }; 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogDetailVC.swift; sourceTree = ""; }; 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateLogVC.swift; sourceTree = ""; }; @@ -174,6 +178,7 @@ 5D2957231BD3F8FE0029FD65 /* FoodFeedObject.m */, 7F003D3B29E35FA300439CF8 /* Restaurant.swift */, 7F1217C329E477E0007913F1 /* Recipe.swift */, + 7F5B461429E9CD4C00EC67FC /* Tag.swift */, ); name = Model; sourceTree = ""; @@ -354,6 +359,7 @@ children = ( 7F003D3929E35E0E00439CF8 /* SearchRestaurant.json */, 7F1217C129E4757D007913F1 /* SearchRecipe.json */, + 7F5B461229E9CB1800EC67FC /* SearchFoods.json */, ); name = Stubs; sourceTree = ""; @@ -502,6 +508,7 @@ buildActionMask = 2147483647; files = ( 50967FC71BD5C8F40029D6AB /* SignPainter-HouseScript.ttf in Resources */, + 7F5B461329E9CB1800EC67FC /* SearchFoods.json in Resources */, 7F1217C229E4757D007913F1 /* SearchRecipe.json in Resources */, 7F003D3A29E35E0E00439CF8 /* SearchRestaurant.json in Resources */, 29E25D551BCAB8480015A16F /* Assets.xcassets in Resources */, @@ -614,6 +621,7 @@ 7FDC776129E335FC002E6677 /* FoodbLogInteractor.swift in Sources */, 50F7C67E1BCB08BA00A969D1 /* FoodFeedCustomCVC.m in Sources */, 29E25D801BCAC9D50015A16F /* CreateLogViewController.m in Sources */, + 7F5B461529E9CD4C00EC67FC /* Tag.swift in Sources */, 7F1217C429E477E0007913F1 /* Recipe.swift in Sources */, 7F003D3529E358EA00439CF8 /* APIService.swift in Sources */, 7FB90DE929DD5E6600A50433 /* AppDelegate.swift in Sources */, diff --git a/FoodbLog/FoodbLog/APIService.swift b/FoodbLog/FoodbLog/APIService.swift index 35778a3..2404706 100644 --- a/FoodbLog/FoodbLog/APIService.swift +++ b/FoodbLog/FoodbLog/APIService.swift @@ -17,6 +17,7 @@ protocol APIService { enum APIProvider { case foursquare case fork2forkCA + case unsplash } extension APIProvider { @@ -26,6 +27,8 @@ extension APIProvider { return "https://api.foursquare.com/v3/" case .fork2forkCA : return "https://food2fork.ca/api/recipe/" + case .unsplash: + return "https://api.unsplash.com/" } } } diff --git a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard index f8ce2df..dd71219 100644 --- a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard +++ b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard @@ -537,7 +537,7 @@ - + diff --git a/FoodbLog/FoodbLog/CreateLogVC.swift b/FoodbLog/FoodbLog/CreateLogVC.swift index e372f59..8ba8e32 100644 --- a/FoodbLog/FoodbLog/CreateLogVC.swift +++ b/FoodbLog/FoodbLog/CreateLogVC.swift @@ -48,7 +48,7 @@ final class CreateLogVC: UIViewController { extension CreateLogVC { @IBAction func searcAPicOnIntagramButtonTapped(_ sender : UIButton) { - instagramRequestForTag(foodLogTitleTextField.text ?? "-") + requestImageForTag(foodLogTitleTextField.text ?? "-") } @IBAction func snapAPhotoButtonTapped(_ sender : UIButton) { @@ -221,13 +221,13 @@ extension CreateLogVC { func displaySearchResults(_ results : [Restaurant]) { DispatchQueue.main.async { let restaurantPickerTVC = self.storyboard?.instantiateViewController(withIdentifier: "RestaurantPickerTableViewController") as! RestaurantPickerTableViewController - #warning("replace with restaurant object once this refactoringt complete") +#warning("replace with restaurant object once this refactoringt complete") restaurantPickerTVC.restaurantData = [[:]] restaurantPickerTVC.delegate = self self.navigationController?.pushViewController(restaurantPickerTVC, animated: true) } - + } // MARK: Recipes API Request method @@ -247,7 +247,7 @@ extension CreateLogVC { func displayRecipeResults(_ recipes : [Recipe]) { DispatchQueue.main.async { let recipeTVC = self.storyboard?.instantiateViewController(withIdentifier: "RecipeTableViewController") as! RecipeTableViewController - #warning("replace with recipe object once this refactoringt complete") +#warning("replace with recipe object once this refactoringt complete") recipeTVC.recipeResultsArray = [] recipeTVC.delegate = self @@ -255,48 +255,30 @@ extension CreateLogVC { } } - // MARK: Instagram Image API Request method - func instagramRequestForTag(_ foodName : String) { + // MARK: Unsplash Image API Request method + func requestImageForTag(_ foodName : String) { let foodName = foodName.replacingOccurrences(of: " ", with: "") - - let urlString = "https://api.instagram.com/v1/tags/\(foodName)/media/recent?client_id=ac0ee52ebb154199bfabfb15b498c067" - - guard let url = URL(string: urlString) else {return} - - let urlRequest = URLRequest(url: url) - - let task = URLSession.shared.dataTask(with: urlRequest) { data, _, error in - if let error = error { - print("Error to request tag for \(foodName) : \(error.localizedDescription)") - } - - guard let data = data else {return} - - let decoder = JSONDecoder() - decoder.keyDecodingStrategy = .convertFromSnakeCase - - do { - let recipes = try decoder.decode(TagResponse.self, from: data) - self.displayTagResults(recipes.data) - - } catch { - print("Error decode data : \(error.localizedDescription)") + foodbLogInteractor.requestInstagramHastags(foodName) { result in + switch result { + case .success(let success): + self.displayTagResults(success.results) + case .failure(let failure): + print("Error request IG Hashtags : \(failure.localizedDescription)") } } - - task.resume() - } func displayTagResults(_ tags : [Tag]) { - let instagramPickerVC = storyboard?.instantiateViewController(withIdentifier: "InstagramImagePickerViewController") as! InstagramImagePicker - - + DispatchQueue.main.async { + let instagramPickerVC = self.storyboard?.instantiateViewController(withIdentifier: "InstagramImagePicker") as! InstagramImagePicker + + #warning("replace with tags object once this refactoringt complete") - instagramPickerVC.imageURLArray = [] - instagramPickerVC.delegate = self - - navigationController?.pushViewController(instagramPickerVC, animated: true) + instagramPickerVC.imageURLArray = [] + instagramPickerVC.delegate = self + + self.navigationController?.pushViewController(instagramPickerVC, animated: true) + } } } @@ -309,7 +291,6 @@ private extension CreateLogVC { foodLogImageView.layer.masksToBounds = true foodLogImageView.layer.cornerRadius = 10 - } func setupTextEditor() { @@ -357,16 +338,5 @@ private extension CreateLogVC { @objc func saveButtonTapped(_ button : UIBarButtonItem) { saveDataToParse() - } } - -struct TagResponse : Decodable { - let data : [Tag] -} - -struct Tag : Decodable { - let images : [String] - let standardResolution : String - let URL : String -} diff --git a/FoodbLog/FoodbLog/FoodbLogInteractor.swift b/FoodbLog/FoodbLog/FoodbLogInteractor.swift index 83d4f98..5a7670b 100644 --- a/FoodbLog/FoodbLog/FoodbLogInteractor.swift +++ b/FoodbLog/FoodbLog/FoodbLogInteractor.swift @@ -63,4 +63,21 @@ final class FoodbLogInteractorImpl { } } } + + func requestInstagramHastags(_ name : String, _ completion : @escaping (Result)->Void) { + guard let url = URL(string: FoodbLogService.searchFoodsTag(query: name).endpoint) else { + return + } + + let request = URLRequest(url: url) + + client.performRequest(request, TagResponse.self) { result in + switch result { + case .success(let data): + completion(.success(data)) + case .failure(let error): + completion(.failure(error)) + } + } + } } diff --git a/FoodbLog/FoodbLog/FoodbLogService.swift b/FoodbLog/FoodbLog/FoodbLogService.swift index b807957..59ec616 100644 --- a/FoodbLog/FoodbLog/FoodbLogService.swift +++ b/FoodbLog/FoodbLog/FoodbLogService.swift @@ -11,6 +11,7 @@ import Foundation enum FoodbLogService { case searchRestaurant(query:String, latitute: String, longitude: String) case searchRecipes(query :String) + case searchFoodsTag(query: String) } extension FoodbLogService : APIService { @@ -20,6 +21,8 @@ extension FoodbLogService : APIService { return .foursquare case .searchRecipes: return .fork2forkCA + case .searchFoodsTag: + return .unsplash } } @@ -29,6 +32,8 @@ extension FoodbLogService : APIService { return createEndpoint("?query=\(query)") case .searchRestaurant(let query, let latitute, let longitude): return createEndpoint("search?v=\(query)&ll=\(latitute)%2C\(longitude)&radius=5000&categories=13000") + case .searchFoodsTag(query: let query): + return createEndpoint("?query=\(query)&client_id=\(API_KEY_UNSPLASH)") } } @@ -38,6 +43,8 @@ extension FoodbLogService : APIService { return "\(baseURL.url)places/\(endpoint)" case .searchRecipes: return "\(baseURL.url)search/\(endpoint)" + case .searchFoodsTag: + return "\(baseURL.url)search/photos\(endpoint)" } } } diff --git a/FoodbLog/FoodbLog/SearchFoods.json b/FoodbLog/FoodbLog/SearchFoods.json new file mode 100644 index 0000000..4d8524f --- /dev/null +++ b/FoodbLog/FoodbLog/SearchFoods.json @@ -0,0 +1,673 @@ +{ + "total":1129, + "total_pages":113, + "results":[ + { + "id":"PFzy4N0_R3M", + "created_at":"2018-08-10T14:32:00Z", + "updated_at":"2023-04-14T01:04:35Z", + "promoted_at":"2018-08-11T14:59:24Z", + "width":3101, + "height":4652, + "color":"#f3c0c0", + "blur_hash":"L6TGZRs.%~-W%gofRPWB.TofH?R%", + "description":null, + "alt_description":"two strawberry doughnuts with sprinkles", + "urls":{ + "raw":"https://images.unsplash.com/photo-1533910534207-90f31029a78e?ixid=Mnw0MzYxMzd8MHwxfHNlYXJjaHwxfHxEb251dHxlbnwwfHx8fDE2ODE0OTQ2MTA\u0026ixlib=rb-4.0.3", + "full":"https://images.unsplash.com/photo-1533910534207-90f31029a78e?crop=entropy\u0026cs=srgb\u0026fm=jpg\u0026ixid=Mnw0MzYxMzd8MHwxfHNlYXJjaHwxfHxEb251dHxlbnwwfHx8fDE2ODE0OTQ2MTA\u0026ixlib=rb-4.0.3\u0026q=85", + "regular":"https://images.unsplash.com/photo-1533910534207-90f31029a78e?crop=entropy\u0026cs=tinysrgb\u0026fit=max\u0026fm=jpg\u0026ixid=Mnw0MzYxMzd8MHwxfHNlYXJjaHwxfHxEb251dHxlbnwwfHx8fDE2ODE0OTQ2MTA\u0026ixlib=rb-4.0.3\u0026q=80\u0026w=1080", + "small":"https://images.unsplash.com/photo-1533910534207-90f31029a78e?crop=entropy\u0026cs=tinysrgb\u0026fit=max\u0026fm=jpg\u0026ixid=Mnw0MzYxMzd8MHwxfHNlYXJjaHwxfHxEb251dHxlbnwwfHx8fDE2ODE0OTQ2MTA\u0026ixlib=rb-4.0.3\u0026q=80\u0026w=400", + "thumb":"https://images.unsplash.com/photo-1533910534207-90f31029a78e?crop=entropy\u0026cs=tinysrgb\u0026fit=max\u0026fm=jpg\u0026ixid=Mnw0MzYxMzd8MHwxfHNlYXJjaHwxfHxEb251dHxlbnwwfHx8fDE2ODE0OTQ2MTA\u0026ixlib=rb-4.0.3\u0026q=80\u0026w=200", + "small_s3":"https://s3.us-west-2.amazonaws.com/images.unsplash.com/small/photo-1533910534207-90f31029a78e" + }, + "links":{ + "self":"https://api.unsplash.com/photos/PFzy4N0_R3M", + "html":"https://unsplash.com/photos/PFzy4N0_R3M", + "download":"https://unsplash.com/photos/PFzy4N0_R3M/download?ixid=Mnw0MzYxMzd8MHwxfHNlYXJjaHwxfHxEb251dHxlbnwwfHx8fDE2ODE0OTQ2MTA", + "download_location":"https://api.unsplash.com/photos/PFzy4N0_R3M/download?ixid=Mnw0MzYxMzd8MHwxfHNlYXJjaHwxfHxEb251dHxlbnwwfHx8fDE2ODE0OTQ2MTA" + }, + "likes":2646, + "liked_by_user":false, + "current_user_collections":[ + + ], + "sponsorship":null, + "topic_submissions":{ + "food-drink":{ + "status":"approved", + "approved_on":"2020-04-06T14:20:20Z" + } + }, + "user":{ + "id":"dswYlKbx3sw", + "updated_at":"2023-04-11T10:59:49Z", + "username":"lenneek", + "name":"Elena Koycheva", + "first_name":"Elena", + "last_name":"Koycheva", + "twitter_username":"lenneek", + "portfolio_url":"https://www.instagram.com/lenneek/", + "bio":"Still life and product photographer, available for commissions. Instagram: @lenneek. Please always credit me when you use my photos. Like my photography? You can buy me a kofi here -\u003e https://ko-fi.com/lenneek. Thank you!\r\nE-mail: lenneexo@gmail.com.", + "location":"London", + "links":{ + "self":"https://api.unsplash.com/users/lenneek", + "html":"https://unsplash.com/@lenneek", + "photos":"https://api.unsplash.com/users/lenneek/photos", + "likes":"https://api.unsplash.com/users/lenneek/likes", + "portfolio":"https://api.unsplash.com/users/lenneek/portfolio", + "following":"https://api.unsplash.com/users/lenneek/following", + "followers":"https://api.unsplash.com/users/lenneek/followers" + }, + "profile_image":{ + "small":"https://images.unsplash.com/profile-1551808189558-84f2d267499b?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=32\u0026h=32", + "medium":"https://images.unsplash.com/profile-1551808189558-84f2d267499b?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=64\u0026h=64", + "large":"https://images.unsplash.com/profile-1551808189558-84f2d267499b?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=128\u0026h=128" + }, + "instagram_username":"lenneek", + "total_collections":0, + "total_likes":4, + "total_photos":31, + "accepted_tos":true, + "for_hire":true, + "social":{ + "instagram_username":"lenneek", + "portfolio_url":"https://www.instagram.com/lenneek/", + "twitter_username":"lenneek", + "paypal_email":null + } + }, + "tags":[ + { + "type":"landing_page", + "title":"pink", + "source":{ + "ancestry":{ + "type":{ + "slug":"wallpapers", + "pretty_slug":"HD Wallpapers" + }, + "category":{ + "slug":"colors", + "pretty_slug":"Color" + }, + "subcategory":{ + "slug":"pink", + "pretty_slug":"Pink" + } + }, + "title":"Hd pink wallpapers", + "subtitle":"Download free pink wallpapers", + "description":"Choose from a curated selection of pink wallpapers for your mobile and desktop screens. Always free on Unsplash.", + "meta_title":"Pink Wallpapers: Free HD Download [500+ HQ] | Unsplash", + "meta_description":"Choose from hundreds of free pink wallpapers. Download HD wallpapers for free on Unsplash.", + "cover_photo":{ + "id":"hR545CzxZxk", + "created_at":"2019-05-30T21:26:49Z", + "updated_at":"2023-04-10T10:08:00Z", + "promoted_at":"2019-05-31T10:41:18Z", + "width":6000, + "height":4000, + "color":"#d9d9d9", + "blur_hash":"LORB6Ya4HCpbQ7s9NZjEZ~o2wJni", + "description":null, + "alt_description":"pink smoke", + "urls":{ + "raw":"https://images.unsplash.com/photo-1559251606-c623743a6d76?ixlib=rb-4.0.3", + "full":"https://images.unsplash.com/photo-1559251606-c623743a6d76?ixlib=rb-4.0.3\u0026q=85\u0026fm=jpg\u0026crop=entropy\u0026cs=srgb", + "regular":"https://images.unsplash.com/photo-1559251606-c623743a6d76?ixlib=rb-4.0.3\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=1080\u0026fit=max", + "small":"https://images.unsplash.com/photo-1559251606-c623743a6d76?ixlib=rb-4.0.3\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=400\u0026fit=max", + "thumb":"https://images.unsplash.com/photo-1559251606-c623743a6d76?ixlib=rb-4.0.3\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=200\u0026fit=max", + "small_s3":"https://s3.us-west-2.amazonaws.com/images.unsplash.com/small/photo-1559251606-c623743a6d76" + }, + "links":{ + "self":"https://api.unsplash.com/photos/hR545CzxZxk", + "html":"https://unsplash.com/photos/hR545CzxZxk", + "download":"https://unsplash.com/photos/hR545CzxZxk/download", + "download_location":"https://api.unsplash.com/photos/hR545CzxZxk/download" + }, + "likes":3748, + "liked_by_user":false, + "current_user_collections":[ + + ], + "sponsorship":null, + "topic_submissions":{ + "wallpapers":{ + "status":"approved", + "approved_on":"2020-04-06T14:20:09Z" + } + }, + "premium":false, + "plus":false, + "user":{ + "id":"ogQykx6hk_c", + "updated_at":"2023-04-10T17:02:53Z", + "username":"pawel_czerwinski", + "name":"Pawel Czerwinski", + "first_name":"Pawel", + "last_name":"Czerwinski", + "twitter_username":"pm_cze", + "portfolio_url":"http://paypal.me/pmcze", + "bio":"If you'd like to support me, you can consider a donation paypal.me/pmcze ❤ Questions about how you can use the photos? help.unsplash.com/en/collections/1463188-unsplash-license 👍", + "location":"Poland", + "links":{ + "self":"https://api.unsplash.com/users/pawel_czerwinski", + "html":"https://unsplash.com/@pawel_czerwinski", + "photos":"https://api.unsplash.com/users/pawel_czerwinski/photos", + "likes":"https://api.unsplash.com/users/pawel_czerwinski/likes", + "portfolio":"https://api.unsplash.com/users/pawel_czerwinski/portfolio", + "following":"https://api.unsplash.com/users/pawel_czerwinski/following", + "followers":"https://api.unsplash.com/users/pawel_czerwinski/followers" + }, + "profile_image":{ + "small":"https://images.unsplash.com/profile-1592328433409-d9ce8a5333eaimage?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=32\u0026h=32", + "medium":"https://images.unsplash.com/profile-1592328433409-d9ce8a5333eaimage?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=64\u0026h=64", + "large":"https://images.unsplash.com/profile-1592328433409-d9ce8a5333eaimage?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=128\u0026h=128" + }, + "instagram_username":"pmcze", + "total_collections":7, + "total_likes":37974, + "total_photos":1927, + "accepted_tos":true, + "for_hire":false, + "social":{ + "instagram_username":"pmcze", + "portfolio_url":"http://paypal.me/pmcze", + "twitter_username":"pm_cze", + "paypal_email":null + } + } + } + } + }, + { + "type":"landing_page", + "title":"food", + "source":{ + "ancestry":{ + "type":{ + "slug":"images", + "pretty_slug":"Images" + }, + "category":{ + "slug":"food", + "pretty_slug":"Food" + } + }, + "title":"Food images \u0026 pictures", + "subtitle":"Download free food images", + "description":"Stunningly delicious street food, magnificent banquets, quiet family dinners: each is beautiful in it's own right. Unsplash captures that beauty, and lets you choose from a curated selection of the finest food images on the web (and always free).", + "meta_title":"20+ Best Free Food Pictures on Unsplash", + "meta_description":"Choose from hundreds of free food pictures. Download HD food photos for free on Unsplash.", + "cover_photo":{ + "id":"08bOYnH_r_E", + "created_at":"2017-03-29T20:14:13Z", + "updated_at":"2023-04-10T04:01:26Z", + "promoted_at":"2017-03-30T07:13:59Z", + "width":3997, + "height":3171, + "color":"#f3f3f3", + "blur_hash":"LmPshlDN9FX8xbWBafWBb_o~ozni", + "description":"‘Tis the season of rhubarb. And strawberry. And blood orange. Praise be. Amen.", + "alt_description":"variety of sliced fruits", + "urls":{ + "raw":"https://images.unsplash.com/photo-1490818387583-1baba5e638af?ixlib=rb-4.0.3", + "full":"https://images.unsplash.com/photo-1490818387583-1baba5e638af?ixlib=rb-4.0.3\u0026q=85\u0026fm=jpg\u0026crop=entropy\u0026cs=srgb", + "regular":"https://images.unsplash.com/photo-1490818387583-1baba5e638af?ixlib=rb-4.0.3\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=1080\u0026fit=max", + "small":"https://images.unsplash.com/photo-1490818387583-1baba5e638af?ixlib=rb-4.0.3\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=400\u0026fit=max", + "thumb":"https://images.unsplash.com/photo-1490818387583-1baba5e638af?ixlib=rb-4.0.3\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=200\u0026fit=max", + "small_s3":"https://s3.us-west-2.amazonaws.com/images.unsplash.com/small/photo-1490818387583-1baba5e638af" + }, + "links":{ + "self":"https://api.unsplash.com/photos/08bOYnH_r_E", + "html":"https://unsplash.com/photos/08bOYnH_r_E", + "download":"https://unsplash.com/photos/08bOYnH_r_E/download", + "download_location":"https://api.unsplash.com/photos/08bOYnH_r_E/download" + }, + "likes":6958, + "liked_by_user":false, + "current_user_collections":[ + + ], + "sponsorship":null, + "topic_submissions":{ + "health":{ + "status":"approved", + "approved_on":"2020-04-06T14:20:25Z" + } + }, + "premium":false, + "plus":false, + "user":{ + "id":"pVJLqUK0Dh4", + "updated_at":"2023-04-10T21:21:25Z", + "username":"brookelark", + "name":"Brooke Lark", + "first_name":"Brooke", + "last_name":"Lark", + "twitter_username":null, + "portfolio_url":"http://www.brookelark.com", + "bio":"Real Food fanatic. Bike rider. People lover. Running around with a camera.", + "location":"SLC, UT", + "links":{ + "self":"https://api.unsplash.com/users/brookelark", + "html":"https://unsplash.com/@brookelark", + "photos":"https://api.unsplash.com/users/brookelark/photos", + "likes":"https://api.unsplash.com/users/brookelark/likes", + "portfolio":"https://api.unsplash.com/users/brookelark/portfolio", + "following":"https://api.unsplash.com/users/brookelark/following", + "followers":"https://api.unsplash.com/users/brookelark/followers" + }, + "profile_image":{ + "small":"https://images.unsplash.com/profile-1496175100457-27a8e68786eb?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=32\u0026h=32", + "medium":"https://images.unsplash.com/profile-1496175100457-27a8e68786eb?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=64\u0026h=64", + "large":"https://images.unsplash.com/profile-1496175100457-27a8e68786eb?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=128\u0026h=128" + }, + "instagram_username":"brookelark", + "total_collections":0, + "total_likes":3, + "total_photos":148, + "accepted_tos":true, + "for_hire":true, + "social":{ + "instagram_username":"brookelark", + "portfolio_url":"http://www.brookelark.com", + "twitter_username":null, + "paypal_email":null + } + } + } + } + }, + { + "type":"landing_page", + "title":"donut", + "source":{ + "ancestry":{ + "type":{ + "slug":"images", + "pretty_slug":"Images" + }, + "category":{ + "slug":"food", + "pretty_slug":"Food" + }, + "subcategory":{ + "slug":"donut", + "pretty_slug":"Donut" + } + }, + "title":"Donut images \u0026 pictures", + "subtitle":"Download free donut images", + "description":"Choose from a curated selection of donut photos. Always free on Unsplash.", + "meta_title":"500+ Donut Pictures | Download Free Images on Unsplash", + "meta_description":"Choose from hundreds of free donut pictures. Download HD donut photos for free on Unsplash.", + "cover_photo":{ + "id":"Fq54FqucgCE", + "created_at":"2017-12-29T03:19:20Z", + "updated_at":"2023-04-10T09:02:54Z", + "promoted_at":"2017-12-29T15:14:03Z", + "width":3840, + "height":5760, + "color":"#f3c0f3", + "blur_hash":"LuMk9g3RbwoMoykBayjZS6W.jYsp", + "description":null, + "alt_description":"six assorted-flavor doughnuts", + "urls":{ + "raw":"https://images.unsplash.com/photo-1514517521153-1be72277b32f?ixlib=rb-4.0.3", + "full":"https://images.unsplash.com/photo-1514517521153-1be72277b32f?ixlib=rb-4.0.3\u0026q=85\u0026fm=jpg\u0026crop=entropy\u0026cs=srgb", + "regular":"https://images.unsplash.com/photo-1514517521153-1be72277b32f?ixlib=rb-4.0.3\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=1080\u0026fit=max", + "small":"https://images.unsplash.com/photo-1514517521153-1be72277b32f?ixlib=rb-4.0.3\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=400\u0026fit=max", + "thumb":"https://images.unsplash.com/photo-1514517521153-1be72277b32f?ixlib=rb-4.0.3\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=200\u0026fit=max", + "small_s3":"https://s3.us-west-2.amazonaws.com/images.unsplash.com/small/photo-1514517521153-1be72277b32f" + }, + "links":{ + "self":"https://api.unsplash.com/photos/Fq54FqucgCE", + "html":"https://unsplash.com/photos/Fq54FqucgCE", + "download":"https://unsplash.com/photos/Fq54FqucgCE/download", + "download_location":"https://api.unsplash.com/photos/Fq54FqucgCE/download" + }, + "likes":5678, + "liked_by_user":false, + "current_user_collections":[ + + ], + "sponsorship":null, + "topic_submissions":{ + "food-drink":{ + "status":"approved", + "approved_on":"2020-04-06T14:20:20Z" + } + }, + "premium":false, + "plus":false, + "user":{ + "id":"UjBZfoI7oEo", + "updated_at":"2023-04-08T08:23:37Z", + "username":"the_modern_life_mrs", + "name":"Heather Ford", + "first_name":"Heather", + "last_name":"Ford", + "twitter_username":null, + "portfolio_url":"http://www.themodernlifemrs.com", + "bio":"A full-time photographer married to my business partner! I’m an autoimmune warrior, amateur crafter, hostess with the mostess, and a Food Network feen. Linen sheets are my jam! I love encouraging others to follow their passions + live to the fullest.", + "location":null, + "links":{ + "self":"https://api.unsplash.com/users/the_modern_life_mrs", + "html":"https://unsplash.com/@the_modern_life_mrs", + "photos":"https://api.unsplash.com/users/the_modern_life_mrs/photos", + "likes":"https://api.unsplash.com/users/the_modern_life_mrs/likes", + "portfolio":"https://api.unsplash.com/users/the_modern_life_mrs/portfolio", + "following":"https://api.unsplash.com/users/the_modern_life_mrs/following", + "followers":"https://api.unsplash.com/users/the_modern_life_mrs/followers" + }, + "profile_image":{ + "small":"https://images.unsplash.com/profile-1531112521400-3a8700c7470e?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=32\u0026h=32", + "medium":"https://images.unsplash.com/profile-1531112521400-3a8700c7470e?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=64\u0026h=64", + "large":"https://images.unsplash.com/profile-1531112521400-3a8700c7470e?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=128\u0026h=128" + }, + "instagram_username":"themodernlifemrs", + "total_collections":0, + "total_likes":1, + "total_photos":55, + "accepted_tos":true, + "for_hire":false, + "social":{ + "instagram_username":"themodernlifemrs", + "portfolio_url":"http://www.themodernlifemrs.com", + "twitter_username":null, + "paypal_email":null + } + } + } + } + } + ] + }, + { + "id":"8BNGxSAQd6M", + "created_at":"2021-01-05T19:07:27Z", + "updated_at":"2023-04-14T09:22:05Z", + "promoted_at":"2021-01-06T15:36:02Z", + "width":3872, + "height":5800, + "color":"#f3f3f3", + "blur_hash":"LKS6GLa_tRs;adspofX5?^s;M{WB", + "description":null, + "alt_description":"pink and white flower decor", + "urls":{ + "raw":"https://images.unsplash.com/photo-1609873539027-d4ad052cb6a7?ixid=Mnw0MzYxMzd8MHwxfHNlYXJjaHwyfHxEb251dHxlbnwwfHx8fDE2ODE0OTQ2MTA\u0026ixlib=rb-4.0.3", + "full":"https://images.unsplash.com/photo-1609873539027-d4ad052cb6a7?crop=entropy\u0026cs=srgb\u0026fm=jpg\u0026ixid=Mnw0MzYxMzd8MHwxfHNlYXJjaHwyfHxEb251dHxlbnwwfHx8fDE2ODE0OTQ2MTA\u0026ixlib=rb-4.0.3\u0026q=85", + "regular":"https://images.unsplash.com/photo-1609873539027-d4ad052cb6a7?crop=entropy\u0026cs=tinysrgb\u0026fit=max\u0026fm=jpg\u0026ixid=Mnw0MzYxMzd8MHwxfHNlYXJjaHwyfHxEb251dHxlbnwwfHx8fDE2ODE0OTQ2MTA\u0026ixlib=rb-4.0.3\u0026q=80\u0026w=1080", + "small":"https://images.unsplash.com/photo-1609873539027-d4ad052cb6a7?crop=entropy\u0026cs=tinysrgb\u0026fit=max\u0026fm=jpg\u0026ixid=Mnw0MzYxMzd8MHwxfHNlYXJjaHwyfHxEb251dHxlbnwwfHx8fDE2ODE0OTQ2MTA\u0026ixlib=rb-4.0.3\u0026q=80\u0026w=400", + "thumb":"https://images.unsplash.com/photo-1609873539027-d4ad052cb6a7?crop=entropy\u0026cs=tinysrgb\u0026fit=max\u0026fm=jpg\u0026ixid=Mnw0MzYxMzd8MHwxfHNlYXJjaHwyfHxEb251dHxlbnwwfHx8fDE2ODE0OTQ2MTA\u0026ixlib=rb-4.0.3\u0026q=80\u0026w=200", + "small_s3":"https://s3.us-west-2.amazonaws.com/images.unsplash.com/small/photo-1609873539027-d4ad052cb6a7" + }, + "links":{ + "self":"https://api.unsplash.com/photos/8BNGxSAQd6M", + "html":"https://unsplash.com/photos/8BNGxSAQd6M", + "download":"https://unsplash.com/photos/8BNGxSAQd6M/download?ixid=Mnw0MzYxMzd8MHwxfHNlYXJjaHwyfHxEb251dHxlbnwwfHx8fDE2ODE0OTQ2MTA", + "download_location":"https://api.unsplash.com/photos/8BNGxSAQd6M/download?ixid=Mnw0MzYxMzd8MHwxfHNlYXJjaHwyfHxEb251dHxlbnwwfHx8fDE2ODE0OTQ2MTA" + }, + "likes":601, + "liked_by_user":false, + "current_user_collections":[ + + ], + "sponsorship":null, + "topic_submissions":{ + "food-drink":{ + "status":"approved", + "approved_on":"2021-03-19T15:00:58Z" + } + }, + "user":{ + "id":"HA0N-BacBRQ", + "updated_at":"2023-04-12T12:29:03Z", + "username":"lore_schodts", + "name":"Lore Schodts", + "first_name":"Lore", + "last_name":"Schodts", + "twitter_username":null, + "portfolio_url":null, + "bio":null, + "location":null, + "links":{ + "self":"https://api.unsplash.com/users/lore_schodts", + "html":"https://unsplash.com/@lore_schodts", + "photos":"https://api.unsplash.com/users/lore_schodts/photos", + "likes":"https://api.unsplash.com/users/lore_schodts/likes", + "portfolio":"https://api.unsplash.com/users/lore_schodts/portfolio", + "following":"https://api.unsplash.com/users/lore_schodts/following", + "followers":"https://api.unsplash.com/users/lore_schodts/followers" + }, + "profile_image":{ + "small":"https://images.unsplash.com/profile-1571441215248-9fc50dd60120image?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=32\u0026h=32", + "medium":"https://images.unsplash.com/profile-1571441215248-9fc50dd60120image?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=64\u0026h=64", + "large":"https://images.unsplash.com/profile-1571441215248-9fc50dd60120image?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=128\u0026h=128" + }, + "instagram_username":"loreschodts", + "total_collections":0, + "total_likes":0, + "total_photos":31, + "accepted_tos":true, + "for_hire":false, + "social":{ + "instagram_username":"loreschodts", + "portfolio_url":null, + "twitter_username":null, + "paypal_email":null + } + }, + "tags":[ + { + "type":"landing_page", + "title":"food", + "source":{ + "ancestry":{ + "type":{ + "slug":"images", + "pretty_slug":"Images" + }, + "category":{ + "slug":"food", + "pretty_slug":"Food" + } + }, + "title":"Food images \u0026 pictures", + "subtitle":"Download free food images", + "description":"Stunningly delicious street food, magnificent banquets, quiet family dinners: each is beautiful in it's own right. Unsplash captures that beauty, and lets you choose from a curated selection of the finest food images on the web (and always free).", + "meta_title":"20+ Best Free Food Pictures on Unsplash", + "meta_description":"Choose from hundreds of free food pictures. Download HD food photos for free on Unsplash.", + "cover_photo":{ + "id":"08bOYnH_r_E", + "created_at":"2017-03-29T20:14:13Z", + "updated_at":"2023-04-10T04:01:26Z", + "promoted_at":"2017-03-30T07:13:59Z", + "width":3997, + "height":3171, + "color":"#f3f3f3", + "blur_hash":"LmPshlDN9FX8xbWBafWBb_o~ozni", + "description":"‘Tis the season of rhubarb. And strawberry. And blood orange. Praise be. Amen.", + "alt_description":"variety of sliced fruits", + "urls":{ + "raw":"https://images.unsplash.com/photo-1490818387583-1baba5e638af?ixlib=rb-4.0.3", + "full":"https://images.unsplash.com/photo-1490818387583-1baba5e638af?ixlib=rb-4.0.3\u0026q=85\u0026fm=jpg\u0026crop=entropy\u0026cs=srgb", + "regular":"https://images.unsplash.com/photo-1490818387583-1baba5e638af?ixlib=rb-4.0.3\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=1080\u0026fit=max", + "small":"https://images.unsplash.com/photo-1490818387583-1baba5e638af?ixlib=rb-4.0.3\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=400\u0026fit=max", + "thumb":"https://images.unsplash.com/photo-1490818387583-1baba5e638af?ixlib=rb-4.0.3\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=200\u0026fit=max", + "small_s3":"https://s3.us-west-2.amazonaws.com/images.unsplash.com/small/photo-1490818387583-1baba5e638af" + }, + "links":{ + "self":"https://api.unsplash.com/photos/08bOYnH_r_E", + "html":"https://unsplash.com/photos/08bOYnH_r_E", + "download":"https://unsplash.com/photos/08bOYnH_r_E/download", + "download_location":"https://api.unsplash.com/photos/08bOYnH_r_E/download" + }, + "likes":6958, + "liked_by_user":false, + "current_user_collections":[ + + ], + "sponsorship":null, + "topic_submissions":{ + "health":{ + "status":"approved", + "approved_on":"2020-04-06T14:20:25Z" + } + }, + "premium":false, + "plus":false, + "user":{ + "id":"pVJLqUK0Dh4", + "updated_at":"2023-04-10T21:21:25Z", + "username":"brookelark", + "name":"Brooke Lark", + "first_name":"Brooke", + "last_name":"Lark", + "twitter_username":null, + "portfolio_url":"http://www.brookelark.com", + "bio":"Real Food fanatic. Bike rider. People lover. Running around with a camera.", + "location":"SLC, UT", + "links":{ + "self":"https://api.unsplash.com/users/brookelark", + "html":"https://unsplash.com/@brookelark", + "photos":"https://api.unsplash.com/users/brookelark/photos", + "likes":"https://api.unsplash.com/users/brookelark/likes", + "portfolio":"https://api.unsplash.com/users/brookelark/portfolio", + "following":"https://api.unsplash.com/users/brookelark/following", + "followers":"https://api.unsplash.com/users/brookelark/followers" + }, + "profile_image":{ + "small":"https://images.unsplash.com/profile-1496175100457-27a8e68786eb?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=32\u0026h=32", + "medium":"https://images.unsplash.com/profile-1496175100457-27a8e68786eb?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=64\u0026h=64", + "large":"https://images.unsplash.com/profile-1496175100457-27a8e68786eb?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=128\u0026h=128" + }, + "instagram_username":"brookelark", + "total_collections":0, + "total_likes":3, + "total_photos":148, + "accepted_tos":true, + "for_hire":true, + "social":{ + "instagram_username":"brookelark", + "portfolio_url":"http://www.brookelark.com", + "twitter_username":null, + "paypal_email":null + } + } + } + } + }, + { + "type":"landing_page", + "title":"donut", + "source":{ + "ancestry":{ + "type":{ + "slug":"images", + "pretty_slug":"Images" + }, + "category":{ + "slug":"food", + "pretty_slug":"Food" + }, + "subcategory":{ + "slug":"donut", + "pretty_slug":"Donut" + } + }, + "title":"Donut images \u0026 pictures", + "subtitle":"Download free donut images", + "description":"Choose from a curated selection of donut photos. Always free on Unsplash.", + "meta_title":"500+ Donut Pictures | Download Free Images on Unsplash", + "meta_description":"Choose from hundreds of free donut pictures. Download HD donut photos for free on Unsplash.", + "cover_photo":{ + "id":"Fq54FqucgCE", + "created_at":"2017-12-29T03:19:20Z", + "updated_at":"2023-04-10T09:02:54Z", + "promoted_at":"2017-12-29T15:14:03Z", + "width":3840, + "height":5760, + "color":"#f3c0f3", + "blur_hash":"LuMk9g3RbwoMoykBayjZS6W.jYsp", + "description":null, + "alt_description":"six assorted-flavor doughnuts", + "urls":{ + "raw":"https://images.unsplash.com/photo-1514517521153-1be72277b32f?ixlib=rb-4.0.3", + "full":"https://images.unsplash.com/photo-1514517521153-1be72277b32f?ixlib=rb-4.0.3\u0026q=85\u0026fm=jpg\u0026crop=entropy\u0026cs=srgb", + "regular":"https://images.unsplash.com/photo-1514517521153-1be72277b32f?ixlib=rb-4.0.3\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=1080\u0026fit=max", + "small":"https://images.unsplash.com/photo-1514517521153-1be72277b32f?ixlib=rb-4.0.3\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=400\u0026fit=max", + "thumb":"https://images.unsplash.com/photo-1514517521153-1be72277b32f?ixlib=rb-4.0.3\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=200\u0026fit=max", + "small_s3":"https://s3.us-west-2.amazonaws.com/images.unsplash.com/small/photo-1514517521153-1be72277b32f" + }, + "links":{ + "self":"https://api.unsplash.com/photos/Fq54FqucgCE", + "html":"https://unsplash.com/photos/Fq54FqucgCE", + "download":"https://unsplash.com/photos/Fq54FqucgCE/download", + "download_location":"https://api.unsplash.com/photos/Fq54FqucgCE/download" + }, + "likes":5678, + "liked_by_user":false, + "current_user_collections":[ + + ], + "sponsorship":null, + "topic_submissions":{ + "food-drink":{ + "status":"approved", + "approved_on":"2020-04-06T14:20:20Z" + } + }, + "premium":false, + "plus":false, + "user":{ + "id":"UjBZfoI7oEo", + "updated_at":"2023-04-08T08:23:37Z", + "username":"the_modern_life_mrs", + "name":"Heather Ford", + "first_name":"Heather", + "last_name":"Ford", + "twitter_username":null, + "portfolio_url":"http://www.themodernlifemrs.com", + "bio":"A full-time photographer married to my business partner! I’m an autoimmune warrior, amateur crafter, hostess with the mostess, and a Food Network feen. Linen sheets are my jam! I love encouraging others to follow their passions + live to the fullest.", + "location":null, + "links":{ + "self":"https://api.unsplash.com/users/the_modern_life_mrs", + "html":"https://unsplash.com/@the_modern_life_mrs", + "photos":"https://api.unsplash.com/users/the_modern_life_mrs/photos", + "likes":"https://api.unsplash.com/users/the_modern_life_mrs/likes", + "portfolio":"https://api.unsplash.com/users/the_modern_life_mrs/portfolio", + "following":"https://api.unsplash.com/users/the_modern_life_mrs/following", + "followers":"https://api.unsplash.com/users/the_modern_life_mrs/followers" + }, + "profile_image":{ + "small":"https://images.unsplash.com/profile-1531112521400-3a8700c7470e?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=32\u0026h=32", + "medium":"https://images.unsplash.com/profile-1531112521400-3a8700c7470e?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=64\u0026h=64", + "large":"https://images.unsplash.com/profile-1531112521400-3a8700c7470e?ixlib=rb-4.0.3\u0026crop=faces\u0026fit=crop\u0026w=128\u0026h=128" + }, + "instagram_username":"themodernlifemrs", + "total_collections":0, + "total_likes":1, + "total_photos":55, + "accepted_tos":true, + "for_hire":false, + "social":{ + "instagram_username":"themodernlifemrs", + "portfolio_url":"http://www.themodernlifemrs.com", + "twitter_username":null, + "paypal_email":null + } + } + } + } + }, + { + "type":"search", + "title":"pastry" + } + ] + } + ] +} diff --git a/FoodbLog/FoodbLog/Tag.swift b/FoodbLog/FoodbLog/Tag.swift new file mode 100644 index 0000000..b9b2c2c --- /dev/null +++ b/FoodbLog/FoodbLog/Tag.swift @@ -0,0 +1,33 @@ +// +// Tag.swift +// FoodbLog +// +// Created by Ikmal Azman on 14/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import Foundation + +struct TagResponse : Decodable { + let results : [Tag] +} + +struct Tag : Decodable { + let description : String + let URL : TagImage + + enum CodingKeys : String, CodingKey { + case description = "alt_description" + case URL = "urls" + } +} + +struct TagImage : Decodable { + let standardResolution : String + let thumbnailResolution : String + + enum CodingKeys : String, CodingKey { + case standardResolution = "regular" + case thumbnailResolution = "thumb" + } +} From 1ad320b898ed8c66aec39921e4f7646ba6c2ab8e Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Fri, 14 Apr 2023 19:29:23 +0100 Subject: [PATCH 24/29] store foursquare api key in secrets --- FoodbLog/FoodbLog/FoodbLogInteractor.swift | 2 +- FoodbLog/FoodbLog/Secrets.swift | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/FoodbLog/FoodbLog/FoodbLogInteractor.swift b/FoodbLog/FoodbLog/FoodbLogInteractor.swift index 5a7670b..cd73c19 100644 --- a/FoodbLog/FoodbLog/FoodbLogInteractor.swift +++ b/FoodbLog/FoodbLog/FoodbLogInteractor.swift @@ -26,7 +26,7 @@ final class FoodbLogInteractorImpl { let headers = [ "accept": "application/json", - "Authorization": "fsq330X+8o6/JsdNbbyzjYaEqXORJTZvanpmRWgb4MVsW8E=" + "Authorization": "\(API_KEY_FOURSQUARE)" ] var request = URLRequest(url: url) diff --git a/FoodbLog/FoodbLog/Secrets.swift b/FoodbLog/FoodbLog/Secrets.swift index 8916d8d..ddde083 100644 --- a/FoodbLog/FoodbLog/Secrets.swift +++ b/FoodbLog/FoodbLog/Secrets.swift @@ -9,3 +9,4 @@ import Foundation let API_KEY_UNSPLASH = "FAKE_API_KEY" +let API_KEY_FOURSQUARE = "FAKE_API_KEY" From d09dc6880bf17a8264bdd77cfc76ece4827fb656 Mon Sep 17 00:00:00 2001 From: Ikmal Azman <59039044+esikmalazman@users.noreply.github.com> Date: Fri, 14 Apr 2023 19:41:32 +0100 Subject: [PATCH 25/29] Delete FoodbLog/Pods directory --- .../AFNetworking/AFHTTPRequestOperation.h | 70 - .../AFNetworking/AFHTTPRequestOperation.m | 206 - .../AFHTTPRequestOperationManager.h | 326 -- .../AFHTTPRequestOperationManager.m | 284 - .../AFNetworking/AFHTTPSessionManager.h | 253 - .../AFNetworking/AFHTTPSessionManager.m | 323 -- .../AFNetworkReachabilityManager.h | 207 - .../AFNetworkReachabilityManager.m | 262 - .../AFNetworking/AFNetworking/AFNetworking.h | 46 - .../AFNetworking/AFSecurityPolicy.h | 142 - .../AFNetworking/AFSecurityPolicy.m | 311 -- .../AFNetworking/AFURLConnectionOperation.h | 344 -- .../AFNetworking/AFURLConnectionOperation.m | 792 --- .../AFNetworking/AFURLRequestSerialization.h | 473 -- .../AFNetworking/AFURLRequestSerialization.m | 1425 ----- .../AFNetworking/AFURLResponseSerialization.h | 311 -- .../AFNetworking/AFURLResponseSerialization.m | 825 --- .../AFNetworking/AFURLSessionManager.h | 554 -- .../AFNetworking/AFURLSessionManager.m | 1171 ---- FoodbLog/Pods/AFNetworking/LICENSE | 19 - FoodbLog/Pods/AFNetworking/README.md | 394 -- .../AFNetworkActivityIndicatorManager.h | 80 - .../AFNetworkActivityIndicatorManager.m | 170 - .../UIActivityIndicatorView+AFNetworking.h | 63 - .../UIActivityIndicatorView+AFNetworking.m | 171 - .../UIAlertView+AFNetworking.h | 99 - .../UIAlertView+AFNetworking.m | 141 - .../UIButton+AFNetworking.h | 186 - .../UIButton+AFNetworking.m | 293 - .../UIKit+AFNetworking/UIImage+AFNetworking.h | 35 - .../UIImageView+AFNetworking.h | 146 - .../UIImageView+AFNetworking.m | 215 - .../UIKit+AFNetworking/UIKit+AFNetworking.h | 39 - .../UIProgressView+AFNetworking.h | 91 - .../UIProgressView+AFNetworking.m | 182 - .../UIRefreshControl+AFNetworking.h | 68 - .../UIRefreshControl+AFNetworking.m | 166 - .../UIWebView+AFNetworking.h | 86 - .../UIWebView+AFNetworking.m | 159 - .../Bolts/Bolts/Common/BFCancellationToken.h | 38 - .../Bolts/Bolts/Common/BFCancellationToken.m | 139 - .../Common/BFCancellationTokenRegistration.h | 25 - .../Common/BFCancellationTokenRegistration.m | 73 - .../Bolts/Common/BFCancellationTokenSource.h | 56 - .../Bolts/Common/BFCancellationTokenSource.m | 60 - FoodbLog/Pods/Bolts/Bolts/Common/BFDefines.h | 18 - FoodbLog/Pods/Bolts/Bolts/Common/BFExecutor.h | 58 - FoodbLog/Pods/Bolts/Bolts/Common/BFExecutor.m | 112 - FoodbLog/Pods/Bolts/Bolts/Common/BFTask.h | 259 - FoodbLog/Pods/Bolts/Bolts/Common/BFTask.m | 470 -- .../Bolts/Common/BFTaskCompletionSource.h | 87 - .../Bolts/Common/BFTaskCompletionSource.m | 83 - FoodbLog/Pods/Bolts/Bolts/Common/Bolts.h | 43 - FoodbLog/Pods/Bolts/Bolts/Common/Bolts.m | 21 - .../Pods/Bolts/Bolts/Common/BoltsVersion.h | 1 - FoodbLog/Pods/Bolts/LICENSE | 30 - FoodbLog/Pods/Bolts/README.md | 682 --- FoodbLog/Pods/ChameleonFramework/LICENSE.md | 21 - .../Pod/Classes/Objective-C/Chameleon.h | 30 - .../Classes/Objective-C/ChameleonConstants.h | 21 - .../Classes/Objective-C/ChameleonConstants.m | 15 - .../Pod/Classes/Objective-C/ChameleonEnums.h | 39 - .../Pod/Classes/Objective-C/ChameleonMacros.h | 126 - .../Pod/Classes/Objective-C/Chameleon_.h | 66 - .../Pod/Classes/Objective-C/Chameleon_.m | 756 --- .../Classes/Objective-C/NSArray+Chameleon.h | 112 - .../Classes/Objective-C/NSArray+Chameleon.m | 736 --- .../Classes/Objective-C/UIButton+Chameleon.h | 15 - .../Classes/Objective-C/UIButton+Chameleon.m | 23 - .../Classes/Objective-C/UIColor+Chameleon.h | 648 --- .../Classes/Objective-C/UIColor+Chameleon.m | 976 ---- .../Objective-C/UIColor+ChameleonPrivate.h | 36 - .../Objective-C/UIColor+ChameleonPrivate.m | 251 - .../Objective-C/UIImage+ChameleonPrivate.h | 21 - .../Objective-C/UIImage+ChameleonPrivate.m | 74 - .../Classes/Objective-C/UILabel+Chameleon.h | 15 - .../Classes/Objective-C/UILabel+Chameleon.m | 18 - .../UINavigationController+Chameleon.h | 32 - .../UINavigationController+Chameleon.m | 214 - .../Objective-C/UIView+ChameleonPrivate.h | 16 - .../Objective-C/UIView+ChameleonPrivate.m | 46 - .../Objective-C/UIViewController+Chameleon.h | 64 - .../Objective-C/UIViewController+Chameleon.m | 858 --- FoodbLog/Pods/ChameleonFramework/README.md | 700 --- .../Pods/FlatUIKit/Classes/ios/FUIAlertView.h | 113 - .../Pods/FlatUIKit/Classes/ios/FUIAlertView.m | 424 -- .../Pods/FlatUIKit/Classes/ios/FUIButton.h | 21 - .../Pods/FlatUIKit/Classes/ios/FUIButton.m | 106 - .../Classes/ios/FUICellBackgroundView.h | 18 - .../Classes/ios/FUICellBackgroundView.m | 62 - .../Classes/ios/FUIPopoverBackgroundView.h | 16 - .../Classes/ios/FUIPopoverBackgroundView.m | 169 - .../Classes/ios/FUISegmentedControl.h | 30 - .../Classes/ios/FUISegmentedControl.m | 301 -- .../Pods/FlatUIKit/Classes/ios/FUISwitch.h | 26 - .../Pods/FlatUIKit/Classes/ios/FUISwitch.m | 207 - .../Pods/FlatUIKit/Classes/ios/FUITextField.h | 19 - .../Pods/FlatUIKit/Classes/ios/FUITextField.m | 112 - .../Pods/FlatUIKit/Classes/ios/FlatUIKit.h | 35 - .../FlatUIKit/Classes/ios/NSString+Icons.h | 116 - .../FlatUIKit/Classes/ios/NSString+Icons.m | 33 - .../Classes/ios/UIBarButtonItem+FlatUI.h | 33 - .../Classes/ios/UIBarButtonItem+FlatUI.m | 101 - .../FlatUIKit/Classes/ios/UIColor+FlatUI.h | 39 - .../FlatUIKit/Classes/ios/UIColor+FlatUI.m | 279 - .../FlatUIKit/Classes/ios/UIFont+FlatUI.h | 18 - .../FlatUIKit/Classes/ios/UIFont+FlatUI.m | 49 - .../FlatUIKit/Classes/ios/UIImage+FlatUI.h | 33 - .../FlatUIKit/Classes/ios/UIImage+FlatUI.m | 167 - .../Classes/ios/UINavigationBar+FlatUI.h | 15 - .../Classes/ios/UINavigationBar+FlatUI.m | 41 - .../Classes/ios/UIPopoverController+FlatUI.h | 16 - .../Classes/ios/UIPopoverController+FlatUI.m | 22 - .../Classes/ios/UIProgressView+FlatUI.h | 19 - .../Classes/ios/UIProgressView+FlatUI.m | 40 - .../FlatUIKit/Classes/ios/UISlider+FlatUI.h | 22 - .../FlatUIKit/Classes/ios/UISlider+FlatUI.m | 44 - .../FlatUIKit/Classes/ios/UIStepper+FlatUI.h | 18 - .../FlatUIKit/Classes/ios/UIStepper+FlatUI.m | 52 - .../FlatUIKit/Classes/ios/UITabBar+FlatUI.h | 19 - .../FlatUIKit/Classes/ios/UITabBar+FlatUI.m | 28 - .../Classes/ios/UITableViewCell+FlatUI.h | 26 - .../Classes/ios/UITableViewCell+FlatUI.m | 61 - .../FlatUIKit/Classes/ios/UIToolbar+FlatUI.h | 14 - .../FlatUIKit/Classes/ios/UIToolbar+FlatUI.m | 24 - FoodbLog/Pods/FlatUIKit/LICENSE | 21 - FoodbLog/Pods/FlatUIKit/README.markdown | 234 - .../Pods/FlatUIKit/Resources/Lato-Bold.ttf | Bin 121788 -> 0 bytes .../Pods/FlatUIKit/Resources/Lato-Italic.ttf | Bin 118352 -> 0 bytes .../Pods/FlatUIKit/Resources/Lato-Light.ttf | Bin 122524 -> 0 bytes .../Pods/FlatUIKit/Resources/Lato-Regular.ttf | Bin 120196 -> 0 bytes .../Resources/flat-ui-icons-regular.ttf | Bin 25708 -> 0 bytes .../Categories/IQNSArray+Sort.h | 45 - .../Categories/IQNSArray+Sort.m | 71 - .../Categories/IQUITextFieldView+Additions.h | 46 - .../Categories/IQUITextFieldView+Additions.m | 54 - .../Categories/IQUIView+Hierarchy.h | 122 - .../Categories/IQUIView+Hierarchy.m | 360 -- .../Categories/IQUIViewController+Additions.h | 33 - .../Categories/IQUIViewController+Additions.m | 39 - .../Categories/IQUIWindow+Hierarchy.h | 48 - .../Categories/IQUIWindow+Hierarchy.m | 51 - .../Constants/IQKeyboardManagerConstants.h | 146 - .../IQKeyboardManagerConstantsInternal.h | 56 - .../IQKeyBoardManager/IQKeyboardManager.h | 319 -- .../IQKeyBoardManager/IQKeyboardManager.m | 2255 -------- .../IQKeyboardReturnKeyHandler.h | 99 - .../IQKeyboardReturnKeyHandler.m | 590 --- .../IQSegmentedNextPrevious.h | 62 - .../IQSegmentedNextPrevious.m | 102 - .../IQKeyBoardManager/IQTextView/IQTextView.h | 42 - .../IQKeyBoardManager/IQTextView/IQTextView.m | 143 - .../IQToolbar/IQBarButtonItem.h | 32 - .../IQToolbar/IQBarButtonItem.m | 81 - .../IQToolbar/IQTitleBarButtonItem.h | 78 - .../IQToolbar/IQTitleBarButtonItem.m | 121 - .../IQKeyBoardManager/IQToolbar/IQToolbar.h | 65 - .../IQKeyBoardManager/IQToolbar/IQToolbar.m | 257 - .../IQToolbar/IQUIView+IQKeyboardToolbar.h | 380 -- .../IQToolbar/IQUIView+IQKeyboardToolbar.m | 844 --- .../IQKeyBoardManager/KeyboardManager.h | 40 - .../IQButtonBarArrowLeft.png | Bin 886 -> 0 bytes .../IQButtonBarArrowLeft@2x.png | Bin 1793 -> 0 bytes .../IQButtonBarArrowLeft@3x.png | Bin 1815 -> 0 bytes .../IQButtonBarArrowRight.png | Bin 943 -> 0 bytes .../IQButtonBarArrowRight@2x.png | Bin 1786 -> 0 bytes .../IQButtonBarArrowRight@3x.png | Bin 1844 -> 0 bytes .../de.lproj/IQKeyboardManager.strings | 13 - .../en.lproj/IQKeyboardManager.strings | 13 - .../es.lproj/IQKeyboardManager.strings | 14 - .../zh-Hans/IQKeyboardManager.strings | 13 - .../zh-Hant/IQKeyboardManager.strings | 13 - FoodbLog/Pods/IQKeyboardManager/LICENSE.md | 24 - FoodbLog/Pods/IQKeyboardManager/README.md | 215 - FoodbLog/Pods/Manifest.lock | 74 - FoodbLog/Pods/Parse/LICENSE | 30 - .../PFDefaultACLController.h | 52 - .../PFDefaultACLController.m | 99 - .../Parse/Parse/Internal/ACL/PFACLPrivate.h | 42 - .../Parse/Internal/ACL/State/PFACLState.h | 42 - .../Parse/Internal/ACL/State/PFACLState.m | 87 - .../Internal/ACL/State/PFACLState_Private.h | 21 - .../Internal/ACL/State/PFMutableACLState.h | 17 - .../Internal/ACL/State/PFMutableACLState.m | 32 - .../Controller/PFAnalyticsController.h | 61 - .../Controller/PFAnalyticsController.m | 100 - .../Internal/Analytics/PFAnalytics_Private.h | 17 - .../Utilities/PFAnalyticsUtilities.h | 28 - .../Utilities/PFAnalyticsUtilities.m | 38 - .../Parse/Parse/Internal/BFTask+Private.h | 71 - .../Parse/Parse/Internal/BFTask+Private.m | 130 - .../CloudCode/PFCloudCodeController.h | 47 - .../CloudCode/PFCloudCodeController.m | 66 - .../Commands/CommandRunner/PFCommandRunning.h | 96 - .../Commands/CommandRunner/PFCommandRunning.m | 12 - .../CommandRunner/PFCommandRunningConstants.h | 35 - .../CommandRunner/PFCommandRunningConstants.m | 23 - .../PFCommandURLRequestConstructor.h | 50 - .../PFCommandURLRequestConstructor.m | 149 - .../URLSession/PFURLSessionCommandRunner.h | 22 - .../URLSession/PFURLSessionCommandRunner.m | 286 - .../PFURLSessionCommandRunner_Private.h | 29 - .../URLSession/Session/PFURLSession.h | 73 - .../URLSession/Session/PFURLSession.m | 264 - .../URLSession/Session/PFURLSession_Private.h | 24 - .../PFURLSessionDataTaskDelegate.h | 37 - .../PFURLSessionDataTaskDelegate.m | 180 - .../PFURLSessionDataTaskDelegate_Private.h | 34 - .../PFURLSessionFileDownloadTaskDelegate.h | 35 - .../PFURLSessionFileDownloadTaskDelegate.m | 101 - .../PFURLSessionJSONDataTaskDelegate.h | 20 - .../PFURLSessionJSONDataTaskDelegate.m | 90 - .../PFURLSessionUploadTaskDelegate.h | 29 - .../PFURLSessionUploadTaskDelegate.m | 56 - .../Commands/PFRESTAnalyticsCommand.h | 31 - .../Commands/PFRESTAnalyticsCommand.m | 61 - .../Internal/Commands/PFRESTCloudCommand.h | 22 - .../Internal/Commands/PFRESTCloudCommand.m | 27 - .../Parse/Internal/Commands/PFRESTCommand.h | 45 - .../Parse/Internal/Commands/PFRESTCommand.m | 230 - .../Internal/Commands/PFRESTCommand_Private.h | 25 - .../Internal/Commands/PFRESTConfigCommand.h | 22 - .../Internal/Commands/PFRESTConfigCommand.m | 33 - .../Internal/Commands/PFRESTFileCommand.h | 21 - .../Internal/Commands/PFRESTFileCommand.m | 29 - .../Commands/PFRESTObjectBatchCommand.h | 22 - .../Commands/PFRESTObjectBatchCommand.m | 42 - .../Internal/Commands/PFRESTObjectCommand.h | 36 - .../Internal/Commands/PFRESTObjectCommand.m | 77 - .../Internal/Commands/PFRESTPushCommand.h | 25 - .../Internal/Commands/PFRESTPushCommand.m | 57 - .../Internal/Commands/PFRESTQueryCommand.h | 57 - .../Internal/Commands/PFRESTQueryCommand.m | 200 - .../Internal/Commands/PFRESTSessionCommand.h | 20 - .../Internal/Commands/PFRESTSessionCommand.m | 23 - .../Internal/Commands/PFRESTUserCommand.h | 56 - .../Internal/Commands/PFRESTUserCommand.m | 132 - .../Config/Controller/PFConfigController.h | 48 - .../Config/Controller/PFConfigController.m | 95 - .../Controller/PFCurrentConfigController.h | 43 - .../Controller/PFCurrentConfigController.m | 109 - .../Parse/Internal/Config/PFConfig_Private.h | 22 - .../FieldOperation/PFFieldOperation.h | 168 - .../FieldOperation/PFFieldOperation.m | 552 -- .../FieldOperation/PFFieldOperationDecoder.h | 39 - .../FieldOperation/PFFieldOperationDecoder.m | 126 - .../File/Controller/PFFileController.h | 99 - .../File/Controller/PFFileController.m | 269 - .../File/Controller/PFFileStagingController.h | 74 - .../File/Controller/PFFileStagingController.m | 96 - .../File/FileDataStream/PFFileDataStream.h | 31 - .../File/FileDataStream/PFFileDataStream.m | 112 - .../Parse/Internal/File/PFFile_Private.h | 29 - .../Parse/Internal/File/State/PFFileState.h | 35 - .../Parse/Internal/File/State/PFFileState.m | 106 - .../Internal/File/State/PFFileState_Private.h | 22 - .../Internal/File/State/PFMutableFileState.h | 22 - .../Internal/File/State/PFMutableFileState.m | 18 - .../Internal/HTTPRequest/PFHTTPRequest.h | 24 - .../HTTPRequest/PFHTTPURLRequestConstructor.h | 19 - .../HTTPRequest/PFHTTPURLRequestConstructor.m | 52 - .../Internal/HTTPRequest/PFURLConstructor.h | 22 - .../Internal/HTTPRequest/PFURLConstructor.m | 33 - .../Constants/PFInstallationConstants.h | 22 - .../Constants/PFInstallationConstants.m | 22 - .../Controller/PFInstallationController.h | 31 - .../Controller/PFInstallationController.m | 105 - .../PFCurrentInstallationController.h | 52 - .../PFCurrentInstallationController.m | 289 - .../PFInstallationIdentifierStore.h | 39 - .../PFInstallationIdentifierStore.m | 118 - .../PFInstallationIdentifierStore_Private.h | 19 - .../Installation/PFInstallationPrivate.h | 28 - .../Internal/KeyValueCache/PFKeyValueCache.h | 47 - .../Internal/KeyValueCache/PFKeyValueCache.m | 336 -- .../KeyValueCache/PFKeyValueCache_Private.h | 66 - .../OfflineQueryLogic/PFOfflineQueryLogic.h | 79 - .../OfflineQueryLogic/PFOfflineQueryLogic.m | 918 ---- .../OfflineStore/PFOfflineStore.h | 201 - .../OfflineStore/PFOfflineStore.m | 1067 ---- .../Parse/Internal/LocalDataStore/Pin/PFPin.h | 33 - .../Parse/Internal/LocalDataStore/Pin/PFPin.m | 81 - .../LocalDataStore/SQLite/PFSQLiteDatabase.h | 115 - .../LocalDataStore/SQLite/PFSQLiteDatabase.m | 339 -- .../SQLite/PFSQLiteDatabaseController.h | 49 - .../SQLite/PFSQLiteDatabaseController.m | 79 - .../SQLite/PFSQLiteDatabaseResult.h | 70 - .../SQLite/PFSQLiteDatabaseResult.m | 168 - .../SQLite/PFSQLiteDatabase_Private.h | 20 - .../LocalDataStore/SQLite/PFSQLiteStatement.h | 30 - .../LocalDataStore/SQLite/PFSQLiteStatement.m | 49 - .../MultiProcessLock/PFMultiProcessFileLock.h | 26 - .../MultiProcessLock/PFMultiProcessFileLock.m | 105 - .../PFMultiProcessFileLockController.h | 36 - .../PFMultiProcessFileLockController.m | 88 - .../BatchController/PFObjectBatchController.h | 55 - .../BatchController/PFObjectBatchController.m | 229 - .../Object/Coder/File/PFObjectFileCoder.h | 38 - .../Object/Coder/File/PFObjectFileCoder.m | 44 - .../Coder/File/PFObjectFileCodingLogic.h | 33 - .../Coder/File/PFObjectFileCodingLogic.m | 58 - .../Object/Constants/PFObjectConstants.h | 23 - .../Object/Constants/PFObjectConstants.m | 22 - .../PFOfflineObjectController.h | 27 - .../PFOfflineObjectController.m | 86 - .../Object/Controller/PFObjectController.h | 35 - .../Object/Controller/PFObjectController.m | 126 - .../Controller/PFObjectController_Private.h | 22 - .../Object/Controller/PFObjectControlling.h | 58 - .../PFCurrentObjectControlling.h | 37 - .../EstimatedData/PFObjectEstimatedData.h | 44 - .../EstimatedData/PFObjectEstimatedData.m | 86 - .../PFObjectFilePersistenceController.h | 55 - .../PFObjectFilePersistenceController.m | 98 - .../LocalIdStore/PFObjectLocalIdStore.h | 49 - .../LocalIdStore/PFObjectLocalIdStore.m | 291 - .../Object/OperationSet/PFOperationSet.h | 70 - .../Object/OperationSet/PFOperationSet.m | 196 - .../Parse/Internal/Object/PFObjectPrivate.h | 306 -- .../PinningStore/PFPinningObjectStore.h | 84 - .../PinningStore/PFPinningObjectStore.m | 163 - .../Object/State/PFMutableObjectState.h | 45 - .../Object/State/PFMutableObjectState.m | 61 - .../Internal/Object/State/PFObjectState.h | 60 - .../Internal/Object/State/PFObjectState.m | 179 - .../Object/State/PFObjectState_Private.h | 57 - .../Object/Subclassing/PFObjectSubclassInfo.h | 25 - .../Object/Subclassing/PFObjectSubclassInfo.m | 203 - .../PFObjectSubclassingController.h | 40 - .../PFObjectSubclassingController.m | 317 -- .../Object/Utilities/PFObjectUtilities.h | 36 - .../Object/Utilities/PFObjectUtilities.m | 48 - .../Pods/Parse/Parse/Internal/PFAlertView.h | 23 - .../Pods/Parse/Parse/Internal/PFAlertView.m | 109 - .../Pods/Parse/Parse/Internal/PFApplication.h | 38 - .../Pods/Parse/Parse/Internal/PFApplication.m | 93 - FoodbLog/Pods/Parse/Parse/Internal/PFAssert.h | 94 - .../Parse/Parse/Internal/PFAsyncTaskQueue.h | 24 - .../Parse/Parse/Internal/PFAsyncTaskQueue.m | 70 - .../Parse/Parse/Internal/PFBase64Encoder.h | 17 - .../Parse/Parse/Internal/PFBase64Encoder.m | 28 - .../Pods/Parse/Parse/Internal/PFBaseState.h | 76 - .../Pods/Parse/Parse/Internal/PFBaseState.m | 267 - .../Parse/Parse/Internal/PFCategoryLoader.h | 16 - .../Parse/Parse/Internal/PFCategoryLoader.m | 20 - .../Parse/Parse/Internal/PFCommandCache.h | 52 - .../Parse/Parse/Internal/PFCommandCache.m | 330 -- .../Parse/Internal/PFCommandCache_Private.h | 16 - .../Parse/Parse/Internal/PFCommandResult.h | 34 - .../Parse/Parse/Internal/PFCommandResult.m | 43 - .../Parse/Parse/Internal/PFCoreDataProvider.h | 101 - .../Pods/Parse/Parse/Internal/PFCoreManager.h | 78 - .../Pods/Parse/Parse/Internal/PFCoreManager.m | 447 -- .../Parse/Parse/Internal/PFDataProvider.h | 90 - .../Parse/Parse/Internal/PFDateFormatter.h | 55 - .../Parse/Parse/Internal/PFDateFormatter.m | 118 - .../Pods/Parse/Parse/Internal/PFDecoder.h | 49 - .../Pods/Parse/Parse/Internal/PFDecoder.m | 194 - FoodbLog/Pods/Parse/Parse/Internal/PFDevice.h | 24 - FoodbLog/Pods/Parse/Parse/Internal/PFDevice.m | 134 - .../Pods/Parse/Parse/Internal/PFEncoder.h | 67 - .../Pods/Parse/Parse/Internal/PFEncoder.m | 250 - .../Parse/Parse/Internal/PFErrorUtilities.h | 45 - .../Parse/Parse/Internal/PFErrorUtilities.m | 48 - .../Parse/Parse/Internal/PFEventuallyPin.h | 76 - .../Parse/Parse/Internal/PFEventuallyPin.m | 188 - .../Parse/Parse/Internal/PFEventuallyQueue.h | 94 - .../Parse/Parse/Internal/PFEventuallyQueue.m | 503 -- .../Internal/PFEventuallyQueue_Private.h | 133 - .../Pods/Parse/Parse/Internal/PFFileManager.h | 77 - .../Pods/Parse/Parse/Internal/PFFileManager.m | 367 -- .../Parse/Parse/Internal/PFGeoPointPrivate.h | 33 - FoodbLog/Pods/Parse/Parse/Internal/PFHash.h | 21 - FoodbLog/Pods/Parse/Parse/Internal/PFHash.m | 76 - .../Parse/Parse/Internal/PFInternalUtils.h | 76 - .../Parse/Parse/Internal/PFInternalUtils.m | 298 -- .../Parse/Internal/PFJSONSerialization.h | 65 - .../Parse/Internal/PFJSONSerialization.m | 72 - .../Parse/Parse/Internal/PFKeychainStore.h | 37 - .../Parse/Parse/Internal/PFKeychainStore.m | 200 - .../Parse/Parse/Internal/PFLocationManager.h | 56 - .../Parse/Parse/Internal/PFLocationManager.m | 153 - FoodbLog/Pods/Parse/Parse/Internal/PFLogger.h | 47 - FoodbLog/Pods/Parse/Parse/Internal/PFLogger.m | 105 - .../Pods/Parse/Parse/Internal/PFLogging.h | 40 - FoodbLog/Pods/Parse/Parse/Internal/PFMacros.h | 137 - .../Parse/Internal/PFMulticastDelegate.h | 31 - .../Parse/Internal/PFMulticastDelegate.m | 39 - .../Parse/Parse/Internal/PFNetworkCommand.h | 47 - .../Parse/Internal/PFPinningEventuallyQueue.h | 22 - .../Parse/Internal/PFPinningEventuallyQueue.m | 327 -- .../Parse/Parse/Internal/PFReachability.h | 61 - .../Parse/Parse/Internal/PFReachability.m | 213 - .../Pods/Parse/Parse/Internal/PFTaskQueue.h | 29 - .../Pods/Parse/Parse/Internal/PFTaskQueue.m | 50 - .../Pods/Parse/Parse/Internal/PFWeakValue.h | 18 - .../Pods/Parse/Parse/Internal/PFWeakValue.m | 26 - .../Pods/Parse/Parse/Internal/ParseInternal.h | 31 - .../Pods/Parse/Parse/Internal/ParseManager.h | 101 - .../Pods/Parse/Parse/Internal/ParseManager.m | 466 -- .../Pods/Parse/Parse/Internal/ParseModule.h | 26 - .../Pods/Parse/Parse/Internal/ParseModule.m | 134 - .../Pods/Parse/Parse/Internal/Parse_Private.h | 25 - .../Internal/Product/PFProduct+Private.h | 46 - .../PFProductsRequestHandler.h | 37 - .../PFProductsRequestHandler.m | 92 - .../Internal/PropertyInfo/PFPropertyInfo.h | 50 - .../Internal/PropertyInfo/PFPropertyInfo.m | 212 - .../PropertyInfo/PFPropertyInfo_Private.h | 25 - .../PropertyInfo/PFPropertyInfo_Runtime.h | 44 - .../PropertyInfo/PFPropertyInfo_Runtime.m | 122 - .../Controller/PFPurchaseController.h | 62 - .../Controller/PFPurchaseController.m | 241 - .../PFPaymentTransactionObserver.h | 29 - .../PFPaymentTransactionObserver.m | 105 - .../PFPaymentTransactionObserver_Private.h | 19 - .../PFPushChannelsController.h | 47 - .../PFPushChannelsController.m | 120 - .../Push/Controller/PFPushController.h | 49 - .../Push/Controller/PFPushController.m | 57 - .../Internal/Push/Manager/PFPushManager.h | 43 - .../Internal/Push/Manager/PFPushManager.m | 95 - .../Parse/Parse/Internal/Push/PFPushPrivate.h | 43 - .../Internal/Push/State/PFMutablePushState.h | 32 - .../Internal/Push/State/PFMutablePushState.m | 34 - .../Parse/Internal/Push/State/PFPushState.h | 39 - .../Parse/Internal/Push/State/PFPushState.m | 60 - .../Internal/Push/State/PFPushState_Private.h | 26 - .../Internal/Push/Utilites/PFPushUtilities.h | 20 - .../Internal/Push/Utilites/PFPushUtilities.m | 91 - .../Controller/PFCachedQueryController.h | 25 - .../Controller/PFCachedQueryController.m | 208 - .../Controller/PFOfflineQueryController.h | 31 - .../Controller/PFOfflineQueryController.m | 180 - .../Query/Controller/PFQueryController.h | 104 - .../Query/Controller/PFQueryController.m | 160 - .../Parse/Internal/Query/PFQueryPrivate.h | 56 - .../Query/State/PFMutableQueryState.h | 81 - .../Query/State/PFMutableQueryState.m | 177 - .../Parse/Internal/Query/State/PFQueryState.h | 65 - .../Parse/Internal/Query/State/PFQueryState.m | 88 - .../Query/State/PFQueryState_Private.h | 61 - .../Query/Utilities/PFQueryUtilities.h | 42 - .../Query/Utilities/PFQueryUtilities.m | 530 -- .../Internal/Relation/PFRelationPrivate.h | 27 - .../Relation/State/PFMutableRelationState.h | 19 - .../Relation/State/PFMutableRelationState.m | 62 - .../Internal/Relation/State/PFRelationState.h | 30 - .../Internal/Relation/State/PFRelationState.m | 65 - .../Relation/State/PFRelationState_Private.h | 28 - .../Session/Controller/PFSessionController.h | 40 - .../Session/Controller/PFSessionController.m | 60 - .../Internal/Session/PFSession_Private.h | 24 - .../Session/Utilities/PFSessionUtilities.h | 24 - .../Session/Utilities/PFSessionUtilities.m | 22 - .../Internal/ThreadSafety/PFThreadsafety.h | 13 - .../Internal/ThreadSafety/PFThreadsafety.m | 33 - .../PFUserAuthenticationController.h | 61 - .../PFUserAuthenticationController.m | 171 - .../PFAnonymousAuthenticationProvider.h | 27 - .../PFAnonymousAuthenticationProvider.m | 36 - .../Anonymous/PFAnonymousUtils_Private.h | 22 - .../User/Coder/File/PFUserFileCodingLogic.h | 18 - .../User/Coder/File/PFUserFileCodingLogic.m | 60 - .../Internal/User/Constants/PFUserConstants.h | 15 - .../Internal/User/Constants/PFUserConstants.m | 15 - .../User/Controller/PFUserController.h | 61 - .../User/Controller/PFUserController.m | 164 - .../PFCurrentUserController.h | 59 - .../PFCurrentUserController.m | 364 -- .../Parse/Parse/Internal/User/PFUserPrivate.h | 79 - .../Internal/User/State/PFMutableUserState.h | 19 - .../Internal/User/State/PFMutableUserState.m | 20 - .../Parse/Internal/User/State/PFUserState.h | 26 - .../Parse/Internal/User/State/PFUserState.m | 64 - .../Internal/User/State/PFUserState_Private.h | 25 - FoodbLog/Pods/Parse/Parse/PFACL.h | 264 - FoodbLog/Pods/Parse/Parse/PFACL.m | 363 -- FoodbLog/Pods/Parse/Parse/PFAnalytics.h | 167 - FoodbLog/Pods/Parse/Parse/PFAnalytics.m | 91 - FoodbLog/Pods/Parse/Parse/PFAnonymousUtils.h | 82 - FoodbLog/Pods/Parse/Parse/PFAnonymousUtils.m | 91 - FoodbLog/Pods/Parse/Parse/PFCloud.h | 91 - FoodbLog/Pods/Parse/Parse/PFCloud.m | 58 - FoodbLog/Pods/Parse/Parse/PFConfig.h | 106 - FoodbLog/Pods/Parse/Parse/PFConfig.m | 113 - FoodbLog/Pods/Parse/Parse/PFConstants.h | 509 -- FoodbLog/Pods/Parse/Parse/PFConstants.m | 32 - FoodbLog/Pods/Parse/Parse/PFFile.h | 446 -- FoodbLog/Pods/Parse/Parse/PFFile.m | 546 -- FoodbLog/Pods/Parse/Parse/PFGeoPoint.h | 114 - FoodbLog/Pods/Parse/Parse/PFGeoPoint.m | 193 - FoodbLog/Pods/Parse/Parse/PFInstallation.h | 113 - FoodbLog/Pods/Parse/Parse/PFInstallation.m | 342 -- .../Parse/PFNetworkActivityIndicatorManager.h | 70 - .../Parse/PFNetworkActivityIndicatorManager.m | 165 - FoodbLog/Pods/Parse/Parse/PFNullability.h | 47 - FoodbLog/Pods/Parse/Parse/PFObject+Subclass.h | 125 - FoodbLog/Pods/Parse/Parse/PFObject.h | 1429 ----- FoodbLog/Pods/Parse/Parse/PFObject.m | 2770 ---------- FoodbLog/Pods/Parse/Parse/PFProduct.h | 70 - FoodbLog/Pods/Parse/Parse/PFProduct.m | 48 - FoodbLog/Pods/Parse/Parse/PFPurchase.h | 98 - FoodbLog/Pods/Parse/Parse/PFPurchase.m | 89 - FoodbLog/Pods/Parse/Parse/PFPush.h | 532 -- FoodbLog/Pods/Parse/Parse/PFPush.m | 464 -- FoodbLog/Pods/Parse/Parse/PFQuery.h | 892 ---- FoodbLog/Pods/Parse/Parse/PFQuery.m | 1136 ---- FoodbLog/Pods/Parse/Parse/PFRelation.h | 58 - FoodbLog/Pods/Parse/Parse/PFRelation.m | 236 - FoodbLog/Pods/Parse/Parse/PFRole.h | 100 - FoodbLog/Pods/Parse/Parse/PFRole.m | 91 - FoodbLog/Pods/Parse/Parse/PFSession.h | 52 - FoodbLog/Pods/Parse/Parse/PFSession.m | 106 - FoodbLog/Pods/Parse/Parse/PFSubclassing.h | 87 - FoodbLog/Pods/Parse/Parse/PFUser.h | 519 -- FoodbLog/Pods/Parse/Parse/PFUser.m | 1225 ----- .../Parse/PFUserAuthenticationDelegate.h | 36 - FoodbLog/Pods/Parse/Parse/Parse.h | 195 - FoodbLog/Pods/Parse/Parse/Parse.m | 235 - .../Parse/Resources/en.lproj/Parse.strings | Bin 122 -> 0 bytes FoodbLog/Pods/Parse/README.md | 106 - FoodbLog/Pods/ParseUI/LICENSE | 17 - .../Classes/Cells/PFCollectionViewCell.h | 61 - .../Classes/Cells/PFCollectionViewCell.m | 97 - .../Classes/Cells/PFPurchaseTableViewCell.h | 68 - .../Classes/Cells/PFPurchaseTableViewCell.m | 154 - .../ParseUI/Classes/Cells/PFTableViewCell.h | 46 - .../ParseUI/Classes/Cells/PFTableViewCell.m | 120 - ...FActivityIndicatorCollectionReusableView.h | 38 - ...FActivityIndicatorCollectionReusableView.m | 115 - .../Cells/PFActivityIndicatorTableViewCell.h | 34 - .../Cells/PFActivityIndicatorTableViewCell.m | 64 - .../Classes/Internal/Extensions/PFColor.h | 50 - .../Classes/Internal/Extensions/PFColor.m | 86 - .../Classes/Internal/Extensions/PFImage.h | 31 - .../Classes/Internal/Extensions/PFImage.m | 111 - .../Classes/Internal/Extensions/PFRect.h | 30 - .../Classes/Internal/Extensions/PFRect.m | 48 - .../Internal/Extensions/PFUIAlertView.h | 64 - .../Internal/Extensions/PFUIAlertView.m | 213 - .../ParseUI/Classes/Internal/PFImageCache.h | 34 - .../ParseUI/Classes/Internal/PFImageCache.m | 47 - .../ParseUI/Classes/Internal/PFLocalization.h | 28 - .../Internal/Views/Buttons/PFActionButton.h | 65 - .../Internal/Views/Buttons/PFActionButton.m | 202 - .../Internal/Views/Buttons/PFDismissButton.h | 26 - .../Internal/Views/Buttons/PFDismissButton.m | 84 - .../Internal/Views/Buttons/PFPrimaryButton.h | 31 - .../Internal/Views/Buttons/PFPrimaryButton.m | 110 - .../Internal/Views/Buttons/PFTextButton.h | 26 - .../Internal/Views/Buttons/PFTextButton.m | 53 - .../Classes/Internal/Views/PFLoadingView.h | 29 - .../Classes/Internal/Views/PFLoadingView.m | 80 - .../Classes/LogInViewController/PFLogInView.h | 186 - .../Classes/LogInViewController/PFLogInView.m | 509 -- .../PFLogInViewController.h | 177 - .../PFLogInViewController.m | 593 --- .../LogInViewController/PFLogInView_Private.h | 28 - .../PFProductTableViewController.h | 47 - .../PFProductTableViewController.m | 249 - .../PFQueryCollectionViewController.h | 228 - .../PFQueryCollectionViewController.m | 435 -- .../PFQueryTableViewController.h | 259 - .../PFQueryTableViewController.m | 570 -- .../SignUpViewController/PFSignUpView.h | 156 - .../SignUpViewController/PFSignUpView.m | 336 -- .../PFSignUpViewController.h | 161 - .../PFSignUpViewController.m | 513 -- .../ParseUI/Classes/Views/PFImageView.h | 79 - .../ParseUI/Classes/Views/PFImageView.m | 150 - .../ParseUI/Classes/Views/PFTextField.h | 77 - .../ParseUI/Classes/Views/PFTextField.m | 120 - .../ParseUI/ParseUI/Generated/PFResources.h | 13 - .../ParseUI/ParseUI/Generated/PFResources.m | 76 - FoodbLog/Pods/ParseUI/ParseUI/Other/ParseUI.h | 34 - .../ParseUI/ParseUI/Other/ParseUIConstants.h | 44 - .../Localization/en.lproj/ParseUI.strings | Bin 6528 -> 0 bytes FoodbLog/Pods/ParseUI/README.md | 115 - FoodbLog/Pods/Pods.xcodeproj/project.pbxproj | 4696 ----------------- .../xcschemes/AFNetworking.xcscheme | 58 - .../xcschemes/Bolts.xcscheme | 58 - .../xcschemes/ChameleonFramework.xcscheme | 58 - .../xcschemes/FlatUIKit.xcscheme | 58 - .../xcschemes/IQKeyboardManager.xcscheme | 58 - .../xcschemes/Parse.xcscheme | 58 - .../xcschemes/ParseUI.xcscheme | 58 - .../xcschemes/Pods-FoodbLog.xcscheme | 58 - .../xcschemes/SDWebImage.xcscheme | 58 - .../xcschemes/Unirest.xcscheme | 58 - .../xcschemes/xcschememanagement.plist | 81 - FoodbLog/Pods/SDWebImage/LICENSE | 20 - FoodbLog/Pods/SDWebImage/README.md | 315 -- .../SDWebImage/NSData+ImageContentType.h | 26 - .../SDWebImage/NSData+ImageContentType.m | 49 - .../Pods/SDWebImage/SDWebImage/SDImageCache.h | 262 - .../Pods/SDWebImage/SDWebImage/SDImageCache.m | 601 --- .../SDWebImage/SDWebImage/SDWebImageCompat.h | 72 - .../SDWebImage/SDWebImage/SDWebImageCompat.m | 51 - .../SDWebImage/SDWebImage/SDWebImageDecoder.h | 18 - .../SDWebImage/SDWebImage/SDWebImageDecoder.m | 72 - .../SDWebImage/SDWebImageDownloader.h | 186 - .../SDWebImage/SDWebImageDownloader.m | 228 - .../SDWebImageDownloaderOperation.h | 78 - .../SDWebImageDownloaderOperation.m | 466 -- .../SDWebImage/SDWebImage/SDWebImageManager.h | 299 -- .../SDWebImage/SDWebImage/SDWebImageManager.m | 354 -- .../SDWebImage/SDWebImageOperation.h | 15 - .../SDWebImage/SDWebImagePrefetcher.h | 103 - .../SDWebImage/SDWebImagePrefetcher.m | 145 - .../SDWebImage/SDWebImage/UIButton+WebCache.h | 229 - .../SDWebImage/SDWebImage/UIButton+WebCache.m | 260 - .../Pods/SDWebImage/SDWebImage/UIImage+GIF.h | 19 - .../Pods/SDWebImage/SDWebImage/UIImage+GIF.m | 158 - .../SDWebImage/UIImage+MultiFormat.h | 15 - .../SDWebImage/UIImage+MultiFormat.m | 118 - .../UIImageView+HighlightedWebCache.h | 100 - .../UIImageView+HighlightedWebCache.m | 107 - .../SDWebImage/UIImageView+WebCache.h | 201 - .../SDWebImage/UIImageView+WebCache.m | 202 - .../SDWebImage/UIView+WebCacheOperation.h | 36 - .../SDWebImage/UIView+WebCacheOperation.m | 55 - .../AFNetworking/AFNetworking-Info.plist | 26 - .../AFNetworking/AFNetworking-dummy.m | 5 - .../AFNetworking/AFNetworking-prefix.pch | 19 - .../AFNetworking/AFNetworking-umbrella.h | 36 - .../AFNetworking/AFNetworking.debug.xcconfig | 12 - .../AFNetworking/AFNetworking.modulemap | 6 - .../AFNetworking.release.xcconfig | 12 - .../Bolts/Bolts-Info.plist | 26 - .../Target Support Files/Bolts/Bolts-dummy.m | 5 - .../Bolts/Bolts-prefix.pch | 12 - .../Bolts/Bolts-umbrella.h | 25 - .../Bolts/Bolts.debug.xcconfig | 11 - .../Bolts/Bolts.modulemap | 6 - .../Bolts/Bolts.release.xcconfig | 11 - .../ChameleonFramework-Info.plist | 26 - .../ChameleonFramework-dummy.m | 5 - .../ChameleonFramework-prefix.pch | 12 - .../ChameleonFramework-umbrella.h | 44 - .../ChameleonFramework.debug.xcconfig | 12 - .../ChameleonFramework.modulemap | 6 - .../ChameleonFramework.release.xcconfig | 12 - .../FlatUIKit/FlatUIKit-Info.plist | 26 - .../FlatUIKit/FlatUIKit-dummy.m | 5 - .../FlatUIKit/FlatUIKit-prefix.pch | 12 - .../FlatUIKit/FlatUIKit-umbrella.h | 37 - .../FlatUIKit/FlatUIKit.debug.xcconfig | 12 - .../FlatUIKit/FlatUIKit.modulemap | 6 - .../FlatUIKit/FlatUIKit.release.xcconfig | 12 - .../IQKeyboardManager-Info.plist | 26 - .../IQKeyboardManager-dummy.m | 5 - .../IQKeyboardManager-prefix.pch | 12 - .../IQKeyboardManager-umbrella.h | 32 - .../IQKeyboardManager.debug.xcconfig | 12 - .../IQKeyboardManager.modulemap | 6 - .../IQKeyboardManager.release.xcconfig | 12 - .../Parse/Parse-Info.plist | 26 - .../Target Support Files/Parse/Parse-dummy.m | 5 - .../Parse/Parse-prefix.pch | 12 - .../Parse/Parse-umbrella.h | 40 - .../Parse/Parse.debug.xcconfig | 13 - .../Parse/Parse.modulemap | 6 - .../Parse/Parse.release.xcconfig | 13 - .../ParseUI/ParseUI-Info.plist | 26 - .../ParseUI/ParseUI-dummy.m | 5 - .../ParseUI/ParseUI-prefix.pch | 12 - .../ParseUI/ParseUI-umbrella.h | 31 - .../ParseUI/ParseUI.debug.xcconfig | 13 - .../ParseUI/ParseUI.modulemap | 6 - .../ParseUI/ParseUI.release.xcconfig | 13 - .../Pods-FoodbLog/Pods-FoodbLog-Info.plist | 26 - .../Pods-FoodbLog-acknowledgements.markdown | 211 - .../Pods-FoodbLog-acknowledgements.plist | 291 - .../Pods-FoodbLog/Pods-FoodbLog-dummy.m | 5 - .../Pods-FoodbLog/Pods-FoodbLog-frameworks.sh | 202 - .../Pods-FoodbLog/Pods-FoodbLog-umbrella.h | 16 - .../Pods-FoodbLog.debug.xcconfig | 12 - .../Pods-FoodbLog/Pods-FoodbLog.modulemap | 6 - .../Pods-FoodbLog.release.xcconfig | 12 - .../SDWebImage/SDWebImage-Info.plist | 26 - .../SDWebImage/SDWebImage-dummy.m | 5 - .../SDWebImage/SDWebImage-prefix.pch | 12 - .../SDWebImage/SDWebImage-umbrella.h | 31 - .../SDWebImage/SDWebImage.debug.xcconfig | 12 - .../SDWebImage/SDWebImage.modulemap | 6 - .../SDWebImage/SDWebImage.release.xcconfig | 12 - .../Unirest/Unirest-Info.plist | 26 - .../Unirest/Unirest-dummy.m | 5 - .../Unirest/Unirest-prefix.pch | 12 - .../Unirest/Unirest-umbrella.h | 30 - .../Unirest/Unirest.debug.xcconfig | 11 - .../Unirest/Unirest.modulemap | 6 - .../Unirest/Unirest.release.xcconfig | 11 - FoodbLog/Pods/Unirest/LICENSE | 22 - FoodbLog/Pods/Unirest/README.md | 281 - FoodbLog/Pods/Unirest/Unirest/Base64.h | 30 - FoodbLog/Pods/Unirest/Unirest/Base64.m | 63 - .../Unirest/HttpRequest/UNIBaseRequest.h | 35 - .../Unirest/HttpRequest/UNIBaseRequest.m | 30 - .../Unirest/HttpRequest/UNIBodyRequest.h | 32 - .../Unirest/HttpRequest/UNIBodyRequest.m | 30 - .../Unirest/HttpRequest/UNISimpleRequest.h | 32 - .../Unirest/HttpRequest/UNISimpleRequest.m | 30 - .../HttpResponse/UNIHTTPBinaryResponse.h | 34 - .../HttpResponse/UNIHTTPBinaryResponse.m | 41 - .../HttpResponse/UNIHTTPJsonResponse.h | 35 - .../HttpResponse/UNIHTTPJsonResponse.m | 53 - .../Unirest/HttpResponse/UNIHTTPResponse.h | 32 - .../Unirest/HttpResponse/UNIHTTPResponse.m | 30 - .../HttpResponse/UNIHTTPStringResponse.h | 34 - .../HttpResponse/UNIHTTPStringResponse.m | 44 - .../Unirest/HttpResponse/UNIJsonNode.h | 37 - .../Unirest/HttpResponse/UNIJsonNode.m | 42 - .../Unirest/Unirest/UNIHTTPClientHelper.h | 42 - .../Unirest/Unirest/UNIHTTPClientHelper.m | 239 - .../Pods/Unirest/Unirest/UNIHTTPRequest.h | 66 - .../Pods/Unirest/Unirest/UNIHTTPRequest.m | 110 - .../Unirest/Unirest/UNIHTTPRequestWithBody.h | 37 - .../Unirest/Unirest/UNIHTTPRequestWithBody.m | 45 - FoodbLog/Pods/Unirest/Unirest/UNIRest.h | 61 - FoodbLog/Pods/Unirest/Unirest/UNIRest.m | 126 - .../Pods/Unirest/Unirest/UNIUrlConnection.h | 38 - .../Pods/Unirest/Unirest/UNIUrlConnection.m | 113 - 724 files changed, 92713 deletions(-) delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFNetworking.h delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h delete mode 100644 FoodbLog/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m delete mode 100644 FoodbLog/Pods/AFNetworking/LICENSE delete mode 100644 FoodbLog/Pods/AFNetworking/README.md delete mode 100644 FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h delete mode 100644 FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m delete mode 100644 FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h delete mode 100644 FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m delete mode 100644 FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h delete mode 100644 FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m delete mode 100644 FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h delete mode 100644 FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m delete mode 100644 FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h delete mode 100644 FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h delete mode 100644 FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m delete mode 100644 FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h delete mode 100644 FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h delete mode 100644 FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m delete mode 100644 FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h delete mode 100644 FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m delete mode 100644 FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h delete mode 100644 FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m delete mode 100644 FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationToken.h delete mode 100644 FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationToken.m delete mode 100644 FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h delete mode 100644 FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m delete mode 100644 FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h delete mode 100644 FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m delete mode 100644 FoodbLog/Pods/Bolts/Bolts/Common/BFDefines.h delete mode 100644 FoodbLog/Pods/Bolts/Bolts/Common/BFExecutor.h delete mode 100644 FoodbLog/Pods/Bolts/Bolts/Common/BFExecutor.m delete mode 100644 FoodbLog/Pods/Bolts/Bolts/Common/BFTask.h delete mode 100644 FoodbLog/Pods/Bolts/Bolts/Common/BFTask.m delete mode 100644 FoodbLog/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h delete mode 100644 FoodbLog/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m delete mode 100644 FoodbLog/Pods/Bolts/Bolts/Common/Bolts.h delete mode 100644 FoodbLog/Pods/Bolts/Bolts/Common/Bolts.m delete mode 100644 FoodbLog/Pods/Bolts/Bolts/Common/BoltsVersion.h delete mode 100644 FoodbLog/Pods/Bolts/LICENSE delete mode 100644 FoodbLog/Pods/Bolts/README.md delete mode 100755 FoodbLog/Pods/ChameleonFramework/LICENSE.md delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/Chameleon.h delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/ChameleonConstants.h delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/ChameleonConstants.m delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/ChameleonEnums.h delete mode 100755 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/ChameleonMacros.h delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/Chameleon_.h delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/Chameleon_.m delete mode 100755 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/NSArray+Chameleon.h delete mode 100755 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/NSArray+Chameleon.m delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIButton+Chameleon.h delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIButton+Chameleon.m delete mode 100755 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIColor+Chameleon.h delete mode 100755 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIColor+Chameleon.m delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIColor+ChameleonPrivate.h delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIColor+ChameleonPrivate.m delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIImage+ChameleonPrivate.h delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIImage+ChameleonPrivate.m delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UILabel+Chameleon.h delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UILabel+Chameleon.m delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UINavigationController+Chameleon.h delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UINavigationController+Chameleon.m delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIView+ChameleonPrivate.h delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIView+ChameleonPrivate.m delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIViewController+Chameleon.h delete mode 100644 FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIViewController+Chameleon.m delete mode 100644 FoodbLog/Pods/ChameleonFramework/README.md delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/FUIAlertView.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/FUIAlertView.m delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/FUIButton.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/FUIButton.m delete mode 100755 FoodbLog/Pods/FlatUIKit/Classes/ios/FUICellBackgroundView.h delete mode 100755 FoodbLog/Pods/FlatUIKit/Classes/ios/FUICellBackgroundView.m delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/FUIPopoverBackgroundView.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/FUIPopoverBackgroundView.m delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/FUISegmentedControl.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/FUISegmentedControl.m delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/FUISwitch.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/FUISwitch.m delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/FUITextField.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/FUITextField.m delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/FlatUIKit.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/NSString+Icons.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/NSString+Icons.m delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UIBarButtonItem+FlatUI.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UIBarButtonItem+FlatUI.m delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UIColor+FlatUI.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UIColor+FlatUI.m delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UIFont+FlatUI.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UIFont+FlatUI.m delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UIImage+FlatUI.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UIImage+FlatUI.m delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UINavigationBar+FlatUI.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UINavigationBar+FlatUI.m delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UIPopoverController+FlatUI.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UIPopoverController+FlatUI.m delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UIProgressView+FlatUI.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UIProgressView+FlatUI.m delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UISlider+FlatUI.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UISlider+FlatUI.m delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UIStepper+FlatUI.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UIStepper+FlatUI.m delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UITabBar+FlatUI.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UITabBar+FlatUI.m delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UITableViewCell+FlatUI.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UITableViewCell+FlatUI.m delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UIToolbar+FlatUI.h delete mode 100644 FoodbLog/Pods/FlatUIKit/Classes/ios/UIToolbar+FlatUI.m delete mode 100644 FoodbLog/Pods/FlatUIKit/LICENSE delete mode 100644 FoodbLog/Pods/FlatUIKit/README.markdown delete mode 100644 FoodbLog/Pods/FlatUIKit/Resources/Lato-Bold.ttf delete mode 100644 FoodbLog/Pods/FlatUIKit/Resources/Lato-Italic.ttf delete mode 100644 FoodbLog/Pods/FlatUIKit/Resources/Lato-Light.ttf delete mode 100644 FoodbLog/Pods/FlatUIKit/Resources/Lato-Regular.ttf delete mode 100755 FoodbLog/Pods/FlatUIKit/Resources/flat-ui-icons-regular.ttf delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQNSArray+Sort.h delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQNSArray+Sort.m delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUITextFieldView+Additions.h delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUITextFieldView+Additions.m delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIView+Hierarchy.h delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIView+Hierarchy.m delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIViewController+Additions.h delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIViewController+Additions.m delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.h delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.m delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Constants/IQKeyboardManagerConstants.h delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Constants/IQKeyboardManagerConstantsInternal.h delete mode 100755 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardManager.h delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardManager.m delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardReturnKeyHandler.h delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardReturnKeyHandler.m delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQSegmentedNextPrevious/IQSegmentedNextPrevious.h delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQSegmentedNextPrevious/IQSegmentedNextPrevious.m delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQTextView/IQTextView.h delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQTextView/IQTextView.m delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQBarButtonItem.h delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQBarButtonItem.m delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.h delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.m delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQToolbar.h delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQToolbar.m delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/KeyboardManager.h delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft.png delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@2x.png delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@3x.png delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight.png delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@2x.png delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@3x.png delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/de.lproj/IQKeyboardManager.strings delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/en.lproj/IQKeyboardManager.strings delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/es.lproj/IQKeyboardManager.strings delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/zh-Hans/IQKeyboardManager.strings delete mode 100644 FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/zh-Hant/IQKeyboardManager.strings delete mode 100644 FoodbLog/Pods/IQKeyboardManager/LICENSE.md delete mode 100644 FoodbLog/Pods/IQKeyboardManager/README.md delete mode 100644 FoodbLog/Pods/Manifest.lock delete mode 100644 FoodbLog/Pods/Parse/LICENSE delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/ACL/PFACLPrivate.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFACLState.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFACLState.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFACLState_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFMutableACLState.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFMutableACLState.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Analytics/Controller/PFAnalyticsController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Analytics/Controller/PFAnalyticsController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Analytics/PFAnalytics_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/BFTask+Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/BFTask+Private.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/CloudCode/PFCloudCodeController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/CloudCode/PFCloudCodeController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunning.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunning.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTAnalyticsCommand.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTAnalyticsCommand.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCloudCommand.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCloudCommand.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCommand.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCommand.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCommand_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTConfigCommand.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTConfigCommand.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTFileCommand.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTFileCommand.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTObjectBatchCommand.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTObjectBatchCommand.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTObjectCommand.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTObjectCommand.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTPushCommand.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTPushCommand.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTQueryCommand.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTQueryCommand.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTSessionCommand.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTSessionCommand.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTUserCommand.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTUserCommand.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Config/Controller/PFConfigController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Config/Controller/PFConfigController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Config/Controller/PFCurrentConfigController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Config/Controller/PFCurrentConfigController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Config/PFConfig_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperation.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperation.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperationDecoder.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperationDecoder.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/File/Controller/PFFileController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/File/Controller/PFFileController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/File/Controller/PFFileStagingController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/File/Controller/PFFileStagingController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/File/FileDataStream/PFFileDataStream.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/File/FileDataStream/PFFileDataStream.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/File/PFFile_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/File/State/PFFileState.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/File/State/PFFileState.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/File/State/PFFileState_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/File/State/PFMutableFileState.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/File/State/PFMutableFileState.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPRequest.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFURLConstructor.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFURLConstructor.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Installation/Constants/PFInstallationConstants.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Installation/Constants/PFInstallationConstants.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Installation/Controller/PFInstallationController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Installation/Controller/PFInstallationController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Installation/PFInstallationPrivate.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/Pin/PFPin.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/Pin/PFPin.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/BatchController/PFObjectBatchController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/BatchController/PFObjectBatchController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCoder.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCoder.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/Constants/PFObjectConstants.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/Constants/PFObjectConstants.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/PFObjectControlling.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/OperationSet/PFOperationSet.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/OperationSet/PFOperationSet.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/PFObjectPrivate.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/PinningStore/PFPinningObjectStore.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/PinningStore/PFPinningObjectStore.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFMutableObjectState.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFMutableObjectState.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFObjectState.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFObjectState.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFObjectState_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/Utilities/PFObjectUtilities.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Object/Utilities/PFObjectUtilities.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFAlertView.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFAlertView.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFApplication.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFApplication.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFAssert.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFAsyncTaskQueue.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFAsyncTaskQueue.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFBase64Encoder.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFBase64Encoder.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFBaseState.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFBaseState.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFCategoryLoader.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFCategoryLoader.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFCommandCache.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFCommandCache.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFCommandCache_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFCommandResult.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFCommandResult.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFCoreDataProvider.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFCoreManager.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFCoreManager.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFDataProvider.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFDateFormatter.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFDateFormatter.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFDecoder.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFDecoder.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFDevice.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFDevice.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFEncoder.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFEncoder.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFErrorUtilities.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFErrorUtilities.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyPin.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyPin.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyQueue.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyQueue.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyQueue_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFFileManager.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFFileManager.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFGeoPointPrivate.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFHash.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFHash.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFInternalUtils.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFInternalUtils.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFJSONSerialization.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFJSONSerialization.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFKeychainStore.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFKeychainStore.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFLocationManager.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFLocationManager.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFLogger.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFLogger.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFLogging.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFMacros.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFMulticastDelegate.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFMulticastDelegate.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFNetworkCommand.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFPinningEventuallyQueue.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFPinningEventuallyQueue.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFReachability.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFReachability.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFTaskQueue.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFTaskQueue.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFWeakValue.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PFWeakValue.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/ParseInternal.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/ParseManager.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/ParseManager.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/ParseModule.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/ParseModule.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Parse_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Product/PFProduct+Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Purchase/Controller/PFPurchaseController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Purchase/Controller/PFPurchaseController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Push/ChannelsController/PFPushChannelsController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Push/ChannelsController/PFPushChannelsController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Push/Controller/PFPushController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Push/Controller/PFPushController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Push/Manager/PFPushManager.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Push/Manager/PFPushManager.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Push/PFPushPrivate.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFMutablePushState.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFMutablePushState.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFPushState.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFPushState.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFPushState_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Push/Utilites/PFPushUtilities.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Push/Utilites/PFPushUtilities.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFCachedQueryController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFCachedQueryController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFOfflineQueryController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFOfflineQueryController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFQueryController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFQueryController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Query/PFQueryPrivate.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFMutableQueryState.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFMutableQueryState.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFQueryState.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFQueryState.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFQueryState_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Query/Utilities/PFQueryUtilities.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Query/Utilities/PFQueryUtilities.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Relation/PFRelationPrivate.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFMutableRelationState.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFMutableRelationState.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFRelationState.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFRelationState.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFRelationState_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Session/Controller/PFSessionController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Session/Controller/PFSessionController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Session/PFSession_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Session/Utilities/PFSessionUtilities.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/Session/Utilities/PFSessionUtilities.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/ThreadSafety/PFThreadsafety.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/ThreadSafety/PFThreadsafety.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/Constants/PFUserConstants.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/Constants/PFUserConstants.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/Controller/PFUserController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/Controller/PFUserController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/CurrentUserController/PFCurrentUserController.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/CurrentUserController/PFCurrentUserController.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/PFUserPrivate.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/State/PFMutableUserState.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/State/PFMutableUserState.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/State/PFUserState.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/State/PFUserState.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Internal/User/State/PFUserState_Private.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFACL.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFACL.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFAnalytics.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFAnalytics.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFAnonymousUtils.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFAnonymousUtils.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFCloud.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFCloud.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFConfig.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFConfig.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFConstants.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFConstants.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFFile.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFFile.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFGeoPoint.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFGeoPoint.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFInstallation.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFInstallation.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFNetworkActivityIndicatorManager.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFNetworkActivityIndicatorManager.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFNullability.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFObject+Subclass.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFObject.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFObject.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFProduct.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFProduct.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFPurchase.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFPurchase.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFPush.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFPush.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFQuery.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFQuery.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFRelation.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFRelation.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFRole.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFRole.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFSession.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFSession.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFSubclassing.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFUser.h delete mode 100644 FoodbLog/Pods/Parse/Parse/PFUser.m delete mode 100644 FoodbLog/Pods/Parse/Parse/PFUserAuthenticationDelegate.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Parse.h delete mode 100644 FoodbLog/Pods/Parse/Parse/Parse.m delete mode 100644 FoodbLog/Pods/Parse/Parse/Resources/en.lproj/Parse.strings delete mode 100644 FoodbLog/Pods/Parse/README.md delete mode 100644 FoodbLog/Pods/ParseUI/LICENSE delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/PFLocalization.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView_Private.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Generated/PFResources.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Generated/PFResources.m delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Other/ParseUI.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Other/ParseUIConstants.h delete mode 100644 FoodbLog/Pods/ParseUI/ParseUI/Resources/Localization/en.lproj/ParseUI.strings delete mode 100644 FoodbLog/Pods/ParseUI/README.md delete mode 100644 FoodbLog/Pods/Pods.xcodeproj/project.pbxproj delete mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/AFNetworking.xcscheme delete mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Bolts.xcscheme delete mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/ChameleonFramework.xcscheme delete mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/FlatUIKit.xcscheme delete mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/IQKeyboardManager.xcscheme delete mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Parse.xcscheme delete mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/ParseUI.xcscheme delete mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Pods-FoodbLog.xcscheme delete mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/SDWebImage.xcscheme delete mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Unirest.xcscheme delete mode 100644 FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 FoodbLog/Pods/SDWebImage/LICENSE delete mode 100644 FoodbLog/Pods/SDWebImage/README.md delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/SDImageCache.h delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/SDImageCache.m delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.h delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageManager.h delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageManager.m delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/UIButton+WebCache.m delete mode 100755 FoodbLog/Pods/SDWebImage/SDWebImage/UIImage+GIF.h delete mode 100755 FoodbLog/Pods/SDWebImage/SDWebImage/UIImage+GIF.m delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h delete mode 100644 FoodbLog/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m delete mode 100644 FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-Info.plist delete mode 100644 FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-dummy.m delete mode 100644 FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch delete mode 100644 FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-umbrella.h delete mode 100644 FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.debug.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.modulemap delete mode 100644 FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/Bolts/Bolts-Info.plist delete mode 100644 FoodbLog/Pods/Target Support Files/Bolts/Bolts-dummy.m delete mode 100644 FoodbLog/Pods/Target Support Files/Bolts/Bolts-prefix.pch delete mode 100644 FoodbLog/Pods/Target Support Files/Bolts/Bolts-umbrella.h delete mode 100644 FoodbLog/Pods/Target Support Files/Bolts/Bolts.debug.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/Bolts/Bolts.modulemap delete mode 100644 FoodbLog/Pods/Target Support Files/Bolts/Bolts.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-Info.plist delete mode 100644 FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-dummy.m delete mode 100644 FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-prefix.pch delete mode 100644 FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-umbrella.h delete mode 100644 FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.debug.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.modulemap delete mode 100644 FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-Info.plist delete mode 100644 FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-dummy.m delete mode 100644 FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-prefix.pch delete mode 100644 FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-umbrella.h delete mode 100644 FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.debug.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.modulemap delete mode 100644 FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist delete mode 100644 FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-dummy.m delete mode 100644 FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-prefix.pch delete mode 100644 FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-umbrella.h delete mode 100644 FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.debug.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.modulemap delete mode 100644 FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/Parse/Parse-Info.plist delete mode 100644 FoodbLog/Pods/Target Support Files/Parse/Parse-dummy.m delete mode 100644 FoodbLog/Pods/Target Support Files/Parse/Parse-prefix.pch delete mode 100644 FoodbLog/Pods/Target Support Files/Parse/Parse-umbrella.h delete mode 100644 FoodbLog/Pods/Target Support Files/Parse/Parse.debug.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/Parse/Parse.modulemap delete mode 100644 FoodbLog/Pods/Target Support Files/Parse/Parse.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-Info.plist delete mode 100644 FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-dummy.m delete mode 100644 FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-prefix.pch delete mode 100644 FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-umbrella.h delete mode 100644 FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.debug.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.modulemap delete mode 100644 FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-Info.plist delete mode 100644 FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.markdown delete mode 100644 FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.plist delete mode 100644 FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-dummy.m delete mode 100755 FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-frameworks.sh delete mode 100644 FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-umbrella.h delete mode 100644 FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.debug.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.modulemap delete mode 100644 FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist delete mode 100644 FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m delete mode 100644 FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch delete mode 100644 FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-umbrella.h delete mode 100644 FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap delete mode 100644 FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/Unirest/Unirest-Info.plist delete mode 100644 FoodbLog/Pods/Target Support Files/Unirest/Unirest-dummy.m delete mode 100644 FoodbLog/Pods/Target Support Files/Unirest/Unirest-prefix.pch delete mode 100644 FoodbLog/Pods/Target Support Files/Unirest/Unirest-umbrella.h delete mode 100644 FoodbLog/Pods/Target Support Files/Unirest/Unirest.debug.xcconfig delete mode 100644 FoodbLog/Pods/Target Support Files/Unirest/Unirest.modulemap delete mode 100644 FoodbLog/Pods/Target Support Files/Unirest/Unirest.release.xcconfig delete mode 100644 FoodbLog/Pods/Unirest/LICENSE delete mode 100644 FoodbLog/Pods/Unirest/README.md delete mode 100644 FoodbLog/Pods/Unirest/Unirest/Base64.h delete mode 100644 FoodbLog/Pods/Unirest/Unirest/Base64.m delete mode 100644 FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNIBaseRequest.h delete mode 100644 FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNIBaseRequest.m delete mode 100644 FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNIBodyRequest.h delete mode 100644 FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNIBodyRequest.m delete mode 100644 FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNISimpleRequest.h delete mode 100644 FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNISimpleRequest.m delete mode 100644 FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPBinaryResponse.h delete mode 100644 FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPBinaryResponse.m delete mode 100644 FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPJsonResponse.h delete mode 100644 FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPJsonResponse.m delete mode 100644 FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPResponse.h delete mode 100644 FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPResponse.m delete mode 100644 FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPStringResponse.h delete mode 100644 FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPStringResponse.m delete mode 100644 FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIJsonNode.h delete mode 100644 FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIJsonNode.m delete mode 100644 FoodbLog/Pods/Unirest/Unirest/UNIHTTPClientHelper.h delete mode 100644 FoodbLog/Pods/Unirest/Unirest/UNIHTTPClientHelper.m delete mode 100644 FoodbLog/Pods/Unirest/Unirest/UNIHTTPRequest.h delete mode 100644 FoodbLog/Pods/Unirest/Unirest/UNIHTTPRequest.m delete mode 100644 FoodbLog/Pods/Unirest/Unirest/UNIHTTPRequestWithBody.h delete mode 100644 FoodbLog/Pods/Unirest/Unirest/UNIHTTPRequestWithBody.m delete mode 100644 FoodbLog/Pods/Unirest/Unirest/UNIRest.h delete mode 100644 FoodbLog/Pods/Unirest/Unirest/UNIRest.m delete mode 100644 FoodbLog/Pods/Unirest/Unirest/UNIUrlConnection.h delete mode 100644 FoodbLog/Pods/Unirest/Unirest/UNIUrlConnection.m diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h b/FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h deleted file mode 100644 index cf6def4..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h +++ /dev/null @@ -1,70 +0,0 @@ -// AFHTTPRequestOperation.h -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import -#import "AFURLConnectionOperation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - `AFHTTPRequestOperation` is a subclass of `AFURLConnectionOperation` for requests using the HTTP or HTTPS protocols. It encapsulates the concept of acceptable status codes and content types, which determine the success or failure of a request. - */ -@interface AFHTTPRequestOperation : AFURLConnectionOperation - -///------------------------------------------------ -/// @name Getting HTTP URL Connection Information -///------------------------------------------------ - -/** - The last HTTP response received by the operation's connection. - */ -@property (readonly, nonatomic, strong, nullable) NSHTTPURLResponse *response; - -/** - Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an AFHTTPResponse serializer, which uses the raw data as its response object. The serializer validates the status code to be in the `2XX` range, denoting success. If the response serializer generates an error in `-responseObjectForResponse:data:error:`, the `failure` callback of the session task or request operation will be executed; otherwise, the `success` callback will be executed. - - @warning `responseSerializer` must not be `nil`. Setting a response serializer will clear out any cached value - */ -@property (nonatomic, strong) AFHTTPResponseSerializer * responseSerializer; - -/** - An object constructed by the `responseSerializer` from the response and response data. Returns `nil` unless the operation `isFinished`, has a `response`, and has `responseData` with non-zero content length. If an error occurs during serialization, `nil` will be returned, and the `error` property will be populated with the serialization error. - */ -@property (readonly, nonatomic, strong, nullable) id responseObject; - -///----------------------------------------------------------- -/// @name Setting Completion Block Success / Failure Callbacks -///----------------------------------------------------------- - -/** - Sets the `completionBlock` property with a block that executes either the specified success or failure block, depending on the state of the request on completion. If `error` returns a value, which can be caused by an unacceptable status code or content type, then `failure` is executed. Otherwise, `success` is executed. - - This method should be overridden in subclasses in order to specify the response object passed into the success block. - - @param success The block to be executed on the completion of a successful request. This block has no return value and takes two arguments: the receiver operation and the object constructed from the response data of the request. - @param failure The block to be executed on the completion of an unsuccessful request. This block has no return value and takes two arguments: the receiver operation and the error that occurred during the request. - */ -- (void)setCompletionBlockWithSuccess:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m b/FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m deleted file mode 100644 index b8deda8..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m +++ /dev/null @@ -1,206 +0,0 @@ -// AFHTTPRequestOperation.m -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "AFHTTPRequestOperation.h" - -static dispatch_queue_t http_request_operation_processing_queue() { - static dispatch_queue_t af_http_request_operation_processing_queue; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - af_http_request_operation_processing_queue = dispatch_queue_create("com.alamofire.networking.http-request.processing", DISPATCH_QUEUE_CONCURRENT); - }); - - return af_http_request_operation_processing_queue; -} - -static dispatch_group_t http_request_operation_completion_group() { - static dispatch_group_t af_http_request_operation_completion_group; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - af_http_request_operation_completion_group = dispatch_group_create(); - }); - - return af_http_request_operation_completion_group; -} - -#pragma mark - - -@interface AFURLConnectionOperation () -@property (readwrite, nonatomic, strong) NSURLRequest *request; -@property (readwrite, nonatomic, strong) NSURLResponse *response; -@end - -@interface AFHTTPRequestOperation () -@property (readwrite, nonatomic, strong) NSHTTPURLResponse *response; -@property (readwrite, nonatomic, strong) id responseObject; -@property (readwrite, nonatomic, strong) NSError *responseSerializationError; -@property (readwrite, nonatomic, strong) NSRecursiveLock *lock; -@end - -@implementation AFHTTPRequestOperation -@dynamic response; -@dynamic lock; - -- (instancetype)initWithRequest:(NSURLRequest *)urlRequest { - self = [super initWithRequest:urlRequest]; - if (!self) { - return nil; - } - - self.responseSerializer = [AFHTTPResponseSerializer serializer]; - - return self; -} - -- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { - NSParameterAssert(responseSerializer); - - [self.lock lock]; - _responseSerializer = responseSerializer; - self.responseObject = nil; - self.responseSerializationError = nil; - [self.lock unlock]; -} - -- (id)responseObject { - [self.lock lock]; - if (!_responseObject && [self isFinished] && !self.error) { - NSError *error = nil; - self.responseObject = [self.responseSerializer responseObjectForResponse:self.response data:self.responseData error:&error]; - if (error) { - self.responseSerializationError = error; - } - } - [self.lock unlock]; - - return _responseObject; -} - -- (NSError *)error { - if (_responseSerializationError) { - return _responseSerializationError; - } else { - return [super error]; - } -} - -#pragma mark - AFHTTPRequestOperation - -- (void)setCompletionBlockWithSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - // completionBlock is manually nilled out in AFURLConnectionOperation to break the retain cycle. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-retain-cycles" -#pragma clang diagnostic ignored "-Wgnu" - self.completionBlock = ^{ - if (self.completionGroup) { - dispatch_group_enter(self.completionGroup); - } - - dispatch_async(http_request_operation_processing_queue(), ^{ - if (self.error) { - if (failure) { - dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{ - failure(self, self.error); - }); - } - } else { - id responseObject = self.responseObject; - if (self.error) { - if (failure) { - dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{ - failure(self, self.error); - }); - } - } else { - if (success) { - dispatch_group_async(self.completionGroup ?: http_request_operation_completion_group(), self.completionQueue ?: dispatch_get_main_queue(), ^{ - success(self, responseObject); - }); - } - } - } - - if (self.completionGroup) { - dispatch_group_leave(self.completionGroup); - } - }); - }; -#pragma clang diagnostic pop -} - -#pragma mark - AFURLRequestOperation - -- (void)pause { - [super pause]; - - u_int64_t offset = 0; - if ([self.outputStream propertyForKey:NSStreamFileCurrentOffsetKey]) { - offset = [(NSNumber *)[self.outputStream propertyForKey:NSStreamFileCurrentOffsetKey] unsignedLongLongValue]; - } else { - offset = [(NSData *)[self.outputStream propertyForKey:NSStreamDataWrittenToMemoryStreamKey] length]; - } - - NSMutableURLRequest *mutableURLRequest = [self.request mutableCopy]; - if ([self.response respondsToSelector:@selector(allHeaderFields)] && [[self.response allHeaderFields] valueForKey:@"ETag"]) { - [mutableURLRequest setValue:[[self.response allHeaderFields] valueForKey:@"ETag"] forHTTPHeaderField:@"If-Range"]; - } - [mutableURLRequest setValue:[NSString stringWithFormat:@"bytes=%llu-", offset] forHTTPHeaderField:@"Range"]; - self.request = mutableURLRequest; -} - -#pragma mark - NSSecureCoding - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (!self) { - return nil; - } - - self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - - [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFHTTPRequestOperation *operation = [super copyWithZone:zone]; - - operation.responseSerializer = [self.responseSerializer copyWithZone:zone]; - operation.completionQueue = self.completionQueue; - operation.completionGroup = self.completionGroup; - - return operation; -} - -@end diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h b/FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h deleted file mode 100644 index d2385ed..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h +++ /dev/null @@ -1,326 +0,0 @@ -// AFHTTPRequestOperationManager.h -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import -#import -#import - -#if __IPHONE_OS_VERSION_MIN_REQUIRED -#import -#else -#import -#endif - -#import "AFHTTPRequestOperation.h" -#import "AFURLResponseSerialization.h" -#import "AFURLRequestSerialization.h" -#import "AFSecurityPolicy.h" -#import "AFNetworkReachabilityManager.h" - -#ifndef NS_DESIGNATED_INITIALIZER -#if __has_attribute(objc_designated_initializer) -#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) -#else -#define NS_DESIGNATED_INITIALIZER -#endif -#endif - -NS_ASSUME_NONNULL_BEGIN - -/** - `AFHTTPRequestOperationManager` encapsulates the common patterns of communicating with a web application over HTTP, including request creation, response serialization, network reachability monitoring, and security, as well as request operation management. - - ## Subclassing Notes - - Developers targeting iOS 7 or Mac OS X 10.9 or later that deal extensively with a web service are encouraged to subclass `AFHTTPSessionManager`, providing a class method that returns a shared singleton object on which authentication and other configuration can be shared across the application. - - For developers targeting iOS 6 or Mac OS X 10.8 or earlier, `AFHTTPRequestOperationManager` may be used to similar effect. - - ## Methods to Override - - To change the behavior of all request operation construction for an `AFHTTPRequestOperationManager` subclass, override `HTTPRequestOperationWithRequest:success:failure`. - - ## Serialization - - Requests created by an HTTP client will contain default headers and encode parameters according to the `requestSerializer` property, which is an object conforming to ``. - - Responses received from the server are automatically validated and serialized by the `responseSerializers` property, which is an object conforming to `` - - ## URL Construction Using Relative Paths - - For HTTP convenience methods, the request serializer constructs URLs from the path relative to the `-baseURL`, using `NSURL +URLWithString:relativeToURL:`, when provided. If `baseURL` is `nil`, `path` needs to resolve to a valid `NSURL` object using `NSURL +URLWithString:`. - - Below are a few examples of how `baseURL` and relative paths interact: - - NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"]; - [NSURL URLWithString:@"foo" relativeToURL:baseURL]; // http://example.com/v1/foo - [NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL]; // http://example.com/v1/foo?bar=baz - [NSURL URLWithString:@"/foo" relativeToURL:baseURL]; // http://example.com/foo - [NSURL URLWithString:@"foo/" relativeToURL:baseURL]; // http://example.com/v1/foo - [NSURL URLWithString:@"/foo/" relativeToURL:baseURL]; // http://example.com/foo/ - [NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/ - - Also important to note is that a trailing slash will be added to any `baseURL` without one. This would otherwise cause unexpected behavior when constructing URLs using paths without a leading slash. - - ## Network Reachability Monitoring - - Network reachability status and change monitoring is available through the `reachabilityManager` property. Applications may choose to monitor network reachability conditions in order to prevent or suspend any outbound requests. See `AFNetworkReachabilityManager` for more details. - - ## NSSecureCoding & NSCopying Caveats - - `AFHTTPRequestOperationManager` conforms to the `NSSecureCoding` and `NSCopying` protocols, allowing operations to be archived to disk, and copied in memory, respectively. There are a few minor caveats to keep in mind, however: - - - Archives and copies of HTTP clients will be initialized with an empty operation queue. - - NSSecureCoding cannot serialize / deserialize block properties, so an archive of an HTTP client will not include any reachability callback block that may be set. - */ -@interface AFHTTPRequestOperationManager : NSObject - -/** - The URL used to monitor reachability, and construct requests from relative paths in methods like `requestWithMethod:URLString:parameters:`, and the `GET` / `POST` / et al. convenience methods. - */ -@property (readonly, nonatomic, strong, nullable) NSURL *baseURL; - -/** - Requests created with `requestWithMethod:URLString:parameters:` & `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:` are constructed with a set of default headers using a parameter serialization specified by this property. By default, this is set to an instance of `AFHTTPRequestSerializer`, which serializes query string parameters for `GET`, `HEAD`, and `DELETE` requests, or otherwise URL-form-encodes HTTP message bodies. - - @warning `requestSerializer` must not be `nil`. - */ -@property (nonatomic, strong) AFHTTPRequestSerializer * requestSerializer; - -/** - Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to a JSON serializer, which serializes data from responses with a `application/json` MIME type, and falls back to the raw data object. The serializer validates the status code to be in the `2XX` range, denoting success. If the response serializer generates an error in `-responseObjectForResponse:data:error:`, the `failure` callback of the session task or request operation will be executed; otherwise, the `success` callback will be executed. - - @warning `responseSerializer` must not be `nil`. - */ -@property (nonatomic, strong) AFHTTPResponseSerializer * responseSerializer; - -/** - The operation queue on which request operations are scheduled and run. - */ -@property (nonatomic, strong) NSOperationQueue *operationQueue; - -///------------------------------- -/// @name Managing URL Credentials -///------------------------------- - -/** - Whether request operations should consult the credential storage for authenticating the connection. `YES` by default. - - @see AFURLConnectionOperation -shouldUseCredentialStorage - */ -@property (nonatomic, assign) BOOL shouldUseCredentialStorage; - -/** - The credential used by request operations for authentication challenges. - - @see AFURLConnectionOperation -credential - */ -@property (nonatomic, strong, nullable) NSURLCredential *credential; - -///------------------------------- -/// @name Managing Security Policy -///------------------------------- - -/** - The security policy used by created request operations to evaluate server trust for secure connections. `AFHTTPRequestOperationManager` uses the `defaultPolicy` unless otherwise specified. - */ -@property (nonatomic, strong) AFSecurityPolicy *securityPolicy; - -///------------------------------------ -/// @name Managing Network Reachability -///------------------------------------ - -/** - The network reachability manager. `AFHTTPRequestOperationManager` uses the `sharedManager` by default. - */ -@property (readwrite, nonatomic, strong) AFNetworkReachabilityManager *reachabilityManager; - -///------------------------------- -/// @name Managing Callback Queues -///------------------------------- - -/** - The dispatch queue for the `completionBlock` of request operations. If `NULL` (default), the main queue is used. - */ -#if OS_OBJECT_HAVE_OBJC_SUPPORT -@property (nonatomic, strong, nullable) dispatch_queue_t completionQueue; -#else -@property (nonatomic, assign, nullable) dispatch_queue_t completionQueue; -#endif - -/** - The dispatch group for the `completionBlock` of request operations. If `NULL` (default), a private dispatch group is used. - */ -#if OS_OBJECT_HAVE_OBJC_SUPPORT -@property (nonatomic, strong, nullable) dispatch_group_t completionGroup; -#else -@property (nonatomic, assign, nullable) dispatch_group_t completionGroup; -#endif - -///--------------------------------------------- -/// @name Creating and Initializing HTTP Clients -///--------------------------------------------- - -/** - Creates and returns an `AFHTTPRequestOperationManager` object. - */ -+ (instancetype)manager; - -/** - Initializes an `AFHTTPRequestOperationManager` object with the specified base URL. - - This is the designated initializer. - - @param url The base URL for the HTTP client. - - @return The newly-initialized HTTP client - */ -- (instancetype)initWithBaseURL:(nullable NSURL *)url NS_DESIGNATED_INITIALIZER; - -///--------------------------------------- -/// @name Managing HTTP Request Operations -///--------------------------------------- - -/** - Creates an `AFHTTPRequestOperation`, and sets the response serializers to that of the HTTP client. - - @param request The request object to be loaded asynchronously during execution of the operation. - @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the created request operation and the object created from the response data of request. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes two arguments:, the created request operation and the `NSError` object describing the network or parsing error that occurred. - */ -- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request - success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; - -///--------------------------- -/// @name Making HTTP Requests -///--------------------------- - -/** - Creates and runs an `AFHTTPRequestOperation` with a `GET` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. - - @see -HTTPRequestOperationWithRequest:success:failure: - */ -- (nullable AFHTTPRequestOperation *)GET:(NSString *)URLString - parameters:(nullable id)parameters - success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; - -/** - Creates and runs an `AFHTTPRequestOperation` with a `HEAD` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes a single arguments: the request operation. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. - - @see -HTTPRequestOperationWithRequest:success:failure: - */ -- (nullable AFHTTPRequestOperation *)HEAD:(NSString *)URLString - parameters:(nullable id)parameters - success:(nullable void (^)(AFHTTPRequestOperation *operation))success - failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; - -/** - Creates and runs an `AFHTTPRequestOperation` with a `POST` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. - - @see -HTTPRequestOperationWithRequest:success:failure: - */ -- (nullable AFHTTPRequestOperation *)POST:(NSString *)URLString - parameters:(nullable id)parameters - success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; - -/** - Creates and runs an `AFHTTPRequestOperation` with a multipart `POST` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. - @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. - - @see -HTTPRequestOperationWithRequest:success:failure: - */ -- (nullable AFHTTPRequestOperation *)POST:(NSString *)URLString - parameters:(nullable id)parameters - constructingBodyWithBlock:(nullable void (^)(id formData))block - success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; - -/** - Creates and runs an `AFHTTPRequestOperation` with a `PUT` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. - - @see -HTTPRequestOperationWithRequest:success:failure: - */ -- (nullable AFHTTPRequestOperation *)PUT:(NSString *)URLString - parameters:(nullable id)parameters - success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; - -/** - Creates and runs an `AFHTTPRequestOperation` with a `PATCH` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. - - @see -HTTPRequestOperationWithRequest:success:failure: - */ -- (nullable AFHTTPRequestOperation *)PATCH:(NSString *)URLString - parameters:(nullable id)parameters - success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; - -/** - Creates and runs an `AFHTTPRequestOperation` with a `DELETE` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the request operation finishes successfully. This block has no return value and takes two arguments: the request operation, and the response object created by the client response serializer. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the request operation and the error describing the network or parsing error that occurred. - - @see -HTTPRequestOperationWithRequest:success:failure: - */ -- (nullable AFHTTPRequestOperation *)DELETE:(NSString *)URLString - parameters:(nullable id)parameters - success:(nullable void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(nullable void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m b/FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m deleted file mode 100644 index 60739e5..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.m +++ /dev/null @@ -1,284 +0,0 @@ -// AFHTTPRequestOperationManager.m -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -#import "AFHTTPRequestOperationManager.h" -#import "AFHTTPRequestOperation.h" - -#import -#import - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -#import -#endif - -@interface AFHTTPRequestOperationManager () -@property (readwrite, nonatomic, strong) NSURL *baseURL; -@end - -@implementation AFHTTPRequestOperationManager - -+ (instancetype)manager { - return [[self alloc] initWithBaseURL:nil]; -} - -- (instancetype)init { - return [self initWithBaseURL:nil]; -} - -- (instancetype)initWithBaseURL:(NSURL *)url { - self = [super init]; - if (!self) { - return nil; - } - - // Ensure terminal slash for baseURL path, so that NSURL +URLWithString:relativeToURL: works as expected - if ([[url path] length] > 0 && ![[url absoluteString] hasSuffix:@"/"]) { - url = [url URLByAppendingPathComponent:@""]; - } - - self.baseURL = url; - - self.requestSerializer = [AFHTTPRequestSerializer serializer]; - self.responseSerializer = [AFJSONResponseSerializer serializer]; - - self.securityPolicy = [AFSecurityPolicy defaultPolicy]; - - self.reachabilityManager = [AFNetworkReachabilityManager sharedManager]; - - self.operationQueue = [[NSOperationQueue alloc] init]; - - self.shouldUseCredentialStorage = YES; - - return self; -} - -#pragma mark - - -#ifdef _SYSTEMCONFIGURATION_H -#endif - -- (void)setRequestSerializer:(AFHTTPRequestSerializer *)requestSerializer { - NSParameterAssert(requestSerializer); - - _requestSerializer = requestSerializer; -} - -- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { - NSParameterAssert(responseSerializer); - - _responseSerializer = responseSerializer; -} - -#pragma mark - - -- (AFHTTPRequestOperation *)HTTPRequestOperationWithHTTPMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - NSError *serializationError = nil; - NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:&serializationError]; - if (serializationError) { - if (failure) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ - failure(nil, serializationError); - }); -#pragma clang diagnostic pop - } - - return nil; - } - - return [self HTTPRequestOperationWithRequest:request success:success failure:failure]; -} - -- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; - operation.responseSerializer = self.responseSerializer; - operation.shouldUseCredentialStorage = self.shouldUseCredentialStorage; - operation.credential = self.credential; - operation.securityPolicy = self.securityPolicy; - - [operation setCompletionBlockWithSuccess:success failure:failure]; - operation.completionQueue = self.completionQueue; - operation.completionGroup = self.completionGroup; - - return operation; -} - -#pragma mark - - -- (AFHTTPRequestOperation *)GET:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"GET" URLString:URLString parameters:parameters success:success failure:failure]; - - [self.operationQueue addOperation:operation]; - - return operation; -} - -- (AFHTTPRequestOperation *)HEAD:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"HEAD" URLString:URLString parameters:parameters success:^(AFHTTPRequestOperation *requestOperation, __unused id responseObject) { - if (success) { - success(requestOperation); - } - } failure:failure]; - - [self.operationQueue addOperation:operation]; - - return operation; -} - -- (AFHTTPRequestOperation *)POST:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"POST" URLString:URLString parameters:parameters success:success failure:failure]; - - [self.operationQueue addOperation:operation]; - - return operation; -} - -- (AFHTTPRequestOperation *)POST:(NSString *)URLString - parameters:(id)parameters - constructingBodyWithBlock:(void (^)(id formData))block - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - NSError *serializationError = nil; - NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters constructingBodyWithBlock:block error:&serializationError]; - if (serializationError) { - if (failure) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ - failure(nil, serializationError); - }); -#pragma clang diagnostic pop - } - - return nil; - } - - AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure]; - - [self.operationQueue addOperation:operation]; - - return operation; -} - -- (AFHTTPRequestOperation *)PUT:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"PUT" URLString:URLString parameters:parameters success:success failure:failure]; - - [self.operationQueue addOperation:operation]; - - return operation; -} - -- (AFHTTPRequestOperation *)PATCH:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"PATCH" URLString:URLString parameters:parameters success:success failure:failure]; - - [self.operationQueue addOperation:operation]; - - return operation; -} - -- (AFHTTPRequestOperation *)DELETE:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success - failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure -{ - AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"DELETE" URLString:URLString parameters:parameters success:success failure:failure]; - - [self.operationQueue addOperation:operation]; - - return operation; -} - -#pragma mark - NSObject - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p, baseURL: %@, operationQueue: %@>", NSStringFromClass([self class]), self, [self.baseURL absoluteString], self.operationQueue]; -} - -#pragma mark - NSSecureCoding - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder { - NSURL *baseURL = [decoder decodeObjectForKey:NSStringFromSelector(@selector(baseURL))]; - - self = [self initWithBaseURL:baseURL]; - if (!self) { - return nil; - } - - self.requestSerializer = [decoder decodeObjectOfClass:[AFHTTPRequestSerializer class] forKey:NSStringFromSelector(@selector(requestSerializer))]; - self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [coder encodeObject:self.baseURL forKey:NSStringFromSelector(@selector(baseURL))]; - [coder encodeObject:self.requestSerializer forKey:NSStringFromSelector(@selector(requestSerializer))]; - [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFHTTPRequestOperationManager *HTTPClient = [[[self class] allocWithZone:zone] initWithBaseURL:self.baseURL]; - - HTTPClient.requestSerializer = [self.requestSerializer copyWithZone:zone]; - HTTPClient.responseSerializer = [self.responseSerializer copyWithZone:zone]; - - return HTTPClient; -} - -@end diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h b/FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h deleted file mode 100644 index e516e6d..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h +++ /dev/null @@ -1,253 +0,0 @@ -// AFHTTPSessionManager.h -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import -#if !TARGET_OS_WATCH -#import -#endif -#import - -#if __IPHONE_OS_VERSION_MIN_REQUIRED -#import -#else -#import -#endif - -#import "AFURLSessionManager.h" - -#ifndef NS_DESIGNATED_INITIALIZER -#if __has_attribute(objc_designated_initializer) -#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) -#else -#define NS_DESIGNATED_INITIALIZER -#endif -#endif - -/** - `AFHTTPSessionManager` is a subclass of `AFURLSessionManager` with convenience methods for making HTTP requests. When a `baseURL` is provided, requests made with the `GET` / `POST` / et al. convenience methods can be made with relative paths. - - ## Subclassing Notes - - Developers targeting iOS 7 or Mac OS X 10.9 or later that deal extensively with a web service are encouraged to subclass `AFHTTPSessionManager`, providing a class method that returns a shared singleton object on which authentication and other configuration can be shared across the application. - - For developers targeting iOS 6 or Mac OS X 10.8 or earlier, `AFHTTPRequestOperationManager` may be used to similar effect. - - ## Methods to Override - - To change the behavior of all data task operation construction, which is also used in the `GET` / `POST` / et al. convenience methods, override `dataTaskWithRequest:completionHandler:`. - - ## Serialization - - Requests created by an HTTP client will contain default headers and encode parameters according to the `requestSerializer` property, which is an object conforming to ``. - - Responses received from the server are automatically validated and serialized by the `responseSerializers` property, which is an object conforming to `` - - ## URL Construction Using Relative Paths - - For HTTP convenience methods, the request serializer constructs URLs from the path relative to the `-baseURL`, using `NSURL +URLWithString:relativeToURL:`, when provided. If `baseURL` is `nil`, `path` needs to resolve to a valid `NSURL` object using `NSURL +URLWithString:`. - - Below are a few examples of how `baseURL` and relative paths interact: - - NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"]; - [NSURL URLWithString:@"foo" relativeToURL:baseURL]; // http://example.com/v1/foo - [NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL]; // http://example.com/v1/foo?bar=baz - [NSURL URLWithString:@"/foo" relativeToURL:baseURL]; // http://example.com/foo - [NSURL URLWithString:@"foo/" relativeToURL:baseURL]; // http://example.com/v1/foo - [NSURL URLWithString:@"/foo/" relativeToURL:baseURL]; // http://example.com/foo/ - [NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/ - - Also important to note is that a trailing slash will be added to any `baseURL` without one. This would otherwise cause unexpected behavior when constructing URLs using paths without a leading slash. - - @warning Managers for background sessions must be owned for the duration of their use. This can be accomplished by creating an application-wide or shared singleton instance. - */ - -#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) || TARGET_OS_WATCH - -NS_ASSUME_NONNULL_BEGIN - -@interface AFHTTPSessionManager : AFURLSessionManager - -/** - The URL used to construct requests from relative paths in methods like `requestWithMethod:URLString:parameters:`, and the `GET` / `POST` / et al. convenience methods. - */ -@property (readonly, nonatomic, strong, nullable) NSURL *baseURL; - -/** - Requests created with `requestWithMethod:URLString:parameters:` & `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:` are constructed with a set of default headers using a parameter serialization specified by this property. By default, this is set to an instance of `AFHTTPRequestSerializer`, which serializes query string parameters for `GET`, `HEAD`, and `DELETE` requests, or otherwise URL-form-encodes HTTP message bodies. - - @warning `requestSerializer` must not be `nil`. - */ -@property (nonatomic, strong) AFHTTPRequestSerializer * requestSerializer; - -/** - Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an instance of `AFJSONResponseSerializer`. - - @warning `responseSerializer` must not be `nil`. - */ -@property (nonatomic, strong) AFHTTPResponseSerializer * responseSerializer; - -///--------------------- -/// @name Initialization -///--------------------- - -/** - Creates and returns an `AFHTTPSessionManager` object. - */ -+ (instancetype)manager; - -/** - Initializes an `AFHTTPSessionManager` object with the specified base URL. - - @param url The base URL for the HTTP client. - - @return The newly-initialized HTTP client - */ -- (instancetype)initWithBaseURL:(nullable NSURL *)url; - -/** - Initializes an `AFHTTPSessionManager` object with the specified base URL. - - This is the designated initializer. - - @param url The base URL for the HTTP client. - @param configuration The configuration used to create the managed session. - - @return The newly-initialized HTTP client - */ -- (instancetype)initWithBaseURL:(nullable NSURL *)url - sessionConfiguration:(nullable NSURLSessionConfiguration *)configuration NS_DESIGNATED_INITIALIZER; - -///--------------------------- -/// @name Making HTTP Requests -///--------------------------- - -/** - Creates and runs an `NSURLSessionDataTask` with a `GET` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString - parameters:(nullable id)parameters - success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; - -/** - Creates and runs an `NSURLSessionDataTask` with a `HEAD` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes a single arguments: the data task. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (nullable NSURLSessionDataTask *)HEAD:(NSString *)URLString - parameters:(nullable id)parameters - success:(nullable void (^)(NSURLSessionDataTask *task))success - failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; - -/** - Creates and runs an `NSURLSessionDataTask` with a `POST` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString - parameters:(nullable id)parameters - success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; - -/** - Creates and runs an `NSURLSessionDataTask` with a multipart `POST` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString - parameters:(nullable id)parameters - constructingBodyWithBlock:(nullable void (^)(id formData))block - success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; - -/** - Creates and runs an `NSURLSessionDataTask` with a `PUT` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (nullable NSURLSessionDataTask *)PUT:(NSString *)URLString - parameters:(nullable id)parameters - success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; - -/** - Creates and runs an `NSURLSessionDataTask` with a `PATCH` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (nullable NSURLSessionDataTask *)PATCH:(NSString *)URLString - parameters:(nullable id)parameters - success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; - -/** - Creates and runs an `NSURLSessionDataTask` with a `DELETE` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (nullable NSURLSessionDataTask *)DELETE:(NSString *)URLString - parameters:(nullable id)parameters - success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m b/FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m deleted file mode 100644 index bd9163f..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m +++ /dev/null @@ -1,323 +0,0 @@ -// AFHTTPSessionManager.m -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "AFHTTPSessionManager.h" - -#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) || TARGET_WATCH_OS - -#import "AFURLRequestSerialization.h" -#import "AFURLResponseSerialization.h" - -#import -#import - -#ifdef _SYSTEMCONFIGURATION_H -#import -#import -#import -#import -#import -#endif - -#if TARGET_OS_IOS -#import -#elif TARGET_OS_WATCH -#import -#endif - -@interface AFHTTPSessionManager () -@property (readwrite, nonatomic, strong) NSURL *baseURL; -@end - -@implementation AFHTTPSessionManager -@dynamic responseSerializer; - -+ (instancetype)manager { - return [[[self class] alloc] initWithBaseURL:nil]; -} - -- (instancetype)init { - return [self initWithBaseURL:nil]; -} - -- (instancetype)initWithBaseURL:(NSURL *)url { - return [self initWithBaseURL:url sessionConfiguration:nil]; -} - -- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration { - return [self initWithBaseURL:nil sessionConfiguration:configuration]; -} - -- (instancetype)initWithBaseURL:(NSURL *)url - sessionConfiguration:(NSURLSessionConfiguration *)configuration -{ - self = [super initWithSessionConfiguration:configuration]; - if (!self) { - return nil; - } - - // Ensure terminal slash for baseURL path, so that NSURL +URLWithString:relativeToURL: works as expected - if ([[url path] length] > 0 && ![[url absoluteString] hasSuffix:@"/"]) { - url = [url URLByAppendingPathComponent:@""]; - } - - self.baseURL = url; - - self.requestSerializer = [AFHTTPRequestSerializer serializer]; - self.responseSerializer = [AFJSONResponseSerializer serializer]; - - return self; -} - -#pragma mark - - -#ifdef _SYSTEMCONFIGURATION_H -#endif - -- (void)setRequestSerializer:(AFHTTPRequestSerializer *)requestSerializer { - NSParameterAssert(requestSerializer); - - _requestSerializer = requestSerializer; -} - -- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { - NSParameterAssert(responseSerializer); - - [super setResponseSerializer:responseSerializer]; -} - -#pragma mark - - -- (NSURLSessionDataTask *)GET:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"GET" URLString:URLString parameters:parameters success:success failure:failure]; - - [dataTask resume]; - - return dataTask; -} - -- (NSURLSessionDataTask *)HEAD:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"HEAD" URLString:URLString parameters:parameters success:^(NSURLSessionDataTask *task, __unused id responseObject) { - if (success) { - success(task); - } - } failure:failure]; - - [dataTask resume]; - - return dataTask; -} - -- (NSURLSessionDataTask *)POST:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"POST" URLString:URLString parameters:parameters success:success failure:failure]; - - [dataTask resume]; - - return dataTask; -} - -- (NSURLSessionDataTask *)POST:(NSString *)URLString - parameters:(id)parameters - constructingBodyWithBlock:(void (^)(id formData))block - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - NSError *serializationError = nil; - NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters constructingBodyWithBlock:block error:&serializationError]; - if (serializationError) { - if (failure) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ - failure(nil, serializationError); - }); -#pragma clang diagnostic pop - } - - return nil; - } - - __block NSURLSessionDataTask *task = [self uploadTaskWithStreamedRequest:request progress:nil completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { - if (error) { - if (failure) { - failure(task, error); - } - } else { - if (success) { - success(task, responseObject); - } - } - }]; - - [task resume]; - - return task; -} - -- (NSURLSessionDataTask *)PUT:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"PUT" URLString:URLString parameters:parameters success:success failure:failure]; - - [dataTask resume]; - - return dataTask; -} - -- (NSURLSessionDataTask *)PATCH:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"PATCH" URLString:URLString parameters:parameters success:success failure:failure]; - - [dataTask resume]; - - return dataTask; -} - -- (NSURLSessionDataTask *)DELETE:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"DELETE" URLString:URLString parameters:parameters success:success failure:failure]; - - [dataTask resume]; - - return dataTask; -} - -- (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *, id))success - failure:(void (^)(NSURLSessionDataTask *, NSError *))failure -{ - NSError *serializationError = nil; - NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:&serializationError]; - if (serializationError) { - if (failure) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ - failure(nil, serializationError); - }); -#pragma clang diagnostic pop - } - - return nil; - } - - __block NSURLSessionDataTask *dataTask = nil; - dataTask = [self dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { - if (error) { - if (failure) { - failure(dataTask, error); - } - } else { - if (success) { - success(dataTask, responseObject); - } - } - }]; - - return dataTask; -} - -#pragma mark - NSObject - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p, baseURL: %@, session: %@, operationQueue: %@>", NSStringFromClass([self class]), self, [self.baseURL absoluteString], self.session, self.operationQueue]; -} - -#pragma mark - NSSecureCoding - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder { - NSURL *baseURL = [decoder decodeObjectOfClass:[NSURL class] forKey:NSStringFromSelector(@selector(baseURL))]; - NSURLSessionConfiguration *configuration = [decoder decodeObjectOfClass:[NSURLSessionConfiguration class] forKey:@"sessionConfiguration"]; - if (!configuration) { - NSString *configurationIdentifier = [decoder decodeObjectOfClass:[NSString class] forKey:@"identifier"]; - if (configurationIdentifier) { -#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1100) - configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:configurationIdentifier]; -#else - configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:configurationIdentifier]; -#endif - } - } - - self = [self initWithBaseURL:baseURL sessionConfiguration:configuration]; - if (!self) { - return nil; - } - - self.requestSerializer = [decoder decodeObjectOfClass:[AFHTTPRequestSerializer class] forKey:NSStringFromSelector(@selector(requestSerializer))]; - self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - - [coder encodeObject:self.baseURL forKey:NSStringFromSelector(@selector(baseURL))]; - if ([self.session.configuration conformsToProtocol:@protocol(NSCoding)]) { - [coder encodeObject:self.session.configuration forKey:@"sessionConfiguration"]; - } else { - [coder encodeObject:self.session.configuration.identifier forKey:@"identifier"]; - } - [coder encodeObject:self.requestSerializer forKey:NSStringFromSelector(@selector(requestSerializer))]; - [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFHTTPSessionManager *HTTPClient = [[[self class] allocWithZone:zone] initWithBaseURL:self.baseURL sessionConfiguration:self.session.configuration]; - - HTTPClient.requestSerializer = [self.requestSerializer copyWithZone:zone]; - HTTPClient.responseSerializer = [self.responseSerializer copyWithZone:zone]; - - return HTTPClient; -} - -@end - -#endif diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h b/FoodbLog/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h deleted file mode 100644 index e2eb945..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h +++ /dev/null @@ -1,207 +0,0 @@ -// AFNetworkReachabilityManager.h -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -#if !TARGET_OS_WATCH -#import - -#ifndef NS_DESIGNATED_INITIALIZER -#if __has_attribute(objc_designated_initializer) -#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) -#else -#define NS_DESIGNATED_INITIALIZER -#endif -#endif - -typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) { - AFNetworkReachabilityStatusUnknown = -1, - AFNetworkReachabilityStatusNotReachable = 0, - AFNetworkReachabilityStatusReachableViaWWAN = 1, - AFNetworkReachabilityStatusReachableViaWiFi = 2, -}; - -NS_ASSUME_NONNULL_BEGIN - -/** - `AFNetworkReachabilityManager` monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces. - - Reachability can be used to determine background information about why a network operation failed, or to trigger a network operation retrying when a connection is established. It should not be used to prevent a user from initiating a network request, as it's possible that an initial request may be required to establish reachability. - - See Apple's Reachability Sample Code (https://developer.apple.com/library/ios/samplecode/reachability/) - - @warning Instances of `AFNetworkReachabilityManager` must be started with `-startMonitoring` before reachability status can be determined. - */ -@interface AFNetworkReachabilityManager : NSObject - -/** - The current network reachability status. - */ -@property (readonly, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus; - -/** - Whether or not the network is currently reachable. - */ -@property (readonly, nonatomic, assign, getter = isReachable) BOOL reachable; - -/** - Whether or not the network is currently reachable via WWAN. - */ -@property (readonly, nonatomic, assign, getter = isReachableViaWWAN) BOOL reachableViaWWAN; - -/** - Whether or not the network is currently reachable via WiFi. - */ -@property (readonly, nonatomic, assign, getter = isReachableViaWiFi) BOOL reachableViaWiFi; - -///--------------------- -/// @name Initialization -///--------------------- - -/** - Returns the shared network reachability manager. - */ -+ (instancetype)sharedManager; - -/** - Creates and returns a network reachability manager for the specified domain. - - @param domain The domain used to evaluate network reachability. - - @return An initialized network reachability manager, actively monitoring the specified domain. - */ -+ (instancetype)managerForDomain:(NSString *)domain; - -/** - Creates and returns a network reachability manager for the socket address. - - @param address The socket address (`sockaddr_in`) used to evaluate network reachability. - - @return An initialized network reachability manager, actively monitoring the specified socket address. - */ -+ (instancetype)managerForAddress:(const void *)address; - -/** - Initializes an instance of a network reachability manager from the specified reachability object. - - @param reachability The reachability object to monitor. - - @return An initialized network reachability manager, actively monitoring the specified reachability. - */ -- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability NS_DESIGNATED_INITIALIZER; - -///-------------------------------------------------- -/// @name Starting & Stopping Reachability Monitoring -///-------------------------------------------------- - -/** - Starts monitoring for changes in network reachability status. - */ -- (void)startMonitoring; - -/** - Stops monitoring for changes in network reachability status. - */ -- (void)stopMonitoring; - -///------------------------------------------------- -/// @name Getting Localized Reachability Description -///------------------------------------------------- - -/** - Returns a localized string representation of the current network reachability status. - */ -- (NSString *)localizedNetworkReachabilityStatusString; - -///--------------------------------------------------- -/// @name Setting Network Reachability Change Callback -///--------------------------------------------------- - -/** - Sets a callback to be executed when the network availability of the `baseURL` host changes. - - @param block A block object to be executed when the network availability of the `baseURL` host changes.. This block has no return value and takes a single argument which represents the various reachability states from the device to the `baseURL`. - */ -- (void)setReachabilityStatusChangeBlock:(nullable void (^)(AFNetworkReachabilityStatus status))block; - -@end - -///---------------- -/// @name Constants -///---------------- - -/** - ## Network Reachability - - The following constants are provided by `AFNetworkReachabilityManager` as possible network reachability statuses. - - enum { - AFNetworkReachabilityStatusUnknown, - AFNetworkReachabilityStatusNotReachable, - AFNetworkReachabilityStatusReachableViaWWAN, - AFNetworkReachabilityStatusReachableViaWiFi, - } - - `AFNetworkReachabilityStatusUnknown` - The `baseURL` host reachability is not known. - - `AFNetworkReachabilityStatusNotReachable` - The `baseURL` host cannot be reached. - - `AFNetworkReachabilityStatusReachableViaWWAN` - The `baseURL` host can be reached via a cellular connection, such as EDGE or GPRS. - - `AFNetworkReachabilityStatusReachableViaWiFi` - The `baseURL` host can be reached via a Wi-Fi connection. - - ### Keys for Notification UserInfo Dictionary - - Strings that are used as keys in a `userInfo` dictionary in a network reachability status change notification. - - `AFNetworkingReachabilityNotificationStatusItem` - A key in the userInfo dictionary in a `AFNetworkingReachabilityDidChangeNotification` notification. - The corresponding value is an `NSNumber` object representing the `AFNetworkReachabilityStatus` value for the current reachability status. - */ - -///-------------------- -/// @name Notifications -///-------------------- - -/** - Posted when network reachability changes. - This notification assigns no notification object. The `userInfo` dictionary contains an `NSNumber` object under the `AFNetworkingReachabilityNotificationStatusItem` key, representing the `AFNetworkReachabilityStatus` value for the current network reachability. - - @warning In order for network reachability to be monitored, include the `SystemConfiguration` framework in the active target's "Link Binary With Library" build phase, and add `#import ` to the header prefix of the project (`Prefix.pch`). - */ -FOUNDATION_EXPORT NSString * const AFNetworkingReachabilityDidChangeNotification; -FOUNDATION_EXPORT NSString * const AFNetworkingReachabilityNotificationStatusItem; - -///-------------------- -/// @name Functions -///-------------------- - -/** - Returns a localized string representation of an `AFNetworkReachabilityStatus` value. - */ -FOUNDATION_EXPORT NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status); - -NS_ASSUME_NONNULL_END -#endif diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m b/FoodbLog/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m deleted file mode 100644 index 2e5e2ed..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m +++ /dev/null @@ -1,262 +0,0 @@ -// AFNetworkReachabilityManager.m -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "AFNetworkReachabilityManager.h" -#if !TARGET_OS_WATCH - -#import -#import -#import -#import -#import - -NSString * const AFNetworkingReachabilityDidChangeNotification = @"com.alamofire.networking.reachability.change"; -NSString * const AFNetworkingReachabilityNotificationStatusItem = @"AFNetworkingReachabilityNotificationStatusItem"; - -typedef void (^AFNetworkReachabilityStatusBlock)(AFNetworkReachabilityStatus status); - -typedef NS_ENUM(NSUInteger, AFNetworkReachabilityAssociation) { - AFNetworkReachabilityForAddress = 1, - AFNetworkReachabilityForAddressPair = 2, - AFNetworkReachabilityForName = 3, -}; - -NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status) { - switch (status) { - case AFNetworkReachabilityStatusNotReachable: - return NSLocalizedStringFromTable(@"Not Reachable", @"AFNetworking", nil); - case AFNetworkReachabilityStatusReachableViaWWAN: - return NSLocalizedStringFromTable(@"Reachable via WWAN", @"AFNetworking", nil); - case AFNetworkReachabilityStatusReachableViaWiFi: - return NSLocalizedStringFromTable(@"Reachable via WiFi", @"AFNetworking", nil); - case AFNetworkReachabilityStatusUnknown: - default: - return NSLocalizedStringFromTable(@"Unknown", @"AFNetworking", nil); - } -} - -static AFNetworkReachabilityStatus AFNetworkReachabilityStatusForFlags(SCNetworkReachabilityFlags flags) { - BOOL isReachable = ((flags & kSCNetworkReachabilityFlagsReachable) != 0); - BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0); - BOOL canConnectionAutomatically = (((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || ((flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)); - BOOL canConnectWithoutUserInteraction = (canConnectionAutomatically && (flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0); - BOOL isNetworkReachable = (isReachable && (!needsConnection || canConnectWithoutUserInteraction)); - - AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusUnknown; - if (isNetworkReachable == NO) { - status = AFNetworkReachabilityStatusNotReachable; - } -#if TARGET_OS_IPHONE - else if ((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0) { - status = AFNetworkReachabilityStatusReachableViaWWAN; - } -#endif - else { - status = AFNetworkReachabilityStatusReachableViaWiFi; - } - - return status; -} - -static void AFNetworkReachabilityCallback(SCNetworkReachabilityRef __unused target, SCNetworkReachabilityFlags flags, void *info) { - AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags); - AFNetworkReachabilityStatusBlock block = (__bridge AFNetworkReachabilityStatusBlock)info; - if (block) { - block(status); - } - - - dispatch_async(dispatch_get_main_queue(), ^{ - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - NSDictionary *userInfo = @{ AFNetworkingReachabilityNotificationStatusItem: @(status) }; - [notificationCenter postNotificationName:AFNetworkingReachabilityDidChangeNotification object:nil userInfo:userInfo]; - }); - -} - -static const void * AFNetworkReachabilityRetainCallback(const void *info) { - return Block_copy(info); -} - -static void AFNetworkReachabilityReleaseCallback(const void *info) { - if (info) { - Block_release(info); - } -} - -@interface AFNetworkReachabilityManager () -@property (readwrite, nonatomic, strong) id networkReachability; -@property (readwrite, nonatomic, assign) AFNetworkReachabilityAssociation networkReachabilityAssociation; -@property (readwrite, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus; -@property (readwrite, nonatomic, copy) AFNetworkReachabilityStatusBlock networkReachabilityStatusBlock; -@end - -@implementation AFNetworkReachabilityManager - -+ (instancetype)sharedManager { - static AFNetworkReachabilityManager *_sharedManager = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - struct sockaddr_in address; - bzero(&address, sizeof(address)); - address.sin_len = sizeof(address); - address.sin_family = AF_INET; - - _sharedManager = [self managerForAddress:&address]; - }); - - return _sharedManager; -} - -+ (instancetype)managerForDomain:(NSString *)domain { - SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [domain UTF8String]); - - AFNetworkReachabilityManager *manager = [[self alloc] initWithReachability:reachability]; - manager.networkReachabilityAssociation = AFNetworkReachabilityForName; - - return manager; -} - -+ (instancetype)managerForAddress:(const void *)address { - SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *)address); - - AFNetworkReachabilityManager *manager = [[self alloc] initWithReachability:reachability]; - manager.networkReachabilityAssociation = AFNetworkReachabilityForAddress; - - return manager; -} - -- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability { - self = [super init]; - if (!self) { - return nil; - } - - self.networkReachability = CFBridgingRelease(reachability); - self.networkReachabilityStatus = AFNetworkReachabilityStatusUnknown; - - return self; -} - -- (instancetype)init NS_UNAVAILABLE -{ - return nil; -} - -- (void)dealloc { - [self stopMonitoring]; -} - -#pragma mark - - -- (BOOL)isReachable { - return [self isReachableViaWWAN] || [self isReachableViaWiFi]; -} - -- (BOOL)isReachableViaWWAN { - return self.networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWWAN; -} - -- (BOOL)isReachableViaWiFi { - return self.networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWiFi; -} - -#pragma mark - - -- (void)startMonitoring { - [self stopMonitoring]; - - if (!self.networkReachability) { - return; - } - - __weak __typeof(self)weakSelf = self; - AFNetworkReachabilityStatusBlock callback = ^(AFNetworkReachabilityStatus status) { - __strong __typeof(weakSelf)strongSelf = weakSelf; - - strongSelf.networkReachabilityStatus = status; - if (strongSelf.networkReachabilityStatusBlock) { - strongSelf.networkReachabilityStatusBlock(status); - } - - }; - - id networkReachability = self.networkReachability; - SCNetworkReachabilityContext context = {0, (__bridge void *)callback, AFNetworkReachabilityRetainCallback, AFNetworkReachabilityReleaseCallback, NULL}; - SCNetworkReachabilitySetCallback((__bridge SCNetworkReachabilityRef)networkReachability, AFNetworkReachabilityCallback, &context); - SCNetworkReachabilityScheduleWithRunLoop((__bridge SCNetworkReachabilityRef)networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes); - - switch (self.networkReachabilityAssociation) { - case AFNetworkReachabilityForName: - break; - case AFNetworkReachabilityForAddress: - case AFNetworkReachabilityForAddressPair: - default: { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^{ - SCNetworkReachabilityFlags flags; - SCNetworkReachabilityGetFlags((__bridge SCNetworkReachabilityRef)networkReachability, &flags); - AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags); - dispatch_async(dispatch_get_main_queue(), ^{ - callback(status); - - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter postNotificationName:AFNetworkingReachabilityDidChangeNotification object:nil userInfo:@{ AFNetworkingReachabilityNotificationStatusItem: @(status) }]; - - - }); - }); - } - break; - } -} - -- (void)stopMonitoring { - if (!self.networkReachability) { - return; - } - - SCNetworkReachabilityUnscheduleFromRunLoop((__bridge SCNetworkReachabilityRef)self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes); -} - -#pragma mark - - -- (NSString *)localizedNetworkReachabilityStatusString { - return AFStringFromNetworkReachabilityStatus(self.networkReachabilityStatus); -} - -#pragma mark - - -- (void)setReachabilityStatusChangeBlock:(void (^)(AFNetworkReachabilityStatus status))block { - self.networkReachabilityStatusBlock = block; -} - -#pragma mark - NSKeyValueObserving - -+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key { - if ([key isEqualToString:@"reachable"] || [key isEqualToString:@"reachableViaWWAN"] || [key isEqualToString:@"reachableViaWiFi"]) { - return [NSSet setWithObject:@"networkReachabilityStatus"]; - } - - return [super keyPathsForValuesAffectingValueForKey:key]; -} - -@end -#endif diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFNetworking.h b/FoodbLog/Pods/AFNetworking/AFNetworking/AFNetworking.h deleted file mode 100644 index 6d442bb..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFNetworking.h +++ /dev/null @@ -1,46 +0,0 @@ -// AFNetworking.h -// -// Copyright (c) 2013 AFNetworking (http://afnetworking.com/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import -#import - -#ifndef _AFNETWORKING_ - #define _AFNETWORKING_ - - #import "AFURLRequestSerialization.h" - #import "AFURLResponseSerialization.h" - #import "AFSecurityPolicy.h" -#if !TARGET_OS_WATCH - #import "AFNetworkReachabilityManager.h" - #import "AFURLConnectionOperation.h" - #import "AFHTTPRequestOperation.h" - #import "AFHTTPRequestOperationManager.h" -#endif - -#if ( ( defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) || \ - ( defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 ) || \ - TARGET_OS_WATCH ) - #import "AFURLSessionManager.h" - #import "AFHTTPSessionManager.h" -#endif - -#endif /* _AFNETWORKING_ */ diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h b/FoodbLog/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h deleted file mode 100644 index 3c38da8..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h +++ /dev/null @@ -1,142 +0,0 @@ -// AFSecurityPolicy.h -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import -#import - -typedef NS_ENUM(NSUInteger, AFSSLPinningMode) { - AFSSLPinningModeNone, - AFSSLPinningModePublicKey, - AFSSLPinningModeCertificate, -}; - -/** - `AFSecurityPolicy` evaluates server trust against pinned X.509 certificates and public keys over secure connections. - - Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled. - */ - -NS_ASSUME_NONNULL_BEGIN - -@interface AFSecurityPolicy : NSObject - -/** - The criteria by which server trust should be evaluated against the pinned SSL certificates. Defaults to `AFSSLPinningModeNone`. - */ -@property (readonly, nonatomic, assign) AFSSLPinningMode SSLPinningMode; - -/** - The certificates used to evaluate server trust according to the SSL pinning mode. By default, this property is set to any (`.cer`) certificates included in the app bundle. Note that if you create an array with duplicate certificates, the duplicate certificates will be removed. Note that if pinning is enabled, `evaluateServerTrust:forDomain:` will return true if any pinned certificate matches. - */ -@property (nonatomic, strong, nullable) NSArray *pinnedCertificates; - -/** - Whether or not to trust servers with an invalid or expired SSL certificates. Defaults to `NO`. - */ -@property (nonatomic, assign) BOOL allowInvalidCertificates; - -/** - Whether or not to validate the domain name in the certificate's CN field. Defaults to `YES`. - */ -@property (nonatomic, assign) BOOL validatesDomainName; - -///----------------------------------------- -/// @name Getting Specific Security Policies -///----------------------------------------- - -/** - Returns the shared default security policy, which does not allow invalid certificates, validates domain name, and does not validate against pinned certificates or public keys. - - @return The default security policy. - */ -+ (instancetype)defaultPolicy; - -///--------------------- -/// @name Initialization -///--------------------- - -/** - Creates and returns a security policy with the specified pinning mode. - - @param pinningMode The SSL pinning mode. - - @return A new security policy. - */ -+ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode; - -///------------------------------ -/// @name Evaluating Server Trust -///------------------------------ - -/** - Whether or not the specified server trust should be accepted, based on the security policy. - - This method should be used when responding to an authentication challenge from a server. - - @param serverTrust The X.509 certificate trust of the server. - - @return Whether or not to trust the server. - - @warning This method has been deprecated in favor of `-evaluateServerTrust:forDomain:`. - */ -- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust DEPRECATED_ATTRIBUTE; - -/** - Whether or not the specified server trust should be accepted, based on the security policy. - - This method should be used when responding to an authentication challenge from a server. - - @param serverTrust The X.509 certificate trust of the server. - @param domain The domain of serverTrust. If `nil`, the domain will not be validated. - - @return Whether or not to trust the server. - */ -- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust - forDomain:(nullable NSString *)domain; - -@end - -NS_ASSUME_NONNULL_END - -///---------------- -/// @name Constants -///---------------- - -/** - ## SSL Pinning Modes - - The following constants are provided by `AFSSLPinningMode` as possible SSL pinning modes. - - enum { - AFSSLPinningModeNone, - AFSSLPinningModePublicKey, - AFSSLPinningModeCertificate, - } - - `AFSSLPinningModeNone` - Do not used pinned certificates to validate servers. - - `AFSSLPinningModePublicKey` - Validate host certificates against public keys of pinned certificates. - - `AFSSLPinningModeCertificate` - Validate host certificates against pinned certificates. -*/ diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m b/FoodbLog/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m deleted file mode 100644 index e8eaa65..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m +++ /dev/null @@ -1,311 +0,0 @@ -// AFSecurityPolicy.m -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "AFSecurityPolicy.h" - -#import - -#if !TARGET_OS_IOS && !TARGET_OS_WATCH -static NSData * AFSecKeyGetData(SecKeyRef key) { - CFDataRef data = NULL; - - __Require_noErr_Quiet(SecItemExport(key, kSecFormatUnknown, kSecItemPemArmour, NULL, &data), _out); - - return (__bridge_transfer NSData *)data; - -_out: - if (data) { - CFRelease(data); - } - - return nil; -} -#endif - -static BOOL AFSecKeyIsEqualToKey(SecKeyRef key1, SecKeyRef key2) { -#if TARGET_OS_IOS || TARGET_OS_WATCH - return [(__bridge id)key1 isEqual:(__bridge id)key2]; -#else - return [AFSecKeyGetData(key1) isEqual:AFSecKeyGetData(key2)]; -#endif -} - -static id AFPublicKeyForCertificate(NSData *certificate) { - id allowedPublicKey = nil; - SecCertificateRef allowedCertificate; - SecCertificateRef allowedCertificates[1]; - CFArrayRef tempCertificates = nil; - SecPolicyRef policy = nil; - SecTrustRef allowedTrust = nil; - SecTrustResultType result; - - allowedCertificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificate); - __Require_Quiet(allowedCertificate != NULL, _out); - - allowedCertificates[0] = allowedCertificate; - tempCertificates = CFArrayCreate(NULL, (const void **)allowedCertificates, 1, NULL); - - policy = SecPolicyCreateBasicX509(); - __Require_noErr_Quiet(SecTrustCreateWithCertificates(tempCertificates, policy, &allowedTrust), _out); - __Require_noErr_Quiet(SecTrustEvaluate(allowedTrust, &result), _out); - - allowedPublicKey = (__bridge_transfer id)SecTrustCopyPublicKey(allowedTrust); - -_out: - if (allowedTrust) { - CFRelease(allowedTrust); - } - - if (policy) { - CFRelease(policy); - } - - if (tempCertificates) { - CFRelease(tempCertificates); - } - - if (allowedCertificate) { - CFRelease(allowedCertificate); - } - - return allowedPublicKey; -} - -static BOOL AFServerTrustIsValid(SecTrustRef serverTrust) { - BOOL isValid = NO; - SecTrustResultType result; - __Require_noErr_Quiet(SecTrustEvaluate(serverTrust, &result), _out); - - isValid = (result == kSecTrustResultUnspecified || result == kSecTrustResultProceed); - -_out: - return isValid; -} - -static NSArray * AFCertificateTrustChainForServerTrust(SecTrustRef serverTrust) { - CFIndex certificateCount = SecTrustGetCertificateCount(serverTrust); - NSMutableArray *trustChain = [NSMutableArray arrayWithCapacity:(NSUInteger)certificateCount]; - - for (CFIndex i = 0; i < certificateCount; i++) { - SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, i); - [trustChain addObject:(__bridge_transfer NSData *)SecCertificateCopyData(certificate)]; - } - - return [NSArray arrayWithArray:trustChain]; -} - -static NSArray * AFPublicKeyTrustChainForServerTrust(SecTrustRef serverTrust) { - SecPolicyRef policy = SecPolicyCreateBasicX509(); - CFIndex certificateCount = SecTrustGetCertificateCount(serverTrust); - NSMutableArray *trustChain = [NSMutableArray arrayWithCapacity:(NSUInteger)certificateCount]; - for (CFIndex i = 0; i < certificateCount; i++) { - SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, i); - - SecCertificateRef someCertificates[] = {certificate}; - CFArrayRef certificates = CFArrayCreate(NULL, (const void **)someCertificates, 1, NULL); - - SecTrustRef trust; - __Require_noErr_Quiet(SecTrustCreateWithCertificates(certificates, policy, &trust), _out); - - SecTrustResultType result; - __Require_noErr_Quiet(SecTrustEvaluate(trust, &result), _out); - - [trustChain addObject:(__bridge_transfer id)SecTrustCopyPublicKey(trust)]; - - _out: - if (trust) { - CFRelease(trust); - } - - if (certificates) { - CFRelease(certificates); - } - - continue; - } - CFRelease(policy); - - return [NSArray arrayWithArray:trustChain]; -} - -#pragma mark - - -@interface AFSecurityPolicy() -@property (readwrite, nonatomic, assign) AFSSLPinningMode SSLPinningMode; -@property (readwrite, nonatomic, strong) NSArray *pinnedPublicKeys; -@end - -@implementation AFSecurityPolicy - -+ (NSArray *)defaultPinnedCertificates { - static NSArray *_defaultPinnedCertificates = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSBundle *bundle = [NSBundle bundleForClass:[self class]]; - NSArray *paths = [bundle pathsForResourcesOfType:@"cer" inDirectory:@"."]; - - NSMutableArray *certificates = [NSMutableArray arrayWithCapacity:[paths count]]; - for (NSString *path in paths) { - NSData *certificateData = [NSData dataWithContentsOfFile:path]; - [certificates addObject:certificateData]; - } - - _defaultPinnedCertificates = [[NSArray alloc] initWithArray:certificates]; - }); - - return _defaultPinnedCertificates; -} - -+ (instancetype)defaultPolicy { - AFSecurityPolicy *securityPolicy = [[self alloc] init]; - securityPolicy.SSLPinningMode = AFSSLPinningModeNone; - - return securityPolicy; -} - -+ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode { - AFSecurityPolicy *securityPolicy = [[self alloc] init]; - securityPolicy.SSLPinningMode = pinningMode; - - [securityPolicy setPinnedCertificates:[self defaultPinnedCertificates]]; - - return securityPolicy; -} - -- (id)init { - self = [super init]; - if (!self) { - return nil; - } - - self.validatesDomainName = YES; - - return self; -} - -- (void)setPinnedCertificates:(NSArray *)pinnedCertificates { - _pinnedCertificates = [[NSOrderedSet orderedSetWithArray:pinnedCertificates] array]; - - if (self.pinnedCertificates) { - NSMutableArray *mutablePinnedPublicKeys = [NSMutableArray arrayWithCapacity:[self.pinnedCertificates count]]; - for (NSData *certificate in self.pinnedCertificates) { - id publicKey = AFPublicKeyForCertificate(certificate); - if (!publicKey) { - continue; - } - [mutablePinnedPublicKeys addObject:publicKey]; - } - self.pinnedPublicKeys = [NSArray arrayWithArray:mutablePinnedPublicKeys]; - } else { - self.pinnedPublicKeys = nil; - } -} - -#pragma mark - - -- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust { - return [self evaluateServerTrust:serverTrust forDomain:nil]; -} - -- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust - forDomain:(NSString *)domain -{ - if (domain && self.allowInvalidCertificates && self.validatesDomainName && (self.SSLPinningMode == AFSSLPinningModeNone || [self.pinnedCertificates count] == 0)) { - // https://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/NetworkingTopics/Articles/OverridingSSLChainValidationCorrectly.html - // According to the docs, you should only trust your provided certs for evaluation. - // Pinned certificates are added to the trust. Without pinned certificates, - // there is nothing to evaluate against. - // - // From Apple Docs: - // "Do not implicitly trust self-signed certificates as anchors (kSecTrustOptionImplicitAnchors). - // Instead, add your own (self-signed) CA certificate to the list of trusted anchors." - NSLog(@"In order to validate a domain name for self signed certificates, you MUST use pinning."); - return NO; - } - - NSMutableArray *policies = [NSMutableArray array]; - if (self.validatesDomainName) { - [policies addObject:(__bridge_transfer id)SecPolicyCreateSSL(true, (__bridge CFStringRef)domain)]; - } else { - [policies addObject:(__bridge_transfer id)SecPolicyCreateBasicX509()]; - } - - SecTrustSetPolicies(serverTrust, (__bridge CFArrayRef)policies); - - if (self.SSLPinningMode == AFSSLPinningModeNone) { - if (self.allowInvalidCertificates || AFServerTrustIsValid(serverTrust)){ - return YES; - } else { - return NO; - } - } else if (!AFServerTrustIsValid(serverTrust) && !self.allowInvalidCertificates) { - return NO; - } - - NSArray *serverCertificates = AFCertificateTrustChainForServerTrust(serverTrust); - switch (self.SSLPinningMode) { - case AFSSLPinningModeNone: - default: - return NO; - case AFSSLPinningModeCertificate: { - NSMutableArray *pinnedCertificates = [NSMutableArray array]; - for (NSData *certificateData in self.pinnedCertificates) { - [pinnedCertificates addObject:(__bridge_transfer id)SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData)]; - } - SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)pinnedCertificates); - - if (!AFServerTrustIsValid(serverTrust)) { - return NO; - } - - NSUInteger trustedCertificateCount = 0; - for (NSData *trustChainCertificate in serverCertificates) { - if ([self.pinnedCertificates containsObject:trustChainCertificate]) { - trustedCertificateCount++; - } - } - return trustedCertificateCount > 0; - } - case AFSSLPinningModePublicKey: { - NSUInteger trustedPublicKeyCount = 0; - NSArray *publicKeys = AFPublicKeyTrustChainForServerTrust(serverTrust); - - for (id trustChainPublicKey in publicKeys) { - for (id pinnedPublicKey in self.pinnedPublicKeys) { - if (AFSecKeyIsEqualToKey((__bridge SecKeyRef)trustChainPublicKey, (__bridge SecKeyRef)pinnedPublicKey)) { - trustedPublicKeyCount += 1; - } - } - } - return trustedPublicKeyCount > 0; - } - } - - return NO; -} - -#pragma mark - NSKeyValueObserving - -+ (NSSet *)keyPathsForValuesAffectingPinnedPublicKeys { - return [NSSet setWithObject:@"pinnedCertificates"]; -} - -@end diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h b/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h deleted file mode 100644 index c21119e..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h +++ /dev/null @@ -1,344 +0,0 @@ -// AFURLConnectionOperation.h -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -#import -#import "AFURLRequestSerialization.h" -#import "AFURLResponseSerialization.h" -#import "AFSecurityPolicy.h" - -#ifndef NS_DESIGNATED_INITIALIZER -#if __has_attribute(objc_designated_initializer) -#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) -#else -#define NS_DESIGNATED_INITIALIZER -#endif -#endif - -/** - `AFURLConnectionOperation` is a subclass of `NSOperation` that implements `NSURLConnection` delegate methods. - - ## Subclassing Notes - - This is the base class of all network request operations. You may wish to create your own subclass in order to implement additional `NSURLConnection` delegate methods (see "`NSURLConnection` Delegate Methods" below), or to provide additional properties and/or class constructors. - - If you are creating a subclass that communicates over the HTTP or HTTPS protocols, you may want to consider subclassing `AFHTTPRequestOperation` instead, as it supports specifying acceptable content types or status codes. - - ## NSURLConnection Delegate Methods - - `AFURLConnectionOperation` implements the following `NSURLConnection` delegate methods: - - - `connection:didReceiveResponse:` - - `connection:didReceiveData:` - - `connectionDidFinishLoading:` - - `connection:didFailWithError:` - - `connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:` - - `connection:willCacheResponse:` - - `connectionShouldUseCredentialStorage:` - - `connection:needNewBodyStream:` - - `connection:willSendRequestForAuthenticationChallenge:` - - If any of these methods are overridden in a subclass, they _must_ call the `super` implementation first. - - ## Callbacks and Completion Blocks - - The built-in `completionBlock` provided by `NSOperation` allows for custom behavior to be executed after the request finishes. It is a common pattern for class constructors in subclasses to take callback block parameters, and execute them conditionally in the body of its `completionBlock`. Make sure to handle cancelled operations appropriately when setting a `completionBlock` (i.e. returning early before parsing response data). See the implementation of any of the `AFHTTPRequestOperation` subclasses for an example of this. - - Subclasses are strongly discouraged from overriding `setCompletionBlock:`, as `AFURLConnectionOperation`'s implementation includes a workaround to mitigate retain cycles, and what Apple rather ominously refers to as ["The Deallocation Problem"](http://developer.apple.com/library/ios/#technotes/tn2109/). - - ## SSL Pinning - - Relying on the CA trust model to validate SSL certificates exposes your app to security vulnerabilities, such as man-in-the-middle attacks. For applications that connect to known servers, SSL certificate pinning provides an increased level of security, by checking server certificate validity against those specified in the app bundle. - - SSL with certificate pinning is strongly recommended for any application that transmits sensitive information to an external webservice. - - Connections will be validated on all matching certificates with a `.cer` extension in the bundle root. - - ## NSCoding & NSCopying Conformance - - `AFURLConnectionOperation` conforms to the `NSCoding` and `NSCopying` protocols, allowing operations to be archived to disk, and copied in memory, respectively. However, because of the intrinsic limitations of capturing the exact state of an operation at a particular moment, there are some important caveats to keep in mind: - - ### NSCoding Caveats - - - Encoded operations do not include any block or stream properties. Be sure to set `completionBlock`, `outputStream`, and any callback blocks as necessary when using `-initWithCoder:` or `NSKeyedUnarchiver`. - - Operations are paused on `encodeWithCoder:`. If the operation was encoded while paused or still executing, its archived state will return `YES` for `isReady`. Otherwise, the state of an operation when encoding will remain unchanged. - - ### NSCopying Caveats - - - `-copy` and `-copyWithZone:` return a new operation with the `NSURLRequest` of the original. So rather than an exact copy of the operation at that particular instant, the copying mechanism returns a completely new instance, which can be useful for retrying operations. - - A copy of an operation will not include the `outputStream` of the original. - - Operation copies do not include `completionBlock`, as it often strongly captures a reference to `self`, which would otherwise have the unintuitive side-effect of pointing to the _original_ operation when copied. - */ - -NS_ASSUME_NONNULL_BEGIN - -@interface AFURLConnectionOperation : NSOperation - -///------------------------------- -/// @name Accessing Run Loop Modes -///------------------------------- - -/** - The run loop modes in which the operation will run on the network thread. By default, this is a single-member set containing `NSRunLoopCommonModes`. - */ -@property (nonatomic, strong) NSSet *runLoopModes; - -///----------------------------------------- -/// @name Getting URL Connection Information -///----------------------------------------- - -/** - The request used by the operation's connection. - */ -@property (readonly, nonatomic, strong) NSURLRequest *request; - -/** - The last response received by the operation's connection. - */ -@property (readonly, nonatomic, strong, nullable) NSURLResponse *response; - -/** - The error, if any, that occurred in the lifecycle of the request. - */ -@property (readonly, nonatomic, strong, nullable) NSError *error; - -///---------------------------- -/// @name Getting Response Data -///---------------------------- - -/** - The data received during the request. - */ -@property (readonly, nonatomic, strong, nullable) NSData *responseData; - -/** - The string representation of the response data. - */ -@property (readonly, nonatomic, copy, nullable) NSString *responseString; - -/** - The string encoding of the response. - - If the response does not specify a valid string encoding, `responseStringEncoding` will return `NSUTF8StringEncoding`. - */ -@property (readonly, nonatomic, assign) NSStringEncoding responseStringEncoding; - -///------------------------------- -/// @name Managing URL Credentials -///------------------------------- - -/** - Whether the URL connection should consult the credential storage for authenticating the connection. `YES` by default. - - This is the value that is returned in the `NSURLConnectionDelegate` method `-connectionShouldUseCredentialStorage:`. - */ -@property (nonatomic, assign) BOOL shouldUseCredentialStorage; - -/** - The credential used for authentication challenges in `-connection:didReceiveAuthenticationChallenge:`. - - This will be overridden by any shared credentials that exist for the username or password of the request URL, if present. - */ -@property (nonatomic, strong, nullable) NSURLCredential *credential; - -///------------------------------- -/// @name Managing Security Policy -///------------------------------- - -/** - The security policy used to evaluate server trust for secure connections. - */ -@property (nonatomic, strong) AFSecurityPolicy *securityPolicy; - -///------------------------ -/// @name Accessing Streams -///------------------------ - -/** - The input stream used to read data to be sent during the request. - - This property acts as a proxy to the `HTTPBodyStream` property of `request`. - */ -@property (nonatomic, strong) NSInputStream *inputStream; - -/** - The output stream that is used to write data received until the request is finished. - - By default, data is accumulated into a buffer that is stored into `responseData` upon completion of the request, with the intermediary `outputStream` property set to `nil`. When `outputStream` is set, the data will not be accumulated into an internal buffer, and as a result, the `responseData` property of the completed request will be `nil`. The output stream will be scheduled in the network thread runloop upon being set. - */ -@property (nonatomic, strong, nullable) NSOutputStream *outputStream; - -///--------------------------------- -/// @name Managing Callback Queues -///--------------------------------- - -/** - The dispatch queue for `completionBlock`. If `NULL` (default), the main queue is used. - */ -#if OS_OBJECT_USE_OBJC -@property (nonatomic, strong, nullable) dispatch_queue_t completionQueue; -#else -@property (nonatomic, assign, nullable) dispatch_queue_t completionQueue; -#endif - -/** - The dispatch group for `completionBlock`. If `NULL` (default), a private dispatch group is used. - */ -#if OS_OBJECT_USE_OBJC -@property (nonatomic, strong, nullable) dispatch_group_t completionGroup; -#else -@property (nonatomic, assign, nullable) dispatch_group_t completionGroup; -#endif - -///--------------------------------------------- -/// @name Managing Request Operation Information -///--------------------------------------------- - -/** - The user info dictionary for the receiver. - */ -@property (nonatomic, strong) NSDictionary *userInfo; -// FIXME: It doesn't seem that this userInfo is used anywhere in the implementation. - -///------------------------------------------------------ -/// @name Initializing an AFURLConnectionOperation Object -///------------------------------------------------------ - -/** - Initializes and returns a newly allocated operation object with a url connection configured with the specified url request. - - This is the designated initializer. - - @param urlRequest The request object to be used by the operation connection. - */ -- (instancetype)initWithRequest:(NSURLRequest *)urlRequest NS_DESIGNATED_INITIALIZER; - -///---------------------------------- -/// @name Pausing / Resuming Requests -///---------------------------------- - -/** - Pauses the execution of the request operation. - - A paused operation returns `NO` for `-isReady`, `-isExecuting`, and `-isFinished`. As such, it will remain in an `NSOperationQueue` until it is either cancelled or resumed. Pausing a finished, cancelled, or paused operation has no effect. - */ -- (void)pause; - -/** - Whether the request operation is currently paused. - - @return `YES` if the operation is currently paused, otherwise `NO`. - */ -- (BOOL)isPaused; - -/** - Resumes the execution of the paused request operation. - - Pause/Resume behavior varies depending on the underlying implementation for the operation class. In its base implementation, resuming a paused requests restarts the original request. However, since HTTP defines a specification for how to request a specific content range, `AFHTTPRequestOperation` will resume downloading the request from where it left off, instead of restarting the original request. - */ -- (void)resume; - -///---------------------------------------------- -/// @name Configuring Backgrounding Task Behavior -///---------------------------------------------- - -/** - Specifies that the operation should continue execution after the app has entered the background, and the expiration handler for that background task. - - @param handler A handler to be called shortly before the application’s remaining background time reaches 0. The handler is wrapped in a block that cancels the operation, and cleans up and marks the end of execution, unlike the `handler` parameter in `UIApplication -beginBackgroundTaskWithExpirationHandler:`, which expects this to be done in the handler itself. The handler is called synchronously on the main thread, thus blocking the application’s suspension momentarily while the application is notified. - */ -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -- (void)setShouldExecuteAsBackgroundTaskWithExpirationHandler:(nullable void (^)(void))handler NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extensions."); -#endif - -///--------------------------------- -/// @name Setting Progress Callbacks -///--------------------------------- - -/** - Sets a callback to be called when an undetermined number of bytes have been uploaded to the server. - - @param block A block object to be called when an undetermined number of bytes have been uploaded to the server. This block has no return value and takes three arguments: the number of bytes written since the last time the upload progress block was called, the total bytes written, and the total bytes expected to be written during the request, as initially determined by the length of the HTTP body. This block may be called multiple times, and will execute on the main thread. - */ -- (void)setUploadProgressBlock:(nullable void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))block; - -/** - Sets a callback to be called when an undetermined number of bytes have been downloaded from the server. - - @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the main thread. - */ -- (void)setDownloadProgressBlock:(nullable void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block; - -///------------------------------------------------- -/// @name Setting NSURLConnection Delegate Callbacks -///------------------------------------------------- - -/** - Sets a block to be executed when the connection will authenticate a challenge in order to download its request, as handled by the `NSURLConnectionDelegate` method `connection:willSendRequestForAuthenticationChallenge:`. - - @param block A block object to be executed when the connection will authenticate a challenge in order to download its request. The block has no return type and takes two arguments: the URL connection object, and the challenge that must be authenticated. This block must invoke one of the challenge-responder methods (NSURLAuthenticationChallengeSender protocol). - - If `allowsInvalidSSLCertificate` is set to YES, `connection:willSendRequestForAuthenticationChallenge:` will attempt to have the challenge sender use credentials with invalid SSL certificates. - */ -- (void)setWillSendRequestForAuthenticationChallengeBlock:(nullable void (^)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge))block; - -/** - Sets a block to be executed when the server redirects the request from one URL to another URL, or when the request URL changed by the `NSURLProtocol` subclass handling the request in order to standardize its format, as handled by the `NSURLConnectionDataDelegate` method `connection:willSendRequest:redirectResponse:`. - - @param block A block object to be executed when the request URL was changed. The block returns an `NSURLRequest` object, the URL request to redirect, and takes three arguments: the URL connection object, the the proposed redirected request, and the URL response that caused the redirect. - */ -- (void)setRedirectResponseBlock:(nullable NSURLRequest * (^)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse))block; - - -/** - Sets a block to be executed to modify the response a connection will cache, if any, as handled by the `NSURLConnectionDelegate` method `connection:willCacheResponse:`. - - @param block A block object to be executed to determine what response a connection will cache, if any. The block returns an `NSCachedURLResponse` object, the cached response to store in memory or `nil` to prevent the response from being cached, and takes two arguments: the URL connection object, and the cached response provided for the request. - */ -- (void)setCacheResponseBlock:(nullable NSCachedURLResponse * (^)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse))block; - -/// - -/** - - */ -+ (NSArray *)batchOfRequestOperations:(nullable NSArray *)operations - progressBlock:(nullable void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock - completionBlock:(nullable void (^)(NSArray *operations))completionBlock; - -@end - -///-------------------- -/// @name Notifications -///-------------------- - -/** - Posted when an operation begins executing. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingOperationDidStartNotification; - -/** - Posted when an operation finishes. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingOperationDidFinishNotification; - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m b/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m deleted file mode 100644 index 0568005..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m +++ /dev/null @@ -1,792 +0,0 @@ -// AFURLConnectionOperation.m -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "AFURLConnectionOperation.h" - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -#import -#endif - -#if !__has_feature(objc_arc) -#error AFNetworking must be built with ARC. -// You can turn on ARC for only AFNetworking files by adding -fobjc-arc to the build phase for each of its files. -#endif - -typedef NS_ENUM(NSInteger, AFOperationState) { - AFOperationPausedState = -1, - AFOperationReadyState = 1, - AFOperationExecutingState = 2, - AFOperationFinishedState = 3, -}; - -static dispatch_group_t url_request_operation_completion_group() { - static dispatch_group_t af_url_request_operation_completion_group; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - af_url_request_operation_completion_group = dispatch_group_create(); - }); - - return af_url_request_operation_completion_group; -} - -static dispatch_queue_t url_request_operation_completion_queue() { - static dispatch_queue_t af_url_request_operation_completion_queue; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - af_url_request_operation_completion_queue = dispatch_queue_create("com.alamofire.networking.operation.queue", DISPATCH_QUEUE_CONCURRENT ); - }); - - return af_url_request_operation_completion_queue; -} - -static NSString * const kAFNetworkingLockName = @"com.alamofire.networking.operation.lock"; - -NSString * const AFNetworkingOperationDidStartNotification = @"com.alamofire.networking.operation.start"; -NSString * const AFNetworkingOperationDidFinishNotification = @"com.alamofire.networking.operation.finish"; - -typedef void (^AFURLConnectionOperationProgressBlock)(NSUInteger bytes, long long totalBytes, long long totalBytesExpected); -typedef void (^AFURLConnectionOperationAuthenticationChallengeBlock)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge); -typedef NSCachedURLResponse * (^AFURLConnectionOperationCacheResponseBlock)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse); -typedef NSURLRequest * (^AFURLConnectionOperationRedirectResponseBlock)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse); -typedef void (^AFURLConnectionOperationBackgroundTaskCleanupBlock)(); - -static inline NSString * AFKeyPathFromOperationState(AFOperationState state) { - switch (state) { - case AFOperationReadyState: - return @"isReady"; - case AFOperationExecutingState: - return @"isExecuting"; - case AFOperationFinishedState: - return @"isFinished"; - case AFOperationPausedState: - return @"isPaused"; - default: { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunreachable-code" - return @"state"; -#pragma clang diagnostic pop - } - } -} - -static inline BOOL AFStateTransitionIsValid(AFOperationState fromState, AFOperationState toState, BOOL isCancelled) { - switch (fromState) { - case AFOperationReadyState: - switch (toState) { - case AFOperationPausedState: - case AFOperationExecutingState: - return YES; - case AFOperationFinishedState: - return isCancelled; - default: - return NO; - } - case AFOperationExecutingState: - switch (toState) { - case AFOperationPausedState: - case AFOperationFinishedState: - return YES; - default: - return NO; - } - case AFOperationFinishedState: - return NO; - case AFOperationPausedState: - return toState == AFOperationReadyState; - default: { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunreachable-code" - switch (toState) { - case AFOperationPausedState: - case AFOperationReadyState: - case AFOperationExecutingState: - case AFOperationFinishedState: - return YES; - default: - return NO; - } - } -#pragma clang diagnostic pop - } -} - -@interface AFURLConnectionOperation () -@property (readwrite, nonatomic, assign) AFOperationState state; -@property (readwrite, nonatomic, strong) NSRecursiveLock *lock; -@property (readwrite, nonatomic, strong) NSURLConnection *connection; -@property (readwrite, nonatomic, strong) NSURLRequest *request; -@property (readwrite, nonatomic, strong) NSURLResponse *response; -@property (readwrite, nonatomic, strong) NSError *error; -@property (readwrite, nonatomic, strong) NSData *responseData; -@property (readwrite, nonatomic, copy) NSString *responseString; -@property (readwrite, nonatomic, assign) NSStringEncoding responseStringEncoding; -@property (readwrite, nonatomic, assign) long long totalBytesRead; -@property (readwrite, nonatomic, copy) AFURLConnectionOperationBackgroundTaskCleanupBlock backgroundTaskCleanup; -@property (readwrite, nonatomic, copy) AFURLConnectionOperationProgressBlock uploadProgress; -@property (readwrite, nonatomic, copy) AFURLConnectionOperationProgressBlock downloadProgress; -@property (readwrite, nonatomic, copy) AFURLConnectionOperationAuthenticationChallengeBlock authenticationChallenge; -@property (readwrite, nonatomic, copy) AFURLConnectionOperationCacheResponseBlock cacheResponse; -@property (readwrite, nonatomic, copy) AFURLConnectionOperationRedirectResponseBlock redirectResponse; - -- (void)operationDidStart; -- (void)finish; -- (void)cancelConnection; -@end - -@implementation AFURLConnectionOperation -@synthesize outputStream = _outputStream; - -+ (void)networkRequestThreadEntryPoint:(id)__unused object { - @autoreleasepool { - [[NSThread currentThread] setName:@"AFNetworking"]; - - NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; - [runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode]; - [runLoop run]; - } -} - -+ (NSThread *)networkRequestThread { - static NSThread *_networkRequestThread = nil; - static dispatch_once_t oncePredicate; - dispatch_once(&oncePredicate, ^{ - _networkRequestThread = [[NSThread alloc] initWithTarget:self selector:@selector(networkRequestThreadEntryPoint:) object:nil]; - [_networkRequestThread start]; - }); - - return _networkRequestThread; -} - -- (instancetype)initWithRequest:(NSURLRequest *)urlRequest { - NSParameterAssert(urlRequest); - - self = [super init]; - if (!self) { - return nil; - } - - _state = AFOperationReadyState; - - self.lock = [[NSRecursiveLock alloc] init]; - self.lock.name = kAFNetworkingLockName; - - self.runLoopModes = [NSSet setWithObject:NSRunLoopCommonModes]; - - self.request = urlRequest; - - self.shouldUseCredentialStorage = YES; - - self.securityPolicy = [AFSecurityPolicy defaultPolicy]; - - return self; -} - -- (instancetype)init NS_UNAVAILABLE -{ - return nil; -} - -- (void)dealloc { - if (_outputStream) { - [_outputStream close]; - _outputStream = nil; - } - - if (_backgroundTaskCleanup) { - _backgroundTaskCleanup(); - } -} - -#pragma mark - - -- (void)setResponseData:(NSData *)responseData { - [self.lock lock]; - if (!responseData) { - _responseData = nil; - } else { - _responseData = [NSData dataWithBytes:responseData.bytes length:responseData.length]; - } - [self.lock unlock]; -} - -- (NSString *)responseString { - [self.lock lock]; - if (!_responseString && self.response && self.responseData) { - self.responseString = [[NSString alloc] initWithData:self.responseData encoding:self.responseStringEncoding]; - } - [self.lock unlock]; - - return _responseString; -} - -- (NSStringEncoding)responseStringEncoding { - [self.lock lock]; - if (!_responseStringEncoding && self.response) { - NSStringEncoding stringEncoding = NSUTF8StringEncoding; - if (self.response.textEncodingName) { - CFStringEncoding IANAEncoding = CFStringConvertIANACharSetNameToEncoding((__bridge CFStringRef)self.response.textEncodingName); - if (IANAEncoding != kCFStringEncodingInvalidId) { - stringEncoding = CFStringConvertEncodingToNSStringEncoding(IANAEncoding); - } - } - - self.responseStringEncoding = stringEncoding; - } - [self.lock unlock]; - - return _responseStringEncoding; -} - -- (NSInputStream *)inputStream { - return self.request.HTTPBodyStream; -} - -- (void)setInputStream:(NSInputStream *)inputStream { - NSMutableURLRequest *mutableRequest = [self.request mutableCopy]; - mutableRequest.HTTPBodyStream = inputStream; - self.request = mutableRequest; -} - -- (NSOutputStream *)outputStream { - if (!_outputStream) { - self.outputStream = [NSOutputStream outputStreamToMemory]; - } - - return _outputStream; -} - -- (void)setOutputStream:(NSOutputStream *)outputStream { - [self.lock lock]; - if (outputStream != _outputStream) { - if (_outputStream) { - [_outputStream close]; - } - - _outputStream = outputStream; - } - [self.lock unlock]; -} - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -- (void)setShouldExecuteAsBackgroundTaskWithExpirationHandler:(void (^)(void))handler { - [self.lock lock]; - if (!self.backgroundTaskCleanup) { - UIApplication *application = [UIApplication sharedApplication]; - UIBackgroundTaskIdentifier __block backgroundTaskIdentifier = UIBackgroundTaskInvalid; - __weak __typeof(self)weakSelf = self; - - self.backgroundTaskCleanup = ^(){ - if (backgroundTaskIdentifier != UIBackgroundTaskInvalid) { - [[UIApplication sharedApplication] endBackgroundTask:backgroundTaskIdentifier]; - backgroundTaskIdentifier = UIBackgroundTaskInvalid; - } - }; - - backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{ - __strong __typeof(weakSelf)strongSelf = weakSelf; - - if (handler) { - handler(); - } - - if (strongSelf) { - [strongSelf cancel]; - strongSelf.backgroundTaskCleanup(); - } - }]; - } - [self.lock unlock]; -} -#endif - -#pragma mark - - -- (void)setState:(AFOperationState)state { - if (!AFStateTransitionIsValid(self.state, state, [self isCancelled])) { - return; - } - - [self.lock lock]; - NSString *oldStateKey = AFKeyPathFromOperationState(self.state); - NSString *newStateKey = AFKeyPathFromOperationState(state); - - [self willChangeValueForKey:newStateKey]; - [self willChangeValueForKey:oldStateKey]; - _state = state; - [self didChangeValueForKey:oldStateKey]; - [self didChangeValueForKey:newStateKey]; - [self.lock unlock]; -} - -- (void)pause { - if ([self isPaused] || [self isFinished] || [self isCancelled]) { - return; - } - - [self.lock lock]; - if ([self isExecuting]) { - [self performSelector:@selector(operationDidPause) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; - - dispatch_async(dispatch_get_main_queue(), ^{ - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter postNotificationName:AFNetworkingOperationDidFinishNotification object:self]; - }); - } - - self.state = AFOperationPausedState; - [self.lock unlock]; -} - -- (void)operationDidPause { - [self.lock lock]; - [self.connection cancel]; - [self.lock unlock]; -} - -- (BOOL)isPaused { - return self.state == AFOperationPausedState; -} - -- (void)resume { - if (![self isPaused]) { - return; - } - - [self.lock lock]; - self.state = AFOperationReadyState; - - [self start]; - [self.lock unlock]; -} - -#pragma mark - - -- (void)setUploadProgressBlock:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))block { - self.uploadProgress = block; -} - -- (void)setDownloadProgressBlock:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block { - self.downloadProgress = block; -} - -- (void)setWillSendRequestForAuthenticationChallengeBlock:(void (^)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge))block { - self.authenticationChallenge = block; -} - -- (void)setCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse))block { - self.cacheResponse = block; -} - -- (void)setRedirectResponseBlock:(NSURLRequest * (^)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse))block { - self.redirectResponse = block; -} - -#pragma mark - NSOperation - -- (void)setCompletionBlock:(void (^)(void))block { - [self.lock lock]; - if (!block) { - [super setCompletionBlock:nil]; - } else { - __weak __typeof(self)weakSelf = self; - [super setCompletionBlock:^ { - __strong __typeof(weakSelf)strongSelf = weakSelf; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - dispatch_group_t group = strongSelf.completionGroup ?: url_request_operation_completion_group(); - dispatch_queue_t queue = strongSelf.completionQueue ?: dispatch_get_main_queue(); -#pragma clang diagnostic pop - - dispatch_group_async(group, queue, ^{ - block(); - }); - - dispatch_group_notify(group, url_request_operation_completion_queue(), ^{ - [strongSelf setCompletionBlock:nil]; - }); - }]; - } - [self.lock unlock]; -} - -- (BOOL)isReady { - return self.state == AFOperationReadyState && [super isReady]; -} - -- (BOOL)isExecuting { - return self.state == AFOperationExecutingState; -} - -- (BOOL)isFinished { - return self.state == AFOperationFinishedState; -} - -- (BOOL)isConcurrent { - return YES; -} - -- (void)start { - [self.lock lock]; - if ([self isCancelled]) { - [self performSelector:@selector(cancelConnection) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; - } else if ([self isReady]) { - self.state = AFOperationExecutingState; - - [self performSelector:@selector(operationDidStart) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; - } - [self.lock unlock]; -} - -- (void)operationDidStart { - [self.lock lock]; - if (![self isCancelled]) { - self.connection = [[NSURLConnection alloc] initWithRequest:self.request delegate:self startImmediately:NO]; - - NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; - for (NSString *runLoopMode in self.runLoopModes) { - [self.connection scheduleInRunLoop:runLoop forMode:runLoopMode]; - [self.outputStream scheduleInRunLoop:runLoop forMode:runLoopMode]; - } - - [self.outputStream open]; - [self.connection start]; - } - [self.lock unlock]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingOperationDidStartNotification object:self]; - }); -} - -- (void)finish { - [self.lock lock]; - self.state = AFOperationFinishedState; - [self.lock unlock]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingOperationDidFinishNotification object:self]; - }); -} - -- (void)cancel { - [self.lock lock]; - if (![self isFinished] && ![self isCancelled]) { - [super cancel]; - - if ([self isExecuting]) { - [self performSelector:@selector(cancelConnection) onThread:[[self class] networkRequestThread] withObject:nil waitUntilDone:NO modes:[self.runLoopModes allObjects]]; - } - } - [self.lock unlock]; -} - -- (void)cancelConnection { - NSDictionary *userInfo = nil; - if ([self.request URL]) { - userInfo = @{NSURLErrorFailingURLErrorKey : [self.request URL]}; - } - NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorCancelled userInfo:userInfo]; - - if (![self isFinished]) { - if (self.connection) { - [self.connection cancel]; - [self performSelector:@selector(connection:didFailWithError:) withObject:self.connection withObject:error]; - } else { - // Accommodate race condition where `self.connection` has not yet been set before cancellation - self.error = error; - [self finish]; - } - } -} - -#pragma mark - - -+ (NSArray *)batchOfRequestOperations:(NSArray *)operations - progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock - completionBlock:(void (^)(NSArray *operations))completionBlock -{ - if (!operations || [operations count] == 0) { - return @[[NSBlockOperation blockOperationWithBlock:^{ - dispatch_async(dispatch_get_main_queue(), ^{ - if (completionBlock) { - completionBlock(@[]); - } - }); - }]]; - } - - __block dispatch_group_t group = dispatch_group_create(); - NSBlockOperation *batchedOperation = [NSBlockOperation blockOperationWithBlock:^{ - dispatch_group_notify(group, dispatch_get_main_queue(), ^{ - if (completionBlock) { - completionBlock(operations); - } - }); - }]; - - for (AFURLConnectionOperation *operation in operations) { - operation.completionGroup = group; - void (^originalCompletionBlock)(void) = [operation.completionBlock copy]; - __weak __typeof(operation)weakOperation = operation; - operation.completionBlock = ^{ - __strong __typeof(weakOperation)strongOperation = weakOperation; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - dispatch_queue_t queue = strongOperation.completionQueue ?: dispatch_get_main_queue(); -#pragma clang diagnostic pop - dispatch_group_async(group, queue, ^{ - if (originalCompletionBlock) { - originalCompletionBlock(); - } - - NSUInteger numberOfFinishedOperations = [[operations indexesOfObjectsPassingTest:^BOOL(id op, NSUInteger __unused idx, BOOL __unused *stop) { - return [op isFinished]; - }] count]; - - if (progressBlock) { - progressBlock(numberOfFinishedOperations, [operations count]); - } - - dispatch_group_leave(group); - }); - }; - - dispatch_group_enter(group); - [batchedOperation addDependency:operation]; - } - - return [operations arrayByAddingObject:batchedOperation]; -} - -#pragma mark - NSObject - -- (NSString *)description { - [self.lock lock]; - NSString *description = [NSString stringWithFormat:@"<%@: %p, state: %@, cancelled: %@ request: %@, response: %@>", NSStringFromClass([self class]), self, AFKeyPathFromOperationState(self.state), ([self isCancelled] ? @"YES" : @"NO"), self.request, self.response]; - [self.lock unlock]; - return description; -} - -#pragma mark - NSURLConnectionDelegate - -- (void)connection:(NSURLConnection *)connection -willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge -{ - if (self.authenticationChallenge) { - self.authenticationChallenge(connection, challenge); - return; - } - - if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { - if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { - NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; - [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; - } else { - [[challenge sender] cancelAuthenticationChallenge:challenge]; - } - } else { - if ([challenge previousFailureCount] == 0) { - if (self.credential) { - [[challenge sender] useCredential:self.credential forAuthenticationChallenge:challenge]; - } else { - [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; - } - } else { - [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; - } - } -} - -- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection __unused *)connection { - return self.shouldUseCredentialStorage; -} - -- (NSURLRequest *)connection:(NSURLConnection *)connection - willSendRequest:(NSURLRequest *)request - redirectResponse:(NSURLResponse *)redirectResponse -{ - if (self.redirectResponse) { - return self.redirectResponse(connection, request, redirectResponse); - } else { - return request; - } -} - -- (void)connection:(NSURLConnection __unused *)connection - didSendBodyData:(NSInteger)bytesWritten - totalBytesWritten:(NSInteger)totalBytesWritten -totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite -{ - dispatch_async(dispatch_get_main_queue(), ^{ - if (self.uploadProgress) { - self.uploadProgress((NSUInteger)bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); - } - }); -} - -- (void)connection:(NSURLConnection __unused *)connection -didReceiveResponse:(NSURLResponse *)response -{ - self.response = response; -} - -- (void)connection:(NSURLConnection __unused *)connection - didReceiveData:(NSData *)data -{ - NSUInteger length = [data length]; - while (YES) { - NSInteger totalNumberOfBytesWritten = 0; - if ([self.outputStream hasSpaceAvailable]) { - const uint8_t *dataBuffer = (uint8_t *)[data bytes]; - - NSInteger numberOfBytesWritten = 0; - while (totalNumberOfBytesWritten < (NSInteger)length) { - numberOfBytesWritten = [self.outputStream write:&dataBuffer[(NSUInteger)totalNumberOfBytesWritten] maxLength:(length - (NSUInteger)totalNumberOfBytesWritten)]; - if (numberOfBytesWritten == -1) { - break; - } - - totalNumberOfBytesWritten += numberOfBytesWritten; - } - - break; - } else { - [self.connection cancel]; - if (self.outputStream.streamError) { - [self performSelector:@selector(connection:didFailWithError:) withObject:self.connection withObject:self.outputStream.streamError]; - } - return; - } - } - - dispatch_async(dispatch_get_main_queue(), ^{ - self.totalBytesRead += (long long)length; - - if (self.downloadProgress) { - self.downloadProgress(length, self.totalBytesRead, self.response.expectedContentLength); - } - }); -} - -- (void)connectionDidFinishLoading:(NSURLConnection __unused *)connection { - self.responseData = [self.outputStream propertyForKey:NSStreamDataWrittenToMemoryStreamKey]; - - [self.outputStream close]; - if (self.responseData) { - self.outputStream = nil; - } - - self.connection = nil; - - [self finish]; -} - -- (void)connection:(NSURLConnection __unused *)connection - didFailWithError:(NSError *)error -{ - self.error = error; - - [self.outputStream close]; - if (self.responseData) { - self.outputStream = nil; - } - - self.connection = nil; - - [self finish]; -} - -- (NSCachedURLResponse *)connection:(NSURLConnection *)connection - willCacheResponse:(NSCachedURLResponse *)cachedResponse -{ - if (self.cacheResponse) { - return self.cacheResponse(connection, cachedResponse); - } else { - if ([self isCancelled]) { - return nil; - } - - return cachedResponse; - } -} - -#pragma mark - NSSecureCoding - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder { - NSURLRequest *request = [decoder decodeObjectOfClass:[NSURLRequest class] forKey:NSStringFromSelector(@selector(request))]; - - self = [self initWithRequest:request]; - if (!self) { - return nil; - } - - self.state = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(state))] integerValue]; - self.response = [decoder decodeObjectOfClass:[NSHTTPURLResponse class] forKey:NSStringFromSelector(@selector(response))]; - self.error = [decoder decodeObjectOfClass:[NSError class] forKey:NSStringFromSelector(@selector(error))]; - self.responseData = [decoder decodeObjectOfClass:[NSData class] forKey:NSStringFromSelector(@selector(responseData))]; - self.totalBytesRead = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(totalBytesRead))] longLongValue]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [self pause]; - - [coder encodeObject:self.request forKey:NSStringFromSelector(@selector(request))]; - - switch (self.state) { - case AFOperationExecutingState: - case AFOperationPausedState: - [coder encodeInteger:AFOperationReadyState forKey:NSStringFromSelector(@selector(state))]; - break; - default: - [coder encodeInteger:self.state forKey:NSStringFromSelector(@selector(state))]; - break; - } - - [coder encodeObject:self.response forKey:NSStringFromSelector(@selector(response))]; - [coder encodeObject:self.error forKey:NSStringFromSelector(@selector(error))]; - [coder encodeObject:self.responseData forKey:NSStringFromSelector(@selector(responseData))]; - [coder encodeInt64:self.totalBytesRead forKey:NSStringFromSelector(@selector(totalBytesRead))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFURLConnectionOperation *operation = [(AFURLConnectionOperation *)[[self class] allocWithZone:zone] initWithRequest:self.request]; - - operation.uploadProgress = self.uploadProgress; - operation.downloadProgress = self.downloadProgress; - operation.authenticationChallenge = self.authenticationChallenge; - operation.cacheResponse = self.cacheResponse; - operation.redirectResponse = self.redirectResponse; - operation.completionQueue = self.completionQueue; - operation.completionGroup = self.completionGroup; - - return operation; -} - -@end diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h b/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h deleted file mode 100644 index ef4d366..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h +++ /dev/null @@ -1,473 +0,0 @@ -// AFURLRequestSerialization.h -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import -#if TARGET_OS_IOS -#import -#elif TARGET_OS_WATCH -#import -#endif - -NS_ASSUME_NONNULL_BEGIN - -/** - The `AFURLRequestSerialization` protocol is adopted by an object that encodes parameters for a specified HTTP requests. Request serializers may encode parameters as query strings, HTTP bodies, setting the appropriate HTTP header fields as necessary. - - For example, a JSON request serializer may set the HTTP body of the request to a JSON representation, and set the `Content-Type` HTTP header field value to `application/json`. - */ -@protocol AFURLRequestSerialization - -/** - Returns a request with the specified parameters encoded into a copy of the original request. - - @param request The original request. - @param parameters The parameters to be encoded. - @param error The error that occurred while attempting to encode the request parameters. - - @return A serialized request. - */ -- (nullable NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request - withParameters:(nullable id)parameters - error:(NSError * __nullable __autoreleasing *)error; - -@end - -#pragma mark - - -/** - - */ -typedef NS_ENUM(NSUInteger, AFHTTPRequestQueryStringSerializationStyle) { - AFHTTPRequestQueryStringDefaultStyle = 0, -}; - -@protocol AFMultipartFormData; - -/** - `AFHTTPRequestSerializer` conforms to the `AFURLRequestSerialization` & `AFURLResponseSerialization` protocols, offering a concrete base implementation of query string / URL form-encoded parameter serialization and default request headers, as well as response status code and content type validation. - - Any request or response serializer dealing with HTTP is encouraged to subclass `AFHTTPRequestSerializer` in order to ensure consistent default behavior. - */ -@interface AFHTTPRequestSerializer : NSObject - -/** - The string encoding used to serialize parameters. `NSUTF8StringEncoding` by default. - */ -@property (nonatomic, assign) NSStringEncoding stringEncoding; - -/** - Whether created requests can use the device’s cellular radio (if present). `YES` by default. - - @see NSMutableURLRequest -setAllowsCellularAccess: - */ -@property (nonatomic, assign) BOOL allowsCellularAccess; - -/** - The cache policy of created requests. `NSURLRequestUseProtocolCachePolicy` by default. - - @see NSMutableURLRequest -setCachePolicy: - */ -@property (nonatomic, assign) NSURLRequestCachePolicy cachePolicy; - -/** - Whether created requests should use the default cookie handling. `YES` by default. - - @see NSMutableURLRequest -setHTTPShouldHandleCookies: - */ -@property (nonatomic, assign) BOOL HTTPShouldHandleCookies; - -/** - Whether created requests can continue transmitting data before receiving a response from an earlier transmission. `NO` by default - - @see NSMutableURLRequest -setHTTPShouldUsePipelining: - */ -@property (nonatomic, assign) BOOL HTTPShouldUsePipelining; - -/** - The network service type for created requests. `NSURLNetworkServiceTypeDefault` by default. - - @see NSMutableURLRequest -setNetworkServiceType: - */ -@property (nonatomic, assign) NSURLRequestNetworkServiceType networkServiceType; - -/** - The timeout interval, in seconds, for created requests. The default timeout interval is 60 seconds. - - @see NSMutableURLRequest -setTimeoutInterval: - */ -@property (nonatomic, assign) NSTimeInterval timeoutInterval; - -///--------------------------------------- -/// @name Configuring HTTP Request Headers -///--------------------------------------- - -/** - Default HTTP header field values to be applied to serialized requests. By default, these include the following: - - - `Accept-Language` with the contents of `NSLocale +preferredLanguages` - - `User-Agent` with the contents of various bundle identifiers and OS designations - - @discussion To add or remove default request headers, use `setValue:forHTTPHeaderField:`. - */ -@property (readonly, nonatomic, strong) NSDictionary *HTTPRequestHeaders; - -/** - Creates and returns a serializer with default configuration. - */ -+ (instancetype)serializer; - -/** - Sets the value for the HTTP headers set in request objects made by the HTTP client. If `nil`, removes the existing value for that header. - - @param field The HTTP header to set a default value for - @param value The value set as default for the specified header, or `nil` - */ -- (void)setValue:(nullable NSString *)value -forHTTPHeaderField:(NSString *)field; - -/** - Returns the value for the HTTP headers set in the request serializer. - - @param field The HTTP header to retrieve the default value for - - @return The value set as default for the specified header, or `nil` - */ -- (nullable NSString *)valueForHTTPHeaderField:(NSString *)field; - -/** - Sets the "Authorization" HTTP header set in request objects made by the HTTP client to a basic authentication value with Base64-encoded username and password. This overwrites any existing value for this header. - - @param username The HTTP basic auth username - @param password The HTTP basic auth password - */ -- (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username - password:(NSString *)password; - -/** - @deprecated This method has been deprecated. Use -setValue:forHTTPHeaderField: instead. - */ -- (void)setAuthorizationHeaderFieldWithToken:(NSString *)token DEPRECATED_ATTRIBUTE; - - -/** - Clears any existing value for the "Authorization" HTTP header. - */ -- (void)clearAuthorizationHeader; - -///------------------------------------------------------- -/// @name Configuring Query String Parameter Serialization -///------------------------------------------------------- - -/** - HTTP methods for which serialized requests will encode parameters as a query string. `GET`, `HEAD`, and `DELETE` by default. - */ -@property (nonatomic, strong) NSSet *HTTPMethodsEncodingParametersInURI; - -/** - Set the method of query string serialization according to one of the pre-defined styles. - - @param style The serialization style. - - @see AFHTTPRequestQueryStringSerializationStyle - */ -- (void)setQueryStringSerializationWithStyle:(AFHTTPRequestQueryStringSerializationStyle)style; - -/** - Set the a custom method of query string serialization according to the specified block. - - @param block A block that defines a process of encoding parameters into a query string. This block returns the query string and takes three arguments: the request, the parameters to encode, and the error that occurred when attempting to encode parameters for the given request. - */ -- (void)setQueryStringSerializationWithBlock:(nullable NSString * (^)(NSURLRequest *request, id parameters, NSError * __autoreleasing *error))block; - -///------------------------------- -/// @name Creating Request Objects -///------------------------------- - -/** - @deprecated This method has been deprecated. Use -requestWithMethod:URLString:parameters:error: instead. - */ -- (NSMutableURLRequest *)requestWithMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(id)parameters DEPRECATED_ATTRIBUTE; - -/** - Creates an `NSMutableURLRequest` object with the specified HTTP method and URL string. - - If the HTTP method is `GET`, `HEAD`, or `DELETE`, the parameters will be used to construct a url-encoded query string that is appended to the request's URL. Otherwise, the parameters will be encoded according to the value of the `parameterEncoding` property, and set as the request body. - - @param method The HTTP method for the request, such as `GET`, `POST`, `PUT`, or `DELETE`. This parameter must not be `nil`. - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be either set as a query string for `GET` requests, or the request HTTP body. - @param error The error that occurred while constructing the request. - - @return An `NSMutableURLRequest` object. - */ -- (NSMutableURLRequest *)requestWithMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(nullable id)parameters - error:(NSError * __nullable __autoreleasing *)error; - -/** - @deprecated This method has been deprecated. Use -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error: instead. - */ -- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(NSDictionary *)parameters - constructingBodyWithBlock:(void (^)(id formData))block DEPRECATED_ATTRIBUTE; - -/** - Creates an `NSMutableURLRequest` object with the specified HTTP method and URLString, and constructs a `multipart/form-data` HTTP body, using the specified parameters and multipart form data block. See http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2 - - Multipart form requests are automatically streamed, reading files directly from disk along with in-memory data in a single HTTP body. The resulting `NSMutableURLRequest` object has an `HTTPBodyStream` property, so refrain from setting `HTTPBodyStream` or `HTTPBody` on this request object, as it will clear out the multipart form body stream. - - @param method The HTTP method for the request. This parameter must not be `GET` or `HEAD`, or `nil`. - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded and set in the request HTTP body. - @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. - @param error The error that occurred while constructing the request. - - @return An `NSMutableURLRequest` object - */ -- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(nullable NSDictionary *)parameters - constructingBodyWithBlock:(nullable void (^)(id formData))block - error:(NSError * __nullable __autoreleasing *)error; - -/** - Creates an `NSMutableURLRequest` by removing the `HTTPBodyStream` from a request, and asynchronously writing its contents into the specified file, invoking the completion handler when finished. - - @param request The multipart form request. The `HTTPBodyStream` property of `request` must not be `nil`. - @param fileURL The file URL to write multipart form contents to. - @param handler A handler block to execute. - - @discussion There is a bug in `NSURLSessionTask` that causes requests to not send a `Content-Length` header when streaming contents from an HTTP body, which is notably problematic when interacting with the Amazon S3 webservice. As a workaround, this method takes a request constructed with `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error:`, or any other request with an `HTTPBodyStream`, writes the contents to the specified file and returns a copy of the original request with the `HTTPBodyStream` property set to `nil`. From here, the file can either be passed to `AFURLSessionManager -uploadTaskWithRequest:fromFile:progress:completionHandler:`, or have its contents read into an `NSData` that's assigned to the `HTTPBody` property of the request. - - @see https://github.com/AFNetworking/AFNetworking/issues/1398 - */ -- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request - writingStreamContentsToFile:(NSURL *)fileURL - completionHandler:(nullable void (^)(NSError * __nullable error))handler; - -@end - -#pragma mark - - -/** - The `AFMultipartFormData` protocol defines the methods supported by the parameter in the block argument of `AFHTTPRequestSerializer -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:`. - */ -@protocol AFMultipartFormData - -/** - Appends the HTTP header `Content-Disposition: file; filename=#{generated filename}; name=#{name}"` and `Content-Type: #{generated mimeType}`, followed by the encoded file data and the multipart form boundary. - - The filename and MIME type for this data in the form will be automatically generated, using the last path component of the `fileURL` and system associated MIME type for the `fileURL` extension, respectively. - - @param fileURL The URL corresponding to the file whose content will be appended to the form. This parameter must not be `nil`. - @param name The name to be associated with the specified data. This parameter must not be `nil`. - @param error If an error occurs, upon return contains an `NSError` object that describes the problem. - - @return `YES` if the file data was successfully appended, otherwise `NO`. - */ -- (BOOL)appendPartWithFileURL:(NSURL *)fileURL - name:(NSString *)name - error:(NSError * __nullable __autoreleasing *)error; - -/** - Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the encoded file data and the multipart form boundary. - - @param fileURL The URL corresponding to the file whose content will be appended to the form. This parameter must not be `nil`. - @param name The name to be associated with the specified data. This parameter must not be `nil`. - @param fileName The file name to be used in the `Content-Disposition` header. This parameter must not be `nil`. - @param mimeType The declared MIME type of the file data. This parameter must not be `nil`. - @param error If an error occurs, upon return contains an `NSError` object that describes the problem. - - @return `YES` if the file data was successfully appended otherwise `NO`. - */ -- (BOOL)appendPartWithFileURL:(NSURL *)fileURL - name:(NSString *)name - fileName:(NSString *)fileName - mimeType:(NSString *)mimeType - error:(NSError * __nullable __autoreleasing *)error; - -/** - Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the data from the input stream and the multipart form boundary. - - @param inputStream The input stream to be appended to the form data - @param name The name to be associated with the specified input stream. This parameter must not be `nil`. - @param fileName The filename to be associated with the specified input stream. This parameter must not be `nil`. - @param length The length of the specified input stream in bytes. - @param mimeType The MIME type of the specified data. (For example, the MIME type for a JPEG image is image/jpeg.) For a list of valid MIME types, see http://www.iana.org/assignments/media-types/. This parameter must not be `nil`. - */ -- (void)appendPartWithInputStream:(nullable NSInputStream *)inputStream - name:(NSString *)name - fileName:(NSString *)fileName - length:(int64_t)length - mimeType:(NSString *)mimeType; - -/** - Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the encoded file data and the multipart form boundary. - - @param data The data to be encoded and appended to the form data. - @param name The name to be associated with the specified data. This parameter must not be `nil`. - @param fileName The filename to be associated with the specified data. This parameter must not be `nil`. - @param mimeType The MIME type of the specified data. (For example, the MIME type for a JPEG image is image/jpeg.) For a list of valid MIME types, see http://www.iana.org/assignments/media-types/. This parameter must not be `nil`. - */ -- (void)appendPartWithFileData:(NSData *)data - name:(NSString *)name - fileName:(NSString *)fileName - mimeType:(NSString *)mimeType; - -/** - Appends the HTTP headers `Content-Disposition: form-data; name=#{name}"`, followed by the encoded data and the multipart form boundary. - - @param data The data to be encoded and appended to the form data. - @param name The name to be associated with the specified data. This parameter must not be `nil`. - */ - -- (void)appendPartWithFormData:(NSData *)data - name:(NSString *)name; - - -/** - Appends HTTP headers, followed by the encoded data and the multipart form boundary. - - @param headers The HTTP headers to be appended to the form data. - @param body The data to be encoded and appended to the form data. This parameter must not be `nil`. - */ -- (void)appendPartWithHeaders:(nullable NSDictionary *)headers - body:(NSData *)body; - -/** - Throttles request bandwidth by limiting the packet size and adding a delay for each chunk read from the upload stream. - - When uploading over a 3G or EDGE connection, requests may fail with "request body stream exhausted". Setting a maximum packet size and delay according to the recommended values (`kAFUploadStream3GSuggestedPacketSize` and `kAFUploadStream3GSuggestedDelay`) lowers the risk of the input stream exceeding its allocated bandwidth. Unfortunately, there is no definite way to distinguish between a 3G, EDGE, or LTE connection over `NSURLConnection`. As such, it is not recommended that you throttle bandwidth based solely on network reachability. Instead, you should consider checking for the "request body stream exhausted" in a failure block, and then retrying the request with throttled bandwidth. - - @param numberOfBytes Maximum packet size, in number of bytes. The default packet size for an input stream is 16kb. - @param delay Duration of delay each time a packet is read. By default, no delay is set. - */ -- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes - delay:(NSTimeInterval)delay; - -@end - -#pragma mark - - -/** - `AFJSONRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSJSONSerialization`, setting the `Content-Type` of the encoded request to `application/json`. - */ -@interface AFJSONRequestSerializer : AFHTTPRequestSerializer - -/** - Options for writing the request JSON data from Foundation objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONWritingOptions". `0` by default. - */ -@property (nonatomic, assign) NSJSONWritingOptions writingOptions; - -/** - Creates and returns a JSON serializer with specified reading and writing options. - - @param writingOptions The specified JSON writing options. - */ -+ (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions; - -@end - -#pragma mark - - -/** - `AFPropertyListRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSPropertyListSerializer`, setting the `Content-Type` of the encoded request to `application/x-plist`. - */ -@interface AFPropertyListRequestSerializer : AFHTTPRequestSerializer - -/** - The property list format. Possible values are described in "NSPropertyListFormat". - */ -@property (nonatomic, assign) NSPropertyListFormat format; - -/** - @warning The `writeOptions` property is currently unused. - */ -@property (nonatomic, assign) NSPropertyListWriteOptions writeOptions; - -/** - Creates and returns a property list serializer with a specified format, read options, and write options. - - @param format The property list format. - @param writeOptions The property list write options. - - @warning The `writeOptions` property is currently unused. - */ -+ (instancetype)serializerWithFormat:(NSPropertyListFormat)format - writeOptions:(NSPropertyListWriteOptions)writeOptions; - -@end - -#pragma mark - - -///---------------- -/// @name Constants -///---------------- - -/** - ## Error Domains - - The following error domain is predefined. - - - `NSString * const AFURLRequestSerializationErrorDomain` - - ### Constants - - `AFURLRequestSerializationErrorDomain` - AFURLRequestSerializer errors. Error codes for `AFURLRequestSerializationErrorDomain` correspond to codes in `NSURLErrorDomain`. - */ -FOUNDATION_EXPORT NSString * const AFURLRequestSerializationErrorDomain; - -/** - ## User info dictionary keys - - These keys may exist in the user info dictionary, in addition to those defined for NSError. - - - `NSString * const AFNetworkingOperationFailingURLRequestErrorKey` - - ### Constants - - `AFNetworkingOperationFailingURLRequestErrorKey` - The corresponding value is an `NSURLRequest` containing the request of the operation associated with an error. This key is only present in the `AFURLRequestSerializationErrorDomain`. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingOperationFailingURLRequestErrorKey; - -/** - ## Throttling Bandwidth for HTTP Request Input Streams - - @see -throttleBandwidthWithPacketSize:delay: - - ### Constants - - `kAFUploadStream3GSuggestedPacketSize` - Maximum packet size, in number of bytes. Equal to 16kb. - - `kAFUploadStream3GSuggestedDelay` - Duration of delay each time a packet is read. Equal to 0.2 seconds. - */ -FOUNDATION_EXPORT NSUInteger const kAFUploadStream3GSuggestedPacketSize; -FOUNDATION_EXPORT NSTimeInterval const kAFUploadStream3GSuggestedDelay; - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m b/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m deleted file mode 100644 index e387c24..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m +++ /dev/null @@ -1,1425 +0,0 @@ -// AFURLRequestSerialization.m -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "AFURLRequestSerialization.h" - -#if __IPHONE_OS_VERSION_MIN_REQUIRED -#import -#else -#import -#endif - -NSString * const AFURLRequestSerializationErrorDomain = @"com.alamofire.error.serialization.request"; -NSString * const AFNetworkingOperationFailingURLRequestErrorKey = @"com.alamofire.serialization.request.error.response"; - -typedef NSString * (^AFQueryStringSerializationBlock)(NSURLRequest *request, id parameters, NSError *__autoreleasing *error); - -static NSString * AFBase64EncodedStringFromString(NSString *string) { - NSData *data = [NSData dataWithBytes:[string UTF8String] length:[string lengthOfBytesUsingEncoding:NSUTF8StringEncoding]]; - NSUInteger length = [data length]; - NSMutableData *mutableData = [NSMutableData dataWithLength:((length + 2) / 3) * 4]; - - uint8_t *input = (uint8_t *)[data bytes]; - uint8_t *output = (uint8_t *)[mutableData mutableBytes]; - - for (NSUInteger i = 0; i < length; i += 3) { - NSUInteger value = 0; - for (NSUInteger j = i; j < (i + 3); j++) { - value <<= 8; - if (j < length) { - value |= (0xFF & input[j]); - } - } - - static uint8_t const kAFBase64EncodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - - NSUInteger idx = (i / 3) * 4; - output[idx + 0] = kAFBase64EncodingTable[(value >> 18) & 0x3F]; - output[idx + 1] = kAFBase64EncodingTable[(value >> 12) & 0x3F]; - output[idx + 2] = (i + 1) < length ? kAFBase64EncodingTable[(value >> 6) & 0x3F] : '='; - output[idx + 3] = (i + 2) < length ? kAFBase64EncodingTable[(value >> 0) & 0x3F] : '='; - } - - return [[NSString alloc] initWithData:mutableData encoding:NSASCIIStringEncoding]; -} - -/** - Returns a percent-escaped string following RFC 3986 for a query string key or value. - RFC 3986 states that the following characters are "reserved" characters. - - General Delimiters: ":", "#", "[", "]", "@", "?", "/" - - Sub-Delimiters: "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "=" - - In RFC 3986 - Section 3.4, it states that the "?" and "/" characters should not be escaped to allow - query strings to include a URL. Therefore, all "reserved" characters with the exception of "?" and "/" - should be percent-escaped in the query string. - - parameter string: The string to be percent-escaped. - - returns: The percent-escaped string. - */ -static NSString * AFPercentEscapedStringFromString(NSString *string) { - static NSString * const kAFCharactersGeneralDelimitersToEncode = @":#[]@"; // does not include "?" or "/" due to RFC 3986 - Section 3.4 - static NSString * const kAFCharactersSubDelimitersToEncode = @"!$&'()*+,;="; - - NSMutableCharacterSet * allowedCharacterSet = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy]; - [allowedCharacterSet removeCharactersInString:[kAFCharactersGeneralDelimitersToEncode stringByAppendingString:kAFCharactersSubDelimitersToEncode]]; - - // FIXME: https://github.com/AFNetworking/AFNetworking/pull/3028 - // return [string stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet]; - - static NSUInteger const batchSize = 50; - - NSInteger index = 0; - NSMutableString *escaped = @"".mutableCopy; - - while (index < string.length) { - NSUInteger length = MIN(string.length - index, batchSize); - NSRange range = NSMakeRange(index, length); - - // To avoid breaking up character sequences such as 👴🏻👮🏽 - range = [string rangeOfComposedCharacterSequencesForRange:range]; - - NSString *substring = [string substringWithRange:range]; - NSString *encoded = [substring stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet]; - [escaped appendString:encoded]; - - index += range.length; - } - - return escaped; -} - -#pragma mark - - -@interface AFQueryStringPair : NSObject -@property (readwrite, nonatomic, strong) id field; -@property (readwrite, nonatomic, strong) id value; - -- (id)initWithField:(id)field value:(id)value; - -- (NSString *)URLEncodedStringValue; -@end - -@implementation AFQueryStringPair - -- (id)initWithField:(id)field value:(id)value { - self = [super init]; - if (!self) { - return nil; - } - - self.field = field; - self.value = value; - - return self; -} - -- (NSString *)URLEncodedStringValue { - if (!self.value || [self.value isEqual:[NSNull null]]) { - return AFPercentEscapedStringFromString([self.field description]); - } else { - return [NSString stringWithFormat:@"%@=%@", AFPercentEscapedStringFromString([self.field description]), AFPercentEscapedStringFromString([self.value description])]; - } -} - -@end - -#pragma mark - - -FOUNDATION_EXPORT NSArray * AFQueryStringPairsFromDictionary(NSDictionary *dictionary); -FOUNDATION_EXPORT NSArray * AFQueryStringPairsFromKeyAndValue(NSString *key, id value); - -static NSString * AFQueryStringFromParameters(NSDictionary *parameters) { - NSMutableArray *mutablePairs = [NSMutableArray array]; - for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) { - [mutablePairs addObject:[pair URLEncodedStringValue]]; - } - - return [mutablePairs componentsJoinedByString:@"&"]; -} - -NSArray * AFQueryStringPairsFromDictionary(NSDictionary *dictionary) { - return AFQueryStringPairsFromKeyAndValue(nil, dictionary); -} - -NSArray * AFQueryStringPairsFromKeyAndValue(NSString *key, id value) { - NSMutableArray *mutableQueryStringComponents = [NSMutableArray array]; - - NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES selector:@selector(compare:)]; - - if ([value isKindOfClass:[NSDictionary class]]) { - NSDictionary *dictionary = value; - // Sort dictionary keys to ensure consistent ordering in query string, which is important when deserializing potentially ambiguous sequences, such as an array of dictionaries - for (id nestedKey in [dictionary.allKeys sortedArrayUsingDescriptors:@[ sortDescriptor ]]) { - id nestedValue = dictionary[nestedKey]; - if (nestedValue) { - [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue((key ? [NSString stringWithFormat:@"%@[%@]", key, nestedKey] : nestedKey), nestedValue)]; - } - } - } else if ([value isKindOfClass:[NSArray class]]) { - NSArray *array = value; - for (id nestedValue in array) { - [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue([NSString stringWithFormat:@"%@[]", key], nestedValue)]; - } - } else if ([value isKindOfClass:[NSSet class]]) { - NSSet *set = value; - for (id obj in [set sortedArrayUsingDescriptors:@[ sortDescriptor ]]) { - [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue(key, obj)]; - } - } else { - [mutableQueryStringComponents addObject:[[AFQueryStringPair alloc] initWithField:key value:value]]; - } - - return mutableQueryStringComponents; -} - -#pragma mark - - -@interface AFStreamingMultipartFormData : NSObject -- (instancetype)initWithURLRequest:(NSMutableURLRequest *)urlRequest - stringEncoding:(NSStringEncoding)encoding; - -- (NSMutableURLRequest *)requestByFinalizingMultipartFormData; -@end - -#pragma mark - - -static NSArray * AFHTTPRequestSerializerObservedKeyPaths() { - static NSArray *_AFHTTPRequestSerializerObservedKeyPaths = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _AFHTTPRequestSerializerObservedKeyPaths = @[NSStringFromSelector(@selector(allowsCellularAccess)), NSStringFromSelector(@selector(cachePolicy)), NSStringFromSelector(@selector(HTTPShouldHandleCookies)), NSStringFromSelector(@selector(HTTPShouldUsePipelining)), NSStringFromSelector(@selector(networkServiceType)), NSStringFromSelector(@selector(timeoutInterval))]; - }); - - return _AFHTTPRequestSerializerObservedKeyPaths; -} - -static void *AFHTTPRequestSerializerObserverContext = &AFHTTPRequestSerializerObserverContext; - -@interface AFHTTPRequestSerializer () -@property (readwrite, nonatomic, strong) NSMutableSet *mutableObservedChangedKeyPaths; -@property (readwrite, nonatomic, strong) NSMutableDictionary *mutableHTTPRequestHeaders; -@property (readwrite, nonatomic, assign) AFHTTPRequestQueryStringSerializationStyle queryStringSerializationStyle; -@property (readwrite, nonatomic, copy) AFQueryStringSerializationBlock queryStringSerialization; -@end - -@implementation AFHTTPRequestSerializer - -+ (instancetype)serializer { - return [[self alloc] init]; -} - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - self.stringEncoding = NSUTF8StringEncoding; - - self.mutableHTTPRequestHeaders = [NSMutableDictionary dictionary]; - - // Accept-Language HTTP Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4 - NSMutableArray *acceptLanguagesComponents = [NSMutableArray array]; - [[NSLocale preferredLanguages] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - float q = 1.0f - (idx * 0.1f); - [acceptLanguagesComponents addObject:[NSString stringWithFormat:@"%@;q=%0.1g", obj, q]]; - *stop = q <= 0.5f; - }]; - [self setValue:[acceptLanguagesComponents componentsJoinedByString:@", "] forHTTPHeaderField:@"Accept-Language"]; - - NSString *userAgent = nil; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" -#if TARGET_OS_IOS - // User-Agent Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43 - userAgent = [NSString stringWithFormat:@"%@/%@ (%@; iOS %@; Scale/%0.2f)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion], [[UIScreen mainScreen] scale]]; -#elif TARGET_OS_WATCH - // User-Agent Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43 - userAgent = [NSString stringWithFormat:@"%@/%@ (%@; watchOS %@; Scale/%0.2f)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[WKInterfaceDevice currentDevice] model], [[WKInterfaceDevice currentDevice] systemVersion], [[WKInterfaceDevice currentDevice] screenScale]]; -#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) - userAgent = [NSString stringWithFormat:@"%@/%@ (Mac OS X %@)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[NSProcessInfo processInfo] operatingSystemVersionString]]; -#endif -#pragma clang diagnostic pop - if (userAgent) { - if (![userAgent canBeConvertedToEncoding:NSASCIIStringEncoding]) { - NSMutableString *mutableUserAgent = [userAgent mutableCopy]; - if (CFStringTransform((__bridge CFMutableStringRef)(mutableUserAgent), NULL, (__bridge CFStringRef)@"Any-Latin; Latin-ASCII; [:^ASCII:] Remove", false)) { - userAgent = mutableUserAgent; - } - } - [self setValue:userAgent forHTTPHeaderField:@"User-Agent"]; - } - - // HTTP Method Definitions; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html - self.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", @"DELETE", nil]; - - self.mutableObservedChangedKeyPaths = [NSMutableSet set]; - for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { - if ([self respondsToSelector:NSSelectorFromString(keyPath)]) { - [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:AFHTTPRequestSerializerObserverContext]; - } - } - - return self; -} - -- (void)dealloc { - for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { - if ([self respondsToSelector:NSSelectorFromString(keyPath)]) { - [self removeObserver:self forKeyPath:keyPath context:AFHTTPRequestSerializerObserverContext]; - } - } -} - -#pragma mark - - -// Workarounds for crashing behavior using Key-Value Observing with XCTest -// See https://github.com/AFNetworking/AFNetworking/issues/2523 - -- (void)setAllowsCellularAccess:(BOOL)allowsCellularAccess { - [self willChangeValueForKey:NSStringFromSelector(@selector(allowsCellularAccess))]; - _allowsCellularAccess = allowsCellularAccess; - [self didChangeValueForKey:NSStringFromSelector(@selector(allowsCellularAccess))]; -} - -- (void)setCachePolicy:(NSURLRequestCachePolicy)cachePolicy { - [self willChangeValueForKey:NSStringFromSelector(@selector(cachePolicy))]; - _cachePolicy = cachePolicy; - [self didChangeValueForKey:NSStringFromSelector(@selector(cachePolicy))]; -} - -- (void)setHTTPShouldHandleCookies:(BOOL)HTTPShouldHandleCookies { - [self willChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldHandleCookies))]; - _HTTPShouldHandleCookies = HTTPShouldHandleCookies; - [self didChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldHandleCookies))]; -} - -- (void)setHTTPShouldUsePipelining:(BOOL)HTTPShouldUsePipelining { - [self willChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldUsePipelining))]; - _HTTPShouldUsePipelining = HTTPShouldUsePipelining; - [self didChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldUsePipelining))]; -} - -- (void)setNetworkServiceType:(NSURLRequestNetworkServiceType)networkServiceType { - [self willChangeValueForKey:NSStringFromSelector(@selector(networkServiceType))]; - _networkServiceType = networkServiceType; - [self didChangeValueForKey:NSStringFromSelector(@selector(networkServiceType))]; -} - -- (void)setTimeoutInterval:(NSTimeInterval)timeoutInterval { - [self willChangeValueForKey:NSStringFromSelector(@selector(timeoutInterval))]; - _timeoutInterval = timeoutInterval; - [self didChangeValueForKey:NSStringFromSelector(@selector(timeoutInterval))]; -} - -#pragma mark - - -- (NSDictionary *)HTTPRequestHeaders { - return [NSDictionary dictionaryWithDictionary:self.mutableHTTPRequestHeaders]; -} - -- (void)setValue:(NSString *)value -forHTTPHeaderField:(NSString *)field -{ - [self.mutableHTTPRequestHeaders setValue:value forKey:field]; -} - -- (NSString *)valueForHTTPHeaderField:(NSString *)field { - return [self.mutableHTTPRequestHeaders valueForKey:field]; -} - -- (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username - password:(NSString *)password -{ - NSString *basicAuthCredentials = [NSString stringWithFormat:@"%@:%@", username, password]; - [self setValue:[NSString stringWithFormat:@"Basic %@", AFBase64EncodedStringFromString(basicAuthCredentials)] forHTTPHeaderField:@"Authorization"]; -} - -- (void)setAuthorizationHeaderFieldWithToken:(NSString *)token { - [self setValue:[NSString stringWithFormat:@"Token token=\"%@\"", token] forHTTPHeaderField:@"Authorization"]; -} - -- (void)clearAuthorizationHeader { - [self.mutableHTTPRequestHeaders removeObjectForKey:@"Authorization"]; -} - -#pragma mark - - -- (void)setQueryStringSerializationWithStyle:(AFHTTPRequestQueryStringSerializationStyle)style { - self.queryStringSerializationStyle = style; - self.queryStringSerialization = nil; -} - -- (void)setQueryStringSerializationWithBlock:(NSString *(^)(NSURLRequest *, id, NSError *__autoreleasing *))block { - self.queryStringSerialization = block; -} - -#pragma mark - - -- (NSMutableURLRequest *)requestWithMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(id)parameters -{ - return [self requestWithMethod:method URLString:URLString parameters:parameters error:nil]; -} - -- (NSMutableURLRequest *)requestWithMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(id)parameters - error:(NSError *__autoreleasing *)error -{ - NSParameterAssert(method); - NSParameterAssert(URLString); - - NSURL *url = [NSURL URLWithString:URLString]; - - NSParameterAssert(url); - - NSMutableURLRequest *mutableRequest = [[NSMutableURLRequest alloc] initWithURL:url]; - mutableRequest.HTTPMethod = method; - - for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { - if ([self.mutableObservedChangedKeyPaths containsObject:keyPath]) { - [mutableRequest setValue:[self valueForKeyPath:keyPath] forKey:keyPath]; - } - } - - mutableRequest = [[self requestBySerializingRequest:mutableRequest withParameters:parameters error:error] mutableCopy]; - - return mutableRequest; -} - -- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(NSDictionary *)parameters - constructingBodyWithBlock:(void (^)(id formData))block -{ - return [self multipartFormRequestWithMethod:method URLString:URLString parameters:parameters constructingBodyWithBlock:block error:nil]; -} - -- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(NSDictionary *)parameters - constructingBodyWithBlock:(void (^)(id formData))block - error:(NSError *__autoreleasing *)error -{ - NSParameterAssert(method); - NSParameterAssert(![method isEqualToString:@"GET"] && ![method isEqualToString:@"HEAD"]); - - NSMutableURLRequest *mutableRequest = [self requestWithMethod:method URLString:URLString parameters:nil error:error]; - - __block AFStreamingMultipartFormData *formData = [[AFStreamingMultipartFormData alloc] initWithURLRequest:mutableRequest stringEncoding:NSUTF8StringEncoding]; - - if (parameters) { - for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) { - NSData *data = nil; - if ([pair.value isKindOfClass:[NSData class]]) { - data = pair.value; - } else if ([pair.value isEqual:[NSNull null]]) { - data = [NSData data]; - } else { - data = [[pair.value description] dataUsingEncoding:self.stringEncoding]; - } - - if (data) { - [formData appendPartWithFormData:data name:[pair.field description]]; - } - } - } - - if (block) { - block(formData); - } - - return [formData requestByFinalizingMultipartFormData]; -} - -- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request - writingStreamContentsToFile:(NSURL *)fileURL - completionHandler:(void (^)(NSError *error))handler -{ - NSParameterAssert(request.HTTPBodyStream); - NSParameterAssert([fileURL isFileURL]); - - NSInputStream *inputStream = request.HTTPBodyStream; - NSOutputStream *outputStream = [[NSOutputStream alloc] initWithURL:fileURL append:NO]; - __block NSError *error = nil; - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; - [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; - - [inputStream open]; - [outputStream open]; - - while ([inputStream hasBytesAvailable] && [outputStream hasSpaceAvailable]) { - uint8_t buffer[1024]; - - NSInteger bytesRead = [inputStream read:buffer maxLength:1024]; - if (inputStream.streamError || bytesRead < 0) { - error = inputStream.streamError; - break; - } - - NSInteger bytesWritten = [outputStream write:buffer maxLength:(NSUInteger)bytesRead]; - if (outputStream.streamError || bytesWritten < 0) { - error = outputStream.streamError; - break; - } - - if (bytesRead == 0 && bytesWritten == 0) { - break; - } - } - - [outputStream close]; - [inputStream close]; - - if (handler) { - dispatch_async(dispatch_get_main_queue(), ^{ - handler(error); - }); - } - }); - - NSMutableURLRequest *mutableRequest = [request mutableCopy]; - mutableRequest.HTTPBodyStream = nil; - - return mutableRequest; -} - -#pragma mark - AFURLRequestSerialization - -- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request - withParameters:(id)parameters - error:(NSError *__autoreleasing *)error -{ - NSParameterAssert(request); - - NSMutableURLRequest *mutableRequest = [request mutableCopy]; - - [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { - if (![request valueForHTTPHeaderField:field]) { - [mutableRequest setValue:value forHTTPHeaderField:field]; - } - }]; - - NSString *query = nil; - if (parameters) { - if (self.queryStringSerialization) { - NSError *serializationError; - query = self.queryStringSerialization(request, parameters, &serializationError); - - if (serializationError) { - if (error) { - *error = serializationError; - } - - return nil; - } - } else { - switch (self.queryStringSerializationStyle) { - case AFHTTPRequestQueryStringDefaultStyle: - query = AFQueryStringFromParameters(parameters); - break; - } - } - } - - if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { - if (query) { - mutableRequest.URL = [NSURL URLWithString:[[mutableRequest.URL absoluteString] stringByAppendingFormat:mutableRequest.URL.query ? @"&%@" : @"?%@", query]]; - } - } else { - // #2864: an empty string is a valid x-www-form-urlencoded payload - if (!query) { - query = @""; - } - if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { - [mutableRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; - } - [mutableRequest setHTTPBody:[query dataUsingEncoding:self.stringEncoding]]; - } - - return mutableRequest; -} - -#pragma mark - NSKeyValueObserving - -+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key { - if ([AFHTTPRequestSerializerObservedKeyPaths() containsObject:key]) { - return NO; - } - - return [super automaticallyNotifiesObserversForKey:key]; -} - -- (void)observeValueForKeyPath:(NSString *)keyPath - ofObject:(__unused id)object - change:(NSDictionary *)change - context:(void *)context -{ - if (context == AFHTTPRequestSerializerObserverContext) { - if ([change[NSKeyValueChangeNewKey] isEqual:[NSNull null]]) { - [self.mutableObservedChangedKeyPaths removeObject:keyPath]; - } else { - [self.mutableObservedChangedKeyPaths addObject:keyPath]; - } - } -} - -#pragma mark - NSSecureCoding - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder { - self = [self init]; - if (!self) { - return nil; - } - - self.mutableHTTPRequestHeaders = [[decoder decodeObjectOfClass:[NSDictionary class] forKey:NSStringFromSelector(@selector(mutableHTTPRequestHeaders))] mutableCopy]; - self.queryStringSerializationStyle = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(queryStringSerializationStyle))] unsignedIntegerValue]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [coder encodeObject:self.mutableHTTPRequestHeaders forKey:NSStringFromSelector(@selector(mutableHTTPRequestHeaders))]; - [coder encodeInteger:self.queryStringSerializationStyle forKey:NSStringFromSelector(@selector(queryStringSerializationStyle))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFHTTPRequestSerializer *serializer = [[[self class] allocWithZone:zone] init]; - serializer.mutableHTTPRequestHeaders = [self.mutableHTTPRequestHeaders mutableCopyWithZone:zone]; - serializer.queryStringSerializationStyle = self.queryStringSerializationStyle; - serializer.queryStringSerialization = self.queryStringSerialization; - - return serializer; -} - -@end - -#pragma mark - - -static NSString * AFCreateMultipartFormBoundary() { - return [NSString stringWithFormat:@"Boundary+%08X%08X", arc4random(), arc4random()]; -} - -static NSString * const kAFMultipartFormCRLF = @"\r\n"; - -static inline NSString * AFMultipartFormInitialBoundary(NSString *boundary) { - return [NSString stringWithFormat:@"--%@%@", boundary, kAFMultipartFormCRLF]; -} - -static inline NSString * AFMultipartFormEncapsulationBoundary(NSString *boundary) { - return [NSString stringWithFormat:@"%@--%@%@", kAFMultipartFormCRLF, boundary, kAFMultipartFormCRLF]; -} - -static inline NSString * AFMultipartFormFinalBoundary(NSString *boundary) { - return [NSString stringWithFormat:@"%@--%@--%@", kAFMultipartFormCRLF, boundary, kAFMultipartFormCRLF]; -} - -static inline NSString * AFContentTypeForPathExtension(NSString *extension) { -#ifdef __UTTYPE__ - NSString *UTI = (__bridge_transfer NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)extension, NULL); - NSString *contentType = (__bridge_transfer NSString *)UTTypeCopyPreferredTagWithClass((__bridge CFStringRef)UTI, kUTTagClassMIMEType); - if (!contentType) { - return @"application/octet-stream"; - } else { - return contentType; - } -#else -#pragma unused (extension) - return @"application/octet-stream"; -#endif -} - -NSUInteger const kAFUploadStream3GSuggestedPacketSize = 1024 * 16; -NSTimeInterval const kAFUploadStream3GSuggestedDelay = 0.2; - -@interface AFHTTPBodyPart : NSObject -@property (nonatomic, assign) NSStringEncoding stringEncoding; -@property (nonatomic, strong) NSDictionary *headers; -@property (nonatomic, copy) NSString *boundary; -@property (nonatomic, strong) id body; -@property (nonatomic, assign) unsigned long long bodyContentLength; -@property (nonatomic, strong) NSInputStream *inputStream; - -@property (nonatomic, assign) BOOL hasInitialBoundary; -@property (nonatomic, assign) BOOL hasFinalBoundary; - -@property (readonly, nonatomic, assign, getter = hasBytesAvailable) BOOL bytesAvailable; -@property (readonly, nonatomic, assign) unsigned long long contentLength; - -- (NSInteger)read:(uint8_t *)buffer - maxLength:(NSUInteger)length; -@end - -@interface AFMultipartBodyStream : NSInputStream -@property (nonatomic, assign) NSUInteger numberOfBytesInPacket; -@property (nonatomic, assign) NSTimeInterval delay; -@property (nonatomic, strong) NSInputStream *inputStream; -@property (readonly, nonatomic, assign) unsigned long long contentLength; -@property (readonly, nonatomic, assign, getter = isEmpty) BOOL empty; - -- (id)initWithStringEncoding:(NSStringEncoding)encoding; -- (void)setInitialAndFinalBoundaries; -- (void)appendHTTPBodyPart:(AFHTTPBodyPart *)bodyPart; -@end - -#pragma mark - - -@interface AFStreamingMultipartFormData () -@property (readwrite, nonatomic, copy) NSMutableURLRequest *request; -@property (readwrite, nonatomic, assign) NSStringEncoding stringEncoding; -@property (readwrite, nonatomic, copy) NSString *boundary; -@property (readwrite, nonatomic, strong) AFMultipartBodyStream *bodyStream; -@end - -@implementation AFStreamingMultipartFormData - -- (id)initWithURLRequest:(NSMutableURLRequest *)urlRequest - stringEncoding:(NSStringEncoding)encoding -{ - self = [super init]; - if (!self) { - return nil; - } - - self.request = urlRequest; - self.stringEncoding = encoding; - self.boundary = AFCreateMultipartFormBoundary(); - self.bodyStream = [[AFMultipartBodyStream alloc] initWithStringEncoding:encoding]; - - return self; -} - -- (BOOL)appendPartWithFileURL:(NSURL *)fileURL - name:(NSString *)name - error:(NSError * __autoreleasing *)error -{ - NSParameterAssert(fileURL); - NSParameterAssert(name); - - NSString *fileName = [fileURL lastPathComponent]; - NSString *mimeType = AFContentTypeForPathExtension([fileURL pathExtension]); - - return [self appendPartWithFileURL:fileURL name:name fileName:fileName mimeType:mimeType error:error]; -} - -- (BOOL)appendPartWithFileURL:(NSURL *)fileURL - name:(NSString *)name - fileName:(NSString *)fileName - mimeType:(NSString *)mimeType - error:(NSError * __autoreleasing *)error -{ - NSParameterAssert(fileURL); - NSParameterAssert(name); - NSParameterAssert(fileName); - NSParameterAssert(mimeType); - - if (![fileURL isFileURL]) { - NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: NSLocalizedStringFromTable(@"Expected URL to be a file URL", @"AFNetworking", nil)}; - if (error) { - *error = [[NSError alloc] initWithDomain:AFURLRequestSerializationErrorDomain code:NSURLErrorBadURL userInfo:userInfo]; - } - - return NO; - } else if ([fileURL checkResourceIsReachableAndReturnError:error] == NO) { - NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: NSLocalizedStringFromTable(@"File URL not reachable.", @"AFNetworking", nil)}; - if (error) { - *error = [[NSError alloc] initWithDomain:AFURLRequestSerializationErrorDomain code:NSURLErrorBadURL userInfo:userInfo]; - } - - return NO; - } - - NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[fileURL path] error:error]; - if (!fileAttributes) { - return NO; - } - - NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; - [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; - [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; - - AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; - bodyPart.stringEncoding = self.stringEncoding; - bodyPart.headers = mutableHeaders; - bodyPart.boundary = self.boundary; - bodyPart.body = fileURL; - bodyPart.bodyContentLength = [fileAttributes[NSFileSize] unsignedLongLongValue]; - [self.bodyStream appendHTTPBodyPart:bodyPart]; - - return YES; -} - -- (void)appendPartWithInputStream:(NSInputStream *)inputStream - name:(NSString *)name - fileName:(NSString *)fileName - length:(int64_t)length - mimeType:(NSString *)mimeType -{ - NSParameterAssert(name); - NSParameterAssert(fileName); - NSParameterAssert(mimeType); - - NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; - [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; - [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; - - AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; - bodyPart.stringEncoding = self.stringEncoding; - bodyPart.headers = mutableHeaders; - bodyPart.boundary = self.boundary; - bodyPart.body = inputStream; - - bodyPart.bodyContentLength = (unsigned long long)length; - - [self.bodyStream appendHTTPBodyPart:bodyPart]; -} - -- (void)appendPartWithFileData:(NSData *)data - name:(NSString *)name - fileName:(NSString *)fileName - mimeType:(NSString *)mimeType -{ - NSParameterAssert(name); - NSParameterAssert(fileName); - NSParameterAssert(mimeType); - - NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; - [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; - [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; - - [self appendPartWithHeaders:mutableHeaders body:data]; -} - -- (void)appendPartWithFormData:(NSData *)data - name:(NSString *)name -{ - NSParameterAssert(name); - - NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; - [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"", name] forKey:@"Content-Disposition"]; - - [self appendPartWithHeaders:mutableHeaders body:data]; -} - -- (void)appendPartWithHeaders:(NSDictionary *)headers - body:(NSData *)body -{ - NSParameterAssert(body); - - AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; - bodyPart.stringEncoding = self.stringEncoding; - bodyPart.headers = headers; - bodyPart.boundary = self.boundary; - bodyPart.bodyContentLength = [body length]; - bodyPart.body = body; - - [self.bodyStream appendHTTPBodyPart:bodyPart]; -} - -- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes - delay:(NSTimeInterval)delay -{ - self.bodyStream.numberOfBytesInPacket = numberOfBytes; - self.bodyStream.delay = delay; -} - -- (NSMutableURLRequest *)requestByFinalizingMultipartFormData { - if ([self.bodyStream isEmpty]) { - return self.request; - } - - // Reset the initial and final boundaries to ensure correct Content-Length - [self.bodyStream setInitialAndFinalBoundaries]; - [self.request setHTTPBodyStream:self.bodyStream]; - - [self.request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", self.boundary] forHTTPHeaderField:@"Content-Type"]; - [self.request setValue:[NSString stringWithFormat:@"%llu", [self.bodyStream contentLength]] forHTTPHeaderField:@"Content-Length"]; - - return self.request; -} - -@end - -#pragma mark - - -@interface NSStream () -@property (readwrite) NSStreamStatus streamStatus; -@property (readwrite, copy) NSError *streamError; -@end - -@interface AFMultipartBodyStream () -@property (readwrite, nonatomic, assign) NSStringEncoding stringEncoding; -@property (readwrite, nonatomic, strong) NSMutableArray *HTTPBodyParts; -@property (readwrite, nonatomic, strong) NSEnumerator *HTTPBodyPartEnumerator; -@property (readwrite, nonatomic, strong) AFHTTPBodyPart *currentHTTPBodyPart; -@property (readwrite, nonatomic, strong) NSOutputStream *outputStream; -@property (readwrite, nonatomic, strong) NSMutableData *buffer; -@end - -@implementation AFMultipartBodyStream -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wimplicit-atomic-properties" -#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1100) -@synthesize delegate; -#endif -@synthesize streamStatus; -@synthesize streamError; -#pragma clang diagnostic pop - -- (id)initWithStringEncoding:(NSStringEncoding)encoding { - self = [super init]; - if (!self) { - return nil; - } - - self.stringEncoding = encoding; - self.HTTPBodyParts = [NSMutableArray array]; - self.numberOfBytesInPacket = NSIntegerMax; - - return self; -} - -- (void)setInitialAndFinalBoundaries { - if ([self.HTTPBodyParts count] > 0) { - for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { - bodyPart.hasInitialBoundary = NO; - bodyPart.hasFinalBoundary = NO; - } - - [[self.HTTPBodyParts firstObject] setHasInitialBoundary:YES]; - [[self.HTTPBodyParts lastObject] setHasFinalBoundary:YES]; - } -} - -- (void)appendHTTPBodyPart:(AFHTTPBodyPart *)bodyPart { - [self.HTTPBodyParts addObject:bodyPart]; -} - -- (BOOL)isEmpty { - return [self.HTTPBodyParts count] == 0; -} - -#pragma mark - NSInputStream - -- (NSInteger)read:(uint8_t *)buffer - maxLength:(NSUInteger)length -{ - if ([self streamStatus] == NSStreamStatusClosed) { - return 0; - } - - NSInteger totalNumberOfBytesRead = 0; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - while ((NSUInteger)totalNumberOfBytesRead < MIN(length, self.numberOfBytesInPacket)) { - if (!self.currentHTTPBodyPart || ![self.currentHTTPBodyPart hasBytesAvailable]) { - if (!(self.currentHTTPBodyPart = [self.HTTPBodyPartEnumerator nextObject])) { - break; - } - } else { - NSUInteger maxLength = length - (NSUInteger)totalNumberOfBytesRead; - NSInteger numberOfBytesRead = [self.currentHTTPBodyPart read:&buffer[totalNumberOfBytesRead] maxLength:maxLength]; - if (numberOfBytesRead == -1) { - self.streamError = self.currentHTTPBodyPart.inputStream.streamError; - break; - } else { - totalNumberOfBytesRead += numberOfBytesRead; - - if (self.delay > 0.0f) { - [NSThread sleepForTimeInterval:self.delay]; - } - } - } - } -#pragma clang diagnostic pop - - return totalNumberOfBytesRead; -} - -- (BOOL)getBuffer:(__unused uint8_t **)buffer - length:(__unused NSUInteger *)len -{ - return NO; -} - -- (BOOL)hasBytesAvailable { - return [self streamStatus] == NSStreamStatusOpen; -} - -#pragma mark - NSStream - -- (void)open { - if (self.streamStatus == NSStreamStatusOpen) { - return; - } - - self.streamStatus = NSStreamStatusOpen; - - [self setInitialAndFinalBoundaries]; - self.HTTPBodyPartEnumerator = [self.HTTPBodyParts objectEnumerator]; -} - -- (void)close { - self.streamStatus = NSStreamStatusClosed; -} - -- (id)propertyForKey:(__unused NSString *)key { - return nil; -} - -- (BOOL)setProperty:(__unused id)property - forKey:(__unused NSString *)key -{ - return NO; -} - -- (void)scheduleInRunLoop:(__unused NSRunLoop *)aRunLoop - forMode:(__unused NSString *)mode -{} - -- (void)removeFromRunLoop:(__unused NSRunLoop *)aRunLoop - forMode:(__unused NSString *)mode -{} - -- (unsigned long long)contentLength { - unsigned long long length = 0; - for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { - length += [bodyPart contentLength]; - } - - return length; -} - -#pragma mark - Undocumented CFReadStream Bridged Methods - -- (void)_scheduleInCFRunLoop:(__unused CFRunLoopRef)aRunLoop - forMode:(__unused CFStringRef)aMode -{} - -- (void)_unscheduleFromCFRunLoop:(__unused CFRunLoopRef)aRunLoop - forMode:(__unused CFStringRef)aMode -{} - -- (BOOL)_setCFClientFlags:(__unused CFOptionFlags)inFlags - callback:(__unused CFReadStreamClientCallBack)inCallback - context:(__unused CFStreamClientContext *)inContext { - return NO; -} - -#pragma mark - NSCopying - --(id)copyWithZone:(NSZone *)zone { - AFMultipartBodyStream *bodyStreamCopy = [[[self class] allocWithZone:zone] initWithStringEncoding:self.stringEncoding]; - - for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { - [bodyStreamCopy appendHTTPBodyPart:[bodyPart copy]]; - } - - [bodyStreamCopy setInitialAndFinalBoundaries]; - - return bodyStreamCopy; -} - -@end - -#pragma mark - - -typedef enum { - AFEncapsulationBoundaryPhase = 1, - AFHeaderPhase = 2, - AFBodyPhase = 3, - AFFinalBoundaryPhase = 4, -} AFHTTPBodyPartReadPhase; - -@interface AFHTTPBodyPart () { - AFHTTPBodyPartReadPhase _phase; - NSInputStream *_inputStream; - unsigned long long _phaseReadOffset; -} - -- (BOOL)transitionToNextPhase; -- (NSInteger)readData:(NSData *)data - intoBuffer:(uint8_t *)buffer - maxLength:(NSUInteger)length; -@end - -@implementation AFHTTPBodyPart - -- (id)init { - self = [super init]; - if (!self) { - return nil; - } - - [self transitionToNextPhase]; - - return self; -} - -- (void)dealloc { - if (_inputStream) { - [_inputStream close]; - _inputStream = nil; - } -} - -- (NSInputStream *)inputStream { - if (!_inputStream) { - if ([self.body isKindOfClass:[NSData class]]) { - _inputStream = [NSInputStream inputStreamWithData:self.body]; - } else if ([self.body isKindOfClass:[NSURL class]]) { - _inputStream = [NSInputStream inputStreamWithURL:self.body]; - } else if ([self.body isKindOfClass:[NSInputStream class]]) { - _inputStream = self.body; - } else { - _inputStream = [NSInputStream inputStreamWithData:[NSData data]]; - } - } - - return _inputStream; -} - -- (NSString *)stringForHeaders { - NSMutableString *headerString = [NSMutableString string]; - for (NSString *field in [self.headers allKeys]) { - [headerString appendString:[NSString stringWithFormat:@"%@: %@%@", field, [self.headers valueForKey:field], kAFMultipartFormCRLF]]; - } - [headerString appendString:kAFMultipartFormCRLF]; - - return [NSString stringWithString:headerString]; -} - -- (unsigned long long)contentLength { - unsigned long long length = 0; - - NSData *encapsulationBoundaryData = [([self hasInitialBoundary] ? AFMultipartFormInitialBoundary(self.boundary) : AFMultipartFormEncapsulationBoundary(self.boundary)) dataUsingEncoding:self.stringEncoding]; - length += [encapsulationBoundaryData length]; - - NSData *headersData = [[self stringForHeaders] dataUsingEncoding:self.stringEncoding]; - length += [headersData length]; - - length += _bodyContentLength; - - NSData *closingBoundaryData = ([self hasFinalBoundary] ? [AFMultipartFormFinalBoundary(self.boundary) dataUsingEncoding:self.stringEncoding] : [NSData data]); - length += [closingBoundaryData length]; - - return length; -} - -- (BOOL)hasBytesAvailable { - // Allows `read:maxLength:` to be called again if `AFMultipartFormFinalBoundary` doesn't fit into the available buffer - if (_phase == AFFinalBoundaryPhase) { - return YES; - } - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wcovered-switch-default" - switch (self.inputStream.streamStatus) { - case NSStreamStatusNotOpen: - case NSStreamStatusOpening: - case NSStreamStatusOpen: - case NSStreamStatusReading: - case NSStreamStatusWriting: - return YES; - case NSStreamStatusAtEnd: - case NSStreamStatusClosed: - case NSStreamStatusError: - default: - return NO; - } -#pragma clang diagnostic pop -} - -- (NSInteger)read:(uint8_t *)buffer - maxLength:(NSUInteger)length -{ - NSInteger totalNumberOfBytesRead = 0; - - if (_phase == AFEncapsulationBoundaryPhase) { - NSData *encapsulationBoundaryData = [([self hasInitialBoundary] ? AFMultipartFormInitialBoundary(self.boundary) : AFMultipartFormEncapsulationBoundary(self.boundary)) dataUsingEncoding:self.stringEncoding]; - totalNumberOfBytesRead += [self readData:encapsulationBoundaryData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; - } - - if (_phase == AFHeaderPhase) { - NSData *headersData = [[self stringForHeaders] dataUsingEncoding:self.stringEncoding]; - totalNumberOfBytesRead += [self readData:headersData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; - } - - if (_phase == AFBodyPhase) { - NSInteger numberOfBytesRead = 0; - - numberOfBytesRead = [self.inputStream read:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; - if (numberOfBytesRead == -1) { - return -1; - } else { - totalNumberOfBytesRead += numberOfBytesRead; - - if ([self.inputStream streamStatus] >= NSStreamStatusAtEnd) { - [self transitionToNextPhase]; - } - } - } - - if (_phase == AFFinalBoundaryPhase) { - NSData *closingBoundaryData = ([self hasFinalBoundary] ? [AFMultipartFormFinalBoundary(self.boundary) dataUsingEncoding:self.stringEncoding] : [NSData data]); - totalNumberOfBytesRead += [self readData:closingBoundaryData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; - } - - return totalNumberOfBytesRead; -} - -- (NSInteger)readData:(NSData *)data - intoBuffer:(uint8_t *)buffer - maxLength:(NSUInteger)length -{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - NSRange range = NSMakeRange((NSUInteger)_phaseReadOffset, MIN([data length] - ((NSUInteger)_phaseReadOffset), length)); - [data getBytes:buffer range:range]; -#pragma clang diagnostic pop - - _phaseReadOffset += range.length; - - if (((NSUInteger)_phaseReadOffset) >= [data length]) { - [self transitionToNextPhase]; - } - - return (NSInteger)range.length; -} - -- (BOOL)transitionToNextPhase { - if (![[NSThread currentThread] isMainThread]) { - dispatch_sync(dispatch_get_main_queue(), ^{ - [self transitionToNextPhase]; - }); - return YES; - } - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wcovered-switch-default" - switch (_phase) { - case AFEncapsulationBoundaryPhase: - _phase = AFHeaderPhase; - break; - case AFHeaderPhase: - [self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; - [self.inputStream open]; - _phase = AFBodyPhase; - break; - case AFBodyPhase: - [self.inputStream close]; - _phase = AFFinalBoundaryPhase; - break; - case AFFinalBoundaryPhase: - default: - _phase = AFEncapsulationBoundaryPhase; - break; - } - _phaseReadOffset = 0; -#pragma clang diagnostic pop - - return YES; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFHTTPBodyPart *bodyPart = [[[self class] allocWithZone:zone] init]; - - bodyPart.stringEncoding = self.stringEncoding; - bodyPart.headers = self.headers; - bodyPart.bodyContentLength = self.bodyContentLength; - bodyPart.body = self.body; - bodyPart.boundary = self.boundary; - - return bodyPart; -} - -@end - -#pragma mark - - -@implementation AFJSONRequestSerializer - -+ (instancetype)serializer { - return [self serializerWithWritingOptions:(NSJSONWritingOptions)0]; -} - -+ (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions -{ - AFJSONRequestSerializer *serializer = [[self alloc] init]; - serializer.writingOptions = writingOptions; - - return serializer; -} - -#pragma mark - AFURLRequestSerialization - -- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request - withParameters:(id)parameters - error:(NSError *__autoreleasing *)error -{ - NSParameterAssert(request); - - if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { - return [super requestBySerializingRequest:request withParameters:parameters error:error]; - } - - NSMutableURLRequest *mutableRequest = [request mutableCopy]; - - [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { - if (![request valueForHTTPHeaderField:field]) { - [mutableRequest setValue:value forHTTPHeaderField:field]; - } - }]; - - if (parameters) { - if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { - [mutableRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; - } - - [mutableRequest setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error]]; - } - - return mutableRequest; -} - -#pragma mark - NSSecureCoding - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (!self) { - return nil; - } - - self.writingOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(writingOptions))] unsignedIntegerValue]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - - [coder encodeInteger:self.writingOptions forKey:NSStringFromSelector(@selector(writingOptions))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFJSONRequestSerializer *serializer = [super copyWithZone:zone]; - serializer.writingOptions = self.writingOptions; - - return serializer; -} - -@end - -#pragma mark - - -@implementation AFPropertyListRequestSerializer - -+ (instancetype)serializer { - return [self serializerWithFormat:NSPropertyListXMLFormat_v1_0 writeOptions:0]; -} - -+ (instancetype)serializerWithFormat:(NSPropertyListFormat)format - writeOptions:(NSPropertyListWriteOptions)writeOptions -{ - AFPropertyListRequestSerializer *serializer = [[self alloc] init]; - serializer.format = format; - serializer.writeOptions = writeOptions; - - return serializer; -} - -#pragma mark - AFURLRequestSerializer - -- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request - withParameters:(id)parameters - error:(NSError *__autoreleasing *)error -{ - NSParameterAssert(request); - - if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { - return [super requestBySerializingRequest:request withParameters:parameters error:error]; - } - - NSMutableURLRequest *mutableRequest = [request mutableCopy]; - - [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { - if (![request valueForHTTPHeaderField:field]) { - [mutableRequest setValue:value forHTTPHeaderField:field]; - } - }]; - - if (parameters) { - if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { - [mutableRequest setValue:@"application/x-plist" forHTTPHeaderField:@"Content-Type"]; - } - - [mutableRequest setHTTPBody:[NSPropertyListSerialization dataWithPropertyList:parameters format:self.format options:self.writeOptions error:error]]; - } - - return mutableRequest; -} - -#pragma mark - NSSecureCoding - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (!self) { - return nil; - } - - self.format = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(format))] unsignedIntegerValue]; - self.writeOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(writeOptions))] unsignedIntegerValue]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - - [coder encodeInteger:self.format forKey:NSStringFromSelector(@selector(format))]; - [coder encodeObject:@(self.writeOptions) forKey:NSStringFromSelector(@selector(writeOptions))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFPropertyListRequestSerializer *serializer = [super copyWithZone:zone]; - serializer.format = self.format; - serializer.writeOptions = self.writeOptions; - - return serializer; -} - -@end diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h b/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h deleted file mode 100644 index 1396cfb..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h +++ /dev/null @@ -1,311 +0,0 @@ -// AFURLResponseSerialization.h -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - The `AFURLResponseSerialization` protocol is adopted by an object that decodes data into a more useful object representation, according to details in the server response. Response serializers may additionally perform validation on the incoming response and data. - - For example, a JSON response serializer may check for an acceptable status code (`2XX` range) and content type (`application/json`), decoding a valid JSON response into an object. - */ -@protocol AFURLResponseSerialization - -/** - The response object decoded from the data associated with a specified response. - - @param response The response to be processed. - @param data The response data to be decoded. - @param error The error that occurred while attempting to decode the response data. - - @return The object decoded from the specified response data. - */ -- (nullable id)responseObjectForResponse:(nullable NSURLResponse *)response - data:(nullable NSData *)data - error:(NSError * __nullable __autoreleasing *)error; - -@end - -#pragma mark - - -/** - `AFHTTPResponseSerializer` conforms to the `AFURLRequestSerialization` & `AFURLResponseSerialization` protocols, offering a concrete base implementation of query string / URL form-encoded parameter serialization and default request headers, as well as response status code and content type validation. - - Any request or response serializer dealing with HTTP is encouraged to subclass `AFHTTPResponseSerializer` in order to ensure consistent default behavior. - */ -@interface AFHTTPResponseSerializer : NSObject - -- (instancetype)init; - -/** - The string encoding used to serialize data received from the server, when no string encoding is specified by the response. `NSUTF8StringEncoding` by default. - */ -@property (nonatomic, assign) NSStringEncoding stringEncoding; - -/** - Creates and returns a serializer with default configuration. - */ -+ (instancetype)serializer; - -///----------------------------------------- -/// @name Configuring Response Serialization -///----------------------------------------- - -/** - The acceptable HTTP status codes for responses. When non-`nil`, responses with status codes not contained by the set will result in an error during validation. - - See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html - */ -@property (nonatomic, copy, nullable) NSIndexSet *acceptableStatusCodes; - -/** - The acceptable MIME types for responses. When non-`nil`, responses with a `Content-Type` with MIME types that do not intersect with the set will result in an error during validation. - */ -@property (nonatomic, copy, nullable) NSSet *acceptableContentTypes; - -/** - Validates the specified response and data. - - In its base implementation, this method checks for an acceptable status code and content type. Subclasses may wish to add other domain-specific checks. - - @param response The response to be validated. - @param data The data associated with the response. - @param error The error that occurred while attempting to validate the response. - - @return `YES` if the response is valid, otherwise `NO`. - */ -- (BOOL)validateResponse:(nullable NSHTTPURLResponse *)response - data:(nullable NSData *)data - error:(NSError * __nullable __autoreleasing *)error; - -@end - -#pragma mark - - - -/** - `AFJSONResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes JSON responses. - - By default, `AFJSONResponseSerializer` accepts the following MIME types, which includes the official standard, `application/json`, as well as other commonly-used types: - - - `application/json` - - `text/json` - - `text/javascript` - */ -@interface AFJSONResponseSerializer : AFHTTPResponseSerializer - -- (instancetype)init; - -/** - Options for reading the response JSON data and creating the Foundation objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONReadingOptions". `0` by default. - */ -@property (nonatomic, assign) NSJSONReadingOptions readingOptions; - -/** - Whether to remove keys with `NSNull` values from response JSON. Defaults to `NO`. - */ -@property (nonatomic, assign) BOOL removesKeysWithNullValues; - -/** - Creates and returns a JSON serializer with specified reading and writing options. - - @param readingOptions The specified JSON reading options. - */ -+ (instancetype)serializerWithReadingOptions:(NSJSONReadingOptions)readingOptions; - -@end - -#pragma mark - - -/** - `AFXMLParserResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLParser` objects. - - By default, `AFXMLParserResponseSerializer` accepts the following MIME types, which includes the official standard, `application/xml`, as well as other commonly-used types: - - - `application/xml` - - `text/xml` - */ -@interface AFXMLParserResponseSerializer : AFHTTPResponseSerializer - -@end - -#pragma mark - - -#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED - -/** - `AFXMLDocumentResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLDocument` objects. - - By default, `AFXMLDocumentResponseSerializer` accepts the following MIME types, which includes the official standard, `application/xml`, as well as other commonly-used types: - - - `application/xml` - - `text/xml` - */ -@interface AFXMLDocumentResponseSerializer : AFHTTPResponseSerializer - -- (instancetype)init; - -/** - Input and output options specifically intended for `NSXMLDocument` objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONReadingOptions". `0` by default. - */ -@property (nonatomic, assign) NSUInteger options; - -/** - Creates and returns an XML document serializer with the specified options. - - @param mask The XML document options. - */ -+ (instancetype)serializerWithXMLDocumentOptions:(NSUInteger)mask; - -@end - -#endif - -#pragma mark - - -/** - `AFPropertyListResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLDocument` objects. - - By default, `AFPropertyListResponseSerializer` accepts the following MIME types: - - - `application/x-plist` - */ -@interface AFPropertyListResponseSerializer : AFHTTPResponseSerializer - -- (instancetype)init; - -/** - The property list format. Possible values are described in "NSPropertyListFormat". - */ -@property (nonatomic, assign) NSPropertyListFormat format; - -/** - The property list reading options. Possible values are described in "NSPropertyListMutabilityOptions." - */ -@property (nonatomic, assign) NSPropertyListReadOptions readOptions; - -/** - Creates and returns a property list serializer with a specified format, read options, and write options. - - @param format The property list format. - @param readOptions The property list reading options. - */ -+ (instancetype)serializerWithFormat:(NSPropertyListFormat)format - readOptions:(NSPropertyListReadOptions)readOptions; - -@end - -#pragma mark - - -/** - `AFImageResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes image responses. - - By default, `AFImageResponseSerializer` accepts the following MIME types, which correspond to the image formats supported by UIImage or NSImage: - - - `image/tiff` - - `image/jpeg` - - `image/gif` - - `image/png` - - `image/ico` - - `image/x-icon` - - `image/bmp` - - `image/x-bmp` - - `image/x-xbitmap` - - `image/x-win-bitmap` - */ -@interface AFImageResponseSerializer : AFHTTPResponseSerializer - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -/** - The scale factor used when interpreting the image data to construct `responseImage`. Specifying a scale factor of 1.0 results in an image whose size matches the pixel-based dimensions of the image. Applying a different scale factor changes the size of the image as reported by the size property. This is set to the value of scale of the main screen by default, which automatically scales images for retina displays, for instance. - */ -@property (nonatomic, assign) CGFloat imageScale; - -/** - Whether to automatically inflate response image data for compressed formats (such as PNG or JPEG). Enabling this can significantly improve drawing performance on iOS when used with `setCompletionBlockWithSuccess:failure:`, as it allows a bitmap representation to be constructed in the background rather than on the main thread. `YES` by default. - */ -@property (nonatomic, assign) BOOL automaticallyInflatesResponseImage; -#endif - -@end - -#pragma mark - - -/** - `AFCompoundSerializer` is a subclass of `AFHTTPResponseSerializer` that delegates the response serialization to the first `AFHTTPResponseSerializer` object that returns an object for `responseObjectForResponse:data:error:`, falling back on the default behavior of `AFHTTPResponseSerializer`. This is useful for supporting multiple potential types and structures of server responses with a single serializer. - */ -@interface AFCompoundResponseSerializer : AFHTTPResponseSerializer - -/** - The component response serializers. - */ -@property (readonly, nonatomic, copy) NSArray *responseSerializers; - -/** - Creates and returns a compound serializer comprised of the specified response serializers. - - @warning Each response serializer specified must be a subclass of `AFHTTPResponseSerializer`, and response to `-validateResponse:data:error:`. - */ -+ (instancetype)compoundSerializerWithResponseSerializers:(NSArray *)responseSerializers; - -@end - -///---------------- -/// @name Constants -///---------------- - -/** - ## Error Domains - - The following error domain is predefined. - - - `NSString * const AFURLResponseSerializationErrorDomain` - - ### Constants - - `AFURLResponseSerializationErrorDomain` - AFURLResponseSerializer errors. Error codes for `AFURLResponseSerializationErrorDomain` correspond to codes in `NSURLErrorDomain`. - */ -FOUNDATION_EXPORT NSString * const AFURLResponseSerializationErrorDomain; - -/** - ## User info dictionary keys - - These keys may exist in the user info dictionary, in addition to those defined for NSError. - - - `NSString * const AFNetworkingOperationFailingURLResponseErrorKey` - - `NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey` - - ### Constants - - `AFNetworkingOperationFailingURLResponseErrorKey` - The corresponding value is an `NSURLResponse` containing the response of the operation associated with an error. This key is only present in the `AFURLResponseSerializationErrorDomain`. - - `AFNetworkingOperationFailingURLResponseDataErrorKey` - The corresponding value is an `NSData` containing the original data of the operation associated with an error. This key is only present in the `AFURLResponseSerializationErrorDomain`. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingOperationFailingURLResponseErrorKey; - -FOUNDATION_EXPORT NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey; - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m b/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m deleted file mode 100644 index f95834f..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m +++ /dev/null @@ -1,825 +0,0 @@ -// AFURLResponseSerialization.m -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "AFURLResponseSerialization.h" - -#if TARGET_OS_IOS -#import -#elif TARGET_OS_WATCH -#import -#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) -#import -#endif - -NSString * const AFURLResponseSerializationErrorDomain = @"com.alamofire.error.serialization.response"; -NSString * const AFNetworkingOperationFailingURLResponseErrorKey = @"com.alamofire.serialization.response.error.response"; -NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey = @"com.alamofire.serialization.response.error.data"; - -static NSError * AFErrorWithUnderlyingError(NSError *error, NSError *underlyingError) { - if (!error) { - return underlyingError; - } - - if (!underlyingError || error.userInfo[NSUnderlyingErrorKey]) { - return error; - } - - NSMutableDictionary *mutableUserInfo = [error.userInfo mutableCopy]; - mutableUserInfo[NSUnderlyingErrorKey] = underlyingError; - - return [[NSError alloc] initWithDomain:error.domain code:error.code userInfo:mutableUserInfo]; -} - -static BOOL AFErrorOrUnderlyingErrorHasCodeInDomain(NSError *error, NSInteger code, NSString *domain) { - if ([error.domain isEqualToString:domain] && error.code == code) { - return YES; - } else if (error.userInfo[NSUnderlyingErrorKey]) { - return AFErrorOrUnderlyingErrorHasCodeInDomain(error.userInfo[NSUnderlyingErrorKey], code, domain); - } - - return NO; -} - -static id AFJSONObjectByRemovingKeysWithNullValues(id JSONObject, NSJSONReadingOptions readingOptions) { - if ([JSONObject isKindOfClass:[NSArray class]]) { - NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:[(NSArray *)JSONObject count]]; - for (id value in (NSArray *)JSONObject) { - [mutableArray addObject:AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions)]; - } - - return (readingOptions & NSJSONReadingMutableContainers) ? mutableArray : [NSArray arrayWithArray:mutableArray]; - } else if ([JSONObject isKindOfClass:[NSDictionary class]]) { - NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:JSONObject]; - for (id key in [(NSDictionary *)JSONObject allKeys]) { - id value = (NSDictionary *)JSONObject[key]; - if (!value || [value isEqual:[NSNull null]]) { - [mutableDictionary removeObjectForKey:key]; - } else if ([value isKindOfClass:[NSArray class]] || [value isKindOfClass:[NSDictionary class]]) { - mutableDictionary[key] = AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions); - } - } - - return (readingOptions & NSJSONReadingMutableContainers) ? mutableDictionary : [NSDictionary dictionaryWithDictionary:mutableDictionary]; - } - - return JSONObject; -} - -@implementation AFHTTPResponseSerializer - -+ (instancetype)serializer { - return [[self alloc] init]; -} - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - self.stringEncoding = NSUTF8StringEncoding; - - self.acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)]; - self.acceptableContentTypes = nil; - - return self; -} - -#pragma mark - - -- (BOOL)validateResponse:(NSHTTPURLResponse *)response - data:(NSData *)data - error:(NSError * __autoreleasing *)error -{ - BOOL responseIsValid = YES; - NSError *validationError = nil; - - if (response && [response isKindOfClass:[NSHTTPURLResponse class]]) { - if (self.acceptableContentTypes && ![self.acceptableContentTypes containsObject:[response MIMEType]]) { - if ([data length] > 0 && [response URL]) { - NSMutableDictionary *mutableUserInfo = [@{ - NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Request failed: unacceptable content-type: %@", @"AFNetworking", nil), [response MIMEType]], - NSURLErrorFailingURLErrorKey:[response URL], - AFNetworkingOperationFailingURLResponseErrorKey: response, - } mutableCopy]; - if (data) { - mutableUserInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] = data; - } - - validationError = AFErrorWithUnderlyingError([NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorCannotDecodeContentData userInfo:mutableUserInfo], validationError); - } - - responseIsValid = NO; - } - - if (self.acceptableStatusCodes && ![self.acceptableStatusCodes containsIndex:(NSUInteger)response.statusCode] && [response URL]) { - NSMutableDictionary *mutableUserInfo = [@{ - NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Request failed: %@ (%ld)", @"AFNetworking", nil), [NSHTTPURLResponse localizedStringForStatusCode:response.statusCode], (long)response.statusCode], - NSURLErrorFailingURLErrorKey:[response URL], - AFNetworkingOperationFailingURLResponseErrorKey: response, - } mutableCopy]; - - if (data) { - mutableUserInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] = data; - } - - validationError = AFErrorWithUnderlyingError([NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorBadServerResponse userInfo:mutableUserInfo], validationError); - - responseIsValid = NO; - } - } - - if (error && !responseIsValid) { - *error = validationError; - } - - return responseIsValid; -} - -#pragma mark - AFURLResponseSerialization - -- (id)responseObjectForResponse:(NSURLResponse *)response - data:(NSData *)data - error:(NSError *__autoreleasing *)error -{ - [self validateResponse:(NSHTTPURLResponse *)response data:data error:error]; - - return data; -} - -#pragma mark - NSSecureCoding - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder { - self = [self init]; - if (!self) { - return nil; - } - - self.acceptableStatusCodes = [decoder decodeObjectOfClass:[NSIndexSet class] forKey:NSStringFromSelector(@selector(acceptableStatusCodes))]; - self.acceptableContentTypes = [decoder decodeObjectOfClass:[NSIndexSet class] forKey:NSStringFromSelector(@selector(acceptableContentTypes))]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [coder encodeObject:self.acceptableStatusCodes forKey:NSStringFromSelector(@selector(acceptableStatusCodes))]; - [coder encodeObject:self.acceptableContentTypes forKey:NSStringFromSelector(@selector(acceptableContentTypes))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFHTTPResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; - serializer.acceptableStatusCodes = [self.acceptableStatusCodes copyWithZone:zone]; - serializer.acceptableContentTypes = [self.acceptableContentTypes copyWithZone:zone]; - - return serializer; -} - -@end - -#pragma mark - - -@implementation AFJSONResponseSerializer - -+ (instancetype)serializer { - return [self serializerWithReadingOptions:(NSJSONReadingOptions)0]; -} - -+ (instancetype)serializerWithReadingOptions:(NSJSONReadingOptions)readingOptions { - AFJSONResponseSerializer *serializer = [[self alloc] init]; - serializer.readingOptions = readingOptions; - - return serializer; -} - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil]; - - return self; -} - -#pragma mark - AFURLResponseSerialization - -- (id)responseObjectForResponse:(NSURLResponse *)response - data:(NSData *)data - error:(NSError *__autoreleasing *)error -{ - if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { - if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { - return nil; - } - } - - // Workaround for behavior of Rails to return a single space for `head :ok` (a workaround for a bug in Safari), which is not interpreted as valid input by NSJSONSerialization. - // See https://github.com/rails/rails/issues/1742 - NSStringEncoding stringEncoding = self.stringEncoding; - if (response.textEncodingName) { - CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)response.textEncodingName); - if (encoding != kCFStringEncodingInvalidId) { - stringEncoding = CFStringConvertEncodingToNSStringEncoding(encoding); - } - } - - id responseObject = nil; - NSError *serializationError = nil; - @autoreleasepool { - NSString *responseString = [[NSString alloc] initWithData:data encoding:stringEncoding]; - if (responseString && ![responseString isEqualToString:@" "]) { - // Workaround for a bug in NSJSONSerialization when Unicode character escape codes are used instead of the actual character - // See http://stackoverflow.com/a/12843465/157142 - data = [responseString dataUsingEncoding:NSUTF8StringEncoding]; - - if (data) { - if ([data length] > 0) { - responseObject = [NSJSONSerialization JSONObjectWithData:data options:self.readingOptions error:&serializationError]; - } else { - return nil; - } - } else { - NSDictionary *userInfo = @{ - NSLocalizedDescriptionKey: NSLocalizedStringFromTable(@"Data failed decoding as a UTF-8 string", @"AFNetworking", nil), - NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Could not decode string: %@", @"AFNetworking", nil), responseString] - }; - - serializationError = [NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorCannotDecodeContentData userInfo:userInfo]; - } - } - } - - if (self.removesKeysWithNullValues && responseObject) { - responseObject = AFJSONObjectByRemovingKeysWithNullValues(responseObject, self.readingOptions); - } - - if (error) { - *error = AFErrorWithUnderlyingError(serializationError, *error); - } - - return responseObject; -} - -#pragma mark - NSSecureCoding - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (!self) { - return nil; - } - - self.readingOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(readingOptions))] unsignedIntegerValue]; - self.removesKeysWithNullValues = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(removesKeysWithNullValues))] boolValue]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - - [coder encodeObject:@(self.readingOptions) forKey:NSStringFromSelector(@selector(readingOptions))]; - [coder encodeObject:@(self.removesKeysWithNullValues) forKey:NSStringFromSelector(@selector(removesKeysWithNullValues))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFJSONResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; - serializer.readingOptions = self.readingOptions; - serializer.removesKeysWithNullValues = self.removesKeysWithNullValues; - - return serializer; -} - -@end - -#pragma mark - - -@implementation AFXMLParserResponseSerializer - -+ (instancetype)serializer { - AFXMLParserResponseSerializer *serializer = [[self alloc] init]; - - return serializer; -} - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/xml", @"text/xml", nil]; - - return self; -} - -#pragma mark - AFURLResponseSerialization - -- (id)responseObjectForResponse:(NSHTTPURLResponse *)response - data:(NSData *)data - error:(NSError *__autoreleasing *)error -{ - if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { - if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { - return nil; - } - } - - return [[NSXMLParser alloc] initWithData:data]; -} - -@end - -#pragma mark - - -#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED - -@implementation AFXMLDocumentResponseSerializer - -+ (instancetype)serializer { - return [self serializerWithXMLDocumentOptions:0]; -} - -+ (instancetype)serializerWithXMLDocumentOptions:(NSUInteger)mask { - AFXMLDocumentResponseSerializer *serializer = [[self alloc] init]; - serializer.options = mask; - - return serializer; -} - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/xml", @"text/xml", nil]; - - return self; -} - -#pragma mark - AFURLResponseSerialization - -- (id)responseObjectForResponse:(NSURLResponse *)response - data:(NSData *)data - error:(NSError *__autoreleasing *)error -{ - if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { - if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { - return nil; - } - } - - NSError *serializationError = nil; - NSXMLDocument *document = [[NSXMLDocument alloc] initWithData:data options:self.options error:&serializationError]; - - if (error) { - *error = AFErrorWithUnderlyingError(serializationError, *error); - } - - return document; -} - -#pragma mark - NSSecureCoding - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (!self) { - return nil; - } - - self.options = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(options))] unsignedIntegerValue]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - - [coder encodeObject:@(self.options) forKey:NSStringFromSelector(@selector(options))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFXMLDocumentResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; - serializer.options = self.options; - - return serializer; -} - -@end - -#endif - -#pragma mark - - -@implementation AFPropertyListResponseSerializer - -+ (instancetype)serializer { - return [self serializerWithFormat:NSPropertyListXMLFormat_v1_0 readOptions:0]; -} - -+ (instancetype)serializerWithFormat:(NSPropertyListFormat)format - readOptions:(NSPropertyListReadOptions)readOptions -{ - AFPropertyListResponseSerializer *serializer = [[self alloc] init]; - serializer.format = format; - serializer.readOptions = readOptions; - - return serializer; -} - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/x-plist", nil]; - - return self; -} - -#pragma mark - AFURLResponseSerialization - -- (id)responseObjectForResponse:(NSURLResponse *)response - data:(NSData *)data - error:(NSError *__autoreleasing *)error -{ - if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { - if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { - return nil; - } - } - - id responseObject; - NSError *serializationError = nil; - - if (data) { - responseObject = [NSPropertyListSerialization propertyListWithData:data options:self.readOptions format:NULL error:&serializationError]; - } - - if (error) { - *error = AFErrorWithUnderlyingError(serializationError, *error); - } - - return responseObject; -} - -#pragma mark - NSSecureCoding - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (!self) { - return nil; - } - - self.format = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(format))] unsignedIntegerValue]; - self.readOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(readOptions))] unsignedIntegerValue]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - - [coder encodeObject:@(self.format) forKey:NSStringFromSelector(@selector(format))]; - [coder encodeObject:@(self.readOptions) forKey:NSStringFromSelector(@selector(readOptions))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFPropertyListResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; - serializer.format = self.format; - serializer.readOptions = self.readOptions; - - return serializer; -} - -@end - -#pragma mark - - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -#import - -@interface UIImage (AFNetworkingSafeImageLoading) -+ (UIImage *)af_safeImageWithData:(NSData *)data; -@end - -static NSLock* imageLock = nil; - -@implementation UIImage (AFNetworkingSafeImageLoading) - -+ (UIImage *)af_safeImageWithData:(NSData *)data { - UIImage* image = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - imageLock = [[NSLock alloc] init]; - }); - - [imageLock lock]; - image = [UIImage imageWithData:data]; - [imageLock unlock]; - return image; -} - -@end - -static UIImage * AFImageWithDataAtScale(NSData *data, CGFloat scale) { - UIImage *image = [UIImage af_safeImageWithData:data]; - if (image.images) { - return image; - } - - return [[UIImage alloc] initWithCGImage:[image CGImage] scale:scale orientation:image.imageOrientation]; -} - -static UIImage * AFInflatedImageFromResponseWithDataAtScale(NSHTTPURLResponse *response, NSData *data, CGFloat scale) { - if (!data || [data length] == 0) { - return nil; - } - - CGImageRef imageRef = NULL; - CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data); - - if ([response.MIMEType isEqualToString:@"image/png"]) { - imageRef = CGImageCreateWithPNGDataProvider(dataProvider, NULL, true, kCGRenderingIntentDefault); - } else if ([response.MIMEType isEqualToString:@"image/jpeg"]) { - imageRef = CGImageCreateWithJPEGDataProvider(dataProvider, NULL, true, kCGRenderingIntentDefault); - - if (imageRef) { - CGColorSpaceRef imageColorSpace = CGImageGetColorSpace(imageRef); - CGColorSpaceModel imageColorSpaceModel = CGColorSpaceGetModel(imageColorSpace); - - // CGImageCreateWithJPEGDataProvider does not properly handle CMKY, so fall back to AFImageWithDataAtScale - if (imageColorSpaceModel == kCGColorSpaceModelCMYK) { - CGImageRelease(imageRef); - imageRef = NULL; - } - } - } - - CGDataProviderRelease(dataProvider); - - UIImage *image = AFImageWithDataAtScale(data, scale); - if (!imageRef) { - if (image.images || !image) { - return image; - } - - imageRef = CGImageCreateCopy([image CGImage]); - if (!imageRef) { - return nil; - } - } - - size_t width = CGImageGetWidth(imageRef); - size_t height = CGImageGetHeight(imageRef); - size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef); - - if (width * height > 1024 * 1024 || bitsPerComponent > 8) { - CGImageRelease(imageRef); - - return image; - } - - // CGImageGetBytesPerRow() calculates incorrectly in iOS 5.0, so defer to CGBitmapContextCreate - size_t bytesPerRow = 0; - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - CGColorSpaceModel colorSpaceModel = CGColorSpaceGetModel(colorSpace); - CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); - - if (colorSpaceModel == kCGColorSpaceModelRGB) { - uint32_t alpha = (bitmapInfo & kCGBitmapAlphaInfoMask); -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wassign-enum" - if (alpha == kCGImageAlphaNone) { - bitmapInfo &= ~kCGBitmapAlphaInfoMask; - bitmapInfo |= kCGImageAlphaNoneSkipFirst; - } else if (!(alpha == kCGImageAlphaNoneSkipFirst || alpha == kCGImageAlphaNoneSkipLast)) { - bitmapInfo &= ~kCGBitmapAlphaInfoMask; - bitmapInfo |= kCGImageAlphaPremultipliedFirst; - } -#pragma clang diagnostic pop - } - - CGContextRef context = CGBitmapContextCreate(NULL, width, height, bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo); - - CGColorSpaceRelease(colorSpace); - - if (!context) { - CGImageRelease(imageRef); - - return image; - } - - CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, width, height), imageRef); - CGImageRef inflatedImageRef = CGBitmapContextCreateImage(context); - - CGContextRelease(context); - - UIImage *inflatedImage = [[UIImage alloc] initWithCGImage:inflatedImageRef scale:scale orientation:image.imageOrientation]; - - CGImageRelease(inflatedImageRef); - CGImageRelease(imageRef); - - return inflatedImage; -} -#endif - - -@implementation AFImageResponseSerializer - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"image/tiff", @"image/jpeg", @"image/gif", @"image/png", @"image/ico", @"image/x-icon", @"image/bmp", @"image/x-bmp", @"image/x-xbitmap", @"image/x-win-bitmap", nil]; - -#if TARGET_OS_IOS - self.imageScale = [[UIScreen mainScreen] scale]; - self.automaticallyInflatesResponseImage = YES; -#elif TARGET_OS_WATCH - self.imageScale = [[WKInterfaceDevice currentDevice] screenScale]; - self.automaticallyInflatesResponseImage = YES; -#endif - - return self; -} - -#pragma mark - AFURLResponseSerializer - -- (id)responseObjectForResponse:(NSURLResponse *)response - data:(NSData *)data - error:(NSError *__autoreleasing *)error -{ - if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { - if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { - return nil; - } - } - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - if (self.automaticallyInflatesResponseImage) { - return AFInflatedImageFromResponseWithDataAtScale((NSHTTPURLResponse *)response, data, self.imageScale); - } else { - return AFImageWithDataAtScale(data, self.imageScale); - } -#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) - // Ensure that the image is set to it's correct pixel width and height - NSBitmapImageRep *bitimage = [[NSBitmapImageRep alloc] initWithData:data]; - NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize([bitimage pixelsWide], [bitimage pixelsHigh])]; - [image addRepresentation:bitimage]; - - return image; -#endif - - return nil; -} - -#pragma mark - NSSecureCoding - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (!self) { - return nil; - } - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - NSNumber *imageScale = [decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(imageScale))]; -#if CGFLOAT_IS_DOUBLE - self.imageScale = [imageScale doubleValue]; -#else - self.imageScale = [imageScale floatValue]; -#endif - - self.automaticallyInflatesResponseImage = [decoder decodeBoolForKey:NSStringFromSelector(@selector(automaticallyInflatesResponseImage))]; -#endif - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - [coder encodeObject:@(self.imageScale) forKey:NSStringFromSelector(@selector(imageScale))]; - [coder encodeBool:self.automaticallyInflatesResponseImage forKey:NSStringFromSelector(@selector(automaticallyInflatesResponseImage))]; -#endif -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFImageResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - serializer.imageScale = self.imageScale; - serializer.automaticallyInflatesResponseImage = self.automaticallyInflatesResponseImage; -#endif - - return serializer; -} - -@end - -#pragma mark - - -@interface AFCompoundResponseSerializer () -@property (readwrite, nonatomic, copy) NSArray *responseSerializers; -@end - -@implementation AFCompoundResponseSerializer - -+ (instancetype)compoundSerializerWithResponseSerializers:(NSArray *)responseSerializers { - AFCompoundResponseSerializer *serializer = [[self alloc] init]; - serializer.responseSerializers = responseSerializers; - - return serializer; -} - -#pragma mark - AFURLResponseSerialization - -- (id)responseObjectForResponse:(NSURLResponse *)response - data:(NSData *)data - error:(NSError *__autoreleasing *)error -{ - for (id serializer in self.responseSerializers) { - if (![serializer isKindOfClass:[AFHTTPResponseSerializer class]]) { - continue; - } - - NSError *serializerError = nil; - id responseObject = [serializer responseObjectForResponse:response data:data error:&serializerError]; - if (responseObject) { - if (error) { - *error = AFErrorWithUnderlyingError(serializerError, *error); - } - - return responseObject; - } - } - - return [super responseObjectForResponse:response data:data error:error]; -} - -#pragma mark - NSSecureCoding - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (!self) { - return nil; - } - - self.responseSerializers = [decoder decodeObjectOfClass:[NSArray class] forKey:NSStringFromSelector(@selector(responseSerializers))]; - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - - [coder encodeObject:self.responseSerializers forKey:NSStringFromSelector(@selector(responseSerializers))]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - AFCompoundResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; - serializer.responseSerializers = self.responseSerializers; - - return serializer; -} - -@end diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h b/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h deleted file mode 100644 index 70e4ec9..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h +++ /dev/null @@ -1,554 +0,0 @@ -// AFURLSessionManager.h -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -#import "AFURLResponseSerialization.h" -#import "AFURLRequestSerialization.h" -#import "AFSecurityPolicy.h" -#if !TARGET_OS_WATCH -#import "AFNetworkReachabilityManager.h" -#endif - -#ifndef NS_DESIGNATED_INITIALIZER -#if __has_attribute(objc_designated_initializer) -#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) -#else -#define NS_DESIGNATED_INITIALIZER -#endif -#endif - -/** - `AFURLSessionManager` creates and manages an `NSURLSession` object based on a specified `NSURLSessionConfiguration` object, which conforms to ``, ``, ``, and ``. - - ## Subclassing Notes - - This is the base class for `AFHTTPSessionManager`, which adds functionality specific to making HTTP requests. If you are looking to extend `AFURLSessionManager` specifically for HTTP, consider subclassing `AFHTTPSessionManager` instead. - - ## NSURLSession & NSURLSessionTask Delegate Methods - - `AFURLSessionManager` implements the following delegate methods: - - ### `NSURLSessionDelegate` - - - `URLSession:didBecomeInvalidWithError:` - - `URLSession:didReceiveChallenge:completionHandler:` - - `URLSessionDidFinishEventsForBackgroundURLSession:` - - ### `NSURLSessionTaskDelegate` - - - `URLSession:willPerformHTTPRedirection:newRequest:completionHandler:` - - `URLSession:task:didReceiveChallenge:completionHandler:` - - `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:` - - `URLSession:task:didCompleteWithError:` - - ### `NSURLSessionDataDelegate` - - - `URLSession:dataTask:didReceiveResponse:completionHandler:` - - `URLSession:dataTask:didBecomeDownloadTask:` - - `URLSession:dataTask:didReceiveData:` - - `URLSession:dataTask:willCacheResponse:completionHandler:` - - ### `NSURLSessionDownloadDelegate` - - - `URLSession:downloadTask:didFinishDownloadingToURL:` - - `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:` - - `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:` - - If any of these methods are overridden in a subclass, they _must_ call the `super` implementation first. - - ## Network Reachability Monitoring - - Network reachability status and change monitoring is available through the `reachabilityManager` property. Applications may choose to monitor network reachability conditions in order to prevent or suspend any outbound requests. See `AFNetworkReachabilityManager` for more details. - - ## NSCoding Caveats - - - Encoded managers do not include any block properties. Be sure to set delegate callback blocks when using `-initWithCoder:` or `NSKeyedUnarchiver`. - - ## NSCopying Caveats - - - `-copy` and `-copyWithZone:` return a new manager with a new `NSURLSession` created from the configuration of the original. - - Operation copies do not include any delegate callback blocks, as they often strongly captures a reference to `self`, which would otherwise have the unintuitive side-effect of pointing to the _original_ session manager when copied. - - @warning Managers for background sessions must be owned for the duration of their use. This can be accomplished by creating an application-wide or shared singleton instance. - */ - -NS_ASSUME_NONNULL_BEGIN - -#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) || TARGET_OS_WATCH - -@interface AFURLSessionManager : NSObject - -/** - The managed session. - */ -@property (readonly, nonatomic, strong) NSURLSession *session; - -/** - The operation queue on which delegate callbacks are run. - */ -@property (readonly, nonatomic, strong) NSOperationQueue *operationQueue; - -/** - Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an instance of `AFJSONResponseSerializer`. - - @warning `responseSerializer` must not be `nil`. - */ -@property (nonatomic, strong) id responseSerializer; - -///------------------------------- -/// @name Managing Security Policy -///------------------------------- - -/** - The security policy used by created request operations to evaluate server trust for secure connections. `AFURLSessionManager` uses the `defaultPolicy` unless otherwise specified. - */ -@property (nonatomic, strong) AFSecurityPolicy *securityPolicy; - -#if !TARGET_OS_WATCH -///-------------------------------------- -/// @name Monitoring Network Reachability -///-------------------------------------- - -/** - The network reachability manager. `AFURLSessionManager` uses the `sharedManager` by default. - */ -@property (readwrite, nonatomic, strong) AFNetworkReachabilityManager *reachabilityManager; -#endif - -///---------------------------- -/// @name Getting Session Tasks -///---------------------------- - -/** - The data, upload, and download tasks currently run by the managed session. - */ -@property (readonly, nonatomic, strong) NSArray *tasks; - -/** - The data tasks currently run by the managed session. - */ -@property (readonly, nonatomic, strong) NSArray *dataTasks; - -/** - The upload tasks currently run by the managed session. - */ -@property (readonly, nonatomic, strong) NSArray *uploadTasks; - -/** - The download tasks currently run by the managed session. - */ -@property (readonly, nonatomic, strong) NSArray *downloadTasks; - -///------------------------------- -/// @name Managing Callback Queues -///------------------------------- - -/** - The dispatch queue for `completionBlock`. If `NULL` (default), the main queue is used. - */ -#if OS_OBJECT_HAVE_OBJC_SUPPORT -@property (nonatomic, strong, nullable) dispatch_queue_t completionQueue; -#else -@property (nonatomic, assign, nullable) dispatch_queue_t completionQueue; -#endif - -/** - The dispatch group for `completionBlock`. If `NULL` (default), a private dispatch group is used. - */ -#if OS_OBJECT_HAVE_OBJC_SUPPORT -@property (nonatomic, strong, nullable) dispatch_group_t completionGroup; -#else -@property (nonatomic, assign, nullable) dispatch_group_t completionGroup; -#endif - -///--------------------------------- -/// @name Working Around System Bugs -///--------------------------------- - -/** - Whether to attempt to retry creation of upload tasks for background sessions when initial call returns `nil`. `NO` by default. - - @bug As of iOS 7.0, there is a bug where upload tasks created for background tasks are sometimes `nil`. As a workaround, if this property is `YES`, AFNetworking will follow Apple's recommendation to try creating the task again. - - @see https://github.com/AFNetworking/AFNetworking/issues/1675 - */ -@property (nonatomic, assign) BOOL attemptsToRecreateUploadTasksForBackgroundSessions; - -///--------------------- -/// @name Initialization -///--------------------- - -/** - Creates and returns a manager for a session created with the specified configuration. This is the designated initializer. - - @param configuration The configuration used to create the managed session. - - @return A manager for a newly-created session. - */ -- (instancetype)initWithSessionConfiguration:(nullable NSURLSessionConfiguration *)configuration NS_DESIGNATED_INITIALIZER; - -/** - Invalidates the managed session, optionally canceling pending tasks. - - @param cancelPendingTasks Whether or not to cancel pending tasks. - */ -- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks; - -///------------------------- -/// @name Running Data Tasks -///------------------------- - -/** - Creates an `NSURLSessionDataTask` with the specified request. - - @param request The HTTP request for the request. - @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. - */ -- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request - completionHandler:(nullable void (^)(NSURLResponse *response, id __nullable responseObject, NSError * __nullable error))completionHandler; - -///--------------------------- -/// @name Running Upload Tasks -///--------------------------- - -/** - Creates an `NSURLSessionUploadTask` with the specified request for a local file. - - @param request The HTTP request for the request. - @param fileURL A URL to the local file to be uploaded. - @param progress A progress object monitoring the current upload progress. - @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. - - @see `attemptsToRecreateUploadTasksForBackgroundSessions` - */ -- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request - fromFile:(NSURL *)fileURL - progress:(NSProgress * __nullable __autoreleasing * __nullable)progress - completionHandler:(nullable void (^)(NSURLResponse *response, id __nullable responseObject, NSError * __nullable error))completionHandler; - -/** - Creates an `NSURLSessionUploadTask` with the specified request for an HTTP body. - - @param request The HTTP request for the request. - @param bodyData A data object containing the HTTP body to be uploaded. - @param progress A progress object monitoring the current upload progress. - @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. - */ -- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request - fromData:(nullable NSData *)bodyData - progress:(NSProgress * __nullable __autoreleasing * __nullable)progress - completionHandler:(nullable void (^)(NSURLResponse *response, id __nullable responseObject, NSError * __nullable error))completionHandler; - -/** - Creates an `NSURLSessionUploadTask` with the specified streaming request. - - @param request The HTTP request for the request. - @param progress A progress object monitoring the current upload progress. - @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. - */ -- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request - progress:(NSProgress * __nullable __autoreleasing * __nullable)progress - completionHandler:(nullable void (^)(NSURLResponse *response, id __nullable responseObject, NSError * __nullable error))completionHandler; - -///----------------------------- -/// @name Running Download Tasks -///----------------------------- - -/** - Creates an `NSURLSessionDownloadTask` with the specified request. - - @param request The HTTP request for the request. - @param progress A progress object monitoring the current download progress. - @param destination A block object to be executed in order to determine the destination of the downloaded file. This block takes two arguments, the target path & the server response, and returns the desired file URL of the resulting download. The temporary file used during the download will be automatically deleted after being moved to the returned URL. - @param completionHandler A block to be executed when a task finishes. This block has no return value and takes three arguments: the server response, the path of the downloaded file, and the error describing the network or parsing error that occurred, if any. - - @warning If using a background `NSURLSessionConfiguration` on iOS, these blocks will be lost when the app is terminated. Background sessions may prefer to use `-setDownloadTaskDidFinishDownloadingBlock:` to specify the URL for saving the downloaded file, rather than the destination block of this method. - */ -- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request - progress:(NSProgress * __nullable __autoreleasing * __nullable)progress - destination:(nullable NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination - completionHandler:(nullable void (^)(NSURLResponse *response, NSURL * __nullable filePath, NSError * __nullable error))completionHandler; - -/** - Creates an `NSURLSessionDownloadTask` with the specified resume data. - - @param resumeData The data used to resume downloading. - @param progress A progress object monitoring the current download progress. - @param destination A block object to be executed in order to determine the destination of the downloaded file. This block takes two arguments, the target path & the server response, and returns the desired file URL of the resulting download. The temporary file used during the download will be automatically deleted after being moved to the returned URL. - @param completionHandler A block to be executed when a task finishes. This block has no return value and takes three arguments: the server response, the path of the downloaded file, and the error describing the network or parsing error that occurred, if any. - */ -- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData - progress:(NSProgress * __nullable __autoreleasing * __nullable)progress - destination:(nullable NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination - completionHandler:(nullable void (^)(NSURLResponse *response, NSURL * __nullable filePath, NSError * __nullable error))completionHandler; - -///--------------------------------- -/// @name Getting Progress for Tasks -///--------------------------------- - -/** - Returns the upload progress of the specified task. - - @param uploadTask The session upload task. Must not be `nil`. - - @return An `NSProgress` object reporting the upload progress of a task, or `nil` if the progress is unavailable. - */ -- (nullable NSProgress *)uploadProgressForTask:(NSURLSessionUploadTask *)uploadTask; - -/** - Returns the download progress of the specified task. - - @param downloadTask The session download task. Must not be `nil`. - - @return An `NSProgress` object reporting the download progress of a task, or `nil` if the progress is unavailable. - */ -- (nullable NSProgress *)downloadProgressForTask:(NSURLSessionDownloadTask *)downloadTask; - -///----------------------------------------- -/// @name Setting Session Delegate Callbacks -///----------------------------------------- - -/** - Sets a block to be executed when the managed session becomes invalid, as handled by the `NSURLSessionDelegate` method `URLSession:didBecomeInvalidWithError:`. - - @param block A block object to be executed when the managed session becomes invalid. The block has no return value, and takes two arguments: the session, and the error related to the cause of invalidation. - */ -- (void)setSessionDidBecomeInvalidBlock:(nullable void (^)(NSURLSession *session, NSError *error))block; - -/** - Sets a block to be executed when a connection level authentication challenge has occurred, as handled by the `NSURLSessionDelegate` method `URLSession:didReceiveChallenge:completionHandler:`. - - @param block A block object to be executed when a connection level authentication challenge has occurred. The block returns the disposition of the authentication challenge, and takes three arguments: the session, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge. - */ -- (void)setSessionDidReceiveAuthenticationChallengeBlock:(nullable NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __nullable __autoreleasing * __nullable credential))block; - -///-------------------------------------- -/// @name Setting Task Delegate Callbacks -///-------------------------------------- - -/** - Sets a block to be executed when a task requires a new request body stream to send to the remote server, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:needNewBodyStream:`. - - @param block A block object to be executed when a task requires a new request body stream. - */ -- (void)setTaskNeedNewBodyStreamBlock:(nullable NSInputStream * (^)(NSURLSession *session, NSURLSessionTask *task))block; - -/** - Sets a block to be executed when an HTTP request is attempting to perform a redirection to a different URL, as handled by the `NSURLSessionTaskDelegate` method `URLSession:willPerformHTTPRedirection:newRequest:completionHandler:`. - - @param block A block object to be executed when an HTTP request is attempting to perform a redirection to a different URL. The block returns the request to be made for the redirection, and takes four arguments: the session, the task, the redirection response, and the request corresponding to the redirection response. - */ -- (void)setTaskWillPerformHTTPRedirectionBlock:(nullable NSURLRequest * (^)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request))block; - -/** - Sets a block to be executed when a session task has received a request specific authentication challenge, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didReceiveChallenge:completionHandler:`. - - @param block A block object to be executed when a session task has received a request specific authentication challenge. The block returns the disposition of the authentication challenge, and takes four arguments: the session, the task, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge. - */ -- (void)setTaskDidReceiveAuthenticationChallengeBlock:(nullable NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __nullable __autoreleasing * __nullable credential))block; - -/** - Sets a block to be executed periodically to track upload progress, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:`. - - @param block A block object to be called when an undetermined number of bytes have been uploaded to the server. This block has no return value and takes five arguments: the session, the task, the number of bytes written since the last time the upload progress block was called, the total bytes written, and the total bytes expected to be written during the request, as initially determined by the length of the HTTP body. This block may be called multiple times, and will execute on the main thread. - */ -- (void)setTaskDidSendBodyDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block; - -/** - Sets a block to be executed as the last message related to a specific task, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didCompleteWithError:`. - - @param block A block object to be executed when a session task is completed. The block has no return value, and takes three arguments: the session, the task, and any error that occurred in the process of executing the task. - */ -- (void)setTaskDidCompleteBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, NSError * __nullable error))block; - -///------------------------------------------- -/// @name Setting Data Task Delegate Callbacks -///------------------------------------------- - -/** - Sets a block to be executed when a data task has received a response, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didReceiveResponse:completionHandler:`. - - @param block A block object to be executed when a data task has received a response. The block returns the disposition of the session response, and takes three arguments: the session, the data task, and the received response. - */ -- (void)setDataTaskDidReceiveResponseBlock:(nullable NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block; - -/** - Sets a block to be executed when a data task has become a download task, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didBecomeDownloadTask:`. - - @param block A block object to be executed when a data task has become a download task. The block has no return value, and takes three arguments: the session, the data task, and the download task it has become. - */ -- (void)setDataTaskDidBecomeDownloadTaskBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block; - -/** - Sets a block to be executed when a data task receives data, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didReceiveData:`. - - @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the session, the data task, and the data received. This block may be called multiple times, and will execute on the session manager operation queue. - */ -- (void)setDataTaskDidReceiveDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block; - -/** - Sets a block to be executed to determine the caching behavior of a data task, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:willCacheResponse:completionHandler:`. - - @param block A block object to be executed to determine the caching behavior of a data task. The block returns the response to cache, and takes three arguments: the session, the data task, and the proposed cached URL response. - */ -- (void)setDataTaskWillCacheResponseBlock:(nullable NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block; - -/** - Sets a block to be executed once all messages enqueued for a session have been delivered, as handled by the `NSURLSessionDataDelegate` method `URLSessionDidFinishEventsForBackgroundURLSession:`. - - @param block A block object to be executed once all messages enqueued for a session have been delivered. The block has no return value and takes a single argument: the session. - */ -- (void)setDidFinishEventsForBackgroundURLSessionBlock:(nullable void (^)(NSURLSession *session))block; - -///----------------------------------------------- -/// @name Setting Download Task Delegate Callbacks -///----------------------------------------------- - -/** - Sets a block to be executed when a download task has completed a download, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didFinishDownloadingToURL:`. - - @param block A block object to be executed when a download task has completed. The block returns the URL the download should be moved to, and takes three arguments: the session, the download task, and the temporary location of the downloaded file. If the file manager encounters an error while attempting to move the temporary file to the destination, an `AFURLSessionDownloadTaskDidFailToMoveFileNotification` will be posted, with the download task as its object, and the user info of the error. - */ -- (void)setDownloadTaskDidFinishDownloadingBlock:(nullable NSURL * (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block; - -/** - Sets a block to be executed periodically to track download progress, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:`. - - @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes five arguments: the session, the download task, the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the session manager operation queue. - */ -- (void)setDownloadTaskDidWriteDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block; - -/** - Sets a block to be executed when a download task has been resumed, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:`. - - @param block A block object to be executed when a download task has been resumed. The block has no return value and takes four arguments: the session, the download task, the file offset of the resumed download, and the total number of bytes expected to be downloaded. - */ -- (void)setDownloadTaskDidResumeBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block; - -@end - -#endif - -///-------------------- -/// @name Notifications -///-------------------- - -/** - Posted when a task begins executing. - - @deprecated Use `AFNetworkingTaskDidResumeNotification` instead. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidStartNotification DEPRECATED_ATTRIBUTE; - -/** - Posted when a task resumes. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidResumeNotification; - -/** - Posted when a task finishes executing. Includes a userInfo dictionary with additional information about the task. - - @deprecated Use `AFNetworkingTaskDidCompleteNotification` instead. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidFinishNotification DEPRECATED_ATTRIBUTE; - -/** - Posted when a task finishes executing. Includes a userInfo dictionary with additional information about the task. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteNotification; - -/** - Posted when a task suspends its execution. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidSuspendNotification; - -/** - Posted when a session is invalidated. - */ -FOUNDATION_EXPORT NSString * const AFURLSessionDidInvalidateNotification; - -/** - Posted when a session download task encountered an error when moving the temporary download file to a specified destination. - */ -FOUNDATION_EXPORT NSString * const AFURLSessionDownloadTaskDidFailToMoveFileNotification; - -/** - The raw response data of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if response data exists for the task. - - @deprecated Use `AFNetworkingTaskDidCompleteResponseDataKey` instead. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidFinishResponseDataKey DEPRECATED_ATTRIBUTE; - -/** - The raw response data of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if response data exists for the task. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteResponseDataKey; - -/** - The serialized response object of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the response was serialized. - - @deprecated Use `AFNetworkingTaskDidCompleteSerializedResponseKey` instead. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidFinishSerializedResponseKey DEPRECATED_ATTRIBUTE; - -/** - The serialized response object of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the response was serialized. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteSerializedResponseKey; - -/** - The response serializer used to serialize the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the task has an associated response serializer. - - @deprecated Use `AFNetworkingTaskDidCompleteResponseSerializerKey` instead. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidFinishResponseSerializerKey DEPRECATED_ATTRIBUTE; - -/** - The response serializer used to serialize the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if the task has an associated response serializer. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteResponseSerializerKey; - -/** - The file path associated with the download task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an the response data has been stored directly to disk. - - @deprecated Use `AFNetworkingTaskDidCompleteAssetPathKey` instead. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidFinishAssetPathKey DEPRECATED_ATTRIBUTE; - -/** - The file path associated with the download task. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an the response data has been stored directly to disk. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteAssetPathKey; - -/** - Any error associated with the task, or the serialization of the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an error exists. - - @deprecated Use `AFNetworkingTaskDidCompleteErrorKey` instead. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidFinishErrorKey DEPRECATED_ATTRIBUTE; - -/** - Any error associated with the task, or the serialization of the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidFinishNotification` if an error exists. - */ -FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteErrorKey; - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m b/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m deleted file mode 100644 index eb28959..0000000 --- a/FoodbLog/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m +++ /dev/null @@ -1,1171 +0,0 @@ -// AFURLSessionManager.m -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "AFURLSessionManager.h" -#import - -#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) - -static dispatch_queue_t url_session_manager_creation_queue() { - static dispatch_queue_t af_url_session_manager_creation_queue; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - af_url_session_manager_creation_queue = dispatch_queue_create("com.alamofire.networking.session.manager.creation", DISPATCH_QUEUE_SERIAL); - }); - - return af_url_session_manager_creation_queue; -} - -static dispatch_queue_t url_session_manager_processing_queue() { - static dispatch_queue_t af_url_session_manager_processing_queue; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - af_url_session_manager_processing_queue = dispatch_queue_create("com.alamofire.networking.session.manager.processing", DISPATCH_QUEUE_CONCURRENT); - }); - - return af_url_session_manager_processing_queue; -} - -static dispatch_group_t url_session_manager_completion_group() { - static dispatch_group_t af_url_session_manager_completion_group; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - af_url_session_manager_completion_group = dispatch_group_create(); - }); - - return af_url_session_manager_completion_group; -} - -NSString * const AFNetworkingTaskDidResumeNotification = @"com.alamofire.networking.task.resume"; -NSString * const AFNetworkingTaskDidCompleteNotification = @"com.alamofire.networking.task.complete"; -NSString * const AFNetworkingTaskDidSuspendNotification = @"com.alamofire.networking.task.suspend"; -NSString * const AFURLSessionDidInvalidateNotification = @"com.alamofire.networking.session.invalidate"; -NSString * const AFURLSessionDownloadTaskDidFailToMoveFileNotification = @"com.alamofire.networking.session.download.file-manager-error"; - -NSString * const AFNetworkingTaskDidStartNotification = @"com.alamofire.networking.task.resume"; // Deprecated -NSString * const AFNetworkingTaskDidFinishNotification = @"com.alamofire.networking.task.complete"; // Deprecated - -NSString * const AFNetworkingTaskDidCompleteSerializedResponseKey = @"com.alamofire.networking.task.complete.serializedresponse"; -NSString * const AFNetworkingTaskDidCompleteResponseSerializerKey = @"com.alamofire.networking.task.complete.responseserializer"; -NSString * const AFNetworkingTaskDidCompleteResponseDataKey = @"com.alamofire.networking.complete.finish.responsedata"; -NSString * const AFNetworkingTaskDidCompleteErrorKey = @"com.alamofire.networking.task.complete.error"; -NSString * const AFNetworkingTaskDidCompleteAssetPathKey = @"com.alamofire.networking.task.complete.assetpath"; - -NSString * const AFNetworkingTaskDidFinishSerializedResponseKey = @"com.alamofire.networking.task.complete.serializedresponse"; // Deprecated -NSString * const AFNetworkingTaskDidFinishResponseSerializerKey = @"com.alamofire.networking.task.complete.responseserializer"; // Deprecated -NSString * const AFNetworkingTaskDidFinishResponseDataKey = @"com.alamofire.networking.complete.finish.responsedata"; // Deprecated -NSString * const AFNetworkingTaskDidFinishErrorKey = @"com.alamofire.networking.task.complete.error"; // Deprecated -NSString * const AFNetworkingTaskDidFinishAssetPathKey = @"com.alamofire.networking.task.complete.assetpath"; // Deprecated - -static NSString * const AFURLSessionManagerLockName = @"com.alamofire.networking.session.manager.lock"; - -static NSUInteger const AFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTask = 3; - -static void * AFTaskStateChangedContext = &AFTaskStateChangedContext; - -typedef void (^AFURLSessionDidBecomeInvalidBlock)(NSURLSession *session, NSError *error); -typedef NSURLSessionAuthChallengeDisposition (^AFURLSessionDidReceiveAuthenticationChallengeBlock)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential); - -typedef NSURLRequest * (^AFURLSessionTaskWillPerformHTTPRedirectionBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request); -typedef NSURLSessionAuthChallengeDisposition (^AFURLSessionTaskDidReceiveAuthenticationChallengeBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential); -typedef void (^AFURLSessionDidFinishEventsForBackgroundURLSessionBlock)(NSURLSession *session); - -typedef NSInputStream * (^AFURLSessionTaskNeedNewBodyStreamBlock)(NSURLSession *session, NSURLSessionTask *task); -typedef void (^AFURLSessionTaskDidSendBodyDataBlock)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend); -typedef void (^AFURLSessionTaskDidCompleteBlock)(NSURLSession *session, NSURLSessionTask *task, NSError *error); - -typedef NSURLSessionResponseDisposition (^AFURLSessionDataTaskDidReceiveResponseBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response); -typedef void (^AFURLSessionDataTaskDidBecomeDownloadTaskBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask); -typedef void (^AFURLSessionDataTaskDidReceiveDataBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data); -typedef NSCachedURLResponse * (^AFURLSessionDataTaskWillCacheResponseBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse); - -typedef NSURL * (^AFURLSessionDownloadTaskDidFinishDownloadingBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location); -typedef void (^AFURLSessionDownloadTaskDidWriteDataBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite); -typedef void (^AFURLSessionDownloadTaskDidResumeBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes); - -typedef void (^AFURLSessionTaskCompletionHandler)(NSURLResponse *response, id responseObject, NSError *error); - -#pragma mark - - -@interface AFURLSessionManagerTaskDelegate : NSObject -@property (nonatomic, weak) AFURLSessionManager *manager; -@property (nonatomic, strong) NSMutableData *mutableData; -@property (nonatomic, strong) NSProgress *progress; -@property (nonatomic, copy) NSURL *downloadFileURL; -@property (nonatomic, copy) AFURLSessionDownloadTaskDidFinishDownloadingBlock downloadTaskDidFinishDownloading; -@property (nonatomic, copy) AFURLSessionTaskCompletionHandler completionHandler; -@end - -@implementation AFURLSessionManagerTaskDelegate - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - self.mutableData = [NSMutableData data]; - - self.progress = [NSProgress progressWithTotalUnitCount:0]; - - return self; -} - -#pragma mark - NSURLSessionTaskDelegate - -- (void)URLSession:(__unused NSURLSession *)session - task:(__unused NSURLSessionTask *)task - didSendBodyData:(__unused int64_t)bytesSent - totalBytesSent:(int64_t)totalBytesSent -totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend -{ - self.progress.totalUnitCount = totalBytesExpectedToSend; - self.progress.completedUnitCount = totalBytesSent; -} - -- (void)URLSession:(__unused NSURLSession *)session - task:(NSURLSessionTask *)task -didCompleteWithError:(NSError *)error -{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - __strong AFURLSessionManager *manager = self.manager; - - __block id responseObject = nil; - - __block NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - userInfo[AFNetworkingTaskDidCompleteResponseSerializerKey] = manager.responseSerializer; - - //Performance Improvement from #2672 - NSData *data = nil; - if (self.mutableData) { - data = [self.mutableData copy]; - //We no longer need the reference, so nil it out to gain back some memory. - self.mutableData = nil; - } - - if (self.downloadFileURL) { - userInfo[AFNetworkingTaskDidCompleteAssetPathKey] = self.downloadFileURL; - } else if (data) { - userInfo[AFNetworkingTaskDidCompleteResponseDataKey] = data; - } - - if (error) { - userInfo[AFNetworkingTaskDidCompleteErrorKey] = error; - - dispatch_group_async(manager.completionGroup ?: url_session_manager_completion_group(), manager.completionQueue ?: dispatch_get_main_queue(), ^{ - if (self.completionHandler) { - self.completionHandler(task.response, responseObject, error); - } - - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidCompleteNotification object:task userInfo:userInfo]; - }); - }); - } else { - dispatch_async(url_session_manager_processing_queue(), ^{ - NSError *serializationError = nil; - responseObject = [manager.responseSerializer responseObjectForResponse:task.response data:data error:&serializationError]; - - if (self.downloadFileURL) { - responseObject = self.downloadFileURL; - } - - if (responseObject) { - userInfo[AFNetworkingTaskDidCompleteSerializedResponseKey] = responseObject; - } - - if (serializationError) { - userInfo[AFNetworkingTaskDidCompleteErrorKey] = serializationError; - } - - dispatch_group_async(manager.completionGroup ?: url_session_manager_completion_group(), manager.completionQueue ?: dispatch_get_main_queue(), ^{ - if (self.completionHandler) { - self.completionHandler(task.response, responseObject, serializationError); - } - - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidCompleteNotification object:task userInfo:userInfo]; - }); - }); - }); - } -#pragma clang diagnostic pop -} - -#pragma mark - NSURLSessionDataTaskDelegate - -- (void)URLSession:(__unused NSURLSession *)session - dataTask:(__unused NSURLSessionDataTask *)dataTask - didReceiveData:(NSData *)data -{ - [self.mutableData appendData:data]; -} - -#pragma mark - NSURLSessionDownloadTaskDelegate - -- (void)URLSession:(NSURLSession *)session - downloadTask:(NSURLSessionDownloadTask *)downloadTask -didFinishDownloadingToURL:(NSURL *)location -{ - NSError *fileManagerError = nil; - self.downloadFileURL = nil; - - if (self.downloadTaskDidFinishDownloading) { - self.downloadFileURL = self.downloadTaskDidFinishDownloading(session, downloadTask, location); - if (self.downloadFileURL) { - [[NSFileManager defaultManager] moveItemAtURL:location toURL:self.downloadFileURL error:&fileManagerError]; - - if (fileManagerError) { - [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:fileManagerError.userInfo]; - } - } - } -} - -- (void)URLSession:(__unused NSURLSession *)session - downloadTask:(__unused NSURLSessionDownloadTask *)downloadTask - didWriteData:(__unused int64_t)bytesWritten - totalBytesWritten:(int64_t)totalBytesWritten -totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite -{ - self.progress.totalUnitCount = totalBytesExpectedToWrite; - self.progress.completedUnitCount = totalBytesWritten; -} - -- (void)URLSession:(__unused NSURLSession *)session - downloadTask:(__unused NSURLSessionDownloadTask *)downloadTask - didResumeAtOffset:(int64_t)fileOffset -expectedTotalBytes:(int64_t)expectedTotalBytes { - self.progress.totalUnitCount = expectedTotalBytes; - self.progress.completedUnitCount = fileOffset; -} - -@end - -#pragma mark - - -/** - * A workaround for issues related to key-value observing the `state` of an `NSURLSessionTask`. - * - * See: - * - https://github.com/AFNetworking/AFNetworking/issues/1477 - * - https://github.com/AFNetworking/AFNetworking/issues/2638 - * - https://github.com/AFNetworking/AFNetworking/pull/2702 - */ - -static inline void af_swizzleSelector(Class class, SEL originalSelector, SEL swizzledSelector) { - Method originalMethod = class_getInstanceMethod(class, originalSelector); - Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); - method_exchangeImplementations(originalMethod, swizzledMethod); -} - -static inline BOOL af_addMethod(Class class, SEL selector, Method method) { - return class_addMethod(class, selector, method_getImplementation(method), method_getTypeEncoding(method)); -} - -static NSString * const AFNSURLSessionTaskDidResumeNotification = @"com.alamofire.networking.nsurlsessiontask.resume"; -static NSString * const AFNSURLSessionTaskDidSuspendNotification = @"com.alamofire.networking.nsurlsessiontask.suspend"; - -@interface _AFURLSessionTaskSwizzling : NSObject - -@end - -@implementation _AFURLSessionTaskSwizzling - -+ (void)load { - /** - WARNING: Trouble Ahead - https://github.com/AFNetworking/AFNetworking/pull/2702 - */ - - if (NSClassFromString(@"NSURLSessionTask")) { - /** - iOS 7 and iOS 8 differ in NSURLSessionTask implementation, which makes the next bit of code a bit tricky. - Many Unit Tests have been built to validate as much of this behavior has possible. - Here is what we know: - - NSURLSessionTasks are implemented with class clusters, meaning the class you request from the API isn't actually the type of class you will get back. - - Simply referencing `[NSURLSessionTask class]` will not work. You need to ask an `NSURLSession` to actually create an object, and grab the class from there. - - On iOS 7, `localDataTask` is a `__NSCFLocalDataTask`, which inherits from `__NSCFLocalSessionTask`, which inherits from `__NSCFURLSessionTask`. - - On iOS 8, `localDataTask` is a `__NSCFLocalDataTask`, which inherits from `__NSCFLocalSessionTask`, which inherits from `NSURLSessionTask`. - - On iOS 7, `__NSCFLocalSessionTask` and `__NSCFURLSessionTask` are the only two classes that have their own implementations of `resume` and `suspend`, and `__NSCFLocalSessionTask` DOES NOT CALL SUPER. This means both classes need to be swizzled. - - On iOS 8, `NSURLSessionTask` is the only class that implements `resume` and `suspend`. This means this is the only class that needs to be swizzled. - - Because `NSURLSessionTask` is not involved in the class hierarchy for every version of iOS, its easier to add the swizzled methods to a dummy class and manage them there. - - Some Assumptions: - - No implementations of `resume` or `suspend` call super. If this were to change in a future version of iOS, we'd need to handle it. - - No background task classes override `resume` or `suspend` - - The current solution: - 1) Grab an instance of `__NSCFLocalDataTask` by asking an instance of `NSURLSession` for a data task. - 2) Grab a pointer to the original implementation of `af_resume` - 3) Check to see if the current class has an implementation of resume. If so, continue to step 4. - 4) Grab the super class of the current class. - 5) Grab a pointer for the current class to the current implementation of `resume`. - 6) Grab a pointer for the super class to the current implementation of `resume`. - 7) If the current class implementation of `resume` is not equal to the super class implementation of `resume` AND the current implementation of `resume` is not equal to the original implementation of `af_resume`, THEN swizzle the methods - 8) Set the current class to the super class, and repeat steps 3-8 - */ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wnonnull" - NSURLSessionDataTask *localDataTask = [[NSURLSession sessionWithConfiguration:nil] dataTaskWithURL:nil]; -#pragma clang diagnostic pop - IMP originalAFResumeIMP = method_getImplementation(class_getInstanceMethod([self class], @selector(af_resume))); - Class currentClass = [localDataTask class]; - - while (class_getInstanceMethod(currentClass, @selector(resume))) { - Class superClass = [currentClass superclass]; - IMP classResumeIMP = method_getImplementation(class_getInstanceMethod(currentClass, @selector(resume))); - IMP superclassResumeIMP = method_getImplementation(class_getInstanceMethod(superClass, @selector(resume))); - if (classResumeIMP != superclassResumeIMP && - originalAFResumeIMP != classResumeIMP) { - [self swizzleResumeAndSuspendMethodForClass:currentClass]; - } - currentClass = [currentClass superclass]; - } - - [localDataTask cancel]; - } -} - -+ (void)swizzleResumeAndSuspendMethodForClass:(Class)class { - Method afResumeMethod = class_getInstanceMethod(self, @selector(af_resume)); - Method afSuspendMethod = class_getInstanceMethod(self, @selector(af_suspend)); - - if (af_addMethod(class, @selector(af_resume), afResumeMethod)) { - af_swizzleSelector(class, @selector(resume), @selector(af_resume)); - } - - if (af_addMethod(class, @selector(af_suspend), afSuspendMethod)) { - af_swizzleSelector(class, @selector(suspend), @selector(af_suspend)); - } -} - -- (NSURLSessionTaskState)state { - NSAssert(NO, @"State method should never be called in the actual dummy class"); - return NSURLSessionTaskStateCanceling; -} - -- (void)af_resume { - NSAssert([self respondsToSelector:@selector(state)], @"Does not respond to state"); - NSURLSessionTaskState state = [self state]; - [self af_resume]; - - if (state != NSURLSessionTaskStateRunning) { - [[NSNotificationCenter defaultCenter] postNotificationName:AFNSURLSessionTaskDidResumeNotification object:self]; - } -} - -- (void)af_suspend { - NSAssert([self respondsToSelector:@selector(state)], @"Does not respond to state"); - NSURLSessionTaskState state = [self state]; - [self af_suspend]; - - if (state != NSURLSessionTaskStateSuspended) { - [[NSNotificationCenter defaultCenter] postNotificationName:AFNSURLSessionTaskDidSuspendNotification object:self]; - } -} -@end - -#pragma mark - - -@interface AFURLSessionManager () -@property (readwrite, nonatomic, strong) NSURLSessionConfiguration *sessionConfiguration; -@property (readwrite, nonatomic, strong) NSOperationQueue *operationQueue; -@property (readwrite, nonatomic, strong) NSURLSession *session; -@property (readwrite, nonatomic, strong) NSMutableDictionary *mutableTaskDelegatesKeyedByTaskIdentifier; -@property (readonly, nonatomic, copy) NSString *taskDescriptionForSessionTasks; -@property (readwrite, nonatomic, strong) NSLock *lock; -@property (readwrite, nonatomic, copy) AFURLSessionDidBecomeInvalidBlock sessionDidBecomeInvalid; -@property (readwrite, nonatomic, copy) AFURLSessionDidReceiveAuthenticationChallengeBlock sessionDidReceiveAuthenticationChallenge; -@property (readwrite, nonatomic, copy) AFURLSessionDidFinishEventsForBackgroundURLSessionBlock didFinishEventsForBackgroundURLSession; -@property (readwrite, nonatomic, copy) AFURLSessionTaskWillPerformHTTPRedirectionBlock taskWillPerformHTTPRedirection; -@property (readwrite, nonatomic, copy) AFURLSessionTaskDidReceiveAuthenticationChallengeBlock taskDidReceiveAuthenticationChallenge; -@property (readwrite, nonatomic, copy) AFURLSessionTaskNeedNewBodyStreamBlock taskNeedNewBodyStream; -@property (readwrite, nonatomic, copy) AFURLSessionTaskDidSendBodyDataBlock taskDidSendBodyData; -@property (readwrite, nonatomic, copy) AFURLSessionTaskDidCompleteBlock taskDidComplete; -@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidReceiveResponseBlock dataTaskDidReceiveResponse; -@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidBecomeDownloadTaskBlock dataTaskDidBecomeDownloadTask; -@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidReceiveDataBlock dataTaskDidReceiveData; -@property (readwrite, nonatomic, copy) AFURLSessionDataTaskWillCacheResponseBlock dataTaskWillCacheResponse; -@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidFinishDownloadingBlock downloadTaskDidFinishDownloading; -@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidWriteDataBlock downloadTaskDidWriteData; -@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidResumeBlock downloadTaskDidResume; -@end - -@implementation AFURLSessionManager - -- (instancetype)init { - return [self initWithSessionConfiguration:nil]; -} - -- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration { - self = [super init]; - if (!self) { - return nil; - } - - if (!configuration) { - configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; - } - - self.sessionConfiguration = configuration; - - self.operationQueue = [[NSOperationQueue alloc] init]; - self.operationQueue.maxConcurrentOperationCount = 1; - - self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:self.operationQueue]; - - self.responseSerializer = [AFJSONResponseSerializer serializer]; - - self.securityPolicy = [AFSecurityPolicy defaultPolicy]; - -#if !TARGET_OS_WATCH - self.reachabilityManager = [AFNetworkReachabilityManager sharedManager]; -#endif - - self.mutableTaskDelegatesKeyedByTaskIdentifier = [[NSMutableDictionary alloc] init]; - - self.lock = [[NSLock alloc] init]; - self.lock.name = AFURLSessionManagerLockName; - - [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { - for (NSURLSessionDataTask *task in dataTasks) { - [self addDelegateForDataTask:task completionHandler:nil]; - } - - for (NSURLSessionUploadTask *uploadTask in uploadTasks) { - [self addDelegateForUploadTask:uploadTask progress:nil completionHandler:nil]; - } - - for (NSURLSessionDownloadTask *downloadTask in downloadTasks) { - [self addDelegateForDownloadTask:downloadTask progress:nil destination:nil completionHandler:nil]; - } - }]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskDidResume:) name:AFNSURLSessionTaskDidResumeNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskDidSuspend:) name:AFNSURLSessionTaskDidSuspendNotification object:nil]; - - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -#pragma mark - - -- (NSString *)taskDescriptionForSessionTasks { - return [NSString stringWithFormat:@"%p", self]; -} - -- (void)taskDidResume:(NSNotification *)notification { - NSURLSessionTask *task = notification.object; - if ([task respondsToSelector:@selector(taskDescription)]) { - if ([task.taskDescription isEqualToString:self.taskDescriptionForSessionTasks]) { - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidResumeNotification object:task]; - }); - } - } -} - -- (void)taskDidSuspend:(NSNotification *)notification { - NSURLSessionTask *task = notification.object; - if ([task respondsToSelector:@selector(taskDescription)]) { - if ([task.taskDescription isEqualToString:self.taskDescriptionForSessionTasks]) { - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidSuspendNotification object:task]; - }); - } - } -} - -#pragma mark - - -- (AFURLSessionManagerTaskDelegate *)delegateForTask:(NSURLSessionTask *)task { - NSParameterAssert(task); - - AFURLSessionManagerTaskDelegate *delegate = nil; - [self.lock lock]; - delegate = self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)]; - [self.lock unlock]; - - return delegate; -} - -- (void)setDelegate:(AFURLSessionManagerTaskDelegate *)delegate - forTask:(NSURLSessionTask *)task -{ - NSParameterAssert(task); - NSParameterAssert(delegate); - - [self.lock lock]; - self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)] = delegate; - [self.lock unlock]; -} - -- (void)addDelegateForDataTask:(NSURLSessionDataTask *)dataTask - completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler -{ - AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; - delegate.manager = self; - delegate.completionHandler = completionHandler; - - dataTask.taskDescription = self.taskDescriptionForSessionTasks; - [self setDelegate:delegate forTask:dataTask]; -} - -- (void)addDelegateForUploadTask:(NSURLSessionUploadTask *)uploadTask - progress:(NSProgress * __autoreleasing *)progress - completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler -{ - AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; - delegate.manager = self; - delegate.completionHandler = completionHandler; - - int64_t totalUnitCount = uploadTask.countOfBytesExpectedToSend; - if(totalUnitCount == NSURLSessionTransferSizeUnknown) { - NSString *contentLength = [uploadTask.originalRequest valueForHTTPHeaderField:@"Content-Length"]; - if(contentLength) { - totalUnitCount = (int64_t)[contentLength longLongValue]; - } - } - - if (delegate.progress) { - delegate.progress.totalUnitCount = totalUnitCount; - } else { - delegate.progress = [NSProgress progressWithTotalUnitCount:totalUnitCount]; - } - - delegate.progress.pausingHandler = ^{ - [uploadTask suspend]; - }; - delegate.progress.cancellationHandler = ^{ - [uploadTask cancel]; - }; - - if (progress) { - *progress = delegate.progress; - } - - uploadTask.taskDescription = self.taskDescriptionForSessionTasks; - - [self setDelegate:delegate forTask:uploadTask]; -} - -- (void)addDelegateForDownloadTask:(NSURLSessionDownloadTask *)downloadTask - progress:(NSProgress * __autoreleasing *)progress - destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination - completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler -{ - AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; - delegate.manager = self; - delegate.completionHandler = completionHandler; - - if (destination) { - delegate.downloadTaskDidFinishDownloading = ^NSURL * (NSURLSession * __unused session, NSURLSessionDownloadTask *task, NSURL *location) { - return destination(location, task.response); - }; - } - - if (progress) { - *progress = delegate.progress; - } - - downloadTask.taskDescription = self.taskDescriptionForSessionTasks; - - [self setDelegate:delegate forTask:downloadTask]; -} - -- (void)removeDelegateForTask:(NSURLSessionTask *)task { - NSParameterAssert(task); - - [self.lock lock]; - [self.mutableTaskDelegatesKeyedByTaskIdentifier removeObjectForKey:@(task.taskIdentifier)]; - [self.lock unlock]; -} - -- (void)removeAllDelegates { - [self.lock lock]; - [self.mutableTaskDelegatesKeyedByTaskIdentifier removeAllObjects]; - [self.lock unlock]; -} - -#pragma mark - - -- (NSArray *)tasksForKeyPath:(NSString *)keyPath { - __block NSArray *tasks = nil; - dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); - [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { - if ([keyPath isEqualToString:NSStringFromSelector(@selector(dataTasks))]) { - tasks = dataTasks; - } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(uploadTasks))]) { - tasks = uploadTasks; - } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(downloadTasks))]) { - tasks = downloadTasks; - } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(tasks))]) { - tasks = [@[dataTasks, uploadTasks, downloadTasks] valueForKeyPath:@"@unionOfArrays.self"]; - } - - dispatch_semaphore_signal(semaphore); - }]; - - dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); - - return tasks; -} - -- (NSArray *)tasks { - return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; -} - -- (NSArray *)dataTasks { - return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; -} - -- (NSArray *)uploadTasks { - return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; -} - -- (NSArray *)downloadTasks { - return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; -} - -#pragma mark - - -- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks { - dispatch_async(dispatch_get_main_queue(), ^{ - if (cancelPendingTasks) { - [self.session invalidateAndCancel]; - } else { - [self.session finishTasksAndInvalidate]; - } - }); -} - -#pragma mark - - -- (void)setResponseSerializer:(id )responseSerializer { - NSParameterAssert(responseSerializer); - - _responseSerializer = responseSerializer; -} - -#pragma mark - - -- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request - completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler -{ - __block NSURLSessionDataTask *dataTask = nil; - dispatch_sync(url_session_manager_creation_queue(), ^{ - dataTask = [self.session dataTaskWithRequest:request]; - }); - - [self addDelegateForDataTask:dataTask completionHandler:completionHandler]; - - return dataTask; -} - -#pragma mark - - -- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request - fromFile:(NSURL *)fileURL - progress:(NSProgress * __autoreleasing *)progress - completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler -{ - __block NSURLSessionUploadTask *uploadTask = nil; - dispatch_sync(url_session_manager_creation_queue(), ^{ - uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; - }); - - if (!uploadTask && self.attemptsToRecreateUploadTasksForBackgroundSessions && self.session.configuration.identifier) { - for (NSUInteger attempts = 0; !uploadTask && attempts < AFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTask; attempts++) { - uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; - } - } - - [self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler]; - - return uploadTask; -} - -- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request - fromData:(NSData *)bodyData - progress:(NSProgress * __autoreleasing *)progress - completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler -{ - __block NSURLSessionUploadTask *uploadTask = nil; - dispatch_sync(url_session_manager_creation_queue(), ^{ - uploadTask = [self.session uploadTaskWithRequest:request fromData:bodyData]; - }); - - [self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler]; - - return uploadTask; -} - -- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request - progress:(NSProgress * __autoreleasing *)progress - completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler -{ - __block NSURLSessionUploadTask *uploadTask = nil; - dispatch_sync(url_session_manager_creation_queue(), ^{ - uploadTask = [self.session uploadTaskWithStreamedRequest:request]; - }); - - [self addDelegateForUploadTask:uploadTask progress:progress completionHandler:completionHandler]; - - return uploadTask; -} - -#pragma mark - - -- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request - progress:(NSProgress * __autoreleasing *)progress - destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination - completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler -{ - __block NSURLSessionDownloadTask *downloadTask = nil; - dispatch_sync(url_session_manager_creation_queue(), ^{ - downloadTask = [self.session downloadTaskWithRequest:request]; - }); - - [self addDelegateForDownloadTask:downloadTask progress:progress destination:destination completionHandler:completionHandler]; - - return downloadTask; -} - -- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData - progress:(NSProgress * __autoreleasing *)progress - destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination - completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler -{ - __block NSURLSessionDownloadTask *downloadTask = nil; - dispatch_sync(url_session_manager_creation_queue(), ^{ - downloadTask = [self.session downloadTaskWithResumeData:resumeData]; - }); - - [self addDelegateForDownloadTask:downloadTask progress:progress destination:destination completionHandler:completionHandler]; - - return downloadTask; -} - -#pragma mark - - -- (NSProgress *)uploadProgressForTask:(NSURLSessionUploadTask *)uploadTask { - return [[self delegateForTask:uploadTask] progress]; -} - -- (NSProgress *)downloadProgressForTask:(NSURLSessionDownloadTask *)downloadTask { - return [[self delegateForTask:downloadTask] progress]; -} - -#pragma mark - - -- (void)setSessionDidBecomeInvalidBlock:(void (^)(NSURLSession *session, NSError *error))block { - self.sessionDidBecomeInvalid = block; -} - -- (void)setSessionDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block { - self.sessionDidReceiveAuthenticationChallenge = block; -} - -- (void)setDidFinishEventsForBackgroundURLSessionBlock:(void (^)(NSURLSession *session))block { - self.didFinishEventsForBackgroundURLSession = block; -} - -#pragma mark - - -- (void)setTaskNeedNewBodyStreamBlock:(NSInputStream * (^)(NSURLSession *session, NSURLSessionTask *task))block { - self.taskNeedNewBodyStream = block; -} - -- (void)setTaskWillPerformHTTPRedirectionBlock:(NSURLRequest * (^)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request))block { - self.taskWillPerformHTTPRedirection = block; -} - -- (void)setTaskDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block { - self.taskDidReceiveAuthenticationChallenge = block; -} - -- (void)setTaskDidSendBodyDataBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block { - self.taskDidSendBodyData = block; -} - -- (void)setTaskDidCompleteBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, NSError *error))block { - self.taskDidComplete = block; -} - -#pragma mark - - -- (void)setDataTaskDidReceiveResponseBlock:(NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block { - self.dataTaskDidReceiveResponse = block; -} - -- (void)setDataTaskDidBecomeDownloadTaskBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block { - self.dataTaskDidBecomeDownloadTask = block; -} - -- (void)setDataTaskDidReceiveDataBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block { - self.dataTaskDidReceiveData = block; -} - -- (void)setDataTaskWillCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block { - self.dataTaskWillCacheResponse = block; -} - -#pragma mark - - -- (void)setDownloadTaskDidFinishDownloadingBlock:(NSURL * (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block { - self.downloadTaskDidFinishDownloading = block; -} - -- (void)setDownloadTaskDidWriteDataBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block { - self.downloadTaskDidWriteData = block; -} - -- (void)setDownloadTaskDidResumeBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block { - self.downloadTaskDidResume = block; -} - -#pragma mark - NSObject - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p, session: %@, operationQueue: %@>", NSStringFromClass([self class]), self, self.session, self.operationQueue]; -} - -- (BOOL)respondsToSelector:(SEL)selector { - if (selector == @selector(URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:)) { - return self.taskWillPerformHTTPRedirection != nil; - } else if (selector == @selector(URLSession:dataTask:didReceiveResponse:completionHandler:)) { - return self.dataTaskDidReceiveResponse != nil; - } else if (selector == @selector(URLSession:dataTask:willCacheResponse:completionHandler:)) { - return self.dataTaskWillCacheResponse != nil; - } else if (selector == @selector(URLSessionDidFinishEventsForBackgroundURLSession:)) { - return self.didFinishEventsForBackgroundURLSession != nil; - } - - return [[self class] instancesRespondToSelector:selector]; -} - -#pragma mark - NSURLSessionDelegate - -- (void)URLSession:(NSURLSession *)session -didBecomeInvalidWithError:(NSError *)error -{ - if (self.sessionDidBecomeInvalid) { - self.sessionDidBecomeInvalid(session, error); - } - - [self removeAllDelegates]; - [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDidInvalidateNotification object:session]; -} - -- (void)URLSession:(NSURLSession *)session -didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge - completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler -{ - NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; - __block NSURLCredential *credential = nil; - - if (self.sessionDidReceiveAuthenticationChallenge) { - disposition = self.sessionDidReceiveAuthenticationChallenge(session, challenge, &credential); - } else { - if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { - if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { - credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; - if (credential) { - disposition = NSURLSessionAuthChallengeUseCredential; - } else { - disposition = NSURLSessionAuthChallengePerformDefaultHandling; - } - } else { - disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; - } - } else { - disposition = NSURLSessionAuthChallengePerformDefaultHandling; - } - } - - if (completionHandler) { - completionHandler(disposition, credential); - } -} - -#pragma mark - NSURLSessionTaskDelegate - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task -willPerformHTTPRedirection:(NSHTTPURLResponse *)response - newRequest:(NSURLRequest *)request - completionHandler:(void (^)(NSURLRequest *))completionHandler -{ - NSURLRequest *redirectRequest = request; - - if (self.taskWillPerformHTTPRedirection) { - redirectRequest = self.taskWillPerformHTTPRedirection(session, task, response, request); - } - - if (completionHandler) { - completionHandler(redirectRequest); - } -} - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task -didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge - completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler -{ - NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; - __block NSURLCredential *credential = nil; - - if (self.taskDidReceiveAuthenticationChallenge) { - disposition = self.taskDidReceiveAuthenticationChallenge(session, task, challenge, &credential); - } else { - if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { - if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { - disposition = NSURLSessionAuthChallengeUseCredential; - credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; - } else { - disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; - } - } else { - disposition = NSURLSessionAuthChallengePerformDefaultHandling; - } - } - - if (completionHandler) { - completionHandler(disposition, credential); - } -} - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task - needNewBodyStream:(void (^)(NSInputStream *bodyStream))completionHandler -{ - NSInputStream *inputStream = nil; - - if (self.taskNeedNewBodyStream) { - inputStream = self.taskNeedNewBodyStream(session, task); - } else if (task.originalRequest.HTTPBodyStream && [task.originalRequest.HTTPBodyStream conformsToProtocol:@protocol(NSCopying)]) { - inputStream = [task.originalRequest.HTTPBodyStream copy]; - } - - if (completionHandler) { - completionHandler(inputStream); - } -} - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task - didSendBodyData:(int64_t)bytesSent - totalBytesSent:(int64_t)totalBytesSent -totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend -{ - - int64_t totalUnitCount = totalBytesExpectedToSend; - if(totalUnitCount == NSURLSessionTransferSizeUnknown) { - NSString *contentLength = [task.originalRequest valueForHTTPHeaderField:@"Content-Length"]; - if(contentLength) { - totalUnitCount = (int64_t) [contentLength longLongValue]; - } - } - - AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:task]; - [delegate URLSession:session task:task didSendBodyData:bytesSent totalBytesSent:totalBytesSent totalBytesExpectedToSend:totalUnitCount]; - - if (self.taskDidSendBodyData) { - self.taskDidSendBodyData(session, task, bytesSent, totalBytesSent, totalUnitCount); - } -} - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task -didCompleteWithError:(NSError *)error -{ - AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:task]; - - // delegate may be nil when completing a task in the background - if (delegate) { - [delegate URLSession:session task:task didCompleteWithError:error]; - - [self removeDelegateForTask:task]; - } - - if (self.taskDidComplete) { - self.taskDidComplete(session, task, error); - } - -} - -#pragma mark - NSURLSessionDataDelegate - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask -didReceiveResponse:(NSURLResponse *)response - completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler -{ - NSURLSessionResponseDisposition disposition = NSURLSessionResponseAllow; - - if (self.dataTaskDidReceiveResponse) { - disposition = self.dataTaskDidReceiveResponse(session, dataTask, response); - } - - if (completionHandler) { - completionHandler(disposition); - } -} - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask -didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask -{ - AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:dataTask]; - if (delegate) { - [self removeDelegateForTask:dataTask]; - [self setDelegate:delegate forTask:downloadTask]; - } - - if (self.dataTaskDidBecomeDownloadTask) { - self.dataTaskDidBecomeDownloadTask(session, dataTask, downloadTask); - } -} - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask - didReceiveData:(NSData *)data -{ - AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:dataTask]; - [delegate URLSession:session dataTask:dataTask didReceiveData:data]; - - if (self.dataTaskDidReceiveData) { - self.dataTaskDidReceiveData(session, dataTask, data); - } -} - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask - willCacheResponse:(NSCachedURLResponse *)proposedResponse - completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler -{ - NSCachedURLResponse *cachedResponse = proposedResponse; - - if (self.dataTaskWillCacheResponse) { - cachedResponse = self.dataTaskWillCacheResponse(session, dataTask, proposedResponse); - } - - if (completionHandler) { - completionHandler(cachedResponse); - } -} - -- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session { - if (self.didFinishEventsForBackgroundURLSession) { - dispatch_async(dispatch_get_main_queue(), ^{ - self.didFinishEventsForBackgroundURLSession(session); - }); - } -} - -#pragma mark - NSURLSessionDownloadDelegate - -- (void)URLSession:(NSURLSession *)session - downloadTask:(NSURLSessionDownloadTask *)downloadTask -didFinishDownloadingToURL:(NSURL *)location -{ - AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask]; - if (self.downloadTaskDidFinishDownloading) { - NSURL *fileURL = self.downloadTaskDidFinishDownloading(session, downloadTask, location); - if (fileURL) { - delegate.downloadFileURL = fileURL; - NSError *error = nil; - [[NSFileManager defaultManager] moveItemAtURL:location toURL:fileURL error:&error]; - if (error) { - [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:error.userInfo]; - } - - return; - } - } - - if (delegate) { - [delegate URLSession:session downloadTask:downloadTask didFinishDownloadingToURL:location]; - } -} - -- (void)URLSession:(NSURLSession *)session - downloadTask:(NSURLSessionDownloadTask *)downloadTask - didWriteData:(int64_t)bytesWritten - totalBytesWritten:(int64_t)totalBytesWritten -totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite -{ - AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask]; - [delegate URLSession:session downloadTask:downloadTask didWriteData:bytesWritten totalBytesWritten:totalBytesWritten totalBytesExpectedToWrite:totalBytesExpectedToWrite]; - - if (self.downloadTaskDidWriteData) { - self.downloadTaskDidWriteData(session, downloadTask, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); - } -} - -- (void)URLSession:(NSURLSession *)session - downloadTask:(NSURLSessionDownloadTask *)downloadTask - didResumeAtOffset:(int64_t)fileOffset -expectedTotalBytes:(int64_t)expectedTotalBytes -{ - AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask]; - [delegate URLSession:session downloadTask:downloadTask didResumeAtOffset:fileOffset expectedTotalBytes:expectedTotalBytes]; - - if (self.downloadTaskDidResume) { - self.downloadTaskDidResume(session, downloadTask, fileOffset, expectedTotalBytes); - } -} - -#pragma mark - NSSecureCoding - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder { - NSURLSessionConfiguration *configuration = [decoder decodeObjectOfClass:[NSURLSessionConfiguration class] forKey:@"sessionConfiguration"]; - - self = [self initWithSessionConfiguration:configuration]; - if (!self) { - return nil; - } - - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [coder encodeObject:self.session.configuration forKey:@"sessionConfiguration"]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - return [[[self class] allocWithZone:zone] initWithSessionConfiguration:self.session.configuration]; -} - -@end - -#endif diff --git a/FoodbLog/Pods/AFNetworking/LICENSE b/FoodbLog/Pods/AFNetworking/LICENSE deleted file mode 100644 index 91f125b..0000000 --- a/FoodbLog/Pods/AFNetworking/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/FoodbLog/Pods/AFNetworking/README.md b/FoodbLog/Pods/AFNetworking/README.md deleted file mode 100644 index f25efe0..0000000 --- a/FoodbLog/Pods/AFNetworking/README.md +++ /dev/null @@ -1,394 +0,0 @@ -

- AFNetworking -

- -[![Build Status](https://travis-ci.org/AFNetworking/AFNetworking.svg)](https://travis-ci.org/AFNetworking/AFNetworking) - -AFNetworking is a delightful networking library for iOS and Mac OS X. It's built on top of the [Foundation URL Loading System](http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html), extending the powerful high-level networking abstractions built into Cocoa. It has a modular architecture with well-designed, feature-rich APIs that are a joy to use. - -Perhaps the most important feature of all, however, is the amazing community of developers who use and contribute to AFNetworking every day. AFNetworking powers some of the most popular and critically-acclaimed apps on the iPhone, iPad, and Mac. - -Choose AFNetworking for your next project, or migrate over your existing projects—you'll be happy you did! - -## How To Get Started - -- [Download AFNetworking](https://github.com/AFNetworking/AFNetworking/archive/master.zip) and try out the included Mac and iPhone example apps -- Read the ["Getting Started" guide](https://github.com/AFNetworking/AFNetworking/wiki/Getting-Started-with-AFNetworking), [FAQ](https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-FAQ), or [other articles on the Wiki](https://github.com/AFNetworking/AFNetworking/wiki) -- Check out the [documentation](http://cocoadocs.org/docsets/AFNetworking/) for a comprehensive look at all of the APIs available in AFNetworking -- Read the [AFNetworking 2.0 Migration Guide](https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-2.0-Migration-Guide) for an overview of the architectural changes from 1.0. - -## Communication - -- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/afnetworking). (Tag 'afnetworking') -- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/afnetworking). -- If you **found a bug**, _and can provide steps to reliably reproduce it_, open an issue. -- If you **have a feature request**, open an issue. -- If you **want to contribute**, submit a pull request. - -### Installation with CocoaPods - -[CocoaPods](http://cocoapods.org) is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries like AFNetworking in your projects. See the ["Getting Started" guide for more information](https://github.com/AFNetworking/AFNetworking/wiki/Getting-Started-with-AFNetworking). - -#### Podfile - -```ruby -platform :ios, '7.0' -pod "AFNetworking", "~> 2.0" -``` - -## Requirements - -| AFNetworking Version | Minimum iOS Target | Minimum OS X Target | Notes | -|:--------------------:|:---------------------------:|:----------------------------:|:-------------------------------------------------------------------------:| -| 2.x | iOS 6 | OS X 10.8 | Xcode 5 is required. `NSURLSession` subspec requires iOS 7 or OS X 10.9. | -| [1.x](https://github.com/AFNetworking/AFNetworking/tree/1.x) | iOS 5 | Mac OS X 10.7 | | -| [0.10.x](https://github.com/AFNetworking/AFNetworking/tree/0.10.x) | iOS 4 | Mac OS X 10.6 | | - -(OS X projects must support [64-bit with modern Cocoa runtime](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtVersionsPlatforms.html)). - -> Programming in Swift? Try [Alamofire](https://github.com/Alamofire/Alamofire) for a more conventional set of APIs. - -## Architecture - -### NSURLConnection - -- `AFURLConnectionOperation` -- `AFHTTPRequestOperation` -- `AFHTTPRequestOperationManager` - -### NSURLSession _(iOS 7 / Mac OS X 10.9)_ - -- `AFURLSessionManager` -- `AFHTTPSessionManager` - -### Serialization - -* `` - - `AFHTTPRequestSerializer` - - `AFJSONRequestSerializer` - - `AFPropertyListRequestSerializer` -* `` - - `AFHTTPResponseSerializer` - - `AFJSONResponseSerializer` - - `AFXMLParserResponseSerializer` - - `AFXMLDocumentResponseSerializer` _(Mac OS X)_ - - `AFPropertyListResponseSerializer` - - `AFImageResponseSerializer` - - `AFCompoundResponseSerializer` - -### Additional Functionality - -- `AFSecurityPolicy` -- `AFNetworkReachabilityManager` - -## Usage - -### HTTP Request Operation Manager - -`AFHTTPRequestOperationManager` encapsulates the common patterns of communicating with a web application over HTTP, including request creation, response serialization, network reachability monitoring, and security, as well as request operation management. - -#### `GET` Request - -```objective-c -AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; -[manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { - NSLog(@"JSON: %@", responseObject); -} failure:^(AFHTTPRequestOperation *operation, NSError *error) { - NSLog(@"Error: %@", error); -}]; -``` - -#### `POST` URL-Form-Encoded Request - -```objective-c -AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; -NSDictionary *parameters = @{@"foo": @"bar"}; -[manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { - NSLog(@"JSON: %@", responseObject); -} failure:^(AFHTTPRequestOperation *operation, NSError *error) { - NSLog(@"Error: %@", error); -}]; -``` - -#### `POST` Multi-Part Request - -```objective-c -AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; -NSDictionary *parameters = @{@"foo": @"bar"}; -NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"]; -[manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id formData) { - [formData appendPartWithFileURL:filePath name:@"image" error:nil]; -} success:^(AFHTTPRequestOperation *operation, id responseObject) { - NSLog(@"Success: %@", responseObject); -} failure:^(AFHTTPRequestOperation *operation, NSError *error) { - NSLog(@"Error: %@", error); -}]; -``` - ---- - -### AFURLSessionManager - -`AFURLSessionManager` creates and manages an `NSURLSession` object based on a specified `NSURLSessionConfiguration` object, which conforms to ``, ``, ``, and ``. - -#### Creating a Download Task - -```objective-c -NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; -AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; - -NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"]; -NSURLRequest *request = [NSURLRequest requestWithURL:URL]; - -NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { - NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; - return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]]; -} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { - NSLog(@"File downloaded to: %@", filePath); -}]; -[downloadTask resume]; -``` - -#### Creating an Upload Task - -```objective-c -NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; -AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; - -NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"]; -NSURLRequest *request = [NSURLRequest requestWithURL:URL]; - -NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"]; -NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { - if (error) { - NSLog(@"Error: %@", error); - } else { - NSLog(@"Success: %@ %@", response, responseObject); - } -}]; -[uploadTask resume]; -``` - -#### Creating an Upload Task for a Multi-Part Request, with Progress - -```objective-c -NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id formData) { - [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil]; - } error:nil]; - -AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; -NSProgress *progress = nil; - -NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { - if (error) { - NSLog(@"Error: %@", error); - } else { - NSLog(@"%@ %@", response, responseObject); - } -}]; - -[uploadTask resume]; -``` - -#### Creating a Data Task - -```objective-c -NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; -AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; - -NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"]; -NSURLRequest *request = [NSURLRequest requestWithURL:URL]; - -NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { - if (error) { - NSLog(@"Error: %@", error); - } else { - NSLog(@"%@ %@", response, responseObject); - } -}]; -[dataTask resume]; -``` - ---- - -### Request Serialization - -Request serializers create requests from URL strings, encoding parameters as either a query string or HTTP body. - -```objective-c -NSString *URLString = @"http://example.com"; -NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]}; -``` - -#### Query String Parameter Encoding - -```objective-c -[[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil]; -``` - - GET http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3 - -#### URL Form Parameter Encoding - -```objective-c -[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters]; -``` - - POST http://example.com/ - Content-Type: application/x-www-form-urlencoded - - foo=bar&baz[]=1&baz[]=2&baz[]=3 - -#### JSON Parameter Encoding - -```objective-c -[[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters]; -``` - - POST http://example.com/ - Content-Type: application/json - - {"foo": "bar", "baz": [1,2,3]} - ---- - -### Network Reachability Manager - -`AFNetworkReachabilityManager` monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces. - -* Do not use Reachability to determine if the original request should be sent. - * You should try to send it. -* You can use Reachability to determine when a request should be automatically retried. - * Although it may still fail, a Reachability notification that the connectivity is available is a good time to retry something. -* Network reachability is a useful tool for determining why a request might have failed. - * After a network request has failed, telling the user they're offline is better than giving them a more technical but accurate error, such as "request timed out." - -See also [WWDC 2012 session 706, "Networking Best Practices."](https://developer.apple.com/videos/wwdc/2012/#706). - -#### Shared Network Reachability - -```objective-c -[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { - NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); -}]; - -[[AFNetworkReachabilityManager sharedManager] startMonitoring]; -``` - -#### HTTP Manager Reachability - -```objective-c -NSURL *baseURL = [NSURL URLWithString:@"http://example.com/"]; -AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:baseURL]; - -NSOperationQueue *operationQueue = manager.operationQueue; -[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { - switch (status) { - case AFNetworkReachabilityStatusReachableViaWWAN: - case AFNetworkReachabilityStatusReachableViaWiFi: - [operationQueue setSuspended:NO]; - break; - case AFNetworkReachabilityStatusNotReachable: - default: - [operationQueue setSuspended:YES]; - break; - } -}]; - -[manager.reachabilityManager startMonitoring]; -``` - ---- - -### Security Policy - -`AFSecurityPolicy` evaluates server trust against pinned X.509 certificates and public keys over secure connections. - -Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled. - -#### Allowing Invalid SSL Certificates - -```objective-c -AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; -manager.securityPolicy.allowInvalidCertificates = YES; // not recommended for production -``` - ---- - -### AFHTTPRequestOperation - -`AFHTTPRequestOperation` is a subclass of `AFURLConnectionOperation` for requests using the HTTP or HTTPS protocols. It encapsulates the concept of acceptable status codes and content types, which determine the success or failure of a request. - -Although `AFHTTPRequestOperationManager` is usually the best way to go about making requests, `AFHTTPRequestOperation` can be used by itself. - -#### `GET` with `AFHTTPRequestOperation` - -```objective-c -NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.json"]; -NSURLRequest *request = [NSURLRequest requestWithURL:URL]; -AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request]; -op.responseSerializer = [AFJSONResponseSerializer serializer]; -[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { - NSLog(@"JSON: %@", responseObject); -} failure:^(AFHTTPRequestOperation *operation, NSError *error) { - NSLog(@"Error: %@", error); -}]; -[[NSOperationQueue mainQueue] addOperation:op]; -``` - -#### Batch of Operations - -```objective-c -NSMutableArray *mutableOperations = [NSMutableArray array]; -for (NSURL *fileURL in filesToUpload) { - NSURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id formData) { - [formData appendPartWithFileURL:fileURL name:@"images[]" error:nil]; - }]; - - AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; - - [mutableOperations addObject:operation]; -} - -NSArray *operations = [AFURLConnectionOperation batchOfRequestOperations:@[...] progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) { - NSLog(@"%lu of %lu complete", numberOfFinishedOperations, totalNumberOfOperations); -} completionBlock:^(NSArray *operations) { - NSLog(@"All operations in batch complete"); -}]; -[[NSOperationQueue mainQueue] addOperations:operations waitUntilFinished:NO]; -``` - -## Unit Tests - -AFNetworking includes a suite of unit tests within the Tests subdirectory. In order to run the unit tests, you must install the testing dependencies via [CocoaPods](http://cocoapods.org/): - - $ cd Tests - $ pod install - -Once testing dependencies are installed, you can execute the test suite via the 'iOS Tests' and 'OS X Tests' schemes within Xcode. - -### Running Tests from the Command Line - -Tests can also be run from the command line or within a continuous integration environment. The [`xcpretty`](https://github.com/mneorr/xcpretty) utility needs to be installed before running the tests from the command line: - - $ gem install xcpretty - -Once `xcpretty` is installed, you can execute the suite via `rake test`. - -## Credits - -AFNetworking is owned and maintained by the [Alamofire Software Foundation](http://alamofire.org). - -AFNetworking was originally created by [Scott Raymond](https://github.com/sco/) and [Mattt Thompson](https://github.com/mattt/) in the development of [Gowalla for iPhone](http://en.wikipedia.org/wiki/Gowalla). - -AFNetworking's logo was designed by [Alan Defibaugh](http://www.alandefibaugh.com/). - -And most of all, thanks to AFNetworking's [growing list of contributors](https://github.com/AFNetworking/AFNetworking/contributors). - -### Security Disclosure - -If you believe you have identified a security vulnerability with AFNetworking, you should report it as soon as possible via email to security@alamofire.org. Please do not post it to a public issue tracker. - -## License - -AFNetworking is released under the MIT license. See LICENSE for details. diff --git a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h b/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h deleted file mode 100644 index 3c7649b..0000000 --- a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h +++ /dev/null @@ -1,80 +0,0 @@ -// AFNetworkActivityIndicatorManager.h -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -#import - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - `AFNetworkActivityIndicatorManager` manages the state of the network activity indicator in the status bar. When enabled, it will listen for notifications indicating that a network request operation has started or finished, and start or stop animating the indicator accordingly. The number of active requests is incremented and decremented much like a stack or a semaphore, and the activity indicator will animate so long as that number is greater than zero. - - You should enable the shared instance of `AFNetworkActivityIndicatorManager` when your application finishes launching. In `AppDelegate application:didFinishLaunchingWithOptions:` you can do so with the following code: - - [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; - - By setting `enabled` to `YES` for `sharedManager`, the network activity indicator will show and hide automatically as requests start and finish. You should not ever need to call `incrementActivityCount` or `decrementActivityCount` yourself. - - See the Apple Human Interface Guidelines section about the Network Activity Indicator for more information: - http://developer.apple.com/library/iOS/#documentation/UserExperience/Conceptual/MobileHIG/UIElementGuidelines/UIElementGuidelines.html#//apple_ref/doc/uid/TP40006556-CH13-SW44 - */ -NS_EXTENSION_UNAVAILABLE_IOS("Use view controller based solutions where appropriate instead.") -@interface AFNetworkActivityIndicatorManager : NSObject - -/** - A Boolean value indicating whether the manager is enabled. - - If YES, the manager will change status bar network activity indicator according to network operation notifications it receives. The default value is NO. - */ -@property (nonatomic, assign, getter = isEnabled) BOOL enabled; - -/** - A Boolean value indicating whether the network activity indicator is currently displayed in the status bar. - */ -@property (readonly, nonatomic, assign) BOOL isNetworkActivityIndicatorVisible; - -/** - Returns the shared network activity indicator manager object for the system. - - @return The systemwide network activity indicator manager. - */ -+ (instancetype)sharedManager; - -/** - Increments the number of active network requests. If this number was zero before incrementing, this will start animating the status bar network activity indicator. - */ -- (void)incrementActivityCount; - -/** - Decrements the number of active network requests. If this number becomes zero after decrementing, this will stop animating the status bar network activity indicator. - */ -- (void)decrementActivityCount; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m b/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m deleted file mode 100644 index cf13180..0000000 --- a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m +++ /dev/null @@ -1,170 +0,0 @@ -// AFNetworkActivityIndicatorManager.m -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "AFNetworkActivityIndicatorManager.h" - -#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) - -#import "AFHTTPRequestOperation.h" - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 -#import "AFURLSessionManager.h" -#endif - -static NSTimeInterval const kAFNetworkActivityIndicatorInvisibilityDelay = 0.17; - -static NSURLRequest * AFNetworkRequestFromNotification(NSNotification *notification) { - if ([[notification object] isKindOfClass:[AFURLConnectionOperation class]]) { - return [(AFURLConnectionOperation *)[notification object] request]; - } - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 - if ([[notification object] respondsToSelector:@selector(originalRequest)]) { - return [(NSURLSessionTask *)[notification object] originalRequest]; - } -#endif - - return nil; -} - -@interface AFNetworkActivityIndicatorManager () -@property (readwrite, nonatomic, assign) NSInteger activityCount; -@property (readwrite, nonatomic, strong) NSTimer *activityIndicatorVisibilityTimer; -@property (readonly, nonatomic, getter = isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible; - -- (void)updateNetworkActivityIndicatorVisibility; -- (void)updateNetworkActivityIndicatorVisibilityDelayed; -@end - -@implementation AFNetworkActivityIndicatorManager -@dynamic networkActivityIndicatorVisible; - -+ (instancetype)sharedManager { - static AFNetworkActivityIndicatorManager *_sharedManager = nil; - static dispatch_once_t oncePredicate; - dispatch_once(&oncePredicate, ^{ - _sharedManager = [[self alloc] init]; - }); - - return _sharedManager; -} - -+ (NSSet *)keyPathsForValuesAffectingIsNetworkActivityIndicatorVisible { - return [NSSet setWithObject:@"activityCount"]; -} - -- (id)init { - self = [super init]; - if (!self) { - return nil; - } - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidStart:) name:AFNetworkingOperationDidStartNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingOperationDidFinishNotification object:nil]; - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidStart:) name:AFNetworkingTaskDidResumeNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingTaskDidSuspendNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkRequestDidFinish:) name:AFNetworkingTaskDidCompleteNotification object:nil]; -#endif - - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - - [_activityIndicatorVisibilityTimer invalidate]; -} - -- (void)updateNetworkActivityIndicatorVisibilityDelayed { - if (self.enabled) { - // Delay hiding of activity indicator for a short interval, to avoid flickering - if (![self isNetworkActivityIndicatorVisible]) { - [self.activityIndicatorVisibilityTimer invalidate]; - self.activityIndicatorVisibilityTimer = [NSTimer timerWithTimeInterval:kAFNetworkActivityIndicatorInvisibilityDelay target:self selector:@selector(updateNetworkActivityIndicatorVisibility) userInfo:nil repeats:NO]; - [[NSRunLoop mainRunLoop] addTimer:self.activityIndicatorVisibilityTimer forMode:NSRunLoopCommonModes]; - } else { - [self performSelectorOnMainThread:@selector(updateNetworkActivityIndicatorVisibility) withObject:nil waitUntilDone:NO modes:@[NSRunLoopCommonModes]]; - } - } -} - -- (BOOL)isNetworkActivityIndicatorVisible { - return self.activityCount > 0; -} - -- (void)updateNetworkActivityIndicatorVisibility { - [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:[self isNetworkActivityIndicatorVisible]]; -} - -- (void)setActivityCount:(NSInteger)activityCount { - @synchronized(self) { - _activityCount = activityCount; - } - - dispatch_async(dispatch_get_main_queue(), ^{ - [self updateNetworkActivityIndicatorVisibilityDelayed]; - }); -} - -- (void)incrementActivityCount { - [self willChangeValueForKey:@"activityCount"]; - @synchronized(self) { - _activityCount++; - } - [self didChangeValueForKey:@"activityCount"]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [self updateNetworkActivityIndicatorVisibilityDelayed]; - }); -} - -- (void)decrementActivityCount { - [self willChangeValueForKey:@"activityCount"]; - @synchronized(self) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - _activityCount = MAX(_activityCount - 1, 0); -#pragma clang diagnostic pop - } - [self didChangeValueForKey:@"activityCount"]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [self updateNetworkActivityIndicatorVisibilityDelayed]; - }); -} - -- (void)networkRequestDidStart:(NSNotification *)notification { - if ([AFNetworkRequestFromNotification(notification) URL]) { - [self incrementActivityCount]; - } -} - -- (void)networkRequestDidFinish:(NSNotification *)notification { - if ([AFNetworkRequestFromNotification(notification) URL]) { - [self decrementActivityCount]; - } -} - -@end - -#endif diff --git a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h b/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h deleted file mode 100644 index 0c8f9b5..0000000 --- a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h +++ /dev/null @@ -1,63 +0,0 @@ -// UIActivityIndicatorView+AFNetworking.h -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -#import - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import - -@class AFURLConnectionOperation; - -/** - This category adds methods to the UIKit framework's `UIActivityIndicatorView` class. The methods in this category provide support for automatically starting and stopping animation depending on the loading state of a request operation or session task. - */ -@interface UIActivityIndicatorView (AFNetworking) - -///---------------------------------- -/// @name Animating for Session Tasks -///---------------------------------- - -/** - Binds the animating state to the state of the specified task. - - @param task The task. If `nil`, automatic updating from any previously specified operation will be disabled. - */ -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (void)setAnimatingWithStateOfTask:(nullable NSURLSessionTask *)task; -#endif - -///--------------------------------------- -/// @name Animating for Request Operations -///--------------------------------------- - -/** - Binds the animating state to the execution state of the specified operation. - - @param operation The operation. If `nil`, automatic updating from any previously specified operation will be disabled. - */ -- (void)setAnimatingWithStateOfOperation:(nullable AFURLConnectionOperation *)operation; - -@end - -#endif diff --git a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m b/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m deleted file mode 100644 index dd362b0..0000000 --- a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m +++ /dev/null @@ -1,171 +0,0 @@ -// UIActivityIndicatorView+AFNetworking.m -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "UIActivityIndicatorView+AFNetworking.h" -#import - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import "AFHTTPRequestOperation.h" - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -#import "AFURLSessionManager.h" -#endif - -@interface AFActivityIndicatorViewNotificationObserver : NSObject -@property (readonly, nonatomic, weak) UIActivityIndicatorView *activityIndicatorView; -- (instancetype)initWithActivityIndicatorView:(UIActivityIndicatorView *)activityIndicatorView; - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task; -#endif -- (void)setAnimatingWithStateOfOperation:(AFURLConnectionOperation *)operation; - -@end - -@implementation UIActivityIndicatorView (AFNetworking) - -- (AFActivityIndicatorViewNotificationObserver *)af_notificationObserver { - AFActivityIndicatorViewNotificationObserver *notificationObserver = objc_getAssociatedObject(self, @selector(af_notificationObserver)); - if (notificationObserver == nil) { - notificationObserver = [[AFActivityIndicatorViewNotificationObserver alloc] initWithActivityIndicatorView:self]; - objc_setAssociatedObject(self, @selector(af_notificationObserver), notificationObserver, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - } - return notificationObserver; -} - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task { - [[self af_notificationObserver] setAnimatingWithStateOfTask:task]; -} -#endif - -- (void)setAnimatingWithStateOfOperation:(AFURLConnectionOperation *)operation { - [[self af_notificationObserver] setAnimatingWithStateOfOperation:operation]; -} - -@end - -@implementation AFActivityIndicatorViewNotificationObserver - -- (instancetype)initWithActivityIndicatorView:(UIActivityIndicatorView *)activityIndicatorView -{ - self = [super init]; - if (self) { - _activityIndicatorView = activityIndicatorView; - } - return self; -} - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task { - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - - [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; - [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; - [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; - - if (task) { - if (task.state != NSURLSessionTaskStateCompleted) { - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wreceiver-is-weak" -#pragma clang diagnostic ignored "-Warc-repeated-use-of-weak" - if (task.state == NSURLSessionTaskStateRunning) { - [self.activityIndicatorView startAnimating]; - } else { - [self.activityIndicatorView stopAnimating]; - } -#pragma clang diagnostic pop - - [notificationCenter addObserver:self selector:@selector(af_startAnimating) name:AFNetworkingTaskDidResumeNotification object:task]; - [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingTaskDidCompleteNotification object:task]; - [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingTaskDidSuspendNotification object:task]; - } - } -} -#endif - -#pragma mark - - -- (void)setAnimatingWithStateOfOperation:(AFURLConnectionOperation *)operation { - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - - [notificationCenter removeObserver:self name:AFNetworkingOperationDidStartNotification object:nil]; - [notificationCenter removeObserver:self name:AFNetworkingOperationDidFinishNotification object:nil]; - - if (operation) { - if (![operation isFinished]) { - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wreceiver-is-weak" -#pragma clang diagnostic ignored "-Warc-repeated-use-of-weak" - if ([operation isExecuting]) { - [self.activityIndicatorView startAnimating]; - } else { - [self.activityIndicatorView stopAnimating]; - } -#pragma clang diagnostic pop - - [notificationCenter addObserver:self selector:@selector(af_startAnimating) name:AFNetworkingOperationDidStartNotification object:operation]; - [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingOperationDidFinishNotification object:operation]; - } - } -} - -#pragma mark - - -- (void)af_startAnimating { - dispatch_async(dispatch_get_main_queue(), ^{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wreceiver-is-weak" - [self.activityIndicatorView startAnimating]; -#pragma clang diagnostic pop - }); -} - -- (void)af_stopAnimating { - dispatch_async(dispatch_get_main_queue(), ^{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wreceiver-is-weak" - [self.activityIndicatorView stopAnimating]; -#pragma clang diagnostic pop - }); -} - -#pragma mark - - -- (void)dealloc { - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 - [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; - [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; - [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; -#endif - - [notificationCenter removeObserver:self name:AFNetworkingOperationDidStartNotification object:nil]; - [notificationCenter removeObserver:self name:AFNetworkingOperationDidFinishNotification object:nil]; -} - -@end - -#endif diff --git a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h b/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h deleted file mode 100644 index 97f5622..0000000 --- a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h +++ /dev/null @@ -1,99 +0,0 @@ -// UIAlertView+AFNetworking.h -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -#import - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class AFURLConnectionOperation; - -/** - This category adds methods to the UIKit framework's `UIAlertView` class. The methods in this category provide support for automatically showing an alert if a session task or request operation finishes with an error. Alert title and message are filled from the corresponding `localizedDescription` & `localizedRecoverySuggestion` or `localizedFailureReason` of the error. - */ -@interface UIAlertView (AFNetworking) - -///------------------------------------- -/// @name Showing Alert for Session Task -///------------------------------------- - -/** - Shows an alert view with the error of the specified session task, if any. - - @param task The session task. - @param delegate The alert view delegate. - */ -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -+ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task - delegate:(nullable id)delegate NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extensions."); -#endif - -/** - Shows an alert view with the error of the specified session task, if any, with a custom cancel button title and other button titles. - - @param task The session task. - @param delegate The alert view delegate. - @param cancelButtonTitle The title of the cancel button or nil if there is no cancel button. Using this argument is equivalent to setting the cancel button index to the value returned by invoking addButtonWithTitle: specifying this title. - @param otherButtonTitles The title of another button. Using this argument is equivalent to invoking addButtonWithTitle: with this title to add more buttons. Too many buttons can cause the alert view to scroll. For guidelines on the best ways to use an alert in an app, see "Temporary Views". Titles of additional buttons to add to the receiver, terminated with `nil`. - */ -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -+ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task - delegate:(nullable id)delegate - cancelButtonTitle:(nullable NSString *)cancelButtonTitle - otherButtonTitles:(nullable NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extensions."); -#endif - -///------------------------------------------ -/// @name Showing Alert for Request Operation -///------------------------------------------ - -/** - Shows an alert view with the error of the specified request operation, if any. - - @param operation The request operation. - @param delegate The alert view delegate. - */ -+ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation - delegate:(nullable id)delegate NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extensions."); - -/** - Shows an alert view with the error of the specified request operation, if any, with a custom cancel button title and other button titles. - - @param operation The request operation. - @param delegate The alert view delegate. - @param cancelButtonTitle The title of the cancel button or nil if there is no cancel button. Using this argument is equivalent to setting the cancel button index to the value returned by invoking addButtonWithTitle: specifying this title. - @param otherButtonTitles The title of another button. Using this argument is equivalent to invoking addButtonWithTitle: with this title to add more buttons. Too many buttons can cause the alert view to scroll. For guidelines on the best ways to use an alert in an app, see "Temporary Views". Titles of additional buttons to add to the receiver, terminated with `nil`. - */ -+ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation - delegate:(nullable id)delegate - cancelButtonTitle:(nullable NSString *)cancelButtonTitle - otherButtonTitles:(nullable NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extensions."); - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m b/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m deleted file mode 100644 index 0d1e9e7..0000000 --- a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m +++ /dev/null @@ -1,141 +0,0 @@ -// UIAlertView+AFNetworking.m -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "UIAlertView+AFNetworking.h" - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import "AFURLConnectionOperation.h" - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -#import "AFURLSessionManager.h" -#endif - -static void AFGetAlertViewTitleAndMessageFromError(NSError *error, NSString * __autoreleasing *title, NSString * __autoreleasing *message) { - if (error.localizedDescription && (error.localizedRecoverySuggestion || error.localizedFailureReason)) { - *title = error.localizedDescription; - - if (error.localizedRecoverySuggestion) { - *message = error.localizedRecoverySuggestion; - } else { - *message = error.localizedFailureReason; - } - } else if (error.localizedDescription) { - *title = NSLocalizedStringFromTable(@"Error", @"AFNetworking", @"Fallback Error Description"); - *message = error.localizedDescription; - } else { - *title = NSLocalizedStringFromTable(@"Error", @"AFNetworking", @"Fallback Error Description"); - *message = [NSString stringWithFormat:NSLocalizedStringFromTable(@"%@ Error: %ld", @"AFNetworking", @"Fallback Error Failure Reason Format"), error.domain, (long)error.code]; - } -} - -@implementation UIAlertView (AFNetworking) - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -+ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task - delegate:(id)delegate -{ - [self showAlertViewForTaskWithErrorOnCompletion:task delegate:delegate cancelButtonTitle:NSLocalizedStringFromTable(@"Dismiss", @"AFNetworking", @"UIAlertView Cancel Button Title") otherButtonTitles:nil, nil]; -} - -+ (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task - delegate:(id)delegate - cancelButtonTitle:(NSString *)cancelButtonTitle - otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION -{ - NSMutableArray *mutableOtherTitles = [NSMutableArray array]; - va_list otherButtonTitleList; - va_start(otherButtonTitleList, otherButtonTitles); - { - for (NSString *otherButtonTitle = otherButtonTitles; otherButtonTitle != nil; otherButtonTitle = va_arg(otherButtonTitleList, NSString *)) { - [mutableOtherTitles addObject:otherButtonTitle]; - } - } - va_end(otherButtonTitleList); - - __block __weak id observer = [[NSNotificationCenter defaultCenter] addObserverForName:AFNetworkingTaskDidCompleteNotification object:task queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) { - NSError *error = notification.userInfo[AFNetworkingTaskDidCompleteErrorKey]; - if (error) { - NSString *title, *message; - AFGetAlertViewTitleAndMessageFromError(error, &title, &message); - - UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:nil, nil]; - for (NSString *otherButtonTitle in mutableOtherTitles) { - [alertView addButtonWithTitle:otherButtonTitle]; - } - [alertView setTitle:title]; - [alertView setMessage:message]; - [alertView show]; - } - - [[NSNotificationCenter defaultCenter] removeObserver:observer]; - }]; -} -#endif - -#pragma mark - - -+ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation - delegate:(id)delegate -{ - [self showAlertViewForRequestOperationWithErrorOnCompletion:operation delegate:delegate cancelButtonTitle:NSLocalizedStringFromTable(@"Dismiss", @"AFNetworking", @"UIAlertView Cancel Button Title") otherButtonTitles:nil, nil]; -} - -+ (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOperation *)operation - delegate:(id)delegate - cancelButtonTitle:(NSString *)cancelButtonTitle - otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION -{ - NSMutableArray *mutableOtherTitles = [NSMutableArray array]; - va_list otherButtonTitleList; - va_start(otherButtonTitleList, otherButtonTitles); - { - for (NSString *otherButtonTitle = otherButtonTitles; otherButtonTitle != nil; otherButtonTitle = va_arg(otherButtonTitleList, NSString *)) { - [mutableOtherTitles addObject:otherButtonTitle]; - } - } - va_end(otherButtonTitleList); - - __block __weak id observer = [[NSNotificationCenter defaultCenter] addObserverForName:AFNetworkingOperationDidFinishNotification object:operation queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) { - - if (notification.object && [notification.object isKindOfClass:[AFURLConnectionOperation class]]) { - NSError *error = [(AFURLConnectionOperation *)notification.object error]; - if (error) { - NSString *title, *message; - AFGetAlertViewTitleAndMessageFromError(error, &title, &message); - - UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:nil, nil]; - for (NSString *otherButtonTitle in mutableOtherTitles) { - [alertView addButtonWithTitle:otherButtonTitle]; - } - [alertView setTitle:title]; - [alertView setMessage:message]; - [alertView show]; - } - } - - [[NSNotificationCenter defaultCenter] removeObserver:observer]; - }]; -} - -@end - -#endif diff --git a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h b/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h deleted file mode 100644 index 7289bdb..0000000 --- a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h +++ /dev/null @@ -1,186 +0,0 @@ -// UIButton+AFNetworking.h -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -#import - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol AFURLResponseSerialization, AFImageCache; - -/** - This category adds methods to the UIKit framework's `UIButton` class. The methods in this category provide support for loading remote images and background images asynchronously from a URL. - - @warning Compound values for control `state` (such as `UIControlStateHighlighted | UIControlStateDisabled`) are unsupported. - */ -@interface UIButton (AFNetworking) - -///---------------------------- -/// @name Accessing Image Cache -///---------------------------- - -/** - The image cache used to improve image loading performance on scroll views. By default, `UIButton` will use the `sharedImageCache` of `UIImageView`. - */ -+ (id )sharedImageCache; - -/** - Set the cache used for image loading. - - @param imageCache The image cache. - */ -+ (void)setSharedImageCache:(__nullable id )imageCache; - -///------------------------------------ -/// @name Accessing Response Serializer -///------------------------------------ - -/** - The response serializer used to create an image representation from the server response and response data. By default, this is an instance of `AFImageResponseSerializer`. - - @discussion Subclasses of `AFImageResponseSerializer` could be used to perform post-processing, such as color correction, face detection, or other effects. See https://github.com/AFNetworking/AFCoreImageSerializer - */ -@property (nonatomic, strong) id imageResponseSerializer; - -///-------------------- -/// @name Setting Image -///-------------------- - -/** - Asynchronously downloads an image from the specified URL, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. - - If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. - - @param state The control state. - @param url The URL used for the image request. - */ -- (void)setImageForState:(UIControlState)state - withURL:(NSURL *)url; - -/** - Asynchronously downloads an image from the specified URL, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. - - If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. - - @param state The control state. - @param url The URL used for the image request. - @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the button will not change its image until the image request finishes. - */ -- (void)setImageForState:(UIControlState)state - withURL:(NSURL *)url - placeholderImage:(nullable UIImage *)placeholderImage; - -/** - Asynchronously downloads an image from the specified URL request, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. - - If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. - - If a success block is specified, it is the responsibility of the block to set the image of the button before returning. If no success block is specified, the default behavior of setting the image with `setImage:forState:` is applied. - - @param state The control state. - @param urlRequest The URL request used for the image request. - @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the button will not change its image until the image request finishes. - @param success A block to be executed when the image request operation finishes successfully. This block has no return value and takes two arguments: the server response and the image. If the image was returned from cache, the response parameter will be `nil`. - @param failure A block object to be executed when the image request operation finishes unsuccessfully, or that finishes successfully. This block has no return value and takes a single argument: the error that occurred. - */ -- (void)setImageForState:(UIControlState)state - withURLRequest:(NSURLRequest *)urlRequest - placeholderImage:(nullable UIImage *)placeholderImage - success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * __nullable response, UIImage *image))success - failure:(nullable void (^)(NSError *error))failure; - - -///------------------------------- -/// @name Setting Background Image -///------------------------------- - -/** - Asynchronously downloads an image from the specified URL, and sets it as the background image for the specified state once the request is finished. Any previous background image request for the receiver will be cancelled. - - If the background image is cached locally, the background image is set immediately, otherwise the specified placeholder background image will be set immediately, and then the remote background image will be set once the request is finished. - - @param state The control state. - @param url The URL used for the background image request. - */ -- (void)setBackgroundImageForState:(UIControlState)state - withURL:(NSURL *)url; - -/** - Asynchronously downloads an image from the specified URL, and sets it as the background image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. - - If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. - - @param state The control state. - @param url The URL used for the background image request. - @param placeholderImage The background image to be set initially, until the background image request finishes. If `nil`, the button will not change its background image until the background image request finishes. - */ -- (void)setBackgroundImageForState:(UIControlState)state - withURL:(NSURL *)url - placeholderImage:(nullable UIImage *)placeholderImage; - -/** - Asynchronously downloads an image from the specified URL request, and sets it as the image for the specified state once the request is finished. Any previous image request for the receiver will be cancelled. - - If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. - - If a success block is specified, it is the responsibility of the block to set the image of the button before returning. If no success block is specified, the default behavior of setting the image with `setBackgroundImage:forState:` is applied. - - @param state The control state. - @param urlRequest The URL request used for the image request. - @param placeholderImage The background image to be set initially, until the background image request finishes. If `nil`, the button will not change its background image until the background image request finishes. - @param success A block to be executed when the image request operation finishes successfully. This block has no return value and takes two arguments: the server response and the image. If the image was returned from cache, the response parameter will be `nil`. - @param failure A block object to be executed when the image request operation finishes unsuccessfully, or that finishes successfully. This block has no return value and takes a single argument: the error that occurred. - */ -- (void)setBackgroundImageForState:(UIControlState)state - withURLRequest:(NSURLRequest *)urlRequest - placeholderImage:(nullable UIImage *)placeholderImage - success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * __nullable response, UIImage *image))success - failure:(nullable void (^)(NSError *error))failure; - - -///------------------------------ -/// @name Canceling Image Loading -///------------------------------ - -/** - Cancels any executing image operation for the specified control state of the receiver, if one exists. - - @param state The control state. - */ -- (void)cancelImageRequestOperationForState:(UIControlState)state; - -/** - Cancels any executing background image operation for the specified control state of the receiver, if one exists. - - @param state The control state. - */ -- (void)cancelBackgroundImageRequestOperationForState:(UIControlState)state; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m b/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m deleted file mode 100644 index e5c36a5..0000000 --- a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m +++ /dev/null @@ -1,293 +0,0 @@ -// UIButton+AFNetworking.m -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "UIButton+AFNetworking.h" - -#import - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import "AFURLResponseSerialization.h" -#import "AFHTTPRequestOperation.h" - -#import "UIImageView+AFNetworking.h" - -@interface UIButton (_AFNetworking) -@end - -@implementation UIButton (_AFNetworking) - -+ (NSOperationQueue *)af_sharedImageRequestOperationQueue { - static NSOperationQueue *_af_sharedImageRequestOperationQueue = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _af_sharedImageRequestOperationQueue = [[NSOperationQueue alloc] init]; - _af_sharedImageRequestOperationQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount; - }); - - return _af_sharedImageRequestOperationQueue; -} - -#pragma mark - - -static char AFImageRequestOperationNormal; -static char AFImageRequestOperationHighlighted; -static char AFImageRequestOperationSelected; -static char AFImageRequestOperationDisabled; - -static const char * af_imageRequestOperationKeyForState(UIControlState state) { - switch (state) { - case UIControlStateHighlighted: - return &AFImageRequestOperationHighlighted; - case UIControlStateSelected: - return &AFImageRequestOperationSelected; - case UIControlStateDisabled: - return &AFImageRequestOperationDisabled; - case UIControlStateNormal: - default: - return &AFImageRequestOperationNormal; - } -} - -- (AFHTTPRequestOperation *)af_imageRequestOperationForState:(UIControlState)state { - return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, af_imageRequestOperationKeyForState(state)); -} - -- (void)af_setImageRequestOperation:(AFHTTPRequestOperation *)imageRequestOperation - forState:(UIControlState)state -{ - objc_setAssociatedObject(self, af_imageRequestOperationKeyForState(state), imageRequestOperation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -#pragma mark - - -static char AFBackgroundImageRequestOperationNormal; -static char AFBackgroundImageRequestOperationHighlighted; -static char AFBackgroundImageRequestOperationSelected; -static char AFBackgroundImageRequestOperationDisabled; - -static const char * af_backgroundImageRequestOperationKeyForState(UIControlState state) { - switch (state) { - case UIControlStateHighlighted: - return &AFBackgroundImageRequestOperationHighlighted; - case UIControlStateSelected: - return &AFBackgroundImageRequestOperationSelected; - case UIControlStateDisabled: - return &AFBackgroundImageRequestOperationDisabled; - case UIControlStateNormal: - default: - return &AFBackgroundImageRequestOperationNormal; - } -} - -- (AFHTTPRequestOperation *)af_backgroundImageRequestOperationForState:(UIControlState)state { - return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, af_backgroundImageRequestOperationKeyForState(state)); -} - -- (void)af_setBackgroundImageRequestOperation:(AFHTTPRequestOperation *)imageRequestOperation - forState:(UIControlState)state -{ - objc_setAssociatedObject(self, af_backgroundImageRequestOperationKeyForState(state), imageRequestOperation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end - -#pragma mark - - -@implementation UIButton (AFNetworking) - -+ (id )sharedImageCache { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - return objc_getAssociatedObject(self, @selector(sharedImageCache)) ?: [UIImageView sharedImageCache]; -#pragma clang diagnostic pop -} - -+ (void)setSharedImageCache:(__nullable id )imageCache { - objc_setAssociatedObject(self, @selector(sharedImageCache), imageCache, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -#pragma mark - - -- (id )imageResponseSerializer { - static id _af_defaultImageResponseSerializer = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _af_defaultImageResponseSerializer = [AFImageResponseSerializer serializer]; - }); - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - return objc_getAssociatedObject(self, @selector(imageResponseSerializer)) ?: _af_defaultImageResponseSerializer; -#pragma clang diagnostic pop -} - -- (void)setImageResponseSerializer:(id )serializer { - objc_setAssociatedObject(self, @selector(imageResponseSerializer), serializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -#pragma mark - - -- (void)setImageForState:(UIControlState)state - withURL:(NSURL *)url -{ - [self setImageForState:state withURL:url placeholderImage:nil]; -} - -- (void)setImageForState:(UIControlState)state - withURL:(NSURL *)url - placeholderImage:(UIImage *)placeholderImage -{ - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; - [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; - - [self setImageForState:state withURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; -} - -- (void)setImageForState:(UIControlState)state - withURLRequest:(NSURLRequest *)urlRequest - placeholderImage:(UIImage *)placeholderImage - success:(void (^)(NSURLRequest *request, NSHTTPURLResponse * __nullable response, UIImage *image))success - failure:(void (^)(NSError *error))failure -{ - [self cancelImageRequestOperationForState:state]; - - UIImage *cachedImage = [[[self class] sharedImageCache] cachedImageForRequest:urlRequest]; - if (cachedImage) { - if (success) { - success(urlRequest, nil, cachedImage); - } else { - [self setImage:cachedImage forState:state]; - } - - [self af_setImageRequestOperation:nil forState:state]; - } else { - if (placeholderImage) { - [self setImage:placeholderImage forState:state]; - } - - __weak __typeof(self)weakSelf = self; - AFHTTPRequestOperation *imageRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; - imageRequestOperation.responseSerializer = self.imageResponseSerializer; - [imageRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { - __strong __typeof(weakSelf)strongSelf = weakSelf; - if ([[urlRequest URL] isEqual:[operation.request URL]]) { - if (success) { - success(operation.request, operation.response, responseObject); - } else if (responseObject) { - [strongSelf setImage:responseObject forState:state]; - } - } - [[[strongSelf class] sharedImageCache] cacheImage:responseObject forRequest:urlRequest]; - } failure:^(AFHTTPRequestOperation *operation, NSError *error) { - if ([[urlRequest URL] isEqual:[operation.request URL]]) { - if (failure) { - failure(error); - } - } - }]; - - [self af_setImageRequestOperation:imageRequestOperation forState:state]; - [[[self class] af_sharedImageRequestOperationQueue] addOperation:imageRequestOperation]; - } -} - -#pragma mark - - -- (void)setBackgroundImageForState:(UIControlState)state - withURL:(NSURL *)url -{ - [self setBackgroundImageForState:state withURL:url placeholderImage:nil]; -} - -- (void)setBackgroundImageForState:(UIControlState)state - withURL:(NSURL *)url - placeholderImage:(UIImage *)placeholderImage -{ - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; - [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; - - [self setBackgroundImageForState:state withURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; -} - -- (void)setBackgroundImageForState:(UIControlState)state - withURLRequest:(NSURLRequest *)urlRequest - placeholderImage:(UIImage *)placeholderImage - success:(void (^)(NSURLRequest *request, NSHTTPURLResponse * __nullable response, UIImage *image))success - failure:(void (^)(NSError *error))failure -{ - [self cancelBackgroundImageRequestOperationForState:state]; - - UIImage *cachedImage = [[[self class] sharedImageCache] cachedImageForRequest:urlRequest]; - if (cachedImage) { - if (success) { - success(urlRequest, nil, cachedImage); - } else { - [self setBackgroundImage:cachedImage forState:state]; - } - - [self af_setBackgroundImageRequestOperation:nil forState:state]; - } else { - if (placeholderImage) { - [self setBackgroundImage:placeholderImage forState:state]; - } - - __weak __typeof(self)weakSelf = self; - AFHTTPRequestOperation *backgroundImageRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; - backgroundImageRequestOperation.responseSerializer = self.imageResponseSerializer; - [backgroundImageRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { - __strong __typeof(weakSelf)strongSelf = weakSelf; - if ([[urlRequest URL] isEqual:[operation.request URL]]) { - if (success) { - success(operation.request, operation.response, responseObject); - } else if (responseObject) { - [strongSelf setBackgroundImage:responseObject forState:state]; - } - } - [[[strongSelf class] sharedImageCache] cacheImage:responseObject forRequest:urlRequest]; - } failure:^(AFHTTPRequestOperation *operation, NSError *error) { - if ([[urlRequest URL] isEqual:[operation.request URL]]) { - if (failure) { - failure(error); - } - } - }]; - - [self af_setBackgroundImageRequestOperation:backgroundImageRequestOperation forState:state]; - [[[self class] af_sharedImageRequestOperationQueue] addOperation:backgroundImageRequestOperation]; - } -} - -#pragma mark - - -- (void)cancelImageRequestOperationForState:(UIControlState)state { - [[self af_imageRequestOperationForState:state] cancel]; - [self af_setImageRequestOperation:nil forState:state]; -} - -- (void)cancelBackgroundImageRequestOperationForState:(UIControlState)state { - [[self af_backgroundImageRequestOperationForState:state] cancel]; - [self af_setBackgroundImageRequestOperation:nil forState:state]; -} - -@end - -#endif diff --git a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h b/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h deleted file mode 100644 index 3292920..0000000 --- a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// UIImage+AFNetworking.h -// -// -// Created by Paulo Ferreira on 08/07/15. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import - -@interface UIImage (AFNetworking) - -+ (UIImage*) safeImageWithData:(NSData*)data; - -@end - -#endif diff --git a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h b/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h deleted file mode 100644 index bf61915..0000000 --- a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h +++ /dev/null @@ -1,146 +0,0 @@ -// UIImageView+AFNetworking.h -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -#import - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol AFURLResponseSerialization, AFImageCache; - -/** - This category adds methods to the UIKit framework's `UIImageView` class. The methods in this category provide support for loading remote images asynchronously from a URL. - */ -@interface UIImageView (AFNetworking) - -///---------------------------- -/// @name Accessing Image Cache -///---------------------------- - -/** - The image cache used to improve image loading performance on scroll views. By default, this is an `NSCache` subclass conforming to the `AFImageCache` protocol, which listens for notification warnings and evicts objects accordingly. -*/ -+ (id )sharedImageCache; - -/** - Set the cache used for image loading. - - @param imageCache The image cache. - */ -+ (void)setSharedImageCache:(__nullable id )imageCache; - -///------------------------------------ -/// @name Accessing Response Serializer -///------------------------------------ - -/** - The response serializer used to create an image representation from the server response and response data. By default, this is an instance of `AFImageResponseSerializer`. - - @discussion Subclasses of `AFImageResponseSerializer` could be used to perform post-processing, such as color correction, face detection, or other effects. See https://github.com/AFNetworking/AFCoreImageSerializer - */ -@property (nonatomic, strong) id imageResponseSerializer; - -///-------------------- -/// @name Setting Image -///-------------------- - -/** - Asynchronously downloads an image from the specified URL, and sets it once the request is finished. Any previous image request for the receiver will be cancelled. - - If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. - - By default, URL requests have a `Accept` header field value of "image / *", a cache policy of `NSURLCacheStorageAllowed` and a timeout interval of 30 seconds, and are set not handle cookies. To configure URL requests differently, use `setImageWithURLRequest:placeholderImage:success:failure:` - - @param url The URL used for the image request. - */ -- (void)setImageWithURL:(NSURL *)url; - -/** - Asynchronously downloads an image from the specified URL, and sets it once the request is finished. Any previous image request for the receiver will be cancelled. - - If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. - - By default, URL requests have a `Accept` header field value of "image / *", a cache policy of `NSURLCacheStorageAllowed` and a timeout interval of 30 seconds, and are set not handle cookies. To configure URL requests differently, use `setImageWithURLRequest:placeholderImage:success:failure:` - - @param url The URL used for the image request. - @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the image view will not change its image until the image request finishes. - */ -- (void)setImageWithURL:(NSURL *)url - placeholderImage:(nullable UIImage *)placeholderImage; - -/** - Asynchronously downloads an image from the specified URL request, and sets it once the request is finished. Any previous image request for the receiver will be cancelled. - - If the image is cached locally, the image is set immediately, otherwise the specified placeholder image will be set immediately, and then the remote image will be set once the request is finished. - - If a success block is specified, it is the responsibility of the block to set the image of the image view before returning. If no success block is specified, the default behavior of setting the image with `self.image = image` is applied. - - @param urlRequest The URL request used for the image request. - @param placeholderImage The image to be set initially, until the image request finishes. If `nil`, the image view will not change its image until the image request finishes. - @param success A block to be executed when the image request operation finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the image created from the response data of request. If the image was returned from cache, the response parameter will be `nil`. - @param failure A block object to be executed when the image request operation finishes unsuccessfully, or that finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the error object describing the network or parsing error that occurred. - */ -- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest - placeholderImage:(nullable UIImage *)placeholderImage - success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * __nullable response, UIImage *image))success - failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * __nullable response, NSError *error))failure; - -/** - Cancels any executing image operation for the receiver, if one exists. - */ -- (void)cancelImageRequestOperation; - -@end - -#pragma mark - - -/** - The `AFImageCache` protocol is adopted by an object used to cache images loaded by the AFNetworking category on `UIImageView`. - */ -@protocol AFImageCache - -/** - Returns a cached image for the specified request, if available. - - @param request The image request. - - @return The cached image. - */ -- (nullable UIImage *)cachedImageForRequest:(NSURLRequest *)request; - -/** - Caches a particular image for the specified request. - - @param image The image to cache. - @param request The request to be used as a cache key. - */ -- (void)cacheImage:(UIImage *)image - forRequest:(NSURLRequest *)request; -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m b/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m deleted file mode 100644 index 2efc160..0000000 --- a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m +++ /dev/null @@ -1,215 +0,0 @@ -// UIImageView+AFNetworking.m -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "UIImageView+AFNetworking.h" - -#import - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import "AFHTTPRequestOperation.h" - -@interface AFImageCache : NSCache -@end - -#pragma mark - - -@interface UIImageView (_AFNetworking) -@property (readwrite, nonatomic, strong, setter = af_setImageRequestOperation:) AFHTTPRequestOperation *af_imageRequestOperation; -@end - -@implementation UIImageView (_AFNetworking) - -+ (NSOperationQueue *)af_sharedImageRequestOperationQueue { - static NSOperationQueue *_af_sharedImageRequestOperationQueue = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _af_sharedImageRequestOperationQueue = [[NSOperationQueue alloc] init]; - _af_sharedImageRequestOperationQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount; - }); - - return _af_sharedImageRequestOperationQueue; -} - -- (AFHTTPRequestOperation *)af_imageRequestOperation { - return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, @selector(af_imageRequestOperation)); -} - -- (void)af_setImageRequestOperation:(AFHTTPRequestOperation *)imageRequestOperation { - objc_setAssociatedObject(self, @selector(af_imageRequestOperation), imageRequestOperation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end - -#pragma mark - - -@implementation UIImageView (AFNetworking) -@dynamic imageResponseSerializer; - -+ (id )sharedImageCache { - static AFImageCache *_af_defaultImageCache = nil; - static dispatch_once_t oncePredicate; - dispatch_once(&oncePredicate, ^{ - _af_defaultImageCache = [[AFImageCache alloc] init]; - - [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidReceiveMemoryWarningNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * __unused notification) { - [_af_defaultImageCache removeAllObjects]; - }]; - }); - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - return objc_getAssociatedObject(self, @selector(sharedImageCache)) ?: _af_defaultImageCache; -#pragma clang diagnostic pop -} - -+ (void)setSharedImageCache:(__nullable id )imageCache { - objc_setAssociatedObject(self, @selector(sharedImageCache), imageCache, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -#pragma mark - - -- (id )imageResponseSerializer { - static id _af_defaultImageResponseSerializer = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _af_defaultImageResponseSerializer = [AFImageResponseSerializer serializer]; - }); - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - return objc_getAssociatedObject(self, @selector(imageResponseSerializer)) ?: _af_defaultImageResponseSerializer; -#pragma clang diagnostic pop -} - -- (void)setImageResponseSerializer:(id )serializer { - objc_setAssociatedObject(self, @selector(imageResponseSerializer), serializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -#pragma mark - - -- (void)setImageWithURL:(NSURL *)url { - [self setImageWithURL:url placeholderImage:nil]; -} - -- (void)setImageWithURL:(NSURL *)url - placeholderImage:(UIImage *)placeholderImage -{ - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; - [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; - - [self setImageWithURLRequest:request placeholderImage:placeholderImage success:nil failure:nil]; -} - -- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest - placeholderImage:(UIImage *)placeholderImage - success:(void (^)(NSURLRequest *request, NSHTTPURLResponse * __nullable response, UIImage *image))success - failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse * __nullable response, NSError *error))failure -{ - [self cancelImageRequestOperation]; - - UIImage *cachedImage = [[[self class] sharedImageCache] cachedImageForRequest:urlRequest]; - if (cachedImage) { - if (success) { - success(urlRequest, nil, cachedImage); - } else { - self.image = cachedImage; - } - - self.af_imageRequestOperation = nil; - } else { - if (placeholderImage) { - self.image = placeholderImage; - } - - __weak __typeof(self)weakSelf = self; - self.af_imageRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; - self.af_imageRequestOperation.responseSerializer = self.imageResponseSerializer; - [self.af_imageRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { - __strong __typeof(weakSelf)strongSelf = weakSelf; - if ([[urlRequest URL] isEqual:[strongSelf.af_imageRequestOperation.request URL]]) { - if (success) { - success(urlRequest, operation.response, responseObject); - } else if (responseObject) { - strongSelf.image = responseObject; - } - - if (operation == strongSelf.af_imageRequestOperation){ - strongSelf.af_imageRequestOperation = nil; - } - } - - [[[strongSelf class] sharedImageCache] cacheImage:responseObject forRequest:urlRequest]; - } failure:^(AFHTTPRequestOperation *operation, NSError *error) { - __strong __typeof(weakSelf)strongSelf = weakSelf; - if ([[urlRequest URL] isEqual:[strongSelf.af_imageRequestOperation.request URL]]) { - if (failure) { - failure(urlRequest, operation.response, error); - } - - if (operation == strongSelf.af_imageRequestOperation){ - strongSelf.af_imageRequestOperation = nil; - } - } - }]; - - [[[self class] af_sharedImageRequestOperationQueue] addOperation:self.af_imageRequestOperation]; - } -} - -- (void)cancelImageRequestOperation { - [self.af_imageRequestOperation cancel]; - self.af_imageRequestOperation = nil; -} - -@end - -#pragma mark - - -static inline NSString * AFImageCacheKeyFromURLRequest(NSURLRequest *request) { - return [[request URL] absoluteString]; -} - -@implementation AFImageCache - -- (UIImage *)cachedImageForRequest:(NSURLRequest *)request { - switch ([request cachePolicy]) { - case NSURLRequestReloadIgnoringCacheData: - case NSURLRequestReloadIgnoringLocalAndRemoteCacheData: - return nil; - default: - break; - } - - return [self objectForKey:AFImageCacheKeyFromURLRequest(request)]; -} - -- (void)cacheImage:(UIImage *)image - forRequest:(NSURLRequest *)request -{ - if (image && request) { - [self setObject:image forKey:AFImageCacheKeyFromURLRequest(request)]; - } -} - -@end - -#endif diff --git a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h b/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h deleted file mode 100644 index 49850ed..0000000 --- a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h +++ /dev/null @@ -1,39 +0,0 @@ -// UIKit+AFNetworking.h -// -// Copyright (c) 2013 AFNetworking (http://afnetworking.com/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if TARGET_OS_IOS -#import - -#ifndef _UIKIT_AFNETWORKING_ - #define _UIKIT_AFNETWORKING_ - - #import "AFNetworkActivityIndicatorManager.h" - - #import "UIActivityIndicatorView+AFNetworking.h" - #import "UIAlertView+AFNetworking.h" - #import "UIButton+AFNetworking.h" - #import "UIImageView+AFNetworking.h" - #import "UIProgressView+AFNetworking.h" - #import "UIRefreshControl+AFNetworking.h" - #import "UIWebView+AFNetworking.h" -#endif /* _UIKIT_AFNETWORKING_ */ -#endif diff --git a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h b/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h deleted file mode 100644 index 5c00d6d..0000000 --- a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h +++ /dev/null @@ -1,91 +0,0 @@ -// UIProgressView+AFNetworking.h -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -#import - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class AFURLConnectionOperation; - -/** - This category adds methods to the UIKit framework's `UIProgressView` class. The methods in this category provide support for binding the progress to the upload and download progress of a session task or request operation. - */ -@interface UIProgressView (AFNetworking) - -///------------------------------------ -/// @name Setting Session Task Progress -///------------------------------------ - -/** - Binds the progress to the upload progress of the specified session task. - - @param task The session task. - @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. - */ -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (void)setProgressWithUploadProgressOfTask:(NSURLSessionUploadTask *)task - animated:(BOOL)animated; -#endif - -/** - Binds the progress to the download progress of the specified session task. - - @param task The session task. - @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. - */ -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (void)setProgressWithDownloadProgressOfTask:(NSURLSessionDownloadTask *)task - animated:(BOOL)animated; -#endif - -///------------------------------------ -/// @name Setting Session Task Progress -///------------------------------------ - -/** - Binds the progress to the upload progress of the specified request operation. - - @param operation The request operation. - @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. - */ -- (void)setProgressWithUploadProgressOfOperation:(AFURLConnectionOperation *)operation - animated:(BOOL)animated; - -/** - Binds the progress to the download progress of the specified request operation. - - @param operation The request operation. - @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. - */ -- (void)setProgressWithDownloadProgressOfOperation:(AFURLConnectionOperation *)operation - animated:(BOOL)animated; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m b/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m deleted file mode 100644 index ad2c280..0000000 --- a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.m +++ /dev/null @@ -1,182 +0,0 @@ -// UIProgressView+AFNetworking.m -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "UIProgressView+AFNetworking.h" - -#import - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import "AFURLConnectionOperation.h" - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -#import "AFURLSessionManager.h" -#endif - -static void * AFTaskCountOfBytesSentContext = &AFTaskCountOfBytesSentContext; -static void * AFTaskCountOfBytesReceivedContext = &AFTaskCountOfBytesReceivedContext; - -@interface AFURLConnectionOperation (_UIProgressView) -@property (readwrite, nonatomic, copy) void (^uploadProgress)(NSUInteger bytes, long long totalBytes, long long totalBytesExpected); -@property (readwrite, nonatomic, assign, setter = af_setUploadProgressAnimated:) BOOL af_uploadProgressAnimated; - -@property (readwrite, nonatomic, copy) void (^downloadProgress)(NSUInteger bytes, long long totalBytes, long long totalBytesExpected); -@property (readwrite, nonatomic, assign, setter = af_setDownloadProgressAnimated:) BOOL af_downloadProgressAnimated; -@end - -@implementation AFURLConnectionOperation (_UIProgressView) -@dynamic uploadProgress; // Implemented in AFURLConnectionOperation -@dynamic af_uploadProgressAnimated; - -@dynamic downloadProgress; // Implemented in AFURLConnectionOperation -@dynamic af_downloadProgressAnimated; -@end - -#pragma mark - - -@implementation UIProgressView (AFNetworking) - -- (BOOL)af_uploadProgressAnimated { - return [(NSNumber *)objc_getAssociatedObject(self, @selector(af_uploadProgressAnimated)) boolValue]; -} - -- (void)af_setUploadProgressAnimated:(BOOL)animated { - objc_setAssociatedObject(self, @selector(af_uploadProgressAnimated), @(animated), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (BOOL)af_downloadProgressAnimated { - return [(NSNumber *)objc_getAssociatedObject(self, @selector(af_downloadProgressAnimated)) boolValue]; -} - -- (void)af_setDownloadProgressAnimated:(BOOL)animated { - objc_setAssociatedObject(self, @selector(af_downloadProgressAnimated), @(animated), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -#pragma mark - - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (void)setProgressWithUploadProgressOfTask:(NSURLSessionUploadTask *)task - animated:(BOOL)animated -{ - [task addObserver:self forKeyPath:@"state" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesSentContext]; - [task addObserver:self forKeyPath:@"countOfBytesSent" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesSentContext]; - - [self af_setUploadProgressAnimated:animated]; -} - -- (void)setProgressWithDownloadProgressOfTask:(NSURLSessionDownloadTask *)task - animated:(BOOL)animated -{ - [task addObserver:self forKeyPath:@"state" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesReceivedContext]; - [task addObserver:self forKeyPath:@"countOfBytesReceived" options:(NSKeyValueObservingOptions)0 context:AFTaskCountOfBytesReceivedContext]; - - [self af_setDownloadProgressAnimated:animated]; -} -#endif - -#pragma mark - - -- (void)setProgressWithUploadProgressOfOperation:(AFURLConnectionOperation *)operation - animated:(BOOL)animated -{ - __weak __typeof(self)weakSelf = self; - void (^original)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) = [operation.uploadProgress copy]; - [operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { - if (original) { - original(bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); - } - - dispatch_async(dispatch_get_main_queue(), ^{ - if (totalBytesExpectedToWrite > 0) { - __strong __typeof(weakSelf)strongSelf = weakSelf; - [strongSelf setProgress:(totalBytesWritten / (totalBytesExpectedToWrite * 1.0f)) animated:animated]; - } - }); - }]; -} - -- (void)setProgressWithDownloadProgressOfOperation:(AFURLConnectionOperation *)operation - animated:(BOOL)animated -{ - __weak __typeof(self)weakSelf = self; - void (^original)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) = [operation.downloadProgress copy]; - [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { - if (original) { - original(bytesRead, totalBytesRead, totalBytesExpectedToRead); - } - - dispatch_async(dispatch_get_main_queue(), ^{ - if (totalBytesExpectedToRead > 0) { - __strong __typeof(weakSelf)strongSelf = weakSelf; - [strongSelf setProgress:(totalBytesRead / (totalBytesExpectedToRead * 1.0f)) animated:animated]; - } - }); - }]; -} - -#pragma mark - NSKeyValueObserving - -- (void)observeValueForKeyPath:(NSString *)keyPath - ofObject:(id)object - change:(__unused NSDictionary *)change - context:(void *)context -{ -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 - if (context == AFTaskCountOfBytesSentContext || context == AFTaskCountOfBytesReceivedContext) { - if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesSent))]) { - if ([object countOfBytesExpectedToSend] > 0) { - dispatch_async(dispatch_get_main_queue(), ^{ - [self setProgress:[object countOfBytesSent] / ([object countOfBytesExpectedToSend] * 1.0f) animated:self.af_uploadProgressAnimated]; - }); - } - } - - if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesReceived))]) { - if ([object countOfBytesExpectedToReceive] > 0) { - dispatch_async(dispatch_get_main_queue(), ^{ - [self setProgress:[object countOfBytesReceived] / ([object countOfBytesExpectedToReceive] * 1.0f) animated:self.af_downloadProgressAnimated]; - }); - } - } - - if ([keyPath isEqualToString:NSStringFromSelector(@selector(state))]) { - if ([(NSURLSessionTask *)object state] == NSURLSessionTaskStateCompleted) { - @try { - [object removeObserver:self forKeyPath:NSStringFromSelector(@selector(state))]; - - if (context == AFTaskCountOfBytesSentContext) { - [object removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesSent))]; - } - - if (context == AFTaskCountOfBytesReceivedContext) { - [object removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesReceived))]; - } - } - @catch (NSException * __unused exception) {} - } - } - } -#endif -} - -@end - -#endif diff --git a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h b/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h deleted file mode 100644 index a65e390..0000000 --- a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h +++ /dev/null @@ -1,68 +0,0 @@ -// UIRefreshControl+AFNetworking.m -// -// Copyright (c) 2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -#import - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class AFURLConnectionOperation; - -/** - This category adds methods to the UIKit framework's `UIRefreshControl` class. The methods in this category provide support for automatically beginning and ending refreshing depending on the loading state of a request operation or session task. - */ -@interface UIRefreshControl (AFNetworking) - -///----------------------------------- -/// @name Refreshing for Session Tasks -///----------------------------------- - -/** - Binds the refreshing state to the state of the specified task. - - @param task The task. If `nil`, automatic updating from any previously specified operation will be disabled. - */ -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task; -#endif - -///---------------------------------------- -/// @name Refreshing for Request Operations -///---------------------------------------- - -/** - Binds the refreshing state to the execution state of the specified operation. - - @param operation The operation. If `nil`, automatic updating from any previously specified operation will be disabled. - */ -- (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m b/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m deleted file mode 100644 index 4c19245..0000000 --- a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m +++ /dev/null @@ -1,166 +0,0 @@ -// UIRefreshControl+AFNetworking.m -// -// Copyright (c) 2014 AFNetworking (http://afnetworking.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "UIRefreshControl+AFNetworking.h" -#import - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import "AFHTTPRequestOperation.h" - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -#import "AFURLSessionManager.h" -#endif - -@interface AFRefreshControlNotificationObserver : NSObject -@property (readonly, nonatomic, weak) UIRefreshControl *refreshControl; -- (instancetype)initWithActivityRefreshControl:(UIRefreshControl *)refreshControl; - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task; -#endif -- (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation; - -@end - -@implementation UIRefreshControl (AFNetworking) - -- (AFRefreshControlNotificationObserver *)af_notificationObserver { - AFRefreshControlNotificationObserver *notificationObserver = objc_getAssociatedObject(self, @selector(af_notificationObserver)); - if (notificationObserver == nil) { - notificationObserver = [[AFRefreshControlNotificationObserver alloc] initWithActivityRefreshControl:self]; - objc_setAssociatedObject(self, @selector(af_notificationObserver), notificationObserver, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - } - return notificationObserver; -} - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task { - [[self af_notificationObserver] setRefreshingWithStateOfTask:task]; -} -#endif - -- (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation { - [[self af_notificationObserver] setRefreshingWithStateOfOperation:operation]; -} - -@end - -@implementation AFRefreshControlNotificationObserver - -- (instancetype)initWithActivityRefreshControl:(UIRefreshControl *)refreshControl -{ - self = [super init]; - if (self) { - _refreshControl = refreshControl; - } - return self; -} - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 -- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task { - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - - [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; - [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; - [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; - - if (task) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wreceiver-is-weak" -#pragma clang diagnostic ignored "-Warc-repeated-use-of-weak" - if (task.state == NSURLSessionTaskStateRunning) { - [self.refreshControl beginRefreshing]; - - [notificationCenter addObserver:self selector:@selector(af_beginRefreshing) name:AFNetworkingTaskDidResumeNotification object:task]; - [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingTaskDidCompleteNotification object:task]; - [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingTaskDidSuspendNotification object:task]; - } else { - [self.refreshControl endRefreshing]; - } -#pragma clang diagnostic pop - } -} -#endif - -- (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation { - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - - [notificationCenter removeObserver:self name:AFNetworkingOperationDidStartNotification object:nil]; - [notificationCenter removeObserver:self name:AFNetworkingOperationDidFinishNotification object:nil]; - - if (operation) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wreceiver-is-weak" -#pragma clang diagnostic ignored "-Warc-repeated-use-of-weak" - if (![operation isFinished]) { - if ([operation isExecuting]) { - [self.refreshControl beginRefreshing]; - } else { - [self.refreshControl endRefreshing]; - } - - [notificationCenter addObserver:self selector:@selector(af_beginRefreshing) name:AFNetworkingOperationDidStartNotification object:operation]; - [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingOperationDidFinishNotification object:operation]; - } -#pragma clang diagnostic pop - } -} - -#pragma mark - - -- (void)af_beginRefreshing { - dispatch_async(dispatch_get_main_queue(), ^{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wreceiver-is-weak" - [self.refreshControl beginRefreshing]; -#pragma clang diagnostic pop - }); -} - -- (void)af_endRefreshing { - dispatch_async(dispatch_get_main_queue(), ^{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wreceiver-is-weak" - [self.refreshControl endRefreshing]; -#pragma clang diagnostic pop - }); -} - -#pragma mark - - -- (void)dealloc { - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 - [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; - [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; - [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; -#endif - - [notificationCenter removeObserver:self name:AFNetworkingOperationDidStartNotification object:nil]; - [notificationCenter removeObserver:self name:AFNetworkingOperationDidFinishNotification object:nil]; -} - -@end - -#endif diff --git a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h b/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h deleted file mode 100644 index 5d61d6a..0000000 --- a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h +++ /dev/null @@ -1,86 +0,0 @@ -// UIWebView+AFNetworking.h -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -#import - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class AFHTTPRequestSerializer, AFHTTPResponseSerializer; -@protocol AFURLRequestSerialization, AFURLResponseSerialization; - -/** - This category adds methods to the UIKit framework's `UIWebView` class. The methods in this category provide increased control over the request cycle, including progress monitoring and success / failure handling. - - @discussion When using these category methods, make sure to assign `delegate` for the web view, which implements `–webView:shouldStartLoadWithRequest:navigationType:` appropriately. This allows for tapped links to be loaded through AFNetworking, and can ensure that `canGoBack` & `canGoForward` update their values correctly. - */ -@interface UIWebView (AFNetworking) - -/** - The request serializer used to serialize requests made with the `-loadRequest:...` category methods. By default, this is an instance of `AFHTTPRequestSerializer`. - */ -@property (nonatomic, strong) AFHTTPRequestSerializer * requestSerializer; - -/** - The response serializer used to serialize responses made with the `-loadRequest:...` category methods. By default, this is an instance of `AFHTTPResponseSerializer`. - */ -@property (nonatomic, strong) AFHTTPResponseSerializer * responseSerializer; - -/** - Asynchronously loads the specified request. - - @param request A URL request identifying the location of the content to load. This must not be `nil`. - @param progress A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the main thread. - @param success A block object to be executed when the request finishes loading successfully. This block returns the HTML string to be loaded by the web view, and takes two arguments: the response, and the response string. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a single argument: the error that occurred. - */ -- (void)loadRequest:(NSURLRequest *)request - progress:(nullable void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress - success:(nullable NSString * (^)(NSHTTPURLResponse *response, NSString *HTML))success - failure:(nullable void (^)(NSError *error))failure; - -/** - Asynchronously loads the data associated with a particular request with a specified MIME type and text encoding. - - @param request A URL request identifying the location of the content to load. This must not be `nil`. - @param MIMEType The MIME type of the content. Defaults to the content type of the response if not specified. - @param textEncodingName The IANA encoding name, as in `utf-8` or `utf-16`. Defaults to the response text encoding if not specified. - @param progress A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the main thread. - @param success A block object to be executed when the request finishes loading successfully. This block returns the data to be loaded by the web view and takes two arguments: the response, and the downloaded data. - @param failure A block object to be executed when the request operation finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a single argument: the error that occurred. - */ -- (void)loadRequest:(NSURLRequest *)request - MIMEType:(nullable NSString *)MIMEType - textEncodingName:(nullable NSString *)textEncodingName - progress:(nullable void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress - success:(nullable NSData * (^)(NSHTTPURLResponse *response, NSData *data))success - failure:(nullable void (^)(NSError *error))failure; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m b/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m deleted file mode 100644 index 93eacaa..0000000 --- a/FoodbLog/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m +++ /dev/null @@ -1,159 +0,0 @@ -// UIWebView+AFNetworking.m -// Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "UIWebView+AFNetworking.h" - -#import - -#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) - -#import "AFHTTPRequestOperation.h" -#import "AFURLResponseSerialization.h" -#import "AFURLRequestSerialization.h" - -@interface UIWebView (_AFNetworking) -@property (readwrite, nonatomic, strong, setter = af_setHTTPRequestOperation:) AFHTTPRequestOperation *af_HTTPRequestOperation; -@end - -@implementation UIWebView (_AFNetworking) - -- (AFHTTPRequestOperation *)af_HTTPRequestOperation { - return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, @selector(af_HTTPRequestOperation)); -} - -- (void)af_setHTTPRequestOperation:(AFHTTPRequestOperation *)operation { - objc_setAssociatedObject(self, @selector(af_HTTPRequestOperation), operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end - -#pragma mark - - -@implementation UIWebView (AFNetworking) - -- (AFHTTPRequestSerializer *)requestSerializer { - static AFHTTPRequestSerializer *_af_defaultRequestSerializer = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _af_defaultRequestSerializer = [AFHTTPRequestSerializer serializer]; - }); - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - return objc_getAssociatedObject(self, @selector(requestSerializer)) ?: _af_defaultRequestSerializer; -#pragma clang diagnostic pop -} - -- (void)setRequestSerializer:(AFHTTPRequestSerializer *)requestSerializer { - objc_setAssociatedObject(self, @selector(requestSerializer), requestSerializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (AFHTTPResponseSerializer *)responseSerializer { - static AFHTTPResponseSerializer *_af_defaultResponseSerializer = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _af_defaultResponseSerializer = [AFHTTPResponseSerializer serializer]; - }); - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - return objc_getAssociatedObject(self, @selector(responseSerializer)) ?: _af_defaultResponseSerializer; -#pragma clang diagnostic pop -} - -- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { - objc_setAssociatedObject(self, @selector(responseSerializer), responseSerializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -#pragma mark - - -- (void)loadRequest:(NSURLRequest *)request - progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress - success:(NSString * (^)(NSHTTPURLResponse *response, NSString *HTML))success - failure:(void (^)(NSError *error))failure -{ - [self loadRequest:request MIMEType:nil textEncodingName:nil progress:progress success:^NSData *(NSHTTPURLResponse *response, NSData *data) { - NSStringEncoding stringEncoding = NSUTF8StringEncoding; - if (response.textEncodingName) { - CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)response.textEncodingName); - if (encoding != kCFStringEncodingInvalidId) { - stringEncoding = CFStringConvertEncodingToNSStringEncoding(encoding); - } - } - - NSString *string = [[NSString alloc] initWithData:data encoding:stringEncoding]; - if (success) { - string = success(response, string); - } - - return [string dataUsingEncoding:stringEncoding]; - } failure:failure]; -} - -- (void)loadRequest:(NSURLRequest *)request - MIMEType:(NSString *)MIMEType - textEncodingName:(NSString *)textEncodingName - progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress - success:(NSData * (^)(NSHTTPURLResponse *response, NSData *data))success - failure:(void (^)(NSError *error))failure -{ - NSParameterAssert(request); - - if (self.af_HTTPRequestOperation) { - [self.af_HTTPRequestOperation cancel]; - } - - request = [self.requestSerializer requestBySerializingRequest:request withParameters:nil error:nil]; - - self.af_HTTPRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; - self.af_HTTPRequestOperation.responseSerializer = self.responseSerializer; - - __weak __typeof(self)weakSelf = self; - [self.af_HTTPRequestOperation setDownloadProgressBlock:progress]; - [self.af_HTTPRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id __unused responseObject) { - NSData *data = success ? success(operation.response, operation.responseData) : operation.responseData; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgnu" - __strong __typeof(weakSelf) strongSelf = weakSelf; - [strongSelf loadData:data MIMEType:(MIMEType ?: [operation.response MIMEType]) textEncodingName:(textEncodingName ?: [operation.response textEncodingName]) baseURL:[operation.response URL]]; - - if ([strongSelf.delegate respondsToSelector:@selector(webViewDidFinishLoad:)]) { - [strongSelf.delegate webViewDidFinishLoad:strongSelf]; - } - -#pragma clang diagnostic pop - } failure:^(AFHTTPRequestOperation * __unused operation, NSError *error) { - if (failure) { - failure(error); - } - }]; - - [self.af_HTTPRequestOperation start]; - - if ([self.delegate respondsToSelector:@selector(webViewDidStartLoad:)]) { - [self.delegate webViewDidStartLoad:self]; - } -} - -@end - -#endif diff --git a/FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationToken.h b/FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationToken.h deleted file mode 100644 index 90a20d7..0000000 --- a/FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationToken.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * 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. - * - */ - -#import - -#import - -/*! - A block that will be called when a token is cancelled. - */ -typedef void(^BFCancellationBlock)(); - -/*! - The consumer view of a CancellationToken. - Propagates notification that operations should be canceled. - A BFCancellationToken has methods to inspect whether the token has been cancelled. - */ -@interface BFCancellationToken : NSObject - -/*! - Whether cancellation has been requested for this token source. - */ -@property (nonatomic, assign, readonly, getter=isCancellationRequested) BOOL cancellationRequested; - -/*! - Register a block to be notified when the token is cancelled. - If the token is already cancelled the delegate will be notified immediately. - */ -- (BFCancellationTokenRegistration *)registerCancellationObserverWithBlock:(BFCancellationBlock)block; - -@end diff --git a/FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationToken.m b/FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationToken.m deleted file mode 100644 index b5006d0..0000000 --- a/FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationToken.m +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * 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. - * - */ - -#import "BFCancellationToken.h" -#import "BFCancellationTokenRegistration.h" - -@interface BFCancellationToken () - -@property (atomic, assign, getter=isCancellationRequested) BOOL cancellationRequested; -@property (nonatomic, strong) NSMutableArray *registrations; -@property (nonatomic, strong) NSObject *lock; -@property (nonatomic) BOOL disposed; - -@end - -@interface BFCancellationTokenRegistration (BFCancellationToken) - -+ (instancetype)registrationWithToken:(BFCancellationToken *)token delegate:(BFCancellationBlock)delegate; - -- (void)notifyDelegate; - -@end - -@implementation BFCancellationToken - -#pragma mark - Initializer - -- (instancetype)init { - if (self = [super init]) { - _registrations = [NSMutableArray array]; - _lock = [NSObject new]; - } - return self; -} - -#pragma mark - Custom Setters/Getters - -- (BOOL)isCancellationRequested { - @synchronized(self.lock) { - [self throwIfDisposed]; - return _cancellationRequested; - } -} - -- (void)cancel { - NSArray *registrations; - @synchronized(self.lock) { - [self throwIfDisposed]; - if (_cancellationRequested) { - return; - } - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(cancelPrivate) object:nil]; - _cancellationRequested = YES; - registrations = [self.registrations copy]; - } - - [self notifyCancellation:registrations]; -} - -- (void)notifyCancellation:(NSArray *)registrations { - for (BFCancellationTokenRegistration *registration in registrations) { - [registration notifyDelegate]; - } -} - -- (BFCancellationTokenRegistration *)registerCancellationObserverWithBlock:(BFCancellationBlock)block { - @synchronized(self.lock) { - BFCancellationTokenRegistration *registration = [BFCancellationTokenRegistration registrationWithToken:self delegate:[block copy]]; - [self.registrations addObject:registration]; - - return registration; - } -} - -- (void)unregisterRegistration:(BFCancellationTokenRegistration *)registration { - @synchronized(self.lock) { - [self throwIfDisposed]; - [self.registrations removeObject:registration]; - } -} - -// Delay on a non-public method to prevent interference with a user calling performSelector or -// cancelPreviousPerformRequestsWithTarget on the public method -- (void)cancelPrivate { - [self cancel]; -} - -- (void)cancelAfterDelay:(int)millis { - [self throwIfDisposed]; - if (millis < -1) { - [NSException raise:NSInvalidArgumentException format:@"Delay must be >= -1"]; - } - - if (millis == 0) { - [self cancel]; - return; - } - - @synchronized(self.lock) { - [self throwIfDisposed]; - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(cancelPrivate) object:nil]; - if (self.cancellationRequested) { - return; - } - - if (millis != -1) { - double delay = (double)millis / 1000; - [self performSelector:@selector(cancelPrivate) withObject:nil afterDelay:delay]; - } - } -} - -- (void)dispose { - @synchronized(self.lock) { - if (self.disposed) { - return; - } - self.disposed = YES; - for (BFCancellationTokenRegistration *registration in self.registrations) { - [registration dispose]; - } - [self.registrations removeAllObjects]; - } -} - -- (void)throwIfDisposed { - if (self.disposed) { - [NSException raise:NSInternalInconsistencyException format:@"Object already disposed"]; - } -} - -@end diff --git a/FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h b/FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h deleted file mode 100644 index 3e7b711..0000000 --- a/FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * 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. - * - */ - -#import - -/*! - Represents the registration of a cancellation observer with a cancellation token. - Can be used to unregister the observer at a later time. - */ -@interface BFCancellationTokenRegistration : NSObject - -/*! - Removes the cancellation observer registered with the token - and releases all resources associated with this registration. - */ -- (void)dispose; - -@end diff --git a/FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m b/FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m deleted file mode 100644 index 9c8a7ae..0000000 --- a/FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * 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. - * - */ - -#import "BFCancellationTokenRegistration.h" - -#import "BFCancellationToken.h" - -@interface BFCancellationTokenRegistration () - -@property (nonatomic, weak) BFCancellationToken *token; -@property (nonatomic, strong) BFCancellationBlock cancellationObserverBlock; -@property (nonatomic, strong) NSObject *lock; -@property (nonatomic) BOOL disposed; - -@end - -@interface BFCancellationToken (BFCancellationTokenRegistration) - -- (void)unregisterRegistration:(BFCancellationTokenRegistration *)registration; - -@end - -@implementation BFCancellationTokenRegistration - -+ (instancetype)registrationWithToken:(BFCancellationToken *)token delegate:(BFCancellationBlock)delegate { - BFCancellationTokenRegistration *registration = [BFCancellationTokenRegistration new]; - registration.token = token; - registration.cancellationObserverBlock = delegate; - return registration; -} - -- (instancetype)init { - if (self = [super init]) { - _lock = [NSObject new]; - } - return self; -} - -- (void)dispose { - @synchronized(self.lock) { - if (self.disposed) { - return; - } - self.disposed = YES; - } - - BFCancellationToken *token = self.token; - if (token != nil) { - [token unregisterRegistration:self]; - self.token = nil; - } - self.cancellationObserverBlock = nil; -} - -- (void)notifyDelegate { - @synchronized(self.lock) { - [self throwIfDisposed]; - self.cancellationObserverBlock(); - } -} - -- (void)throwIfDisposed { - NSAssert(!self.disposed, @"Object already disposed"); -} - -@end diff --git a/FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h b/FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h deleted file mode 100644 index bd6e7a1..0000000 --- a/FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * 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. - * - */ - -#import - -@class BFCancellationToken; - -/*! - BFCancellationTokenSource represents the producer side of a CancellationToken. - Signals to a CancellationToken that it should be canceled. - It is a cancellation token that also has methods - for changing the state of a token by cancelling it. - */ -@interface BFCancellationTokenSource : NSObject - -/*! - Creates a new cancellation token source. - */ -+ (instancetype)cancellationTokenSource; - -/*! - The cancellation token associated with this CancellationTokenSource. - */ -@property (nonatomic, strong, readonly) BFCancellationToken *token; - -/*! - Whether cancellation has been requested for this token source. - */ -@property (nonatomic, assign, readonly, getter=isCancellationRequested) BOOL cancellationRequested; - -/*! - Cancels the token if it has not already been cancelled. - */ -- (void)cancel; - -/*! - Schedules a cancel operation on this CancellationTokenSource after the specified number of milliseconds. - @param millis The number of milliseconds to wait before completing the returned task. - If delay is `0` the cancel is executed immediately. If delay is `-1` any scheduled cancellation is stopped. - */ -- (void)cancelAfterDelay:(int)millis; - -/*! - Releases all resources associated with this token source, - including disposing of all registrations. - */ -- (void)dispose; - -@end diff --git a/FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m b/FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m deleted file mode 100644 index 947f725..0000000 --- a/FoodbLog/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * 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. - * - */ - -#import "BFCancellationTokenSource.h" - -#import "BFCancellationToken.h" - -@interface BFCancellationToken (BFCancellationTokenSource) - -- (void)cancel; -- (void)cancelAfterDelay:(int)millis; - -- (void)dispose; -- (void)throwIfDisposed; - -@end - -@implementation BFCancellationTokenSource - -#pragma mark - Initializer - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _token = [BFCancellationToken new]; - - return self; -} - -+ (instancetype)cancellationTokenSource { - return [BFCancellationTokenSource new]; -} - -#pragma mark - Custom Setters/Getters - -- (BOOL)isCancellationRequested { - return _token.isCancellationRequested; -} - -- (void)cancel { - [_token cancel]; -} - -- (void)cancelAfterDelay:(int)millis { - [_token cancelAfterDelay:millis]; -} - -- (void)dispose { - [_token dispose]; -} - -@end diff --git a/FoodbLog/Pods/Bolts/Bolts/Common/BFDefines.h b/FoodbLog/Pods/Bolts/Bolts/Common/BFDefines.h deleted file mode 100644 index cf7dcdf..0000000 --- a/FoodbLog/Pods/Bolts/Bolts/Common/BFDefines.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * 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. - * - */ - -#import - -#if __has_feature(objc_generics) || __has_extension(objc_generics) -# define BF_GENERIC(type) -#else -# define BF_GENERIC(type) -# define BFGenericType id -#endif diff --git a/FoodbLog/Pods/Bolts/Bolts/Common/BFExecutor.h b/FoodbLog/Pods/Bolts/Bolts/Common/BFExecutor.h deleted file mode 100644 index 02af9ba..0000000 --- a/FoodbLog/Pods/Bolts/Bolts/Common/BFExecutor.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * 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. - * - */ - -#import - -/*! - An object that can run a given block. - */ -@interface BFExecutor : NSObject - -/*! - Returns a default executor, which runs continuations immediately until the call stack gets too - deep, then dispatches to a new GCD queue. - */ -+ (instancetype)defaultExecutor; - -/*! - Returns an executor that runs continuations on the thread where the previous task was completed. - */ -+ (instancetype)immediateExecutor; - -/*! - Returns an executor that runs continuations on the main thread. - */ -+ (instancetype)mainThreadExecutor; - -/*! - Returns a new executor that uses the given block to execute continuations. - @param block The block to use. - */ -+ (instancetype)executorWithBlock:(void(^)(void(^block)()))block; - -/*! - Returns a new executor that runs continuations on the given queue. - @param queue The instance of `dispatch_queue_t` to dispatch all continuations onto. - */ -+ (instancetype)executorWithDispatchQueue:(dispatch_queue_t)queue; - -/*! - Returns a new executor that runs continuations on the given queue. - @param queue The instance of `NSOperationQueue` to run all continuations on. - */ -+ (instancetype)executorWithOperationQueue:(NSOperationQueue *)queue; - -/*! - Runs the given block using this executor's particular strategy. - @param block The block to execute. - */ -- (void)execute:(void(^)())block; - -@end diff --git a/FoodbLog/Pods/Bolts/Bolts/Common/BFExecutor.m b/FoodbLog/Pods/Bolts/Bolts/Common/BFExecutor.m deleted file mode 100644 index 292e27c..0000000 --- a/FoodbLog/Pods/Bolts/Bolts/Common/BFExecutor.m +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * 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. - * - */ - -#import "BFExecutor.h" - -@interface BFExecutor () - -@property (nonatomic, copy) void(^block)(void(^block)()); - -@end - -@implementation BFExecutor - -#pragma mark - Executor methods - -+ (instancetype)defaultExecutor { - static BFExecutor *defaultExecutor = NULL; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - defaultExecutor = [self executorWithBlock:^void(void(^block)()) { - static const NSString *BFTaskDepthKey = @"BFTaskDepth"; - static const int BFTaskDefaultExecutorMaxDepth = 20; - - // We prefer to run everything possible immediately, so that there is callstack information - // when debugging. However, we don't want the stack to get too deep, so if the number of - // recursive calls to this method exceeds a certain depth, we dispatch to another GCD queue. - NSMutableDictionary *threadLocal = [[NSThread currentThread] threadDictionary]; - NSNumber *depth = threadLocal[BFTaskDepthKey]; - if (!depth) { - depth = @0; - } - if (depth.intValue > BFTaskDefaultExecutorMaxDepth) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block); - } else { - NSNumber *previousDepth = depth; - threadLocal[BFTaskDepthKey] = @(previousDepth.intValue + 1); - @try { - block(); - } @finally { - threadLocal[BFTaskDepthKey] = previousDepth; - } - } - }]; - }); - return defaultExecutor; -} - -+ (instancetype)immediateExecutor { - static BFExecutor *immediateExecutor = NULL; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - immediateExecutor = [self executorWithBlock:^void(void(^block)()) { - block(); - }]; - }); - return immediateExecutor; -} - -+ (instancetype)mainThreadExecutor { - static BFExecutor *mainThreadExecutor = NULL; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - mainThreadExecutor = [self executorWithBlock:^void(void(^block)()) { - if (![NSThread isMainThread]) { - dispatch_async(dispatch_get_main_queue(), block); - } else { - block(); - } - }]; - }); - return mainThreadExecutor; -} - -+ (instancetype)executorWithBlock:(void(^)(void(^block)()))block { - return [[self alloc] initWithBlock:block]; -} - -+ (instancetype)executorWithDispatchQueue:(dispatch_queue_t)queue { - return [self executorWithBlock:^void(void(^block)()) { - dispatch_async(queue, block); - }]; -} - -+ (instancetype)executorWithOperationQueue:(NSOperationQueue *)queue { - return [self executorWithBlock:^void(void(^block)()) { - [queue addOperation:[NSBlockOperation blockOperationWithBlock:block]]; - }]; -} - -#pragma mark - Initializer - -- (instancetype)initWithBlock:(void(^)(void(^block)()))block { - if (self = [super init]) { - _block = block; - } - return self; -} - -#pragma mark - Execution - -- (void)execute:(void(^)())block { - self.block(block); -} - -@end diff --git a/FoodbLog/Pods/Bolts/Bolts/Common/BFTask.h b/FoodbLog/Pods/Bolts/Bolts/Common/BFTask.h deleted file mode 100644 index 827071d..0000000 --- a/FoodbLog/Pods/Bolts/Bolts/Common/BFTask.h +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * 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. - * - */ - -#import - -#import -#import - -/*! - Error domain used if there was multiple errors on . - */ -extern NSString *const BFTaskErrorDomain; - -/*! - An exception that is thrown if there was multiple exceptions on . - */ -extern NSString *const BFTaskMultipleExceptionsException; - -@class BFExecutor; -@class BFTask; - -/*! - The consumer view of a Task. A BFTask has methods to - inspect the state of the task, and to add continuations to - be run once the task is complete. - */ -@interface BFTask BF_GENERIC(__covariant BFGenericType) : NSObject - -/*! - A block that can act as a continuation for a task. - */ -typedef id(^BFContinuationBlock)(BFTask BF_GENERIC(BFGenericType) *task); - -/*! - Creates a task that is already completed with the given result. - @param result The result for the task. - */ -+ (instancetype)taskWithResult:(BFGenericType)result; - -/*! - Creates a task that is already completed with the given error. - @param error The error for the task. - */ -+ (instancetype)taskWithError:(NSError *)error; - -/*! - Creates a task that is already completed with the given exception. - @param exception The exception for the task. - */ -+ (instancetype)taskWithException:(NSException *)exception; - -/*! - Creates a task that is already cancelled. - */ -+ (instancetype)cancelledTask; - -/*! - Returns a task that will be completed (with result == nil) once - all of the input tasks have completed. - @param tasks An `NSArray` of the tasks to use as an input. - */ -+ (instancetype)taskForCompletionOfAllTasks:(NSArray *)tasks; - -/*! - Returns a task that will be completed once all of the input tasks have completed. - If all tasks complete successfully without being faulted or cancelled the result will be - an `NSArray` of all task results in the order they were provided. - @param tasks An `NSArray` of the tasks to use as an input. - */ -+ (instancetype)taskForCompletionOfAllTasksWithResults:(NSArray *)tasks; - -/*! - Returns a task that will be completed a certain amount of time in the future. - @param millis The approximate number of milliseconds to wait before the - task will be finished (with result == nil). - */ -+ (instancetype)taskWithDelay:(int)millis; - -/*! - Returns a task that will be completed a certain amount of time in the future. - @param millis The approximate number of milliseconds to wait before the - task will be finished (with result == nil). - @param token The cancellation token (optional). - */ -+ (instancetype)taskWithDelay:(int)millis - cancellationToken:(BFCancellationToken *)token; - -/*! - Returns a task that will be completed after the given block completes with - the specified executor. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to immediately schedule to run with the given executor. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -+ (instancetype)taskFromExecutor:(BFExecutor *)executor - withBlock:(id (^)())block; - -// Properties that will be set on the task once it is completed. - -/*! - The result of a successful task. - */ -@property (nonatomic, strong, readonly) BFGenericType result; - -/*! - The error of a failed task. - */ -@property (nonatomic, strong, readonly) NSError *error; - -/*! - The exception of a failed task. - */ -@property (nonatomic, strong, readonly) NSException *exception; - -/*! - Whether this task has been cancelled. - */ -@property (nonatomic, assign, readonly, getter=isCancelled) BOOL cancelled; - -/*! - Whether this task has completed due to an error or exception. - */ -@property (nonatomic, assign, readonly, getter=isFaulted) BOOL faulted; - -/*! - Whether this task has completed. - */ -@property (nonatomic, assign, readonly, getter=isCompleted) BOOL completed; - -/*! - Enqueues the given block to be run once this task is complete. - This method uses a default execution strategy. The block will be - run on the thread where the previous task completes, unless the - the stack depth is too deep, in which case it will be run on a - dispatch queue with default priority. - @param block The block to be run once this task is complete. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (instancetype)continueWithBlock:(BFContinuationBlock)block; - -/*! - Enqueues the given block to be run once this task is complete. - This method uses a default execution strategy. The block will be - run on the thread where the previous task completes, unless the - the stack depth is too deep, in which case it will be run on a - dispatch queue with default priority. - @param block The block to be run once this task is complete. - @param cancellationToken The cancellation token (optional). - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (instancetype)continueWithBlock:(BFContinuationBlock)block - cancellationToken:(BFCancellationToken *)cancellationToken; - -/*! - Enqueues the given block to be run once this task is complete. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to be run once this task is complete. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (instancetype)continueWithExecutor:(BFExecutor *)executor - withBlock:(BFContinuationBlock)block; -/*! - Enqueues the given block to be run once this task is complete. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to be run once this task is complete. - @param cancellationToken The cancellation token (optional). - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - his method will not be completed until that task is completed. - */ -- (instancetype)continueWithExecutor:(BFExecutor *)executor - block:(BFContinuationBlock)block - cancellationToken:(BFCancellationToken *)cancellationToken; - -/*! - Identical to continueWithBlock:, except that the block is only run - if this task did not produce a cancellation, error, or exception. - If it did, then the failure will be propagated to the returned - task. - @param block The block to be run once this task is complete. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (instancetype)continueWithSuccessBlock:(BFContinuationBlock)block; - -/*! - Identical to continueWithBlock:, except that the block is only run - if this task did not produce a cancellation, error, or exception. - If it did, then the failure will be propagated to the returned - task. - @param block The block to be run once this task is complete. - @param cancellationToken The cancellation token (optional). - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (instancetype)continueWithSuccessBlock:(BFContinuationBlock)block - cancellationToken:(BFCancellationToken *)cancellationToken; - -/*! - Identical to continueWithExecutor:withBlock:, except that the block - is only run if this task did not produce a cancellation, error, or - exception. If it did, then the failure will be propagated to the - returned task. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to be run once this task is complete. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (instancetype)continueWithExecutor:(BFExecutor *)executor - withSuccessBlock:(BFContinuationBlock)block; - -/*! - Identical to continueWithExecutor:withBlock:, except that the block - is only run if this task did not produce a cancellation, error, or - exception. If it did, then the failure will be propagated to the - returned task. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to be run once this task is complete. - @param cancellationToken The cancellation token (optional). - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (instancetype)continueWithExecutor:(BFExecutor *)executor - successBlock:(BFContinuationBlock)block - cancellationToken:(BFCancellationToken *)cancellationToken; - -/*! - Waits until this operation is completed. - This method is inefficient and consumes a thread resource while - it's running. It should be avoided. This method logs a warning - message if it is used on the main thread. - */ -- (void)waitUntilFinished; - -@end diff --git a/FoodbLog/Pods/Bolts/Bolts/Common/BFTask.m b/FoodbLog/Pods/Bolts/Bolts/Common/BFTask.m deleted file mode 100644 index 4985cfa..0000000 --- a/FoodbLog/Pods/Bolts/Bolts/Common/BFTask.m +++ /dev/null @@ -1,470 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * 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. - * - */ - -#import "BFTask.h" - -#import - -#import "Bolts.h" - -__attribute__ ((noinline)) void warnBlockingOperationOnMainThread() { - NSLog(@"Warning: A long-running operation is being executed on the main thread. \n" - " Break on warnBlockingOperationOnMainThread() to debug."); -} - -NSString *const BFTaskErrorDomain = @"bolts"; -NSString *const BFTaskMultipleExceptionsException = @"BFMultipleExceptionsException"; - -@interface BFTask () { - id _result; - NSError *_error; - NSException *_exception; -} - -@property (atomic, assign, readwrite, getter=isCancelled) BOOL cancelled; -@property (atomic, assign, readwrite, getter=isFaulted) BOOL faulted; -@property (atomic, assign, readwrite, getter=isCompleted) BOOL completed; - -@property (nonatomic, strong) NSObject *lock; -@property (nonatomic, strong) NSCondition *condition; -@property (nonatomic, strong) NSMutableArray *callbacks; - -@end - -@implementation BFTask - -#pragma mark - Initializer - -- (instancetype)init { - if (self = [super init]) { - _lock = [[NSObject alloc] init]; - _condition = [[NSCondition alloc] init]; - _callbacks = [NSMutableArray array]; - } - return self; -} - -#pragma mark - Task Class methods - -+ (instancetype)taskWithResult:(id)result { - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - tcs.result = result; - return tcs.task; -} - -+ (instancetype)taskWithError:(NSError *)error { - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - tcs.error = error; - return tcs.task; -} - -+ (instancetype)taskWithException:(NSException *)exception { - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - tcs.exception = exception; - return tcs.task; -} - -+ (instancetype)cancelledTask { - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - [tcs cancel]; - return tcs.task; -} - -+ (instancetype)taskForCompletionOfAllTasks:(NSArray *)tasks { - __block int32_t total = (int32_t)tasks.count; - if (total == 0) { - return [self taskWithResult:nil]; - } - - __block int32_t cancelled = 0; - NSObject *lock = [[NSObject alloc] init]; - NSMutableArray *errors = [NSMutableArray array]; - NSMutableArray *exceptions = [NSMutableArray array]; - - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - for (BFTask *task in tasks) { - [task continueWithBlock:^id(BFTask *task) { - if (task.exception) { - @synchronized (lock) { - [exceptions addObject:task.exception]; - } - } else if (task.error) { - @synchronized (lock) { - [errors addObject:task.error]; - } - } else if (task.cancelled) { - OSAtomicIncrement32(&cancelled); - } - - if (OSAtomicDecrement32(&total) == 0) { - if (exceptions.count > 0) { - if (exceptions.count == 1) { - tcs.exception = [exceptions firstObject]; - } else { - NSException *exception = - [NSException exceptionWithName:BFTaskMultipleExceptionsException - reason:@"There were multiple exceptions." - userInfo:@{ @"exceptions": exceptions }]; - tcs.exception = exception; - } - } else if (errors.count > 0) { - if (errors.count == 1) { - tcs.error = [errors firstObject]; - } else { - NSError *error = [NSError errorWithDomain:BFTaskErrorDomain - code:kBFMultipleErrorsError - userInfo:@{ @"errors": errors }]; - tcs.error = error; - } - } else if (cancelled > 0) { - [tcs cancel]; - } else { - tcs.result = nil; - } - } - return nil; - }]; - } - return tcs.task; -} - -+ (instancetype)taskForCompletionOfAllTasksWithResults:(NSArray *)tasks { - return [[self taskForCompletionOfAllTasks:tasks] continueWithSuccessBlock:^id(BFTask *task) { - return [tasks valueForKey:@"result"]; - }]; -} - -+ (instancetype)taskWithDelay:(int)millis { - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, millis * NSEC_PER_MSEC); - dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ - tcs.result = nil; - }); - return tcs.task; -} - -+ (instancetype)taskWithDelay:(int)millis - cancellationToken:(BFCancellationToken *)token { - if (token.cancellationRequested) { - return [BFTask cancelledTask]; - } - - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, millis * NSEC_PER_MSEC); - dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ - if (token.cancellationRequested) { - [tcs cancel]; - return; - } - tcs.result = nil; - }); - return tcs.task; -} - -+ (instancetype)taskFromExecutor:(BFExecutor *)executor - withBlock:(id (^)())block { - return [[self taskWithResult:nil] continueWithExecutor:executor withBlock:^id(BFTask *task) { - return block(); - }]; -} - -#pragma mark - Custom Setters/Getters - -- (id)result { - @synchronized(self.lock) { - return _result; - } -} - -- (void)setResult:(id)result { - if (![self trySetResult:result]) { - [NSException raise:NSInternalInconsistencyException - format:@"Cannot set the result on a completed task."]; - } -} - -- (BOOL)trySetResult:(id)result { - @synchronized(self.lock) { - if (self.completed) { - return NO; - } - self.completed = YES; - _result = result; - [self runContinuations]; - return YES; - } -} - -- (NSError *)error { - @synchronized(self.lock) { - return _error; - } -} - -- (void)setError:(NSError *)error { - if (![self trySetError:error]) { - [NSException raise:NSInternalInconsistencyException - format:@"Cannot set the error on a completed task."]; - } -} - -- (BOOL)trySetError:(NSError *)error { - @synchronized(self.lock) { - if (self.completed) { - return NO; - } - self.completed = YES; - self.faulted = YES; - _error = error; - [self runContinuations]; - return YES; - } -} - -- (NSException *)exception { - @synchronized(self.lock) { - return _exception; - } -} - -- (void)setException:(NSException *)exception { - if (![self trySetException:exception]) { - [NSException raise:NSInternalInconsistencyException - format:@"Cannot set the exception on a completed task."]; - } -} - -- (BOOL)trySetException:(NSException *)exception { - @synchronized(self.lock) { - if (self.completed) { - return NO; - } - self.completed = YES; - self.faulted = YES; - _exception = exception; - [self runContinuations]; - return YES; - } -} - -- (BOOL)isCancelled { - @synchronized(self.lock) { - return _cancelled; - } -} - -- (BOOL)isFaulted { - @synchronized(self.lock) { - return _faulted; - } -} - -- (void)cancel { - @synchronized(self.lock) { - if (![self trySetCancelled]) { - [NSException raise:NSInternalInconsistencyException - format:@"Cannot cancel a completed task."]; - } - } -} - -- (BOOL)trySetCancelled { - @synchronized(self.lock) { - if (self.completed) { - return NO; - } - self.completed = YES; - self.cancelled = YES; - [self runContinuations]; - return YES; - } -} - -- (BOOL)isCompleted { - @synchronized(self.lock) { - return _completed; - } -} - -- (void)setCompleted { - @synchronized(self.lock) { - _completed = YES; - } -} - -- (void)runContinuations { - @synchronized(self.lock) { - [self.condition lock]; - [self.condition broadcast]; - [self.condition unlock]; - for (void (^callback)() in self.callbacks) { - callback(); - } - [self.callbacks removeAllObjects]; - } -} - -#pragma mark - Chaining methods - -- (instancetype)continueWithExecutor:(BFExecutor *)executor - withBlock:(BFContinuationBlock)block { - return [self continueWithExecutor:executor block:block cancellationToken:nil]; -} - -- (instancetype)continueWithExecutor:(BFExecutor *)executor - block:(BFContinuationBlock)block - cancellationToken:(BFCancellationToken *)cancellationToken { - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - - // Capture all of the state that needs to used when the continuation is complete. - void (^wrappedBlock)() = ^() { - [executor execute:^{ - if (cancellationToken.cancellationRequested) { - [tcs cancel]; - return; - } - - id result = nil; - @try { - result = block(self); - } @catch (NSException *exception) { - tcs.exception = exception; - return; - } - - if ([result isKindOfClass:[BFTask class]]) { - - id (^setupWithTask) (BFTask *) = ^id(BFTask *task) { - if (cancellationToken.cancellationRequested || task.cancelled) { - [tcs cancel]; - } else if (task.exception) { - tcs.exception = task.exception; - } else if (task.error) { - tcs.error = task.error; - } else { - tcs.result = task.result; - } - return nil; - }; - - BFTask *resultTask = (BFTask *)result; - - if (resultTask.completed) { - setupWithTask(resultTask); - } else { - [resultTask continueWithBlock:setupWithTask]; - } - - } else { - tcs.result = result; - } - }]; - }; - - BOOL completed; - @synchronized(self.lock) { - completed = self.completed; - if (!completed) { - [self.callbacks addObject:[wrappedBlock copy]]; - } - } - if (completed) { - wrappedBlock(); - } - - return tcs.task; -} - -- (instancetype)continueWithBlock:(BFContinuationBlock)block { - return [self continueWithExecutor:[BFExecutor defaultExecutor] block:block cancellationToken:nil]; -} - -- (instancetype)continueWithBlock:(BFContinuationBlock)block - cancellationToken:(BFCancellationToken *)cancellationToken { - return [self continueWithExecutor:[BFExecutor defaultExecutor] block:block cancellationToken:cancellationToken]; -} - -- (instancetype)continueWithExecutor:(BFExecutor *)executor - withSuccessBlock:(BFContinuationBlock)block { - return [self continueWithExecutor:executor successBlock:block cancellationToken:nil]; -} - -- (instancetype)continueWithExecutor:(BFExecutor *)executor - successBlock:(BFContinuationBlock)block - cancellationToken:(BFCancellationToken *)cancellationToken { - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - - return [self continueWithExecutor:executor block:^id(BFTask *task) { - if (task.faulted || task.cancelled) { - return task; - } else { - return block(task); - } - } cancellationToken:cancellationToken]; -} - -- (instancetype)continueWithSuccessBlock:(BFContinuationBlock)block { - return [self continueWithExecutor:[BFExecutor defaultExecutor] successBlock:block cancellationToken:nil]; -} - -- (instancetype)continueWithSuccessBlock:(BFContinuationBlock)block - cancellationToken:(BFCancellationToken *)cancellationToken { - return [self continueWithExecutor:[BFExecutor defaultExecutor] successBlock:block cancellationToken:cancellationToken]; -} - -#pragma mark - Syncing Task (Avoid it) - -- (void)warnOperationOnMainThread { - warnBlockingOperationOnMainThread(); -} - -- (void)waitUntilFinished { - if ([NSThread isMainThread]) { - [self warnOperationOnMainThread]; - } - - @synchronized(self.lock) { - if (self.completed) { - return; - } - [self.condition lock]; - } - [self.condition wait]; - [self.condition unlock]; -} - -#pragma mark - NSObject - -- (NSString *)description { - // Acquire the data from the locked properties - BOOL completed; - BOOL cancelled; - BOOL faulted; - - @synchronized(self.lock) { - completed = self.completed; - cancelled = self.cancelled; - faulted = self.faulted; - } - - // Description string includes status information and, if available, the - // result since in some ways this is what a promise actually "is". - return [NSString stringWithFormat:@"<%@: %p; completed = %@; cancelled = %@; faulted = %@;%@>", - NSStringFromClass([self class]), - self, - completed ? @"YES" : @"NO", - cancelled ? @"YES" : @"NO", - faulted ? @"YES" : @"NO", - completed ? [NSString stringWithFormat:@" result:%@", _result] : @""]; -} - -@end diff --git a/FoodbLog/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h b/FoodbLog/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h deleted file mode 100644 index 23366c1..0000000 --- a/FoodbLog/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * 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. - * - */ - -#import - -#import - -@class BFTask BF_GENERIC(BFGenericType); - -/*! - A BFTaskCompletionSource represents the producer side of tasks. - It is a task that also has methods for changing the state of the - task by settings its completion values. - */ -@interface BFTaskCompletionSource BF_GENERIC(__covariant BFGenericType) : NSObject - -/*! - Creates a new unfinished task. - */ -+ (instancetype)taskCompletionSource; - -/*! - The task associated with this TaskCompletionSource. - */ -@property (nonatomic, strong, readonly) BFTask BF_GENERIC(BFGenericType) *task; - -/*! - Completes the task by setting the result. - Attempting to set this for a completed task will raise an exception. - @param result The result of the task. - */ -- (void)setResult:(BFGenericType)result; - -/*! - Completes the task by setting the error. - Attempting to set this for a completed task will raise an exception. - @param error The error for the task. - */ -- (void)setError:(NSError *)error; - -/*! - Completes the task by setting an exception. - Attempting to set this for a completed task will raise an exception. - @param exception The exception for the task. - */ -- (void)setException:(NSException *)exception; - -/*! - Completes the task by marking it as cancelled. - Attempting to set this for a completed task will raise an exception. - */ -- (void)cancel; - -/*! - Sets the result of the task if it wasn't already completed. - @returns whether the new value was set. - */ -- (BOOL)trySetResult:(BFGenericType)result; - -/*! - Sets the error of the task if it wasn't already completed. - @param error The error for the task. - @returns whether the new value was set. - */ -- (BOOL)trySetError:(NSError *)error; - -/*! - Sets the exception of the task if it wasn't already completed. - @param exception The exception for the task. - @returns whether the new value was set. - */ -- (BOOL)trySetException:(NSException *)exception; - -/*! - Sets the cancellation state of the task if it wasn't already completed. - @returns whether the new value was set. - */ -- (BOOL)trySetCancelled; - -@end diff --git a/FoodbLog/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m b/FoodbLog/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m deleted file mode 100644 index bd66835..0000000 --- a/FoodbLog/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * 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. - * - */ - -#import "BFTaskCompletionSource.h" - -#import "BFTask.h" - -@interface BFTaskCompletionSource () - -@property (nonatomic, strong, readwrite) BFTask *task; - -@end - -@interface BFTask (BFTaskCompletionSource) - -- (void)setResult:(id)result; -- (void)setError:(NSError *)error; -- (void)setException:(NSException *)exception; -- (void)cancel; -- (BOOL)trySetResult:(id)result; -- (BOOL)trySetError:(NSError *)error; -- (BOOL)trySetException:(NSException *)exception; -- (BOOL)trySetCancelled; - -@end - -@implementation BFTaskCompletionSource - -#pragma mark - Initializer - -+ (instancetype)taskCompletionSource { - return [[self alloc] init]; -} - -- (instancetype)init { - if (self = [super init]) { - _task = [[BFTask alloc] init]; - } - return self; -} - -#pragma mark - Custom Setters/Getters - -- (void)setResult:(id)result { - [self.task setResult:result]; -} - -- (void)setError:(NSError *)error { - [self.task setError:error]; -} - -- (void)setException:(NSException *)exception { - [self.task setException:exception]; -} - -- (void)cancel { - [self.task cancel]; -} - -- (BOOL)trySetResult:(id)result { - return [self.task trySetResult:result]; -} - -- (BOOL)trySetError:(NSError *)error { - return [self.task trySetError:error]; -} - -- (BOOL)trySetException:(NSException *)exception { - return [self.task trySetException:exception]; -} - -- (BOOL)trySetCancelled { - return [self.task trySetCancelled]; -} - -@end diff --git a/FoodbLog/Pods/Bolts/Bolts/Common/Bolts.h b/FoodbLog/Pods/Bolts/Bolts/Common/Bolts.h deleted file mode 100644 index 35d6c7c..0000000 --- a/FoodbLog/Pods/Bolts/Bolts/Common/Bolts.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * 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. - * - */ - -#import -#import -#import -#import -#import -#import -#import -#import - -#if __has_include() && TARGET_OS_IPHONE && !TARGET_OS_WATCH && !TARGET_OS_TV -#import -#import -#import -#import -#import -#import -#import -#import -#import -#endif - -/*! @abstract 80175001: There were multiple errors. */ -extern NSInteger const kBFMultipleErrorsError; - -@interface Bolts : NSObject - -/*! - Returns the version of the Bolts Framework as an NSString. - @returns The NSString representation of the current version. - */ -+ (NSString *)version; - -@end diff --git a/FoodbLog/Pods/Bolts/Bolts/Common/Bolts.m b/FoodbLog/Pods/Bolts/Bolts/Common/Bolts.m deleted file mode 100644 index 9a3e75c..0000000 --- a/FoodbLog/Pods/Bolts/Bolts/Common/Bolts.m +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * 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. - * - */ - -#import "Bolts.h" - -NSInteger const kBFMultipleErrorsError = 80175001; - -@implementation Bolts - -+ (NSString *)version { - return BOLTS_VERSION; -} - -@end diff --git a/FoodbLog/Pods/Bolts/Bolts/Common/BoltsVersion.h b/FoodbLog/Pods/Bolts/Bolts/Common/BoltsVersion.h deleted file mode 100644 index afb6fcb..0000000 --- a/FoodbLog/Pods/Bolts/Bolts/Common/BoltsVersion.h +++ /dev/null @@ -1 +0,0 @@ -#define BOLTS_VERSION @"1.3.0" diff --git a/FoodbLog/Pods/Bolts/LICENSE b/FoodbLog/Pods/Bolts/LICENSE deleted file mode 100644 index e1a5831..0000000 --- a/FoodbLog/Pods/Bolts/LICENSE +++ /dev/null @@ -1,30 +0,0 @@ -BSD License - -For Bolts software - -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name Facebook nor the names of its contributors may be used to - endorse or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/FoodbLog/Pods/Bolts/README.md b/FoodbLog/Pods/Bolts/README.md deleted file mode 100644 index 003a2ea..0000000 --- a/FoodbLog/Pods/Bolts/README.md +++ /dev/null @@ -1,682 +0,0 @@ -Bolts -============ -[![Build Status](http://img.shields.io/travis/BoltsFramework/Bolts-iOS/master.svg?style=flat)](https://travis-ci.org/BoltsFramework/Bolts-iOS) -[![Coverage Status](https://codecov.io/github/BoltsFramework/Bolts-iOS/coverage.svg?branch=master)](https://codecov.io/github/BoltsFramework/Bolts-iOS?branch=master) -[![Pod Version](http://img.shields.io/cocoapods/v/Bolts.svg?style=flat)](http://cocoadocs.org/docsets/Bolts/) -[![Pod Platform](http://img.shields.io/cocoapods/p/Bolts.svg?style=flat)](http://cocoadocs.org/docsets/Bolts/) -[![Pod License](http://img.shields.io/cocoapods/l/Bolts.svg?style=flat)](https://github.com/BoltsFramework/Bolts-iOS/blob/master/LICENSE) -[![Dependency Status](https://www.versioneye.com/objective-c/bolts/1.1.1/badge.svg?style=flat)](https://www.versioneye.com/objective-c/bolts) -[![Reference Status](https://www.versioneye.com/objective-c/bolts/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/bolts/references) - -Bolts is a collection of low-level libraries designed to make developing mobile -apps easier. Bolts was designed by Parse and Facebook for our own internal use, -and we have decided to open source these libraries to make them available to -others. Using these libraries does not require using any Parse services. Nor -do they require having a Parse or Facebook developer account. - -Bolts includes: - -* "Tasks", which make organization of complex asynchronous code more manageable. A task is kind of like a JavaScript Promise, but available for iOS and Android. -* An implementation of the [App Links protocol](http://www.applinks.org), helping you link to content in other apps and handle incoming deep-links. - -For more information, see the [Bolts iOS API Reference](http://boltsframework.github.io/docs/ios/). - -# Tasks - -To build a truly responsive iOS application, you must keep long-running operations off of the UI thread, and be careful to avoid blocking anything the UI thread might be waiting on. This means you will need to execute various operations in the background. To make this easier, we've added a class called `BFTask`. A task represents the result of an asynchronous operation. Typically, a `BFTask` is returned from an asynchronous function and gives the ability to continue processing the result of the task. When a task is returned from a function, it's already begun doing its job. A task is not tied to a particular threading model: it represents the work being done, not where it is executing. Tasks have many advantages over other methods of asynchronous programming, such as callbacks. `BFTask` is not a replacement for `NSOperation` or GCD. In fact, they play well together. But tasks do fill in some gaps that those technologies don't address. -* `BFTask` takes care of managing dependencies for you. Unlike using `NSOperation` for dependency management, you don't have to declare all dependencies before starting a `BFTask`. For example, imagine you need to save a set of objects and each one may or may not require saving child objects. With an `NSOperation`, you would normally have to create operations for each of the child saves ahead of time. But you don't always know before you start the work whether that's going to be necessary. That can make managing dependencies with `NSOperation` very painful. Even in the best case, you have to create your dependencies before the operations that depend on them, which results in code that appears in a different order than it executes. With `BFTask`, you can decide during your operation's work whether there will be subtasks and return the other task in just those cases. -* `BFTasks` release their dependencies. `NSOperation` strongly retains its dependencies, so if you have a queue of ordered operations and sequence them using dependencies, you have a leak, because every operation gets retained forever. `BFTasks` release their callbacks as soon as they are run, so everything cleans up after itself. This can reduce memory use, and simplify memory management. -* `BFTasks` keep track of the state of finished tasks: It tracks whether there was a returned value, the task was cancelled, or if an error occurred. It also has convenience methods for propagating errors. With `NSOperation`, you have to build all of this stuff yourself. -* `BFTasks` don't depend on any particular threading model. So it's easy to have some tasks perform their work with an operation queue, while others perform work using blocks with GCD. These tasks can depend on each other seamlessly. -* Performing several tasks in a row will not create nested "pyramid" code as you would get when using only callbacks. -* `BFTasks` are fully composable, allowing you to perform branching, parallelism, and complex error handling, without the spaghetti code of having many named callbacks. -* You can arrange task-based code in the order that it executes, rather than having to split your logic across scattered callback functions. - -For the examples in this doc, assume there are async versions of some common Parse methods, called `saveAsync:` and `findAsync:` which return a `Task`. In a later section, we'll show how to define these functions yourself. - -## The `continueWithBlock` Method - -Every `BFTask` has a method named `continueWithBlock:` which takes a continuation block. A continuation is a block that will be executed when the task is complete. You can then inspect the task to check if it was successful and to get its result. - -```objective-c -// Objective-C -[[self saveAsync:obj] continueWithBlock:^id(BFTask *task) { - if (task.isCancelled) { - // the save was cancelled. - } else if (task.error) { - // the save failed. - } else { - // the object was saved successfully. - PFObject *object = task.result; - } - return nil; -}]; -``` - -```swift -// Swift -self.saveAsync(obj).continueWithBlock { - (task: BFTask!) -> BFTask in - if task.isCancelled() { - // the save was cancelled. - } else if task.error() { - // the save failed. - } else { - // the object was saved successfully. - var object = task.result() as PFObject - } -} -``` - -BFTasks use Objective-C blocks, so the syntax should be pretty straightforward. Let's look closer at the types involved with an example. - -```objective-c -// Objective-C -/** - * Gets an NSString asynchronously. - */ -- (BFTask *)getStringAsync { - // Let's suppose getNumberAsync returns a BFTask whose result is an NSNumber. - return [[self getNumberAsync] continueWithBlock:^id(BFTask *task) { - // This continuation block takes the NSNumber BFTask as input, - // and provides an NSString as output. - - NSNumber *number = task.result; - return [NSString stringWithFormat:@"%@", number]; - )]; -} -``` - -```swift -// Swift -/** - * Gets an NSString asynchronously. - */ -func getStringAsync() -> BFTask { - //Let's suppose getNumberAsync returns a BFTask whose result is an NSNumber. - return self.getNumberAsync().continueWithBlock { - (task: BFTask!) -> NSString in - // This continuation block takes the NSNumber BFTask as input, - // and provides an NSString as output. - - let number = task.result() as NSNumber - return NSString(format:"%@", number) - } -} -``` - -In many cases, you only want to do more work if the previous task was successful, and propagate any errors or cancellations to be dealt with later. To do this, use the `continueWithSuccessBlock:` method instead of `continueWithBlock:`. - -```objective-c -// Objective-C -[[self saveAsync:obj] continueWithSuccessBlock:^id(BFTask *task) { - // the object was saved successfully. - return nil; -}]; -``` - -```swift -// Swift -self.saveAsync(obj).continueWithSuccessBlock { - (task: BFTask!) -> AnyObject! in - // the object was saved successfully. - return nil -} -``` - -## Chaining Tasks Together - -BFTasks are a little bit magical, in that they let you chain them without nesting. If you return a BFTask from `continueWithBlock:`, then the task returned by `continueWithBlock:` will not be considered finished until the new task returned from the new continuation block. This lets you perform multiple actions without incurring the pyramid code you would get with callbacks. Likewise, you can return a `BFTask` from `continueWithSuccessBlock:`. So, return a `BFTask` to do more asynchronous work. - -```objective-c -// Objective-C -PFQuery *query = [PFQuery queryWithClassName:@"Student"]; -[query orderByDescending:@"gpa"]; -[[[[[self findAsync:query] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *students = task.result; - PFObject *valedictorian = [students objectAtIndex:0]; - [valedictorian setObject:@YES forKey:@"valedictorian"]; - return [self saveAsync:valedictorian]; -}] continueWithSuccessBlock:^id(BFTask *task) { - PFObject *valedictorian = task.result; - return [self findAsync:query]; -}] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *students = task.result; - PFObject *salutatorian = [students objectAtIndex:1]; - [salutatorian setObject:@YES forKey:@"salutatorian"]; - return [self saveAsync:salutatorian]; -}] continueWithSuccessBlock:^id(BFTask *task) { - // Everything is done! - return nil; -}]; -``` - -```swift -// Swift -var query = PFQuery(className:"Student") -query.orderByDescending("gpa") -findAsync(query).continueWithSuccessBlock { - (task: BFTask!) -> BFTask in - let students = task.result() as NSArray - var valedictorian = students.objectAtIndex(0) as PFObject - valedictorian["valedictorian"] = true - return self.saveAsync(valedictorian) -}.continueWithSuccessBlock { - (task: BFTask!) -> BFTask in - var valedictorian = task.result() as PFObject - return self.findAsync(query) -}.continueWithSuccessBlock { - (task: BFTask!) -> BFTask in - let students = task.result() as NSArray - var salutatorian = students.objectAtIndex(1) as PFObject - salutatorian["salutatorian"] = true - return self.saveAsync(salutatorian) -}.continueWithSuccessBlock { - (task: BFTask!) -> AnyObject! in - // Everything is done! - return nil -} -``` - -## Error Handling - -By carefully choosing whether to call `continueWithBlock:` or `continueWithSuccessBlock:`, you can control how errors are propagated in your application. Using `continueWithBlock:` lets you handle errors by transforming them or dealing with them. You can think of failed tasks kind of like throwing an exception. In fact, if you throw an exception inside a continuation, the resulting task will be faulted with that exception. - -```objective-c -// Objective-C -PFQuery *query = [PFQuery queryWithClassName:@"Student"]; -[query orderByDescending:@"gpa"]; -[[[[[self findAsync:query] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *students = task.result; - PFObject *valedictorian = [students objectAtIndex:0]; - [valedictorian setObject:@YES forKey:@"valedictorian"]; - // Force this callback to fail. - return [BFTask taskWithError:[NSError errorWithDomain:@"example.com" - code:-1 - userInfo:nil]]; -}] continueWithSuccessBlock:^id(BFTask *task) { - // Now this continuation will be skipped. - PFQuery *valedictorian = task.result; - return [self findAsync:query]; -}] continueWithBlock:^id(BFTask *task) { - if (task.error) { - // This error handler WILL be called. - // The error will be the NSError returned above. - // Let's handle the error by returning a new value. - // The task will be completed with nil as its value. - return nil; - } - // This will also be skipped. - NSArray *students = task.result; - PFObject *salutatorian = [students objectAtIndex:1]; - [salutatorian setObject:@YES forKey:@"salutatorian"]; - return [self saveAsync:salutatorian]; -}] continueWithSuccessBlock:^id(BFTask *task) { - // Everything is done! This gets called. - // The task's result is nil. - return nil; -}]; -``` - -```swift -// Swift -var query = PFQuery(className:"Student") -query.orderByDescending("gpa") -findAsync(query).continueWithSuccessBlock { - (task: BFTask!) -> BFTask in - let students = task.result() as NSArray - var valedictorian = students.objectAtIndex(0) as PFObject - valedictorian["valedictorian"] = true - //Force this callback to fail. - return BFTask(error:NSError(domain:"example.com", - code:-1, userInfo: nil)) -}.continueWithSuccessBlock { - (task: BFTask!) -> AnyObject! in - //Now this continuation will be skipped. - var valedictorian = task.result() as PFObject - return self.findAsync(query) -}.continueWithBlock { - (task: BFTask!) -> AnyObject! in - if task.error() { - // This error handler WILL be called. - // The error will be the NSError returned above. - // Let's handle the error by returning a new value. - // The task will be completed with nil as its value. - return nil - } - // This will also be skipped. - let students = task.result() as NSArray - var salutatorian = students.objectAtIndex(1) as PFObject - salutatorian["salutatorian"] = true - return self.saveAsync(salutatorian) -}.continueWithSuccessBlock { - (task: BFTask!) -> AnyObject! in - // Everything is done! This gets called. - // The tasks result is nil. - return nil -} -``` - -It's often convenient to have a long chain of success callbacks with only one error handler at the end. - -## Creating Tasks - -When you're getting started, you can just use the tasks returned from methods like `findAsync:` or `saveAsync:`. However, for more advanced scenarios, you may want to make your own tasks. To do that, you create a `BFTaskCompletionSource`. This object will let you create a new `BFTask`, and control whether it gets marked as finished or cancelled. After you create a `BFTask`, you'll need to call `setResult:`, `setError:`, or `cancel` to trigger its continuations. - -```objective-c -// Objective-C -- (BFTask *)successAsync { - BFTaskCompletionSource *successful = [BFTaskCompletionSource taskCompletionSource]; - [successful setResult:@"The good result."]; - return successful.task; -} - -- (BFTask *)failAsync { - BFTaskCompletionSource *failed = [BFTaskCompletionSource taskCompletionSource]; - [failed setError:[NSError errorWithDomain:@"example.com" code:-1 userInfo:nil]]; - return failed.task; -} -``` - -```swift -// Swift -func successAsync() -> BFTask { - var successful = BFTaskCompletionSource() - successful.setResult("The good result.") - return successful.task -} - -func failAsync() -> BFTask { - var failed = BFTaskCompletionSource() - failed.setError(NSError(domain:"example.com", code:-1, userInfo:nil)) - return failed.task -} -``` - -If you know the result of a task at the time it is created, there are some convenience methods you can use. - -```objective-c -// Objective-C -BFTask *successful = [BFTask taskWithResult:@"The good result."]; - -BFTask *failed = [BFTask taskWithError:anError]; -``` - -```swift -// Swift -let successful = BFTask(result:"The good result") - -let failed = BFTask(error:anError) -``` - -## Creating Async Methods - -With these tools, it's easy to make your own asynchronous functions that return tasks. For example, you can make a task-based version of `fetchAsync:` easily. - -```objective-c -// Objective-C -- (BFTask *) fetchAsync:(PFObject *)object { - BFTaskCompletionSource *task = [BFTaskCompletionSource taskCompletionSource]; - [object fetchInBackgroundWithBlock:^(PFObject *object, NSError *error) { - if (!error) { - [task setResult:object]; - } else { - [task setError:error]; - } - }]; - return task.task; -} -``` - -```swift -// Swift -func fetchAsync(object: PFObject) -> BFTask { - var task = BFTaskCompletionSource() - object.fetchInBackgroundWithBlock { - (object: PFObject?, error: NSError?) -> Void in - if error == nil { - task.setResult(object) - } else { - task.setError(error) - } - } - return task.task -} - -``` - -It's similarly easy to create `saveAsync:`, `findAsync:` or `deleteAsync:`. - -## Tasks in Series - -`BFTasks` are convenient when you want to do a series of tasks in a row, each one waiting for the previous to finish. For example, imagine you want to delete all of the comments on your blog. - -```objective-c -// Objective-C -PFQuery *query = [PFQuery queryWithClassName:@"Comments"]; -[query whereKey:@"post" equalTo:@123]; - -[[[self findAsync:query] continueWithBlock:^id(BFTask *task) { - NSArray *results = task.result; - - // Create a trivial completed task as a base case. - BFTask *task = [BFTask taskWithResult:nil]; - for (PFObject *result in results) { - // For each item, extend the task with a function to delete the item. - task = [task continueWithBlock:^id(BFTask *task) { - // Return a task that will be marked as completed when the delete is finished. - return [self deleteAsync:result]; - }]; - } - return task; -}] continueWithBlock:^id(BFTask *task) { - // Every comment was deleted. - return nil; -}]; -``` - -```swift -// Swift -var query = PFQuery(className:"Comments") -query.whereKey("post", equalTo:123) -findAsync(query).continueWithBlock { - (task: BFTask!) -> BFTask in - let results = task.result() as NSArray - - // Create a trivial completed task as a base case. - let task = BFTask(result:nil) - for result : PFObject in results { - // For each item, extend the task with a function to delete the item. - task = task.continueWithBlock { - (task: BFTask!) -> BFTask in - return self.deleteAsync(result) - } - } - return task -}.continueWithBlock { - (task: BFTask!) -> AnyObject! in - // Every comment was deleted. - return nil -} -``` - -## Tasks in Parallel - -You can also perform several tasks in parallel, using the `taskForCompletionOfAllTasks:` method. You can start multiple operations at once, and use `taskForCompletionOfAllTasks:` to create a new task that will be marked as completed when all of its input tasks are completed. The new task will be successful only if all of the passed-in tasks succeed. Performing operations in parallel will be faster than doing them serially, but may consume more system resources and bandwidth. - -```objective-c -// Objective-C -PFQuery *query = [PFQuery queryWithClassName:@"Comments"]; -[query whereKey:@"post" equalTo:@123]; - -[[[self findAsync:query] continueWithBlock:^id(BFTask *results) { - // Collect one task for each delete into an array. - NSMutableArray *tasks = [NSMutableArray array]; - for (PFObject *result in results) { - // Start this delete immediately and add its task to the list. - [tasks addObject:[self deleteAsync:result]]; - } - // Return a new task that will be marked as completed when all of the deletes are - // finished. - return [BFTask taskForCompletionOfAllTasks:tasks]; -}] continueWithBlock:^id(BFTask *task) { - // Every comment was deleted. - return nil; -}]; -``` - -```swift -// Swift -var query = PFQuery(className:"Comments") -query.whereKey("post", equalTo:123) - -findAsync(query).continueWithBlock { - (task: BFTask!) -> BFTask in - // Collect one task for each delete into an array. - var tasks = NSMutableArray.array() - var results = task.result() as NSArray - for result : PFObject! in results { - // Start this delete immediately and add its task to the list. - tasks.addObject(self.deleteAsync(result)) - } - // Return a new task that will be marked as completed when all of the deletes - // are finished. - return BFTask(forCompletionOfAllTasks:tasks) -}.continueWithBlock { - (task: BFTask!) -> AnyObject! in - // Every comment was deleted. - return nil -} -``` - -## Task Executors - -Both `continueWithBlock:` and `continueWithSuccessBlock:` methods have another form that takes an instance of `BFExecutor`. These are `continueWithExecutor:withBlock:` and `continueWithExecutor:withSuccessBlock:`. These methods allow you to control how the continuation is executed. The default executor will dispatch to GCD, but you can provide your own executor to schedule work onto a different thread. For example, if you want to continue with work on the UI thread: - -```objective-c -// Create a BFExecutor that uses the main thread. -BFExecutor *myExecutor = [BFExecutor executorWithBlock:^void(void(^block)()) { - dispatch_async(dispatch_get_main_queue(), block); -}]; - -// And use the Main Thread Executor like this. The executor applies only to the new -// continuation being passed into continueWithBlock. -[[self fetchAsync:object] continueWithExecutor:myExecutor withBlock:^id(BFTask *task) { - myTextView.text = [object objectForKey:@"name"]; -}]; -``` - -For common cases, such as dispatching on the main thread, we have provided default implementations of `BFExecutor`. These include `defaultExecutor`, `immediateExecutor`, `mainThreadExecutor`, `executorWithDispatchQueue:`, and `executorWithOperationQueue:`. For example: - -```objective-c -// Continue on the Main Thread, using a built-in executor. -[[self fetchAsync:object] continueWithExecutor:[BFExecutor mainThreadExecutor] withBlock:^id(BFTask *task) { - myTextView.text = [object objectForKey:@"name"]; -}]; -``` - -## Task Cancellation - -It's generally bad design to keep track of the `BFTaskCompletionSource` for cancellation. A better model is to create a "cancellation token" at the top level, and pass that to each async function that you want to be part of the same "cancelable operation". Then, in your continuation blocks, you can check whether the cancellation token has been cancelled and bail out early by returning a `[BFTask cancelledTask]`. For example: - -```objective-c -- (void)doSomethingComplicatedAsync:(MYCancellationToken *)cancellationToken { - [[self doSomethingAsync:cancellationToken] continueWithBlock:^{ - if (cancellationToken.isCancelled) { - return [BFTask cancelledTask]; - } - // Do something that takes a while. - return result; - }]; -} - -// Somewhere else. -MYCancellationToken *cancellationToken = [[MYCancellationToken alloc] init]; -[obj doSomethingComplicatedAsync:cancellationToken]; - -// When you get bored... -[cancellationToken cancel]; -``` - -**Note:** The cancellation token implementation should be thread-safe. -We are likely to add some concept like this to Bolts at some point in the future. - -# App Links - -[App Links](http://www.applinks.org) provide a cross-platform mechanism that allows a developer to define and publish a deep-linking scheme for their content, allowing other apps to link directly to an experience optimized for the device they are running on. Whether you are building an app that receives incoming links or one that may link out to other apps' content, Bolts provides tools to simplify implementation of the [App Links protocol](http://www.applinks.org/documentation). - -## Handling an App Link - -The most common case will be making your app receive App Links. In-linking will allow your users to quickly access the richest, most native-feeling presentation of linked content on their devices. Bolts makes it easy to handle an inbound App Link (as well as general inbound deep-links) by providing utilities for processing an incoming URL. - -For example, you can use the `BFURL` utility class to parse an incoming URL in your `AppDelegate`: - -```objective-c -- (BOOL)application:(UIApplication *)application - openURL:(NSURL *)url - sourceApplication:(NSString *)sourceApplication - annotation:(id)annotation { - BFURL *parsedUrl = [BFURL URLWithInboundURL:url sourceApplication:sourceApplication]; - - // Use the target URL from the App Link to locate content. - if ([parsedUrl.targetURL.pathComponents[1] isEqualToString:@"profiles"]) { - // Open a profile viewer. - } - - // You can also check the query string easily. - NSString *query = parsedUrl.targetQueryParameters[@"query"]; - - // Apps that have existing deep-linking support and map their App Links to existing - // deep-linking functionality may instead want to perform these operations on the input URL. - // Use the target URL from the App Link to locate content. - if ([parsedUrl.inputURL.pathComponents[1] isEqualToString:@"profiles"]) { - // Open a profile viewer. - } - - // You can also check the query string easily. - NSString *query = parsedUrl.inputQueryParameters[@"query"]; - - // Apps can easily check the Extras and App Link data from the App Link as well. - NSString *fbAccessToken = parsedUrl.appLinkExtras[@"fb_access_token"]; - NSDictionary *refererData = parsedUrl.appLinkExtras[@"referer"]; -} -``` - -## Navigating to a URL - -Following an App Link allows your app to provide the best user experience (as defined by the receiving app) when a user navigates to a link. Bolts makes this process simple, automating the steps required to follow a link: - -1. Resolve the App Link by getting the App Link metadata from the HTML at the URL specified. -2. Step through App Link targets relevant to the device being used, checking whether the app that can handle the target is present on the device. -3. If an app is present, build a URL with the appropriate al_applink_data specified and navigate to that URL. -4. Otherwise, open the browser with the original URL specified. - -In the simplest case, it takes just one line of code to navigate to a URL that may have an App Link: - -```objective-c -[BFAppLinkNavigation navigateToURLInBackground:url]; -``` - -### Adding App and Navigation Data - -Under most circumstances, the data that will need to be passed along to an app during a navigation will be contained in the URL itself, so that whether or not the app is actually installed on the device, users are taken to the correct content. Occasionally, however, apps will want to pass along data that is relevant for app-to-app navigation, or will want to augment the App Link protocol with information that might be used by the app to adjust how the app should behave (e.g. showing a link back to the referring app). - -If you want to take advantage of these features, you can break apart the navigation process. First, you must have an App Link to which you wish to navigate: - -```objective-c -[[BFAppLinkNavigation resolveAppLinkInBackground:url] continueWithSuccessBlock:^id(BFTask *task) { - BFAppLink *link = task.result; -}]; -``` - -Then, you can build an App Link request with any additional data you would like and navigate: - -```objective-c -BFAppLinkNavigation *navigation = [BFAppLinkNavigation navigationWithAppLink:link - extras:@{ @"access_token": @"t0kEn" } - appLinkData:@{ @"ref": @"12345" }]; -NSError *error = nil; -[navigation navigate:&error]; -``` - -### Resolving App Link Metadata - -Bolts allows for custom App Link resolution, which may be used as a performance optimization (e.g. caching the metadata) or as a mechanism to allow developers to use a centralized index for obtaining App Link metadata. A custom App Link resolver just needs to be able to take a URL and return a `BFAppLink` containing the ordered list of `BFAppLinkTarget`s that are applicable for this device. Bolts provides one of these out of the box that performs this resolution on the device using a hidden UIWebView. - -You can use any resolver that implements the `BFAppLinkResolving` protocol by using one of the overloads on `BFAppLinkNavigation`: - -```objective-c -[BFAppLinkNavigation navigateToURLInBackground:url - resolver:resolver]; -``` - -Alternatively, a you can swap out the default resolver to be used by the built-in APIs: - -```objective-c -[BFAppLinkNavigation setDefaultResolver:resolver]; -[BFAppLinkNavigation navigateToURLInBackground:url]; -``` - -## App Link Return-to-Referer View - -When an application is opened via an App Link, a banner allowing the user to "Touch to return to " should be displayed. The `BFAppLinkReturnToRefererView` provides this functionality. It will take an incoming App Link and parse the referer information to display the appropriate calling app name. - -```objective-c -- (void)viewDidLoad { - [super viewDidLoad]; - - // Perform other view initialization. - - self.returnToRefererController = [[BFAppLinkReturnToRefererController alloc] init]; - - // self.returnToRefererView is a BFAppLinkReturnToRefererView. - // You may initialize the view either by loading it from a NIB or programmatically. - self.returnToRefererController.view = self.returnToRefererView; - - // If you have a UINavigationController in the view, then the bar must be shown above it. - [self.returnToRefererController] -} -``` - -The following code assumes that the view controller has an `openedAppLinkURL` `NSURL` property that has already been populated with the URL used to open the app. You can then do something like this to show the view: - -```objective-c -- (void)viewWillAppear { - [super viewWillAppear]; - - // Show only if you have a back AppLink. - [self.returnToRefererController showViewForRefererURL:self.openedAppLinkURL]; -} -``` - -In a navigaton-controller view hierarchy, the banner should be displayed above the navigation bar, and `BFAppLinkReturnToRefererController` provides an `initForDisplayAboveNavController` method to assist with this. - -## Analytics - -Bolts introduces Measurement Event. App Links posts three different Measurement Event notifications to the application, which can be caught and integrated with existing analytics components in your application. - -* `al_nav_out` — Raised when your app switches out to an App Links URL. -* `al_nav_in` — Raised when your app opens an incoming App Links URL. -* `al_ref_back_out` — Raised when your app returns back the referrer app using the built-in top navigation back bar view. - -### Listen for App Links Measurement Events - -There are other analytics tools that are integrated with Bolts' App Links events, but you can also listen for these events yourself: - -```objective-c -[[NSNotificationCenter defaultCenter] addObserverForName:BFMeasurementEventNotificationName object:nil queue:nil usingBlock:^(NSNotification *note) { - NSDictionary *event = note.userInfo; - NSDictionary *eventData = event[BFMeasurementEventArgsKey]; - // Integrate to your logging/analytics component. -}]; -``` - -### App Links Event Fields - -App Links Measurement Events sends additional information from App Links Intents in flattened string key value pairs. Here are some of the useful fields for the three events. - -* `al_nav_in` - * `inputURL`: the URL that opens the app. - * `inputURLScheme`: the scheme of `inputURL`. - * `refererURL`: the URL that the referrer app added into `al_applink_data`: `referer_app_link`. - * `refererAppName`: the app name that the referrer app added to `al_applink_data`: `referer_app_link`. - * `sourceApplication`: the bundle of referrer application. - * `targetURL`: the `target_url` field in `al_applink_data`. - * `version`: App Links API version. - -* `al_nav_out` / `al_ref_back_out` - * `outputURL`: the URL used to open the other app (or browser). If there is an eligible app to open, this will be the custom scheme url/intent in `al_applink_data`. - * `outputURLScheme`: the scheme of `outputURL`. - * `sourceURL`: the URL of the page hosting App Links meta tags. - * `sourceURLHost`: the hostname of `sourceURL`. - * `success`: `“1”` to indicate success in opening the App Link in another app or browser; `“0”` to indicate failure to open the App Link. - * `type`: `“app”` for open in app, `“web”` for open in browser; `“fail”` when the success field is `“0”`. - * `version`: App Links API version. - -# Installation - -You can download the latest framework files from our [Releases page](https://github.com/BoltsFramework/Bolts-iOS/releases). - -Bolts is also available through [CocoaPods](http://cocoapods.org). To install it simply add the following line to your Podfile: - - pod 'Bolts' diff --git a/FoodbLog/Pods/ChameleonFramework/LICENSE.md b/FoodbLog/Pods/ChameleonFramework/LICENSE.md deleted file mode 100755 index 7fd117d..0000000 --- a/FoodbLog/Pods/ChameleonFramework/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -##The MIT License (MIT) - -> Copyright (c) 2014-2015 Vicc Alexander - -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: - -> The above copyright notice and this permission notice shall be included in all -> copies or substantial portions of the Software. - -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -> SOFTWARE. diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/Chameleon.h b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/Chameleon.h deleted file mode 100644 index 638c0f1..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/Chameleon.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// Chameleon.h -// Chameleon -// -// Created by Vicc Alexander on 9/24/15. -// Copyright © 2015 Vicc Alexander. All rights reserved. -// - -#import - -//! Project version number for Chameleon. -FOUNDATION_EXPORT double ChameleonVersionNumber; - -//! Project version string for Chameleon. -FOUNDATION_EXPORT const unsigned char ChameleonVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import - -#import "Chameleon_.h" - -#import "UIButton+Chameleon.h" -#import "UILabel+Chameleon.h" -#import "UIColor+ChameleonPrivate.h" -#import "UIImage+ChameleonPrivate.h" -#import "UIView+ChameleonPrivate.h" - -#import "NSArray+Chameleon.h" -#import "UIColor+Chameleon.h" -#import "UINavigationController+Chameleon.h" -#import "UIViewController+Chameleon.h" diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/ChameleonConstants.h b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/ChameleonConstants.h deleted file mode 100644 index 9c9c345..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/ChameleonConstants.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// Constants.h -// Chameleon -// -// Created by Vicc Alexander on 6/4/15. -// Copyright (c) 2015 Vicc Alexander. All rights reserved. -// - -#import -#import - -/** - * A contrasting status bar, intended for use on any backgrounds. - * - * @since 2.0 - */ -extern const UIStatusBarStyle UIStatusBarStyleContrast; - -@interface ChameleonConstants : NSObject - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/ChameleonConstants.m b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/ChameleonConstants.m deleted file mode 100644 index 02cdc7f..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/ChameleonConstants.m +++ /dev/null @@ -1,15 +0,0 @@ -// -// Constants.m -// Chameleon -// -// Created by Vicc Alexander on 6/4/15. -// Copyright (c) 2015 Vicc Alexander. All rights reserved. -// - -#import "ChameleonConstants.h" - -const UIStatusBarStyle UIStatusBarStyleContrast = 100; - -@implementation ChameleonConstants - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/ChameleonEnums.h b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/ChameleonEnums.h deleted file mode 100644 index 0a9fed3..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/ChameleonEnums.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// ChameleonEnums.h -// Chameleon -// -// Created by Vicc Alexander on 6/8/15. -// Copyright (c) 2015 Vicc Alexander. All rights reserved. -// - -#ifndef Chameleon_ChameleonEnums_h -#define Chameleon_ChameleonEnums_h - -/** - * Specifies how text-based UI elements and other content such as switch knobs, should be colored. - * - * @since 2.0 - */ - -typedef NS_ENUM(NSUInteger, UIContentStyle) { - /** - * Automatically chooses and colors text-based elements with the shade that best contrasts its @c backgroundColor. - * - * @since 2.0 - */ - UIContentStyleContrast, - /** - * Colors text-based elements using a light shade. - * - * @since 2.0 - */ - UIContentStyleLight, - /** - * Colors text-based elements using a light shade. - * - * @since 2.0 - */ - UIContentStyleDark -}; - -#endif diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/ChameleonMacros.h b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/ChameleonMacros.h deleted file mode 100755 index 2334dde..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/ChameleonMacros.h +++ /dev/null @@ -1,126 +0,0 @@ - -// ChameleonMacros.h - -/* - - The MIT License (MIT) - - Copyright (c) 2014-2015 Vicc Alexander. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - */ - -#import "UIColor+Chameleon.h" - -#pragma mark - Light Shades Shorthand - -#define FlatBlack [UIColor flatBlackColor] -#define FlatBlue [UIColor flatBlueColor] -#define FlatBrown [UIColor flatBrownColor] -#define FlatCoffee [UIColor flatCoffeeColor] -#define FlatForestGreen [UIColor flatForestGreenColor] -#define FlatGray [UIColor flatGrayColor] -#define FlatGreen [UIColor flatGreenColor] -#define FlatLime [UIColor flatLimeColor] -#define FlatMagenta [UIColor flatMagentaColor] -#define FlatMaroon [UIColor flatMaroonColor] -#define FlatMint [UIColor flatMintColor] -#define FlatNavyBlue [UIColor flatNavyBlueColor] -#define FlatOrange [UIColor flatOrangeColor] -#define FlatPink [UIColor flatPinkColor] -#define FlatPlum [UIColor flatPlumColor] -#define FlatPowderBlue [UIColor flatPowderBlueColor] -#define FlatPurple [UIColor flatPurpleColor] -#define FlatRed [UIColor flatRedColor] -#define FlatSand [UIColor flatSandColor] -#define FlatSkyBlue [UIColor flatSkyBlueColor] -#define FlatTeal [UIColor flatTealColor] -#define FlatWatermelon [UIColor flatWatermelonColor] -#define FlatWhite [UIColor flatWhiteColor] -#define FlatYellow [UIColor flatYellowColor] - -// --------------------------------------------------- - -#pragma mark - Dark Shades Shorthand - -#define FlatBlackDark [UIColor flatBlackColorDark] -#define FlatBlueDark [UIColor flatBlueColorDark] -#define FlatBrownDark [UIColor flatBrownColorDark] -#define FlatCoffeeDark [UIColor flatCoffeeColorDark] -#define FlatForestGreenDark [UIColor flatForestGreenColorDark] -#define FlatGrayDark [UIColor flatGrayColorDark] -#define FlatGreenDark [UIColor flatGreenColorDark] -#define FlatLimeDark [UIColor flatLimeColorDark] -#define FlatMagentaDark [UIColor flatMagentaColorDark] -#define FlatMaroonDark [UIColor flatMaroonColorDark] -#define FlatMintDark [UIColor flatMintColorDark] -#define FlatNavyBlueDark [UIColor flatNavyBlueColorDark] -#define FlatOrangeDark [UIColor flatOrangeColorDark] -#define FlatPinkDark [UIColor flatPinkColorDark] -#define FlatPlumDark [UIColor flatPlumColorDark] -#define FlatPowderBlueDark [UIColor flatPowderBlueColorDark] -#define FlatPurpleDark [UIColor flatPurpleColorDark] -#define FlatRedDark [UIColor flatRedColorDark] -#define FlatSandDark [UIColor flatSandColorDark] -#define FlatSkyBlueDark [UIColor flatSkyBlueColorDark] -#define FlatTealDark [UIColor flatTealColorDark] -#define FlatWatermelonDark [UIColor flatWatermelonColorDark] -#define FlatWhiteDark [UIColor flatWhiteColorDark] -#define FlatYellowDark [UIColor flatYellowColorDark] - -// --------------------------------------------------- - -#pragma mark - Special Colors Shorthand - -#define RandomFlatColor [UIColor randomFlatColor] -#define ClearColor [UIColor clearColor] - -// --------------------------------------------------- - -#pragma mark - UIColor Methods Shorthand - -#define AverageColorFromImage(image) [UIColor colorWithAverageColorFromImage:image] -#define AverageColorFromImageWithAlpha(image, alpha) [UIColor colorWithAverageColorFromImage:image withAlpha:alpha] - -#define RandomFlatColorWithShade(shade) [UIColor colorWithRandomFlatColorOfShadeStyle:shade] -#define RandomFlatColorWithShadeAndAlpha(shade, alpha) [UIColor colorWithRandomFlatColorOfShadeStyle:shade withAlpha:alpha] - -#define ComplementaryFlatColor(color) [UIColor colorWithComplementaryFlatColorOf:color] -#define ComplementaryFlatColorWithAlpha(color, alpha) [UIColor colorWithComplementaryFlatColorOf:color withAlpha:alpha] - -#define ContrastColor(backgroundColor, returnFlat) [UIColor colorWithContrastingBlackOrWhiteColorOn:backgroundColor isFlat:returnFlat] -#define ContrastColorWithAlpha(backgroundColor, returnFlat, alpha) [UIColor colorWithContrastingBlackOrWhiteColorOn:backgroundColor isFlat:returnFlat alpha:alpha] - -#define GradientColor(gradientStyle, frame, colors) [UIColor colorWithGradientStyle:gradientStyle withFrame:frame andColors:colors] - -#define HexColor(hexString) [UIColor colorWithHexString:hexString] -#define HexColorWithAlpha(hexString, alpha) [UIColor colorWithHexString:hexString withAlpha:alpha] - -#define RandomFlatColorWithShade(shade) [UIColor colorWithRandomFlatColorOfShadeStyle:shade] -#define RandomFlatColorWithShadeAndAlpha(shade, alpha) [UIColor colorWithRandomFlatColorOfShadeStyle:shade withAlpha:alpha] - -// --------------------------------------------------- - -#pragma mark - NSArray Shorthand - -#define ColorsWithScheme(colorSchemeType, color, isFlatScheme) [NSArray arrayOfColorsWithColorScheme:colorSchemeType usingColor:color withFlatScheme:isFlatScheme] -#define ColorsFromImage(image, isFlatScheme) [NSArray arrayOfColorsFromImage:image withFlatScheme:isFlatScheme] - - diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/Chameleon_.h b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/Chameleon_.h deleted file mode 100644 index d492a47..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/Chameleon_.h +++ /dev/null @@ -1,66 +0,0 @@ -// -// ChameleonInternal.h -// Chameleon -// -// Created by Vicc Alexander on 6/4/15. -// Copyright (c) 2015 Vicc Alexander. All rights reserved. -// - -#import -#import - -#import "ChameleonConstants.h" -#import "ChameleonEnums.h" -#import "ChameleonMacros.h" - -#import "NSArray+Chameleon.h" -#import "UIColor+Chameleon.h" -#import "UINavigationController+Chameleon.h" -#import "UIViewController+Chameleon.h" - -@interface Chameleon : NSObject - -#pragma mark - Global Theming - -/** - * Set a global theme using a primary color and the specified content style. - * - * @param primaryColor The primary color to theme all controllers with. - * @param contentStyle The contentStyle. - * - * @note By default the secondary color will be a darker shade of the specified primary color. - * - * @since 2.0 - */ -+ (void)setGlobalThemeUsingPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle; - -/** - * Set a global theme using a primary color, secondary color, and the specified content style. - * - * @param primaryColor The primary color to theme all controllers with. - * @param secondaryColor The secondary color to theme all controllers with. - * @param contentStyle The contentStyle. - * - * @since 2.0 - */ -+ (void)setGlobalThemeUsingPrimaryColor:(UIColor *)primaryColor - withSecondaryColor:(UIColor *)secondaryColor - andContentStyle:(UIContentStyle)contentStyle; - -/** - * Set a global theme using a primary color, secondary color, font name, and the specified content style. - * - * @param primaryColor The primary color to theme all controllers with. - * @param secondaryColor The secondary color to theme all controllers with. - * @param fontName The default font for all text-based UI elements. - * @param contentStyle The contentStyle. - * - * @since 2.0 - */ -+ (void)setGlobalThemeUsingPrimaryColor:(UIColor *)primaryColor - withSecondaryColor:(UIColor *)secondaryColor - usingFontName:(NSString *)fontName - andContentStyle:(UIContentStyle)contentStyle; - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/Chameleon_.m b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/Chameleon_.m deleted file mode 100644 index a37b1ed..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/Chameleon_.m +++ /dev/null @@ -1,756 +0,0 @@ -// -// ChameleonInternal.m -// Chameleon -// -// Created by Vicc Alexander on 6/4/15. -// Copyright (c) 2015 Vicc Alexander. All rights reserved. -// - -#import "Chameleon_.h" -#import "UILabel+Chameleon.h" -#import "UIButton+Chameleon.h" - -@implementation Chameleon - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - -+ (void)setGlobalThemeUsingPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle { - - if (contentStyle == UIContentStyleContrast) { - - if ([ContrastColor(primaryColor, YES) isEqual:FlatWhite]) { - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; - } else { - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; - } - - } else if (contentStyle == UIContentStyleLight) { - - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; - - } else { - - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; - } - - [[self class] customizeBarButtonItemWithPrimaryColor:primaryColor contentStyle:contentStyle]; - [[self class] customizeButtonWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeNavigationBarWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizePageControlWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeProgressViewWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSearchBarWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSegmentedControlWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSliderWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeStepperWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSwitchWithPrimaryColor:primaryColor]; - [[self class] customizeTabBarWithBarTintColor:FlatWhite andTintColor:primaryColor]; - [[self class] customizeToolbarWithPrimaryColor:primaryColor withContentStyle:contentStyle]; -} - - -+ (void)setGlobalThemeUsingPrimaryColor:(UIColor *)primaryColor - withSecondaryColor:(UIColor *)secondaryColor - andContentStyle:(UIContentStyle)contentStyle { - - if (contentStyle == UIContentStyleContrast) { - - if ([ContrastColor(primaryColor, YES) isEqual:FlatWhite]) { - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; - } else { - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; - } - - } else if (contentStyle == UIContentStyleLight) { - - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; - - } else { - - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; - } - - [[self class] customizeBarButtonItemWithPrimaryColor:primaryColor contentStyle:contentStyle]; - [[self class] customizeButtonWithPrimaryColor:primaryColor secondaryColor:secondaryColor withContentStyle:contentStyle]; - [[self class] customizeNavigationBarWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizePageControlWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeProgressViewWithPrimaryColor:primaryColor andSecondaryColor:secondaryColor]; - [[self class] customizeSearchBarWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSegmentedControlWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSliderWithPrimaryColor:primaryColor andSecondaryColor:secondaryColor]; - [[self class] customizeStepperWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSwitchWithPrimaryColor:primaryColor andSecondaryColor:secondaryColor]; - [[self class] customizeTabBarWithBarTintColor:FlatWhite andTintColor:primaryColor]; - [[self class] customizeToolbarWithPrimaryColor:primaryColor withContentStyle:contentStyle]; -} - -+ (void)setGlobalThemeUsingPrimaryColor:(UIColor *)primaryColor - withSecondaryColor:(UIColor *)secondaryColor - usingFontName:(NSString *)fontName - andContentStyle:(UIContentStyle)contentStyle { - - if (contentStyle == UIContentStyleContrast) { - - if ([ContrastColor(primaryColor, YES) isEqual:FlatWhite]) { - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; - } else { - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; - } - - } else if (contentStyle == UIContentStyleLight) { - - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; - - } else { - - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; - } - - [[UILabel appearance] setSubstituteFontName:fontName]; - [[UIButton appearance] setSubstituteFontName:fontName]; - - [[self class] customizeNavigationBarWithBarColor:primaryColor textColor:ContrastColor(primaryColor, YES) fontName:fontName fontSize:20 buttonColor:ContrastColor(primaryColor, YES)]; - [[self class] customizeBarButtonItemWithPrimaryColor:primaryColor fontName:fontName fontSize:18 contentStyle:contentStyle]; - [[self class] customizeSegmentedControlWithPrimaryColor:primaryColor withFontName:fontName withFontSize:14 withContentStyle:contentStyle]; - [[self class] customizeButtonWithPrimaryColor:primaryColor secondaryColor:secondaryColor withContentStyle:contentStyle]; - [[self class] customizePageControlWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeProgressViewWithPrimaryColor:primaryColor andSecondaryColor:secondaryColor]; - [[self class] customizeSearchBarWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSliderWithPrimaryColor:primaryColor andSecondaryColor:secondaryColor]; - [[self class] customizeStepperWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSwitchWithPrimaryColor:primaryColor andSecondaryColor:secondaryColor]; - [[self class] customizeTabBarWithBarTintColor:FlatWhite andTintColor:primaryColor]; - [[self class] customizeToolbarWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - - - /* - - if (contentStyle == UIContentStyleContrast) { - - if ([ContrastColor(primaryColor, YES) isEqual:FlatWhite]) { - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; - } else { - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; - } - - } else if (contentStyle == UIContentStyleLight) { - - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; - - } else { - - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; - } - - [[self class] customizeBarButtonItemWithPrimaryColor:primaryColor fontName:fontName fontSize:18 contentStyle:contentStyle]; - [[self class] customizeButtonWithPrimaryColor:primaryColor fontName:fontName fontSize:17 contentStyle:contentStyle]; - [[self class] customizeLabelWithPrimaryColor:primaryColor fontName:fontName fontSize:18 withContentStyle:contentStyle]; - [[self class] customizePageControlWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeProgressViewWithPrimaryColor:primaryColor andSecondaryColor:secondaryColor]; - [[self class] customizeSearchBarWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSliderWithPrimaryColor:primaryColor andSecondaryColor:secondaryColor]; - [[self class] customizeStepperWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSwitchWithPrimaryColor:primaryColor andSecondaryColor:secondaryColor]; - [[self class] customizeTabBarWithBarTintColor:FlatWhite tintColor:primaryColor fontName:fontName fontSize:11]; - [[self class] customizeToolbarWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - - */ -} - -#pragma mark - UIBarButtonItem - -+ (void)customizeBarButtonItemWithPrimaryColor:(UIColor *)primaryColor - contentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UIBarButtonItem appearance] setTintColor:primaryColor]; - [[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:contentColor]; - [[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTintColor:contentColor]; - [[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class], nil] setTintColor:contentColor]; - - -} - -+ (void)customizeBarButtonItemWithPrimaryColor:(UIColor *)primaryColor - fontName:(NSString *)fontName - fontSize:(float)fontSize - contentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UIBarButtonItem appearance] setTintColor:primaryColor]; - [[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:contentColor]; - [[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTintColor:contentColor]; - [[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class], nil] setTintColor:contentColor]; - - - if ([UIFont fontWithName:fontName size:fontSize]) { - [[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:@{ NSForegroundColorAttributeName:contentColor, - NSFontAttributeName:[UIFont fontWithName:fontName size:fontSize]} forState:UIControlStateNormal]; - } -} - -#pragma mark - UIButton - -+ (void)customizeButtonWithPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UIButton appearance] setTintColor:contentColor]; - [[UIButton appearance] setBackgroundColor:primaryColor]; - - - [[UIButton appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:contentColor]; - [[UIButton appearanceWhenContainedIn:[UISearchBar class], nil] setBackgroundColor:ClearColor]; - - [[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil] setTintColor:contentColor]; - [[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil] setBackgroundColor:ClearColor]; - - [[UIButton appearanceWhenContainedIn:[UIToolbar class], nil] setTintColor:contentColor]; - [[UIButton appearanceWhenContainedIn:[UIToolbar class], nil] setBackgroundColor:ClearColor]; - - [[UIButton appearanceWhenContainedIn:[UIStepper class], nil] setTintColor:primaryColor]; - [[UIButton appearanceWhenContainedIn:[UIStepper class], nil] setBackgroundColor:ClearColor]; - - [[UIButton appearance] setTitleShadowColor:ClearColor forState:UIControlStateNormal]; - - - -} - -+ (void)customizeButtonWithPrimaryColor:(UIColor *)primaryColor - secondaryColor:(UIColor *)secondaryColor - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - UIColor *secondaryContentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - secondaryContentColor = ContrastColor(secondaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - secondaryContentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - secondaryContentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - secondaryContentColor = ContrastColor(secondaryColor, NO); - break; - } - } - - [[UIButton appearance] setTintColor:secondaryContentColor]; - [[UIButton appearance] setBackgroundColor:secondaryColor]; - - [[UIButton appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:contentColor]; - [[UIButton appearanceWhenContainedIn:[UISearchBar class], nil] setBackgroundColor:ClearColor]; - - [[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil] setTintColor:contentColor]; - [[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil] setBackgroundColor:ClearColor]; - - [[UIButton appearanceWhenContainedIn:[UIToolbar class], nil] setTintColor:contentColor]; - [[UIButton appearanceWhenContainedIn:[UIToolbar class], nil] setBackgroundColor:ClearColor]; - - [[UIButton appearanceWhenContainedIn:[UIStepper class], nil] setTintColor:primaryColor]; - [[UIButton appearanceWhenContainedIn:[UIStepper class], nil] setBackgroundColor:ClearColor]; - - [[UIButton appearance] setTitleShadowColor:ClearColor forState:UIControlStateNormal]; - -} - -#pragma mark - UILabel - -+ (void)customizeLabelWithPrimaryColor:(UIColor *)primaryColor - fontName:(NSString *)fontName - fontSize:(CGFloat)fontSize - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UILabel appearanceWhenContainedIn:[UINavigationBar class], nil] setTextColor:contentColor]; - [[UILabel appearanceWhenContainedIn:[UIToolbar class], nil] setTextColor:contentColor]; - - UIFont *font = [UIFont fontWithName:fontName size:fontSize]; - - if (font) { - [[UILabel appearance] setFont:[UIFont fontWithName:fontName size:fontSize]]; - [[UILabel appearanceWhenContainedIn:[UITextField class], nil] setFont:[UIFont fontWithName:fontName size:14]]; - [[UILabel appearanceWhenContainedIn:[UIButton class], nil] setFont:[UIFont fontWithName:fontName size:18]]; - } -} - -#pragma mark - UINavigationBar - -+ (void)customizeNavigationBarWithPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UINavigationBar appearance] setBarTintColor:primaryColor]; - [[UINavigationBar appearance] setTintColor:contentColor]; - [[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:contentColor}]; - [[UINavigationBar appearance] setShadowImage:[UIImage new]]; -// [[UINavigationBar appearance] setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; -} - -+ (void)customizeNavigationBarWithBarColor:(UIColor *)barColor - textColor:(UIColor *)textColor - buttonColor:(UIColor *)buttonColor { - - [[UINavigationBar appearance] setBarTintColor:barColor]; - [[UINavigationBar appearance] setTintColor:buttonColor]; - [[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:textColor}]; - [[UINavigationBar appearance] setShadowImage:[UIImage new]]; -// [[UINavigationBar appearance] setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; -} - -+ (void)customizeNavigationBarWithBarColor:(UIColor *)barColor - textColor:(UIColor *)textColor - fontName:(NSString *)fontName - fontSize:(CGFloat)fontSize - buttonColor:(UIColor *)buttonColor { - - [[UINavigationBar appearance] setBarTintColor:barColor]; - [[UINavigationBar appearance] setTintColor:buttonColor]; - [[UINavigationBar appearance] setShadowImage:[UIImage new]]; -// [[UINavigationBar appearance] setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; - - if ([UIFont fontWithName:fontName size:fontSize]) { - [[UINavigationBar appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName:textColor, NSFontAttributeName:[UIFont fontWithName:fontName size:fontSize] }]; - } -} - -#pragma mark - UIPageControl - -+ (void)customizePageControlWithPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UIPageControl appearance] setCurrentPageIndicatorTintColor:primaryColor]; - [[UIPageControl appearance] setPageIndicatorTintColor:[primaryColor colorWithAlphaComponent:0.4]]; - [[UIPageControl appearanceWhenContainedIn:[UINavigationBar class], nil] setCurrentPageIndicatorTintColor:contentColor]; - [[UIPageControl appearanceWhenContainedIn:[UINavigationBar class], nil] setPageIndicatorTintColor:[contentColor colorWithAlphaComponent:0.4]]; - [[UIPageControl appearanceWhenContainedIn:[UIToolbar class], nil] setCurrentPageIndicatorTintColor:contentColor]; - [[UIPageControl appearanceWhenContainedIn:[UIToolbar class], nil] setPageIndicatorTintColor:[contentColor colorWithAlphaComponent:0.4]]; -} - -#pragma mark - UIProgressView - -+ (void)customizeProgressViewWithPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UIProgressView appearance] setProgressTintColor:primaryColor]; - [[UIProgressView appearanceWhenContainedIn:[UINavigationBar class], nil] setProgressTintColor:contentColor]; - [[UIProgressView appearanceWhenContainedIn:[UIToolbar class], nil] setProgressTintColor:contentColor]; - [[UIProgressView appearance] setTrackTintColor:[UIColor lightGrayColor]]; - [[UIProgressView appearanceWhenContainedIn:[UINavigationBar class], nil] setTrackTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; - [[UIProgressView appearanceWhenContainedIn:[UIToolbar class], nil] setTrackTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; -} - -+ (void)customizeProgressViewWithPrimaryColor:(UIColor *)primaryColor - andSecondaryColor:(UIColor *)secondaryColor { - - [[UIProgressView appearance] setProgressTintColor:secondaryColor]; - [[UIProgressView appearanceWhenContainedIn:[UINavigationBar class], nil] setProgressTintColor:secondaryColor]; - [[UIProgressView appearanceWhenContainedIn:[UIToolbar class], nil] setProgressTintColor:secondaryColor]; - [[UIProgressView appearance] setTrackTintColor:[UIColor lightGrayColor]]; - [[UIProgressView appearanceWhenContainedIn:[UINavigationBar class], nil] setTrackTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; - [[UIProgressView appearanceWhenContainedIn:[UIToolbar class], nil] setTrackTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; -} - -#pragma mark - UISearchBar - -+ (void)customizeSearchBarWithPrimaryColor:(UIColor *)primaryColor withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UISearchBar appearance] setBarTintColor:primaryColor]; - [[UISearchBar appearance] setBackgroundColor:primaryColor]; - [[UISearchBar appearance] setTintColor:contentColor]; - [[UISearchBar appearance] setBackgroundImage:[UIImage new] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault]; -} - -#pragma mark - UISegmentedControl - -+ (void)customizeSegmentedControlWithPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UISegmentedControl appearance] setTintColor:primaryColor]; - [[UISegmentedControl appearanceWhenContainedIn:[UINavigationBar class], nil] - setTintColor:contentColor]; - [[UISegmentedControl appearanceWhenContainedIn:[UIToolbar class], nil] - setTintColor:contentColor]; -} - -+ (void)customizeSegmentedControlWithPrimaryColor:(UIColor *)primaryColor - withFontName:(NSString *)fontName - withFontSize:(CGFloat)fontSize - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UISegmentedControl appearance] setTintColor:primaryColor]; - [[UISegmentedControl appearanceWhenContainedIn:[UINavigationBar class], nil] - setTintColor:contentColor]; - [[UISegmentedControl appearanceWhenContainedIn:[UIToolbar class], nil] - setTintColor:contentColor]; - - UIFont *font = [UIFont fontWithName:fontName size:fontSize]; - if (font) { - [[UISegmentedControl appearance] setTitleTextAttributes:@{NSFontAttributeName:font} - forState:UIControlStateNormal]; - } -} - -#pragma mark - UISlider - -+ (void)customizeSliderWithPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UISlider appearance] setMinimumTrackTintColor:primaryColor]; - [[UISlider appearanceWhenContainedIn:[UINavigationBar class], nil] setMinimumTrackTintColor:contentColor]; - [[UISlider appearanceWhenContainedIn:[UIToolbar class], nil] setMinimumTrackTintColor:contentColor]; - [[UISlider appearance] setMaximumTrackTintColor:[UIColor lightGrayColor]]; - [[UISlider appearanceWhenContainedIn:[UINavigationBar class], nil] setMaximumTrackTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; - [[UISlider appearanceWhenContainedIn:[UIToolbar class], nil] setMaximumTrackTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; - - [[UISlider appearance] setThumbTintColor:primaryColor]; - [[UISlider appearanceWhenContainedIn:[UIToolbar class], nil] setThumbTintColor:contentColor]; -} - -+ (void)customizeSliderWithPrimaryColor:(UIColor *)primaryColor - andSecondaryColor:(UIColor *)secondaryColor { - - [[UISlider appearance] setMinimumTrackTintColor:secondaryColor]; - [[UISlider appearanceWhenContainedIn:[UINavigationBar class], nil] setMinimumTrackTintColor:secondaryColor]; - [[UISlider appearanceWhenContainedIn:[UIToolbar class], nil] setMinimumTrackTintColor:secondaryColor]; - [[UISlider appearance] setMaximumTrackTintColor:[UIColor lightGrayColor]]; - [[UISlider appearanceWhenContainedIn:[UINavigationBar class], nil] setMaximumTrackTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; - [[UISlider appearanceWhenContainedIn:[UIToolbar class], nil] setMaximumTrackTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; - - [[UISlider appearance] setThumbTintColor:secondaryColor]; - [[UISlider appearanceWhenContainedIn:[UIToolbar class], nil] setThumbTintColor:ContrastColor(primaryColor, NO)]; -} - -#pragma mark - UIStepper - -+ (void)customizeStepperWithPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UIStepper appearance] setTintColor:primaryColor]; - [[UIStepper appearanceWhenContainedIn:[UINavigationBar class], nil] - setTintColor:contentColor]; - [[UIStepper appearanceWhenContainedIn:[UIToolbar class], nil] - setTintColor:contentColor]; -} - -#pragma mark - UISwitch - -+ (void)customizeSwitchWithPrimaryColor:(UIColor *)primaryColor { - - [[UISwitch appearance] setOnTintColor:primaryColor]; - [[UISwitch appearanceWhenContainedIn:[UINavigationBar class], nil] setOnTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; - [[UISwitch appearanceWhenContainedIn:[UIToolbar class], nil] setOnTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; -} - -+ (void)customizeSwitchWithPrimaryColor:(UIColor *)primaryColor - andSecondaryColor:(UIColor *)secondaryColor { - - [[UISwitch appearance] setOnTintColor:secondaryColor]; - [[UISwitch appearanceWhenContainedIn:[UINavigationBar class], nil] setOnTintColor:secondaryColor]; - [[UISwitch appearanceWhenContainedIn:[UIToolbar class], nil] setOnTintColor:secondaryColor]; -} - -#pragma mark - UITabBar - -+ (void)customizeTabBarWithBarTintColor:(UIColor *)barTintColor - andTintColor:(UIColor *)tintColor { - - [[UITabBar appearance] setBarTintColor:barTintColor]; - [[UITabBar appearance] setTintColor:tintColor]; -} - -+ (void)customizeTabBarWithBarTintColor:(UIColor *)barTintColor - tintColor:(UIColor *)tintColor - fontName:(NSString *)fontName - fontSize:(CGFloat)fontSize { - - [[UITabBar appearance] setBarTintColor:barTintColor]; - [[UITabBar appearance] setTintColor:tintColor]; - - UIFont *font = [UIFont fontWithName:fontName size:fontSize]; - if (font) { - [[UITabBarItem appearance] setTitleTextAttributes:@{NSFontAttributeName:font} - forState:UIControlStateNormal]; - } -} - -#pragma mark - UIToolbar - -+ (void)customizeToolbarWithPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UIToolbar appearance] setTintColor:contentColor]; - [[UIToolbar appearance] setBarTintColor:primaryColor]; - [[UIToolbar appearance] setClipsToBounds:YES]; -} - -#pragma GCC diagnostic pop - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/NSArray+Chameleon.h b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/NSArray+Chameleon.h deleted file mode 100755 index b74c664..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/NSArray+Chameleon.h +++ /dev/null @@ -1,112 +0,0 @@ - -// NSArray+Chameleon.h - -/* - - The MIT License (MIT) - - Copyright (c) 2014-2015 Vicc Alexander. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - */ - -#import -#import - -#pragma mark - Enums - -/** - * Color schemes with which to select colors using a specified color. - * - * @since 1.0 - */ -typedef NS_ENUM(NSInteger, ColorScheme){ - /** - * Analogous color schemes use colors that are next to each other on the color wheel. They usually match well and create serene and comfortable designs. Analogous color schemes are often found in nature and are harmonious and pleasing to the eye. Make sure you have enough contrast when choosing an analogous color scheme. Choose one color to dominate, a second to support. The third color is used (along with black, white or gray) as an accent. - * - * @since 1.0 - */ - ColorSchemeAnalogous, - /** - * Colors that are opposite each other on the color wheel are considered to be complementary colors (example: red and green). The high contrast of complementary colors creates a vibrant look especially when used at full saturation. This color scheme must be managed well so it is not jarring. Complementary colors are tricky to use in large doses, but work well when you want something to stand out. Complementary colors are really bad for text. - * - * @since 1.0 - */ - ColorSchemeTriadic, - /** - * A triadic color scheme uses colors that are evenly spaced around the color wheel. Triadic color harmonies tend to be quite vibrant, even if you use pale or unsaturated versions of your hues. To use a triadic harmony successfully, the colors should be carefully balanced - let one color dominate and use the two others for accent. - * - * @since 1.0 - */ - ColorSchemeComplementary -}; - -@interface NSArray (Chameleon) - -#pragma mark - Generating Color Schemes - -/** - * Generates and creates an array of 5 color objects in the HSB colorspace from the specified color. - * - * @param colorScheme The color scheme with which to select colors using a specified color. - * @param color The specified color which the color scheme is built around. - * @param isFlatScheme Pass YES to return flat color objects. - * - * @return An array of 5 color objects in the HSB colorspace. - * - * @since 2.0 - */ -+ (NSArray *)arrayOfColorsWithColorScheme:(ColorScheme)colorScheme - usingColor:(UIColor *)color - withFlatScheme:(BOOL)isFlatScheme; - -/** - * Generates and creates an array of 5 color objects in the HSB colorspace that appear most often in a specified image. - * - * @param image The specified image which the color scheme is built around. - * @param isFlatScheme Pass YES to return flat color objects. - * - * @return An array of 5 color objects in the HSB colorspace. - * - * @since 2.0 - */ -+ (NSArray *)arrayOfColorsFromImage:(UIImage *)image - withFlatScheme:(BOOL)isFlatScheme; - -#pragma mark - Deprecated Methods - -/** - * Generates and creates an array of 5 color objects in the HSB colorspace from the specified color. - * - * @param colorScheme The color scheme with which to select colors using a specified color. - * - * @param color The specified color which the color scheme is built around. - * - * @param isFlatScheme Pass YES to return flat color objects. - * - * @return An array of 5 color objects in the HSB colorspace. - * - * @since 1.1.2 - */ -+ (NSArray *)arrayOfColorsWithColorScheme:(ColorScheme)colorScheme - with:(UIColor *)color - flatScheme:(BOOL)isFlatScheme __attribute((deprecated(" Use -arrayOfColorsWithColorScheme:usingColor:withFlatScheme: instead (First deprecated in Chameleon 2.0)."))); - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/NSArray+Chameleon.m b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/NSArray+Chameleon.m deleted file mode 100755 index 17faa6d..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/NSArray+Chameleon.m +++ /dev/null @@ -1,736 +0,0 @@ - -// NSArray+Chameleon.m - -/* - - The MIT License (MIT) - - Copyright (c) 2014-2015 Vicc Alexander. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - */ - -#import "NSArray+Chameleon.h" -#import "ChameleonMacros.h" -#import "UIColor+ChameleonPrivate.h" -#import "UIImage+ChameleonPrivate.h" - -@interface ChameleonCountedColor : NSObject - -@property (assign) NSUInteger count; -@property (strong) UIColor *color; - -- (id)initWithColor:(UIColor *)color count:(NSUInteger)count; - -@end - -@implementation NSArray (Chameleon) - -#pragma mark - Deprecated 2.0 - -+ (NSArray *)arrayOfColorsWithColorScheme:(ColorScheme)colorScheme with:(UIColor *)color flatScheme:(BOOL)isFlatScheme { - - //Extract HSB values from input color - CGFloat h, s, b, a; - [color getHue:&h saturation:&s brightness:&b alpha:&a]; - - //Multiply our values by the max value to convert - h *= 360; - s *= 100; - b *= 100; - - //Choose Between Schemes - switch (colorScheme) { - case ColorSchemeAnalogous: - return [self analogousColorSchemeFromHue:h Saturation:s Brightness:b flat:isFlatScheme]; - case ColorSchemeComplementary: - return [self complementaryColorSchemeFromHue:h Saturation:s Brightness:b flat:isFlatScheme]; - case ColorSchemeTriadic: - return [self triadicColorSchemeFromHue:h Saturation:s Brightness:b flat:isFlatScheme]; - default: - NSAssert(0, @"Oops! Unrecognized color scheme provided as random color."); - } -} - -#pragma mark - Chameleon - Public Color Scheme Methods - -+ (NSArray *)arrayOfColorsWithColorScheme:(ColorScheme)colorScheme usingColor:(UIColor *)color withFlatScheme:(BOOL)isFlatScheme { - - //Extract HSB values from input color - CGFloat h, s, b, a; - [color getHue:&h saturation:&s brightness:&b alpha:&a]; - - //Multiply our values by the max value to convert - h *= 360; - s *= 100; - b *= 100; - - //Choose Between Schemes - switch (colorScheme) { - case ColorSchemeAnalogous: - if (isFlatScheme) return [self analogousColorSchemeFromHue:h Saturation:s Brightness:b flat:YES]; - else return [self analogousColorSchemeFromHue:h Saturation:s Brightness:b flat:NO]; - case ColorSchemeComplementary: - if (isFlatScheme) return [self complementaryColorSchemeFromHue:h Saturation:s Brightness:b flat:YES]; - else return [self complementaryColorSchemeFromHue:h Saturation:s Brightness:b flat:NO]; - case ColorSchemeTriadic: - if (isFlatScheme) return [self triadicColorSchemeFromHue:h Saturation:s Brightness:b flat:YES]; - else return [self triadicColorSchemeFromHue:h Saturation:s Brightness:b flat:NO]; - default: - NSAssert(0, @"Oops! Unrecognized color scheme provided as random color."); - } -} - -+ (NSArray *)arrayOfColorsFromImage:(UIImage *)image withFlatScheme:(BOOL)isFlatScheme { - - //Quick return in case we don't have an image - if (!image) { - - //Make sure we return some colors to prevent exception - NSMutableArray *emptyColors = [NSMutableArray array]; - while (emptyColors.count < 5) { - [emptyColors addObject:[UIColor whiteColor]]; - } - - return emptyColors; - } - - //Scale image - UIImage *scaledImage = [UIImage imageWithImage:image scaledToSize:CGSizeMake(image.size.width/8, image.size.height/8)]; - NSMutableArray *finalColors = [NSMutableArray array]; - - //Find colors in image ********************************* - - //Get dimensions of image in pixels - size_t width = CGImageGetWidth(scaledImage.CGImage); - size_t height = CGImageGetHeight(scaledImage.CGImage); - - //Initialize a counted set with the correct capacity - NSCountedSet *imageColors = [[NSCountedSet alloc] initWithCapacity:(width * height)]; - - //Loop through each column - for (NSUInteger x = 0; x < width; x++) { - - //Loop through each row - for (NSUInteger y = 0; y < height; y++) { - - //Get color at a specific point - UIColor *color = [UIColor colorFromImage:scaledImage atPoint:CGPointMake(x, y)]; - - //Add color to our list of all pixel colors - [imageColors addObject:color]; - } - } - - //Setup up an enumerator object - NSEnumerator *enumerator = [imageColors objectEnumerator]; - UIColor *currentColor; - NSMutableArray *sortedColors = [NSMutableArray arrayWithCapacity:imageColors.count]; - NSMutableArray *resultColors = [NSMutableArray array]; - - //Enumerate through each object once - while ((currentColor = [enumerator nextObject]) != nil) { - - //Set a minimum allowed saturation - currentColor = [currentColor colorWithMinimumSaturation:0.15f]; - - //Get color count - NSUInteger colorCount = [imageColors countForObject:currentColor]; - - //Add them to our sortedColors array - [sortedColors addObject:[[ChameleonCountedColor alloc] initWithColor:currentColor count:colorCount]]; - } - - //Sort Colors - [sortedColors sortUsingSelector:@selector(compare:)]; - - //Loop through our sorted colors - for (ChameleonCountedColor *countedColor in sortedColors) { - - //Define our current color - currentColor = countedColor.color; - - //Setup a flag to see if we should continue counting - BOOL continueFlag = NO; - - //Loop through our colors - for (UIColor *otherColor in resultColors) { - - //If our current color differs from our last, break the loop - if (![currentColor isDistinct:otherColor]) { - continueFlag = YES; - break; - } - } - - //Continue - if (continueFlag) { - continue; - } - - //If we can still add more colors, do so - if (resultColors.count < 5) { - - //Check if we should flatten our color - if (isFlatScheme) { - [resultColors addObject:[currentColor flatten]]; - } else { - [resultColors addObject:currentColor]; - } - - } else { - break; - } - - } - - //Get colors from image - [finalColors addObjectsFromArray:[NSArray arrayWithArray:resultColors]]; - - // ***************************************************** - - //Make sure we add white colors in case we're missing colors - while (finalColors.count < 5) { - [finalColors addObject:[UIColor whiteColor]]; - } - - //Return array of colors - return [NSArray arrayWithArray:finalColors]; -} - -- (NSArray *)findColorsOfImage:(UIImage *)image imageColors:(NSCountedSet * __autoreleasing *)colors { - - //Get dimensions of image in pixels - size_t width = CGImageGetWidth(image.CGImage); - size_t height = CGImageGetHeight(image.CGImage); - - //Initialize a counted set with the correct capacity - NSCountedSet *imageColors = [[NSCountedSet alloc] initWithCapacity:(width * height)]; - - //Loop through each column - for (NSUInteger x = 0; x < width; x++) { - - //Loop through each row - for (NSUInteger y = 0; y < height; y++) { - - //Get color at a specific point - UIColor *color = [UIColor colorFromImage:image atPoint:CGPointMake(x, y)]; - - //Add color to our list of all pixel colors - [imageColors addObject:color]; - } - } - - //Assign imageColors to colors - *colors = imageColors; - - //Setup up an enumerator object - NSEnumerator *enumerator = [imageColors objectEnumerator]; - UIColor *currentColor; - NSMutableArray *sortedColors = [NSMutableArray arrayWithCapacity:imageColors.count]; - NSMutableArray *resultColors = [NSMutableArray array]; - - //Enumerate through each object once - while ((currentColor = [enumerator nextObject]) != nil) { - - //Set a minimum allowed saturation - currentColor = [currentColor colorWithMinimumSaturation:0.15f]; - - //Get color count - NSUInteger colorCount = [imageColors countForObject:currentColor]; - - //Add them to our sortedColors array - [sortedColors addObject:[[ChameleonCountedColor alloc] initWithColor:currentColor count:colorCount]]; - } - - //Sort Colors - [sortedColors sortUsingSelector:@selector(compare:)]; - - //Loop through our sorted colors - for (ChameleonCountedColor *countedColor in sortedColors) { - - //Define our current color - currentColor = countedColor.color; - - //Setup a flag to see if we should continue counting - BOOL continueFlag = NO; - - //Loop through our colors - for (UIColor *c in resultColors) { - - //If our current color differs from our last, break the loop - if (![currentColor isDistinct:c]) { - continueFlag = YES; - break; - } - } - - //Continue - if (continueFlag) { - continue; - } - - //If we can still add more colors, do so - if (resultColors.count < self.count) { - - [resultColors addObject:currentColor]; - - } else { - break; - } - - } - - //Return our colors - return [NSArray arrayWithArray:resultColors]; -} - - -#pragma mark - Chameleon - Internal Color Scheme Methods - -//Creates an array with 2 analagous colors on each side of the predefined color -+ (NSArray *)analogousColorSchemeFromHue:(CGFloat)h Saturation:(CGFloat)s Brightness:(CGFloat)b flat:(BOOL)isFlat { - - UIColor *firstColor = [UIColor colorWithHue:([[self class] add:-32 to:h])/360 - saturation:(s+5)/100 - brightness:(b+5)/100 - alpha:1.0]; - - UIColor *secondColor = [UIColor colorWithHue:[[self class] add:-16 to:h]/360 - saturation:(s+5)/100 - brightness:(b+9)/100 - alpha:1.0]; - - UIColor *thirdColor = [UIColor colorWithHue:h/360 - saturation:s/100 - brightness:b/100 - alpha:1.0]; - - UIColor *fourthColor = [UIColor colorWithHue:[[self class] add:16 to:h]/360 - saturation:(s+5)/100 - brightness:(b+9)/100 - alpha:1.0]; - - UIColor *fifthColor = [UIColor colorWithHue:[[self class] add:32 to:h]/360 - saturation:(s+5)/100 - brightness:(b+5)/100 - alpha:1.0]; - - if (isFlat) { - - //Flatten colors - firstColor = [firstColor flatten]; - secondColor = [secondColor flatten]; - thirdColor = [thirdColor flatten]; - fourthColor = [fourthColor flatten]; - fifthColor = [fifthColor flatten]; - - //Make sure returned colors are unique - - //Inner Colors - if ([secondColor isEqual:thirdColor]) { - - secondColor = [[UIColor colorWithHue:[[self class] add:-48 to:h]/360 - saturation:(s+5)/100 - brightness:(b+9)/100 - alpha:1.0] flatten]; - } - - if ([thirdColor isEqual:fourthColor]) { - - fourthColor = [[UIColor colorWithHue:[[self class] add:32 to:h]/360 - saturation:(s+5)/100 - brightness:(b+9)/100 - alpha:1.0] flatten]; - } - - //Outer Colors - - if ([firstColor isEqual:secondColor]) { - - firstColor = [[UIColor colorWithHue:[[self class] add:-64 to:h]/360 - saturation:(s+5)/100 - brightness:(b+9)/100 - alpha:1.0] flatten]; - } - - if ([firstColor isEqual:thirdColor]) { - - firstColor = [[UIColor colorWithHue:[[self class] add:-96 to:h]/360 - saturation:(s+5)/100 - brightness:(b+9)/100 - alpha:1.0] darkenByPercentage:0.25]; - } - - if ([fourthColor isEqual:fifthColor]) { - fifthColor = [[UIColor colorWithHue:[[self class] add:64 to:h]/360 - saturation:(s+5)/100 - brightness:(b+9)/100 - alpha:1.0] flatten]; - } - - if ([thirdColor isEqual:fifthColor]) { - fifthColor = [[UIColor colorWithHue:[[self class] add:96 to:h]/360 - saturation:(s+5)/100 - brightness:(b+9)/100 - alpha:1.0] flatten]; - } - - } - - return @[firstColor, secondColor, thirdColor, fourthColor, fifthColor]; -} - -// Creates an array of 5 colors, both 90 degrees and 180 degrees away from the predefined colors on both sides -+ (NSArray *)complementaryColorSchemeFromHue:(CGFloat)h Saturation:(CGFloat)s Brightness:(CGFloat)b flat:(BOOL)isFlat { - - UIColor *firstColor = [UIColor colorWithHue:h/360 - saturation:(s+5)/100 - brightness:(b-30)/100 - alpha:1.0]; - - UIColor *secondColor = [UIColor colorWithHue:h/360 - saturation:(s-10)/100 - brightness:(b+9)/100 - alpha:1.0]; - - UIColor *thirdColor = [UIColor colorWithHue:h/360 - saturation:s/100 - brightness:b/100 - alpha:1.0]; - - UIColor *fourthColor = [UIColor colorWithHue:[[self class] add:180 to:h]/360 - saturation:s/100 - brightness:b/100 - alpha:1.0]; - - UIColor *fifthColor = [UIColor colorWithHue:[[self class] add:180 to:h]/360 - saturation:(s+20)/100 - brightness:(b-30)/100 - alpha:1.0]; - - - if (isFlat) { - - //Flatten colors - firstColor = [firstColor flatten]; - secondColor = [secondColor flatten]; - thirdColor = [thirdColor flatten]; - fourthColor = [fourthColor flatten]; - fifthColor = [fifthColor flatten]; - - //Make sure returned colors are unique - - //Inner Colors - if ([secondColor isEqual:thirdColor]) { - secondColor = [[secondColor darkenByPercentage:0.25] flatten]; - } - - if ([thirdColor isEqual:fourthColor]) { - fourthColor = [[fourthColor darkenByPercentage:0.25] flatten]; - } - - if ([firstColor isEqual:thirdColor]) { - firstColor = [[firstColor darkenByPercentage:0.25] flatten]; - } - - if ([fifthColor isEqual:thirdColor]) { - fifthColor = [[fifthColor darkenByPercentage:0.25] flatten]; - } - - //Outer Colors - - if ([firstColor isEqual:secondColor]) { - firstColor = [[firstColor darkenByPercentage:0.25] flatten]; - } - - - if ([fourthColor isEqual:fifthColor]) { - fifthColor = [[fifthColor darkenByPercentage:0.25] flatten]; - } - - } - - return @[firstColor, secondColor, thirdColor, fourthColor, fifthColor]; - -} - -// Creates an array of 5 colors, both 120 degrees and 240 degrees away from the predefined colors on both sides -+ (NSArray *)triadicColorSchemeFromHue:(CGFloat)h Saturation:(CGFloat)s Brightness:(CGFloat)b flat:(BOOL)isFlat { - - UIColor *firstColor = [UIColor colorWithHue:[[self class] add:120 to:h]/360 - saturation:(7*s/6)/100 - brightness:(b-5)/100 - alpha:1.0]; - - UIColor *secondColor = [UIColor colorWithHue:[[self class] add:120 to:h]/360 - saturation:s/100 - brightness:(b+9)/100 - alpha:1.0]; - - UIColor *thirdColor = [UIColor colorWithHue:h/360 - saturation:s/100 - brightness:b/100 - alpha:1.0]; - - UIColor *fourthColor = [UIColor colorWithHue:[[self class] add:240 to:h]/360 - saturation:(7*s/6)/100 - brightness:(b-5)/100 - alpha:1.0]; - - UIColor *fifthColor = [UIColor colorWithHue:[[self class] add:240 to:h]/360 - saturation:s/100 - brightness:(b-30)/100 - alpha:1.0]; - - if (isFlat) { - - //Flatten colors - firstColor = [firstColor flatten]; - secondColor = [secondColor flatten]; - thirdColor = [thirdColor flatten]; - fourthColor = [fourthColor flatten]; - fifthColor = [fifthColor flatten]; - - //Make sure returned colors are unique - - //Inner Colors - if ([secondColor isEqual:thirdColor]) { - secondColor = [[secondColor darkenByPercentage:0.25] flatten]; - } - - if ([thirdColor isEqual:fourthColor]) { - fourthColor = [[fourthColor darkenByPercentage:0.25] flatten]; - } - - if ([firstColor isEqual:thirdColor]) { - firstColor = [[firstColor darkenByPercentage:0.25] flatten]; - } - - if ([fifthColor isEqual:thirdColor]) { - fifthColor = [[fifthColor darkenByPercentage:0.25] flatten]; - } - - //Outer Colors - - if ([firstColor isEqual:secondColor]) { - firstColor = [[firstColor darkenByPercentage:0.25] flatten]; - } - - - if ([fourthColor isEqual:fifthColor]) { - fifthColor = [[fifthColor darkenByPercentage:0.25] flatten]; - } - - } - - return @[firstColor, secondColor, thirdColor, fourthColor, fifthColor]; -} - -#pragma mark - Helper Methods for Color Schemes - -+ (float)add:(float)newValue to:(float)currentValue { - - currentValue += newValue; - - //Check if currentValue exceeds 360 degrees - if (currentValue > 360) { - float offset = currentValue - 360; - return offset; - } - - else if (currentValue < 0) { - return -1 * currentValue; - } - - else { - return currentValue; - } -} - -+ (UIColor *)colorWithFlatVersionOf:(UIColor *)color { - - //Create CGFloats to hold our color values - CGFloat L, A, B, alpha; - - //Get LAB values for our color - [color getLightness:&L valueForA:&A valueForB:&B alpha:&alpha]; - - //Find the nearest flat color - return [self nearestFlatColorForL:L A:A B:B alpha:1.0]; -} - -//Array of all our colors -+ (NSArray *)flatColors { - - return @[FlatBlack, FlatBlackDark, FlatBlue, FlatBlueDark, FlatBrown, FlatBrownDark, FlatCoffee, FlatCoffeeDark, FlatForestGreen, FlatForestGreenDark, FlatGray, FlatGrayDark, FlatGreen, FlatGreenDark, FlatLime, FlatLimeDark, FlatMagenta, FlatMagentaDark, FlatMaroon, FlatMaroonDark, FlatMint, FlatMintDark, FlatNavyBlue, FlatNavyBlueDark, FlatOrange, FlatOrangeDark, FlatPink, FlatPinkDark, FlatPlum, FlatPlumDark, FlatPowderBlue, FlatPowderBlueDark, FlatPurple, FlatPurpleDark, FlatRed, FlatRedDark, FlatSand, FlatSandDark, FlatSkyBlue, FlatSkyBlueDark, FlatTeal, FlatTealDark, FlatWatermelon, FlatWatermelonDark, FlatWhite, FlatWhiteDark, FlatYellow, FlatYellowDark]; -} - -//Calculate the total sum of differences - Euclidian distance -//Chameleon is now using the CIEDE2000 formula to calculate distances between 2 colors. -//More info: http://en.wikipedia.org/wiki/Color_difference -+ (float)totalSumOfDifferencesFroml1:(CGFloat)L1 l2:(CGFloat)L2 a1:(CGFloat)A1 - a2:(CGFloat)A2 b1:(CGFloat)B1 b2:(CGFloat)B2 { - - //Get C Values in LCH from LAB Values - CGFloat C1 = sqrt(pow(A1, 2) + pow(B1, 2)); - CGFloat C2 = sqrt(pow(A2, 2) + pow(B2, 2)); - - //CIE Weights - CGFloat KL = 1; - CGFloat KC = 1; - CGFloat KH = 1; - - //Variables specifically set for CIE:2000 - CGFloat DeltaPrimeL = L2 - L1; - CGFloat MeanL = ((L1 + L2) / 2); - CGFloat MeanC = ((C1 + C2) / 2); - CGFloat A1Prime = A1 + A1 / 2 * (1 - sqrt(pow(MeanC, 7.0) / (pow(MeanC, 7.0) + pow(25.0, 7.0)))); - CGFloat A2Prime = A2 + A2 / 2 * (1 - sqrt(pow(MeanC, 7.0) / (pow(MeanC, 7.0) + pow(25.0, 7.0)))); - CGFloat C1Prime = sqrt(pow(A1Prime, 2) + pow(B1, 2)); - CGFloat C2Prime = sqrt(pow(A2Prime, 2) + pow(B2, 2)); - CGFloat DeltaPrimeC = C1Prime - C2Prime; - CGFloat DeltaC = C1 - C2; - CGFloat MeanCPrime = (C1Prime + C2Prime) / 2; - CGFloat H1Prime = fmodf(atan2(B1, A1Prime), (360.0 * M_PI/180)); - CGFloat H2Prime = fmodf(atan2(B2, A2Prime), (360.0 * M_PI/180)); - - //Run everything through our △H' Function - CGFloat hDeltaPrime = 0; - if (fabs(H1Prime - H2Prime) <= (180.0 * M_PI/180)) { - - hDeltaPrime = H2Prime - H1Prime; - - } else if (H2Prime <= H1Prime) { - - hDeltaPrime = (H2Prime - H1Prime) + ((360.0 * M_PI/180)); - - } else { - - hDeltaPrime = (H2Prime - H1Prime) - ((360.0 * M_PI/180)); - } - - CGFloat deltaHPrime = 2 * (sqrt(C1Prime*C2Prime)) * sin(hDeltaPrime/2); - - //Get Mean H' Value - CGFloat MeanHPrime = 0; - if (fabs(H1Prime-H2Prime) > (180.0 * M_PI/180)) { - - MeanHPrime = (H1Prime + H2Prime + (360.0 * M_PI/180)) / 2; - - } else { - - MeanHPrime = (H1Prime + H2Prime) / 2; - } - - CGFloat T = 1 - 0.17 * cos(MeanHPrime - (30.0 * M_PI/180)) + 0.24 * cos(2 * MeanHPrime)+0.32 * cos(3 * MeanHPrime + (6.0 * M_PI/180)) - 0.20 * cos(4 * MeanHPrime - (63.0 * M_PI/180)); - - CGFloat SL = 1 + (0.015 * pow((MeanL - 50), 2))/sqrt(20 + pow((MeanL - 50), 2)); - CGFloat SC = 1 + 0.045 * MeanCPrime; - CGFloat SH = 1 + 0.015 * MeanCPrime * T; - - CGFloat RT = -2 * sqrt(pow(MeanCPrime, 7) / (pow(MeanCPrime, 7) + pow(25.0, 7))) * sin((60.0 * M_PI/180)* exp(-1 * pow((MeanCPrime - (275.0 * M_PI/180)) / (25.0 * M_PI/180), 2))); - - - //Get total difference - CGFloat TotalDifference = sqrt(pow((DeltaPrimeL / (KL * SL)), 2) + pow((DeltaPrimeC / (KC * SC)), 2) + pow((deltaHPrime / (KH * SH)), 2) + RT * (DeltaC / (KC * SC)) * (deltaHPrime / (KH * SH))); - - return TotalDifference; -} - -+ (UIColor *)nearestFlatColorForL:(CGFloat)l1 A:(CGFloat)a1 B:(CGFloat)b1 alpha:(CGFloat)alpha{ - - //Keep track of our index - float index = 0; - - //Start with a random big number to make sure the first comparison gets saved. - float smallestDistance = 1000000; - float previousDistance = 1000000; - float currentDistance; - - //Our values - CGFloat l2, a2, b2; - - //We're interested in the color with values returning the smallest sum of total differences so we need to cross reference our input color's values with every flat color's values - for (int i=0; i<[[self flatColors] count]; i++ ) { - - //Check that index is not zero - if (i!=0 ) { - //Extract LAB values from colors in array and store it as the previous index - [[self flatColors][i - 1] getLightness:&l2 valueForA:&a2 valueForB:&b2 alpha:nil]; - - previousDistance = [self totalSumOfDifferencesFroml1:l1 l2:l2 - a1:a1 a2:a2 - b1:b1 b2:b2]; - } - - //Extract LAB values from colors in array and store it as the current index - [[self flatColors][i] getLightness:&l2 valueForA:&a2 valueForB:&b2 alpha:nil]; - - currentDistance = [self totalSumOfDifferencesFroml1:l1 l2:l2 - a1:a1 a2:a2 - b1:b1 b2:b2]; - - //We're only interested in the smallest difference - if (currentDistance < previousDistance) { - if (currentDistance < smallestDistance) { - smallestDistance = currentDistance; - index = i; - } - } - } - - - //Collect the RGB Values of the color where the smallest difference was found - CGFloat red, green, blue; - [[[self flatColors] objectAtIndex:index] getRed:&red green:&green blue:&blue alpha:nil]; - - //Return the closest flat color - return rgba(red*255, green*255, blue*255, alpha); -} - -@end - -@implementation ChameleonCountedColor - -- (id)initWithColor:(UIColor *)color count:(NSUInteger)count { - - if ((self = [super init])) { - self.color = color; - self.count = count; - } - - return self; -} - -- (NSComparisonResult)compare:(ChameleonCountedColor *)object { - - if ([object isKindOfClass:[ChameleonCountedColor class]]) { - if (self.count < object.count) - return NSOrderedDescending; - else if (self.count == object.count) - return NSOrderedSame; - } - - return NSOrderedAscending; -} - - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIButton+Chameleon.h b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIButton+Chameleon.h deleted file mode 100644 index c0fecea..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIButton+Chameleon.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UIButton+Chameleon.h -// Chameleon -// -// Created by Vicc Alexander on 9/20/15. -// Copyright © 2015 Vicc Alexander. All rights reserved. -// - -#import - -@interface UIButton (Chameleon) - -- (void)setSubstituteFontName:(NSString *)name UI_APPEARANCE_SELECTOR; - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIButton+Chameleon.m b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIButton+Chameleon.m deleted file mode 100644 index a1e896f..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIButton+Chameleon.m +++ /dev/null @@ -1,23 +0,0 @@ -// -// UIButton+Chameleon.m -// Chameleon -// -// Created by Vicc Alexander on 9/20/15. -// Copyright © 2015 Vicc Alexander. All rights reserved. -// - -#import "UIButton+Chameleon.h" - -@implementation UIButton (Chameleon) - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - -- (void)setSubstituteFontName:(NSString *)name UI_APPEARANCE_SELECTOR { - - self.font = [UIFont fontWithName:name size:self.font.pointSize]; -} - -#pragma GCC diagnostic pop - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIColor+Chameleon.h b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIColor+Chameleon.h deleted file mode 100755 index b744078..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIColor+Chameleon.h +++ /dev/null @@ -1,648 +0,0 @@ - -// UIColor+Chameleon.h - -/* - - The MIT License (MIT) - - Copyright (c) 2014-2015 Vicc Alexander. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - */ - -#import -#import - -#pragma mark - Enums - -/** - * Defines the gradient style and direction of the gradient color. - * - * @since 1.0 - */ -typedef NS_ENUM (NSUInteger, UIGradientStyle) { - /** - * Returns a gradual blend between colors originating at the leftmost point of an object's frame, and ending at the rightmost point of the object's frame. - * - * @since 1.0 - */ - UIGradientStyleLeftToRight, - /** - * Returns a gradual blend between colors originating at the center of an object's frame, and ending at all edges of the object's frame. NOTE: Supports a Maximum of 2 Colors. - * - * @since 1.0 - */ - UIGradientStyleRadial, - /** - * Returns a gradual blend between colors originating at the topmost point of an object's frame, and ending at the bottommost point of the object's frame. - * - * @since 1.0 - */ - UIGradientStyleTopToBottom -}; - -/** - * Defines the shade of a any flat color. - * - * @since 1.0 - */ -typedef NS_ENUM (NSInteger, UIShadeStyle) { - /** - * Returns the light shade version of a flat color. - * - * @since 1.0 - */ - UIShadeStyleLight, - /** - * Returns the dark shade version of a flat color. - * - * @since 1.0 - */ - UIShadeStyleDark -}; - - -@interface UIColor (Chameleon) - -#pragma mark - Instance Variables - -/** - * Stores an object's UIColor image if the UIColor was created using colorWithPatternImage. - * - * @since 1.0 - */ - -@property (nonatomic, strong) UIImage *gradientImage; - -#pragma mark - Quick Shorthand Macros - -// Quick & Easy Shorthand for RGB x HSB Colors -// The reason we don't import our Macro file is to prevent naming conflicts. -#define rgba(r,g,b,a) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:a] -#define rgb(r,g,b) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:1.0] -#define hsba(h,s,b,a) [UIColor colorWithHue:h/360.0f saturation:s/100.0f brightness:b/100.0f alpha:a] -#define hsb(h,s,b) [UIColor colorWithHue:h/360.0f saturation:s/100.0f brightness:b/100.0f alpha:1.0] - -#pragma mark - Light Shades - -/** - * Returns a flat color object whose HSB values are 0.0, 0.0, 0.17 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatBlackColor; - -/** - * Returns a flat color object whose HSB values are 0.62, 0.50, 0.63 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatBlueColor; - -/** - * Returns a flat color object whose HSB values are 0.07, 0.45, 0.37 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatBrownColor; - -/** - * Returns a flat color object whose HSB values are 0.07, 0.31, 0.64 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatCoffeeColor; - -/** - * Returns a flat color object whose HSB values are 0.38, 0.45, 0.37 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatForestGreenColor; - -/** - * Returns a flat color object whose HSB values are 0.51, 0.10, 0.65 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatGrayColor; - -/** - * Returns a flat color object whose HSB values are 0.40, 0.77, 0.80 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatGreenColor; - -/** - * Returns a flat color object whose HSB values are 0.21, 0.70, 0.78 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatLimeColor; - -/** - * Returns a flat color object whose HSB values are 0.79, 0.51, 0.71 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatMagentaColor; - -/** - * Returns a flat color object whose HSB values are 0.01, 0.65, 0.47 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatMaroonColor; - -/** - * Returns a flat color object whose HSB values are 0.47, 0.86, 0.74 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatMintColor; - -/** - * Returns a flat color object whose HSB values are 0.58, 0.45, 0.37 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatNavyBlueColor; - -/** - * Returns a flat color object whose HSB values are 0.08, 0.85, 0.90 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatOrangeColor; - -/** - * Returns a flat color object whose HSB values are 0.90, 0.49, 0.96 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatPinkColor; - -/** - * Returns a flat color object whose HSB values are 0.83, 0.45, 0.37 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatPlumColor; - -/** - * Returns a flat color object whose HSB values are 0.62, 0.24, 0.95 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatPowderBlueColor; - -/** - * Returns a flat color object whose HSB values are 0.70, 0.52, 0.77 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatPurpleColor; - -/** - * Returns a flat color object whose HSB values are 0.02, 0.74, 0.91 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatRedColor; - -/** - * Returns a flat color object whose HSB values are 0.12, 0.25, 0.94 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatSandColor; - -/** - * Returns a flat color object whose HSB values are 0.57, 0.76, 0.86 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatSkyBlueColor; - -/** - * Returns a flat color object whose HSB values are 0.54, 0.55, 0.51 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatTealColor; - -/** - * Returns a flat color object whose HSB values are 0.99, 0.53, 0.94 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatWatermelonColor; - -/** - * Returns a flat color object whose HSB values are 0.53, 0.02, 0.95 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatWhiteColor; - -/** - * Returns a flat color object whose HSB values are 0.13, 0.99, 1.00 and whose alpha value is 1.0. - * - * @return A flat UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatYellowColor; - -#pragma mark - Dark Shades - -/** - * Returns a flat color object whose HSB values are 0.00, 0.00, 0.15 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatBlackColorDark; - -/** - * Returns a flat color object whose HSB values are 0.62, 0.56, 0.51 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatBlueColorDark; - -/** - * Returns a flat color object whose HSB values are 0.07, 0.45, 0.31 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatBrownColorDark; - -/** - * Returns a flat color object whose HSB values are 0.07, 0.34, 0.56 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatCoffeeColorDark; - -/** - * Returns a flat color object whose HSB values are 0.38, 0.44, 0.31 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatForestGreenColorDark; - -/** - * Returns a flat color object whose HSB values are 0.51, 0.10, 0.55 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatGrayColorDark; - -/** - * Returns a flat color object whose HSB values are 0.40, 0.78, 0.68 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatGreenColorDark; - -/** - * Returns a flat color object whose HSB values are 0.21, 0.81, 0.69 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatLimeColorDark; - -/** - * Returns a flat color object whose HSB values are 0.78, 0.61, 0.68 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatMagentaColorDark; - -/** - * Returns a flat color object whose HSB values are 0.01, 0.68, 0.40 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatMaroonColorDark; - -/** - * Returns a flat color object whose HSB values are 0.47, 0.86, 0.63 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatMintColorDark; - -/** - * Returns a flat color object whose HSB values are 0.58, 0.45, 0.31 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatNavyBlueColorDark; - -/** - * Returns a flat color object whose HSB values are 0.07, 1.00, 0.83 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatOrangeColorDark; - -/** - * Returns a flat color object whose HSB values are 0.91, 0.57, 0.83 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatPinkColorDark; - -/** - * Returns a flat color object whose HSB values are 0.83, 0.46, 0.31 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatPlumColorDark; - -/** - * Returns a flat color object whose HSB values are 0.62, 0.28, 0.84 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatPowderBlueColorDark; - -/** - * Returns a flat color object whose HSB values are 0.70, 0.56, 0.64 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatPurpleColorDark; - -/** - * Returns a flat color object whose HSB values are 0.02, 0.78, 0.75 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatRedColorDark; - -/** - * Returns a flat color object whose HSB values are 0.12, 0.30, 0.84 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatSandColorDark; - -/** - * Returns a flat color object whose HSB values are 0.57, 0.78, 0.73 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatSkyBlueColorDark; - -/** - * Returns a flat color object whose HSB values are 0.54, 0.54, 0.45 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatTealColorDark; - -/** - * Returns a flat color object whose HSB values are 0.99, 0.61, 0.85 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatWatermelonColorDark; - -/** - * Returns a flat color object whose HSB values are 0.57, 0.05, 0.78 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatWhiteColorDark; - -/** - * Returns a flat color object whose HSB values are 0.11, 1.00, 1.00 and whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - */ -+ (UIColor *)flatYellowColorDark; - -#pragma mark - Randomizing Colors - -/** - * Returns a randomly generated flat color object whose alpha value is 1.0. - * - * @return A flat @c UIColor object in the HSB colorspace. - * - * @since 1.0 - */ - -+ (UIColor *)randomFlatColor; - -/** - * Returns a randomly generated flat color object with an alpha value of 1.0 in either a light or dark shade. - * - * @param shadeStyle Specifies whether the randomly generated flat color should be a light or dark shade. - * - * @return A flat @c UIColor object in the HSB colorspace. - * - * @since 1.0 - */ -+ (UIColor *)colorWithRandomFlatColorOfShadeStyle:(UIShadeStyle)shadeStyle; - -/** - * Returns a randomly generated flat color object with an alpha value of 1.0 in either a light or dark shade. - * - * @param shadeStyle Specifies whether the randomly generated flat color should be a light or dark shade. - * @param alpha The opacity. - * - * @return A flat @c UIColor object in the HSB colorspace. - * - * @since 2.0 - */ -+ (UIColor *)colorWithRandomFlatColorOfShadeStyle:(UIShadeStyle)shadeStyle withAlpha:(CGFloat)alpha; - -#pragma mark - Averaging a Color - -/** - * Returns the average color generated by averaging the colors of a specified image. - * - * @param image A specified @c UIImage. - * - * @return A flat @c UIColor object in the HSB colorspace. - * - * @since 2.0 - */ -+ (UIColor *)colorWithAverageColorFromImage:(UIImage *)image; - -/** - * Returns the average color generated by averaging the colors of a specified image. - * - * @param image A specified @c UIImage. - * @param alpha The opacity. - * - * @return A flat @c UIColor object in the HSB colorspace. - * - * @since 2.0 - */ -+ (UIColor *)colorWithAverageColorFromImage:(UIImage *)image withAlpha:(CGFloat)alpha; - -#pragma mark - Complementary Colors - -/** - * Creates and returns a complementary flat color object 180 degrees away in the HSB colorspace from the specified color. - * - * @param color The color whose complementary color is being requested. - * - * @return A flat UIColor object in the HSB colorspace. - * - * @since 1.0 - */ - -+ (UIColor *)colorWithComplementaryFlatColorOf:(UIColor *)color; - -/** - * Creates and returns a complementary flat color object 180 degrees away in the HSB colorspace from the specified color. - * - * @param color The color whose complementary color is being requested. - * @param alpha The opacity. - * - * @return A flat UIColor object in the HSB colorspace. - * - * @since 2.0 - */ - -+ (UIColor *)colorWithComplementaryFlatColorOf:(UIColor *)color withAlpha:(CGFloat)alpha; - -#pragma mark - Contrasting Colors - -/** - * Creates and returns either a black or white color object depending on which contrasts more with a specified color. - * - * @param color The specified color of the contrast color that is being requested. - * @param isFlat Pass YES to return flat color objects. - * - * @return A UIColor object in the HSB colorspace. - * - * @since 1.0 - */ - -+ (UIColor *)colorWithContrastingBlackOrWhiteColorOn:(UIColor *)backgroundColor isFlat:(BOOL)flat; - -/** - * Creates and returns either a black or white color object depending on which contrasts more with a specified color. - * - * @param color The specified color of the contrast color that is being requested. - * @param isFlat Pass YES to return flat color objects. - * @param alpha The opacity. - * - * @return A UIColor object in the HSB colorspace. - * - * @since 2.0 - */ -+ (UIColor *)colorWithContrastingBlackOrWhiteColorOn:(UIColor *)backgroundColor isFlat:(BOOL)flat alpha:(CGFloat)alpha; - -#pragma mark - Gradient Colors - -/** - * Creates and returns a gradient as a color object with an alpha value of 1.0 - * - * @param gradientStyle Specifies the style and direction of the gradual blend between colors. - * @param frame The frame rectangle, which describes the view’s location and size in its superview’s coordinate system. - * @param colors An array of color objects used to create a gradient. - * - * @return A @c UIColor object using colorWithPattern. - * - * @since 2.0 - */ -+ (UIColor *)colorWithGradientStyle:(UIGradientStyle)gradientStyle withFrame:(CGRect)frame andColors:(NSArray *)colors; - -#pragma mark - Colors from Hex Strings - -/** - * Creates and returns a @c UIColor object based on the specified hex string. - * - * @param string The hex string. - * - * @return A @c UIColor object in the RGB colorspace. - * - * - * @since 2.0 - */ -+ (UIColor *)colorWithHexString:(NSString *)string; - -/** - * Creates and returns a @c UIColor object based on the specified hex string. - * - * @param string The hex string. - * @param alpha The opacity. - * - * @return A @c UIColor object in the RGB colorspace. - * - * - * @since 2.0 - */ -+ (UIColor *)colorWithHexString:(NSString *)string withAlpha:(CGFloat)alpha; - -#pragma mark - Instance Methods - -/** - * Creates and returns a flat color object closest to the specified color in the LAB colorspace. - * - * @return A flat version of the specified @c UIColor. - * - * @since 2.0 - */ -- (UIColor *)flatten; - -/** - * Creates and returns a darker shade of a specified color in the HSB space. - * - * @param percentage The value with which to darken a specified color. - * - * @return A @c UIColor object in the HSB space. - * - * @since 2.0 - */ -- (UIColor *)darkenByPercentage:(CGFloat)percentage; - -/** - * Creates and returns a lighter shade of a specified color in the HSB space. - * - * @param percentage The value with which to lighten a specified color. - * - * @return A @c UIColor object in the HSB space. - * - * @since 2.0 - */ -- (UIColor *)lightenByPercentage:(CGFloat)percentage; - -#pragma mark - Deprecated Methods - -/** - * Creates and returns a flat color object closest to the specified color in the LAB colorspace. - * - * @param color The specified color of the flat color that is being requested. - * - * @return A flat UIColor object in the RGB colorspace. - * - * @since 1.0 - */ -+ (UIColor *)colorWithFlatVersionOf:(UIColor *)color __attribute((deprecated(" Use -flatten: instead (First deprecated in Chameleon 2.0)."))); - - -@end - diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIColor+Chameleon.m b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIColor+Chameleon.m deleted file mode 100755 index f472fac..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIColor+Chameleon.m +++ /dev/null @@ -1,976 +0,0 @@ - -// UIColor+Chameleon.m - -/* - - The MIT License (MIT) - - Copyright (c) 2014-2015 Vicc Alexander. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - */ - -#import "UIColor+Chameleon.h" -#import "UIColor+ChameleonPrivate.h" -#import "ChameleonMacros.h" -#import - -@implementation UIColor (Chameleon) - -@dynamic gradientImage; - -#pragma mark - Chameleon - Getter & Setter Methods for Instance Variables - -+ (void)setGradientImage:(UIImage *)gradientImage { - - objc_setAssociatedObject(self, @selector(gradientImage), gradientImage, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -+ (UIImage *)gradientImage { - - return objc_getAssociatedObject(self, @selector(gradientImage)); -} - -#pragma mark - Chameleon - Light Shades - -+ (UIColor *)flatBlackColor { - return hsb(0, 0, 17); -} - -+ (UIColor *)flatBlueColor { - return hsb(224, 50, 63); -} - -+ (UIColor *)flatBrownColor { - return hsb(24, 45, 37); -} - -+ (UIColor *)flatCoffeeColor { - return hsb(25, 31, 64); -} - -+ (UIColor *)flatForestGreenColor { - return hsb(138, 45, 37); -} - -+ (UIColor *)flatGrayColor { - return hsb(184, 10, 65); -} - -+ (UIColor *)flatGreenColor { - return hsb(145, 77, 80); -} - -+ (UIColor *)flatLimeColor { - return hsb(74, 70, 78); -} - -+ (UIColor *)flatMagentaColor { - return hsb(283, 51, 71); -} - -+ (UIColor *)flatMaroonColor { - return hsb(5, 65, 47); -} - -+ (UIColor *)flatMintColor { - return hsb(168, 86, 74); -} - -+ (UIColor *)flatNavyBlueColor { - return hsb(210, 45, 37); -} - -+ (UIColor *)flatOrangeColor { - return hsb(28, 85, 90); -} - -+ (UIColor *)flatPinkColor { - return hsb(324, 49, 96); -} - -+ (UIColor *)flatPlumColor { - return hsb(300, 45, 37); -} - -+ (UIColor *)flatPowderBlueColor { - return hsb(222, 24, 95); -} - -+ (UIColor *)flatPurpleColor { - return hsb(253, 52, 77); -} - -+ (UIColor *)flatRedColor { - return hsb(6, 74, 91); -} - -+ (UIColor *)flatSandColor { - return hsb(42, 25, 94); -} - -+ (UIColor *)flatSkyBlueColor { - return hsb(204, 76, 86); -} - -+ (UIColor *)flatTealColor { - return hsb(195, 55, 51); -} - -+ (UIColor *)flatWatermelonColor { - return hsb(356, 53, 94); -} - -+ (UIColor *)flatWhiteColor { - return hsb(192, 2, 95); -} - -+ (UIColor *)flatYellowColor { - return hsb(48, 99, 100); -} - -#pragma mark - Chameleon - Dark Shades - -+ (UIColor *)flatBlackColorDark { - return hsb(0, 0, 15); -} - -+ (UIColor *)flatBlueColorDark { - return hsb(224, 56, 51); -} - -+ (UIColor *)flatBrownColorDark { - return hsb(25, 45, 31); -} - -+ (UIColor *)flatCoffeeColorDark { - return hsb(25, 34, 56); -} - -+ (UIColor *)flatForestGreenColorDark { - return hsb(135, 44, 31); -} - -+ (UIColor *)flatGrayColorDark { - return hsb(184, 10, 55); -} - -+ (UIColor *)flatGreenColorDark { - return hsb(145, 78, 68); -} - -+ (UIColor *)flatLimeColorDark { - return hsb(74, 81, 69); -} - -+ (UIColor *)flatMagentaColorDark { - return hsb(282, 61, 68); -} - -+ (UIColor *)flatMaroonColorDark { - return hsb(4, 68, 40); -} - -+ (UIColor *)flatMintColorDark { - return hsb(168, 86, 63); -} - -+ (UIColor *)flatNavyBlueColorDark { - return hsb(210, 45, 31); -} - -+ (UIColor *)flatOrangeColorDark { - return hsb(24, 100, 83); -} - -+ (UIColor *)flatPinkColorDark { - return hsb(327, 57, 83); -} - -+ (UIColor *)flatPlumColorDark { - return hsb(300, 46, 31); -} - -+ (UIColor *)flatPowderBlueColorDark { - return hsb(222, 28, 84); -} - -+ (UIColor *)flatPurpleColorDark { - return hsb(253, 56, 64); -} - -+ (UIColor *)flatRedColorDark { - return hsb(6, 78, 75); -} - -+ (UIColor *)flatSandColorDark { - return hsb(42, 30, 84); -} - -+ (UIColor *)flatSkyBlueColorDark { - return hsb(204, 78, 73); -} - -+ (UIColor *)flatTealColorDark { - return hsb(196, 54, 45); -} - -+ (UIColor *)flatWatermelonColorDark { - return hsb(358, 61, 85); -} - -+ (UIColor *)flatWhiteColorDark { - return hsb(204, 5, 78); -} - -+ (UIColor *)flatYellowColorDark { - return hsb(40, 100, 100); -} - -#pragma mark - Chameleon - "Color With" Methods - -+ (UIColor *)colorWithAverageColorFromImage:(UIImage *)image { - - return [self colorWithAverageColorFromImage:image withAlpha:1.0]; -} - -+ (UIColor *)colorWithAverageColorFromImage:(UIImage *)image withAlpha:(CGFloat)alpha { - - //Work within the RGB colorspoace - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - unsigned char rgba[4]; - CGContextRef context = CGBitmapContextCreate(rgba, 1, 1, 8, 4, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); - - //Draw our image down to 1x1 pixels - CGContextDrawImage(context, CGRectMake(0, 0, 1, 1), image.CGImage); - CGColorSpaceRelease(colorSpace); - CGContextRelease(context); - - //Check if image alpha is 0 - if (rgba[3] == 0) { - - CGFloat imageAlpha = ((CGFloat)rgba[3])/255.0; - CGFloat multiplier = imageAlpha/255.0; - - UIColor *averageColor = [UIColor colorWithRed:((CGFloat)rgba[0])*multiplier green:((CGFloat)rgba[1])*multiplier blue:((CGFloat)rgba[2])*multiplier alpha:imageAlpha]; - - //Improve color - averageColor = [averageColor colorWithMinimumSaturation:0.15]; - - //Return average color - return averageColor; - } - - else { - - //Get average - UIColor *averageColor = [UIColor colorWithRed:((CGFloat)rgba[0])/255.0 green:((CGFloat)rgba[1])/255.0 blue:((CGFloat)rgba[2])/255.0 alpha:alpha]; - - //Improve color - averageColor = [averageColor colorWithMinimumSaturation:0.15]; - - //Return average color - return averageColor; - } -} - -+ (UIColor *)colorWithComplementaryFlatColorOf:(UIColor *)color { - - return [[self class] colorWithComplementaryFlatColorOf:color withAlpha:1.0]; -} - -+ (UIColor *)colorWithComplementaryFlatColorOf:(UIColor *)color withAlpha:(CGFloat)alpha { - - //Check if input UIColor is a gradient aka a pattern - if (CGColorGetPattern(color.CGColor)) { - - //Let's find the average color of the image and contrast against that. - CGSize size = {1, 1}; - - //Create a 1x1 bitmap context - UIGraphicsBeginImageContext(size); - CGContextRef ctx = UIGraphicsGetCurrentContext(); - - //Set the interpolation quality to medium - CGContextSetInterpolationQuality(ctx, kCGInterpolationMedium); - - //Draw image scaled down to this 1x1 pixel - [[self gradientImage] drawInRect:(CGRect){.size = size} blendMode:kCGBlendModeCopy alpha:1]; - - //Read the RGB values from the context's buffer - uint8_t *data = CGBitmapContextGetData(ctx); - color = [UIColor colorWithRed:data[2] / 255.0f - green:data[1] / 255.0f - blue:data[0] / 255.0f - alpha:1]; - UIGraphicsEndImageContext(); - } - - //Extract & Check to make sure we have an actual color to work with (Clear returns clear) - CGFloat hue, saturation, brightness, alpha1; - [color getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha1]; - - //Check if color is transparent - if (alpha1 == 0) { - return [UIColor clearColor]; - } - - //Multiply our value by their max values to convert - hue *= 360; - saturation *= 100; - brightness *= 100; - - //Select a color with a hue 180 degrees away on the colorwheel (i.e. for 50 it would be 230). - hue += 180.0f; - if (hue > 360.f) { - hue -= 360.0f; - } - - //Round to the nearest whole number after multiplying - hue = roundf(hue); - saturation = roundf(saturation); - brightness = roundf(brightness); - - //Store complimentary nonflat color - UIColor *complimentaryNonFlatColor = [UIColor colorWithHue:hue/360.0 - saturation:saturation/100.0 - brightness:brightness/100.0 - alpha:alpha]; - - //Retrieve LAB values from our complimentary nonflat color & return nearest flat color - return [self colorWithFlatVersionOf:complimentaryNonFlatColor withAlpha:alpha]; -} - - -+ (UIColor *)colorWithFlatVersionOf:(UIColor *)color { - - //Return flat version with default alpha of 1.0 - return [[self class] colorWithFlatVersionOf:color withAlpha:1.0]; -} - -+ (UIColor *)colorWithFlatVersionFrom:(UIColor *)color { - CGFloat colorAlpha = 0; - [color getLightness:nil valueForA:nil valueForB:nil alpha:&colorAlpha]; - colorAlpha = colorAlpha > 0.0 ? colorAlpha : 1.0; - //Return flat version with default alpha of 1.0 - return [[self class] colorWithFlatVersionOf:color withAlpha:colorAlpha]; -} - -+ (UIColor *)colorWithFlatVersionOf:(UIColor *)color withAlpha:(CGFloat)alpha { - - //Check if input UIColor is a gradient aka a pattern - if (CGColorGetPattern(color.CGColor)) { - - //Let's find the average color of the image and contrast against that. - CGSize size = {1, 1}; - - //Create a 1x1 bitmap context - UIGraphicsBeginImageContext(size); - CGContextRef ctx = UIGraphicsGetCurrentContext(); - - //Set the interpolation quality to medium - CGContextSetInterpolationQuality(ctx, kCGInterpolationMedium); - - //Draw image scaled down to this 1x1 pixel - [[self gradientImage] drawInRect:(CGRect){.size = size} blendMode:kCGBlendModeCopy alpha:1]; - - //Read the RGB values from the context's buffer - uint8_t *data = CGBitmapContextGetData(ctx); - color = [UIColor colorWithRed:data[2] / 255.0f - green:data[1] / 255.0f - blue:data[0] / 255.0f - alpha:1]; - UIGraphicsEndImageContext(); - } - - //Create CGFloats to hold our color values - CGFloat L, A, B, alpha1; - - //Get LAB values for our color - [color getLightness:&L valueForA:&A valueForB:&B alpha:&alpha1]; - - if (![color getLightness:&L valueForA:&A valueForB:&B alpha:&alpha1]) { - return nil; - } - - //Find the nearest flat color - return [self nearestFlatColorForL:L A:A B:B alpha:alpha]; -} - -+ (UIColor *)colorWithContrastingBlackOrWhiteColorOn:(UIColor *)backgroundColor isFlat:(BOOL)flat { - - //Return color with default alpha value of 1.0 - return [[self class] colorWithContrastingBlackOrWhiteColorOn:backgroundColor isFlat:flat alpha:1.0]; -} - -+ (UIColor *)colorWithContrastingBlackOrWhiteColorOn:(UIColor *)backgroundColor - isFlat:(BOOL)flat - alpha:(CGFloat)alpha { - - //Check if UIColor is a gradient aka a pattern - if (CGColorGetPattern(backgroundColor.CGColor)) { - - //Let's find the average color of the image and contrast against that. - CGSize size = {1, 1}; - - //Create a 1x1 bitmap context - UIGraphicsBeginImageContext(size); - CGContextRef ctx = UIGraphicsGetCurrentContext(); - - //Set the interpolation quality to medium - CGContextSetInterpolationQuality(ctx, kCGInterpolationMedium); - - //Draw image scaled down to this 1x1 pixel - [[self gradientImage] drawInRect:(CGRect){.size = size} blendMode:kCGBlendModeCopy alpha:1]; - - //Read the RGB values from the context's buffer - uint8_t *data = CGBitmapContextGetData(ctx); - backgroundColor = [UIColor colorWithRed:data[2] / 255.0f - green:data[1] / 255.0f - blue:data[0] / 255.0f - alpha:1]; - UIGraphicsEndImageContext(); - } - - //Calculate Luminance - CGFloat luminance; - CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha1 = 0.0; - [backgroundColor getRed:&red green:&green blue:&blue alpha:&alpha1]; - - //Check if color is transparent - if (alpha == 0) { - return [UIColor clearColor]; - } - - // Relative luminance in colorimetric spaces - http://en.wikipedia.org/wiki/Luminance_(relative) - red *= 0.2126f; green *= 0.7152f; blue *= 0.0722f; - luminance = red + green + blue; - - if (flat == NO) { - return (luminance > 0.6f) ? rgba(0, 0, 0, alpha) : rgba(255, 255, 255, alpha); - } else { - return (luminance > 0.6f) ? hsba(0, 0, 15, alpha) : hsba(192, 2, 95, alpha); - } -} - -+ (UIColor *)colorWithGradientStyle:(UIGradientStyle)gradientStyle withFrame:(CGRect)frame andColors:(NSArray *)colors; { - - //Create our background gradient layer - CAGradientLayer *backgroundGradientLayer = [CAGradientLayer layer]; - - //Set the frame to our object's bounds - backgroundGradientLayer.frame = frame; - - //To simplfy formatting, we'll iterate through our colors array and create a mutable array with their CG counterparts - NSMutableArray *cgColors = [[NSMutableArray alloc] init]; - for (UIColor *color in colors) { - [cgColors addObject:(id)[color CGColor]]; - } - - switch (gradientStyle) { - case UIGradientStyleLeftToRight: { - - //Set out gradient's colors - backgroundGradientLayer.colors = cgColors; - - //Specify the direction our gradient will take - [backgroundGradientLayer setStartPoint:CGPointMake(0.0, 0.5)]; - [backgroundGradientLayer setEndPoint:CGPointMake(1.0, 0.5)]; - - //Convert our CALayer to a UIImage object - UIGraphicsBeginImageContextWithOptions(backgroundGradientLayer.bounds.size,NO, [UIScreen mainScreen].scale); - [backgroundGradientLayer renderInContext:UIGraphicsGetCurrentContext()]; - UIImage *backgroundColorImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - [self setGradientImage:backgroundColorImage]; - return [UIColor colorWithPatternImage:backgroundColorImage]; - } - - case UIGradientStyleRadial: { - UIGraphicsBeginImageContextWithOptions(frame.size,NO, [UIScreen mainScreen].scale); - - //Specific the spread of the gradient (For now this gradient only takes 2 locations) - CGFloat locations[2] = {0.0, 1.0}; - - //Default to the RGB Colorspace - CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB(); - CFArrayRef arrayRef = (__bridge CFArrayRef)cgColors; - - //Create our Fradient - CGGradientRef myGradient = CGGradientCreateWithColors(myColorspace, arrayRef, locations); - - - // Normalise the 0-1 ranged inputs to the width of the image - CGPoint myCentrePoint = CGPointMake(0.5 * frame.size.width, 0.5 * frame.size.height); - float myRadius = MIN(frame.size.width, frame.size.height) * 1.0; - - // Draw our Gradient - CGContextDrawRadialGradient (UIGraphicsGetCurrentContext(), myGradient, myCentrePoint, - 0, myCentrePoint, myRadius, - kCGGradientDrawsAfterEndLocation); - - // Grab it as an Image - UIImage *backgroundColorImage = UIGraphicsGetImageFromCurrentImageContext(); - - // Clean up - CGColorSpaceRelease(myColorspace); // Necessary? - CGGradientRelease(myGradient); // Necessary? - UIGraphicsEndImageContext(); - - [self setGradientImage:backgroundColorImage]; - return [UIColor colorWithPatternImage:backgroundColorImage]; - } - - case UIGradientStyleTopToBottom: - default: { - - //Set out gradient's colors - backgroundGradientLayer.colors = cgColors; - - //Convert our CALayer to a UIImage object - UIGraphicsBeginImageContextWithOptions(backgroundGradientLayer.bounds.size,NO, [UIScreen mainScreen].scale); - [backgroundGradientLayer renderInContext:UIGraphicsGetCurrentContext()]; - UIImage *backgroundColorImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - [self setGradientImage:backgroundColorImage]; - return [UIColor colorWithPatternImage:backgroundColorImage]; - } - - } -} - -+ (UIColor *)colorWithHexString:(NSString *)string { - - //Color with string and a defualt alpha value of 1.0 - return [self colorWithHexString:string withAlpha:1.0]; -} - -+ (UIColor *)colorWithHexString:(NSString *)string withAlpha:(CGFloat)alpha { - - //Quick return in case string is empty - if (string.length == 0) { - return nil; - } - - //Check to see if we need to add a hashtag - if('#' != [string characterAtIndex:0]) { - string = [NSString stringWithFormat:@"#%@", string]; - } - - //Make sure we have a working string length - if (string.length != 7 && string.length != 4) { - - #ifdef DEBUG - NSLog(@"Unsupported string format: %@", string); - #endif - - return nil; - } - - //Check for short hex strings - if(string.length == 4) { - - //Convert to full length hex string - string = [NSString stringWithFormat:@"#%@%@%@%@%@%@", - [string substringWithRange:NSMakeRange(1, 1)],[string substringWithRange:NSMakeRange(1, 1)], - [string substringWithRange:NSMakeRange(2, 1)],[string substringWithRange:NSMakeRange(2, 1)], - [string substringWithRange:NSMakeRange(3, 1)],[string substringWithRange:NSMakeRange(3, 1)]]; - } - - NSString *redHex = [NSString stringWithFormat:@"0x%@", [string substringWithRange:NSMakeRange(1, 2)]]; - unsigned red = [[self class] hexValueToUnsigned:redHex]; - - NSString *greenHex = [NSString stringWithFormat:@"0x%@", [string substringWithRange:NSMakeRange(3, 2)]]; - unsigned green = [[self class] hexValueToUnsigned:greenHex]; - - NSString *blueHex = [NSString stringWithFormat:@"0x%@", [string substringWithRange:NSMakeRange(5, 2)]]; - unsigned blue = [[self class] hexValueToUnsigned:blueHex]; - - return [UIColor colorWithRed:(float)red/255 green:(float)green/255 blue:(float)blue/255 alpha:alpha]; -} - -+ (unsigned)hexValueToUnsigned:(NSString *)hexValue { - - //Define default unsigned value - unsigned value = 0; - - //Scan unsigned value - NSScanner *hexValueScanner = [NSScanner scannerWithString:hexValue]; - [hexValueScanner scanHexInt:&value]; - - //Return found value - return value; -} - -#pragma mark - Chameleon - Random Color Methods - -+ (NSInteger)generateRandomNumberWithMax:(NSInteger)max { - - //Choose a random number between 0 and our number of available colors - return arc4random_uniform((UInt32)max); -} - -+ (UIColor *)randomFlatColor { - - //Number of colors to choose from - const uint32_t numberOfPossibleColors = 48; - - //Chose one of those colors at random - NSInteger randomColorChosen = [[self class] generateRandomNumberWithMax:numberOfPossibleColors]; - - //Check if a previous random number exists - if (![[NSUserDefaults standardUserDefaults] integerForKey:@"previousRandomNumber"]) { - - //If no previous number exists, save it as such and find the matching color - [[NSUserDefaults standardUserDefaults] setInteger:randomColorChosen forKey:@"previousRandomNumber"]; - [[NSUserDefaults standardUserDefaults] synchronize]; - - } else { - - //Keep generating a random number until it is different than the one generated last time - while (randomColorChosen == [[NSUserDefaults standardUserDefaults] integerForKey:@"previousRandomNumber"]) { - randomColorChosen = [[self class] generateRandomNumberWithMax:numberOfPossibleColors]; - } - - //Once a new number has been generated then store it as the previous number for next time and proceed - [[NSUserDefaults standardUserDefaults] setInteger:randomColorChosen forKey:@"previousRandomNumber"]; - [[NSUserDefaults standardUserDefaults] synchronize]; - } - - return [[self flatColors] objectAtIndex:randomColorChosen]; -} - -+ (UIColor *)colorWithRandomFlatColorOfShadeStyle:(UIShadeStyle)shadeStyle { - - //Return color with default alpha value of 1.0 - return [[self class] colorWithRandomFlatColorOfShadeStyle:shadeStyle withAlpha:1.0]; -} - -+ (UIColor *)colorWithRandomFlatColorOfShadeStyle:(UIShadeStyle)shadeStyle withAlpha:(CGFloat)alpha { - - //Number of colors to choose from - const NSInteger numberOfPossibleColors = 24; - - //Chose one of those colors at random - NSInteger randomColorChosen = [[self class] generateRandomNumberWithMax:numberOfPossibleColors]; - - //Check if a previous random number exists - if (![[NSUserDefaults standardUserDefaults] integerForKey:@"previousRandomNumber"]) { - - //If no previous number exists, save it as such and find the matching color - [[NSUserDefaults standardUserDefaults] setInteger:randomColorChosen forKey:@"previousRandomNumber"]; - [[NSUserDefaults standardUserDefaults] synchronize]; - - } else { - - //Keep generating a random number until it is different than the one generated last time - while (randomColorChosen == [[NSUserDefaults standardUserDefaults] integerForKey:@"previousRandomNumber"]) { - randomColorChosen = [[self class] generateRandomNumberWithMax:numberOfPossibleColors]; - } - - //Once a new number has been generated then store it as the previous number for next time and proceed - [[NSUserDefaults standardUserDefaults] setInteger:randomColorChosen forKey:@"previousRandomNumber"]; - [[NSUserDefaults standardUserDefaults] synchronize]; - } - - //Assign a random color based on randomColorChosen - UIColor *randomColor; - - //Return a color depending on the specified shade - switch (shadeStyle) { - case UIShadeStyleDark: { - - NSArray *darkColors = @[FlatBlackDark, FlatBlueDark, FlatBrownDark, FlatCoffeeDark, FlatForestGreenDark, FlatGrayDark, FlatGreenDark, FlatLimeDark, FlatMagentaDark, FlatMaroonDark, FlatMintDark, FlatNavyBlueDark, FlatOrangeDark, FlatPinkDark, FlatPlumDark, FlatPowderBlueDark, FlatPurpleDark, FlatRedDark, FlatSandDark, FlatSkyBlueDark, FlatTealDark, FlatWatermelonDark, FlatWhiteDark, FlatYellowDark]; - - randomColor = [darkColors objectAtIndex:randomColorChosen]; - break; - } - - case UIShadeStyleLight: - default: { - - NSArray *lightColors = @[FlatBlack, FlatBlue, FlatBrown, FlatCoffee, FlatForestGreen, FlatGray, FlatGreen, FlatLime, FlatMagenta, FlatMaroon, FlatMint, FlatNavyBlue, FlatOrange, FlatPink, FlatPlum, FlatPowderBlue, FlatPurple, FlatRed, FlatSand, FlatSkyBlue, FlatTeal, FlatWatermelon, FlatWhite, FlatYellow]; - - randomColor = [lightColors objectAtIndex:randomColorChosen]; - break; - } - } - - //Return color with correct alpha value - randomColor = [randomColor colorWithAlphaComponent:alpha]; - - return randomColor; -} - -#pragma mark - Chameleon Instance Methods - -- (UIColor *)flatten { - - return [UIColor colorWithFlatVersionFrom:self]; -} - -- (UIColor *)darkenByPercentage:(CGFloat)percentage { - - //Define HSBA values - CGFloat h, s, b, a; - - //Check if HSBA values exist - if ([self getHue:&h saturation:&s brightness:&b alpha:&a]) { - - //Make sure our percentage is greater than 0 - if (percentage > 0) { - b = MIN(b - percentage, 1.0); - } - - //Return darker color - return [UIColor colorWithHue:h saturation:s brightness:b alpha:a]; - } - - return nil; -} - -- (UIColor *)lightenByPercentage:(CGFloat)percentage { - - //Define HSBA values - CGFloat h, s, b, a; - - //Check if HSBA values exist - if ([self getHue:&h saturation:&s brightness:&b alpha:&a]) { - - //Make sure our percentage is greater than 0 - if (percentage > 0) { - b = MIN(b + percentage, 1.0); - } - - //Return lighter color - return [UIColor colorWithHue:h saturation:s brightness:b alpha:a]; - } - - return nil; -} - -- (BOOL)isEqualToColor:(UIColor *)color { - - //Check if both colors are in the Monochrome / RGB color space - if ([self isMonochromeOrRGB] && [color isMonochromeOrRGB]) { - - //Return comparison - return self.RGBAValue == color.RGBAValue; - } - - //Return comparison - return [self isEqual:color]; -} - -#pragma mark - Chameleon Internal Methods - -//Array of all our colors -+ (NSArray *)flatColors { - - return @[FlatBlack, FlatBlackDark, FlatBlue, FlatBlueDark, FlatBrown, FlatBrownDark, FlatCoffee, FlatCoffeeDark, FlatForestGreen, FlatForestGreenDark, FlatGray, FlatGrayDark, FlatGreen, FlatGreenDark, FlatLime, FlatLimeDark, FlatMagenta, FlatMagentaDark, FlatMaroon, FlatMaroonDark, FlatMint, FlatMintDark, FlatNavyBlue, FlatNavyBlueDark, FlatOrange, FlatOrangeDark, FlatPink, FlatPinkDark, FlatPlum, FlatPlumDark, FlatPowderBlue, FlatPowderBlueDark, FlatPurple, FlatPurpleDark, FlatRed, FlatRedDark, FlatSand, FlatSandDark, FlatSkyBlue, FlatSkyBlueDark, FlatTeal, FlatTealDark, FlatWatermelon, FlatWatermelonDark, FlatWhite, FlatWhiteDark, FlatYellow, FlatYellowDark]; -} - -- (uint32_t)RGBAValue { - - CGFloat rgba[4]; - [self getRGBAComponents:rgba]; - uint8_t red = rgba[0]*255; - uint8_t green = rgba[1]*255; - uint8_t blue = rgba[2]*255; - uint8_t alpha = rgba[3]*255; - - return (red << 24) + (green << 16) + (blue << 8) + alpha; -} - -- (void)getRGBAComponents:(CGFloat[4])rgba { - - CGColorSpaceModel model = CGColorSpaceGetModel(CGColorGetColorSpace(self.CGColor)); - const CGFloat *components = CGColorGetComponents(self.CGColor); - switch (model) { - - case kCGColorSpaceModelMonochrome: { - rgba[0] = components[0]; - rgba[1] = components[0]; - rgba[2] = components[0]; - rgba[3] = components[1]; - break; - } - - case kCGColorSpaceModelRGB: { - rgba[0] = components[0]; - rgba[1] = components[1]; - rgba[2] = components[2]; - rgba[3] = components[3]; - break; - } - - case kCGColorSpaceModelCMYK: - case kCGColorSpaceModelDeviceN: - case kCGColorSpaceModelIndexed: - case kCGColorSpaceModelLab: - case kCGColorSpaceModelPattern: - case kCGColorSpaceModelUnknown: { - - #ifdef DEBUG - NSLog(@"Unsupported color model: %i", model); - #endif - - rgba[0] = 0.0f; - rgba[1] = 0.0f; - rgba[2] = 0.0f; - rgba[3] = 1.0f; - break; - } - } -} - -//Check if color is in the monochrome or rgb color space -- (BOOL)isMonochromeOrRGB { - - CGColorSpaceModel model = CGColorSpaceGetModel(CGColorGetColorSpace(self.CGColor)); - return model == kCGColorSpaceModelMonochrome || model == kCGColorSpaceModelRGB; -} - -//Calculate the total sum of differences - Euclidian distance -//Chameleon is now using the CIEDE2000 formula to calculate distances between 2 colors. -//More info: http://en.wikipedia.org/wiki/Color_difference -+ (float)totalSumOfDifferencesFroml1:(CGFloat)L1 l2:(CGFloat)L2 a1:(CGFloat)A1 - a2:(CGFloat)A2 b1:(CGFloat)B1 b2:(CGFloat)B2 { - - //Get C Values in LCH from LAB Values - CGFloat C1 = sqrt(pow(A1, 2) + pow(B1, 2)); - CGFloat C2 = sqrt(pow(A2, 2) + pow(B2, 2)); - - //CIE Weights - CGFloat KL = 1; - CGFloat KC = 1; - CGFloat KH = 1; - - //Variables specifically set for CIE:2000 - CGFloat DeltaPrimeL = L2 - L1; - CGFloat MeanL = ((L1 + L2) / 2); - CGFloat MeanC = ((C1 + C2) / 2); - CGFloat A1Prime = A1 + A1 / 2 * (1 - sqrt(pow(MeanC, 7.0) / (pow(MeanC, 7.0) + pow(25.0, 7.0)))); - CGFloat A2Prime = A2 + A2 / 2 * (1 - sqrt(pow(MeanC, 7.0) / (pow(MeanC, 7.0) + pow(25.0, 7.0)))); - CGFloat C1Prime = sqrt(pow(A1Prime, 2) + pow(B1, 2)); - CGFloat C2Prime = sqrt(pow(A2Prime, 2) + pow(B2, 2)); - CGFloat DeltaPrimeC = C1Prime - C2Prime; - CGFloat DeltaC = C1 - C2; - CGFloat MeanCPrime = (C1Prime + C2Prime) / 2; - CGFloat H1Prime = fmodf(atan2(B1, A1Prime), (360.0 * M_PI/180)); - CGFloat H2Prime = fmodf(atan2(B2, A2Prime), (360.0 * M_PI/180)); - - //Run everything through our △H' Function - CGFloat hDeltaPrime = 0; - if (fabs(H1Prime - H2Prime) <= (180.0 * M_PI/180)) { - - hDeltaPrime = H2Prime - H1Prime; - - } else if (H2Prime <= H1Prime) { - - hDeltaPrime = (H2Prime - H1Prime) + ((360.0 * M_PI/180)); - - } else { - - hDeltaPrime = (H2Prime - H1Prime) - ((360.0 * M_PI/180)); - } - - CGFloat deltaHPrime = 2 * (sqrt(C1Prime*C2Prime)) * sin(hDeltaPrime/2); - - //Get Mean H' Value - CGFloat MeanHPrime = 0; - if (fabs(H1Prime-H2Prime) > (180.0 * M_PI/180)) { - - MeanHPrime = (H1Prime + H2Prime + (360.0 * M_PI/180)) / 2; - - } else { - - MeanHPrime = (H1Prime + H2Prime) / 2; - } - - CGFloat T = 1 - 0.17 * cos(MeanHPrime - (30.0 * M_PI/180)) + 0.24 * cos(2 * MeanHPrime)+0.32 * cos(3 * MeanHPrime + (6.0 * M_PI/180)) - 0.20 * cos(4 * MeanHPrime - (63.0 * M_PI/180)); - - CGFloat SL = 1 + (0.015 * pow((MeanL - 50), 2))/sqrt(20 + pow((MeanL - 50), 2)); - CGFloat SC = 1 + 0.045 * MeanCPrime; - CGFloat SH = 1 + 0.015 * MeanCPrime * T; - - CGFloat RT = -2 * sqrt(pow(MeanCPrime, 7) / (pow(MeanCPrime, 7) + pow(25.0, 7))) * sin((60.0 * M_PI/180)* exp(-1 * pow((MeanCPrime - (275.0 * M_PI/180)) / (25.0 * M_PI/180), 2))); - - - //Get total difference - CGFloat TotalDifference = sqrt(pow((DeltaPrimeL / (KL * SL)), 2) + pow((DeltaPrimeC / (KC * SC)), 2) + pow((deltaHPrime / (KH * SH)), 2) + RT * (DeltaC / (KC * SC)) * (deltaHPrime / (KH * SH))); - - return TotalDifference; -} - -+ (UIColor *)nearestFlatColorForL:(CGFloat)l1 A:(CGFloat)a1 B:(CGFloat)b1 alpha:(CGFloat)alpha{ - - //Keep track of our index - float index = 0; - - //Start with a random big number to make sure the first comparison gets saved. - float smallestDistance = 1000000; - float previousDistance = 1000000; - float currentDistance; - - //Our values - CGFloat l2, a2, b2; - - //We're interested in the color with values returning the smallest sum of total differences so we need to cross reference our input color's values with every flat color's values - for (int i=0; i<[[self flatColors] count]; i++ ) { - - //Check that index is not zero - if (i!=0 ) { - //Extract LAB values from colors in array and store it as the previous index - [[self flatColors][i - 1] getLightness:&l2 valueForA:&a2 valueForB:&b2 alpha:nil]; - - previousDistance = [self totalSumOfDifferencesFroml1:l1 l2:l2 - a1:a1 a2:a2 - b1:b1 b2:b2]; - } - - //Extract LAB values from colors in array and store it as the current index - [[self flatColors][i] getLightness:&l2 valueForA:&a2 valueForB:&b2 alpha:nil]; - - currentDistance = [self totalSumOfDifferencesFroml1:l1 l2:l2 - a1:a1 a2:a2 - b1:b1 b2:b2]; - - //We're only interested in the smallest difference - if (currentDistance < previousDistance) { - if (currentDistance < smallestDistance) { - smallestDistance = currentDistance; - index = i; - } - } - } - - - //Collect the RGB Values of the color where the smallest difference was found - CGFloat red, green, blue; - [[[self flatColors] objectAtIndex:index] getRed:&red green:&green blue:&blue alpha:nil]; - - //Return the closest flat color - return rgba(red * 255, green * 255, blue * 255, alpha); -} - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIColor+ChameleonPrivate.h b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIColor+ChameleonPrivate.h deleted file mode 100644 index f81e69a..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIColor+ChameleonPrivate.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// UIColor+ChameleonPrivate.h -// Chameleon -// -// Created by Vicc Alexander on 6/6/15. -// Copyright (c) 2015 Vicc Alexander. All rights reserved. -// - -#import -#import - -@interface UIColor (ChameleonPrivate) - -@property (nonatomic, readwrite) NSUInteger count; - -#pragma mark - Class Methods - -+ (UIColor *)colorFromImage:(UIImage *)image atPoint:(CGPoint)point; - -- (UIColor *)colorWithMinimumSaturation:(CGFloat)saturation; - -#pragma mark - Instance Methods - -- (BOOL)isDistinct:(UIColor *)color; - -- (BOOL)getValueForX:(CGFloat *)X - valueForY:(CGFloat *)Y - valueForZ:(CGFloat *)Z - alpha:(CGFloat *)alpha; - -- (BOOL)getLightness:(CGFloat *)L - valueForA:(CGFloat *)A - valueForB:(CGFloat *)B - alpha:(CGFloat *)alpha; - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIColor+ChameleonPrivate.m b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIColor+ChameleonPrivate.m deleted file mode 100644 index 75831b0..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIColor+ChameleonPrivate.m +++ /dev/null @@ -1,251 +0,0 @@ -// -// UIColor+ChameleonPrivate.m -// Chameleon -// -// Created by Vicc Alexander on 6/6/15. -// Copyright (c) 2015 Vicc Alexander. All rights reserved. -// - -#import "UIColor+ChameleonPrivate.h" - -@implementation UIColor (ChameleonPrivate) - -@dynamic count; - -#pragma mark - Associated Objects Methods - -- (void)setCount:(NSUInteger)count { - objc_setAssociatedObject(self, @selector(count), [NSNumber numberWithUnsignedInteger:count], OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (NSUInteger)count { - NSNumber *number = objc_getAssociatedObject(self, @selector(count)); - return [number unsignedIntegerValue]; -} - -#pragma mark - Class Methods - -// Would not have been possible without - http://stackoverflow.com/a/1262893 -+ (UIColor *)colorFromImage:(UIImage *)image atPoint:(CGPoint)point { - - //Encapsulate our image - CGImageRef imageRef = image.CGImage; - NSUInteger width = CGImageGetWidth(imageRef); - NSUInteger height = CGImageGetHeight(imageRef); - - //Specify the colorspace we're in - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - - //Extract the data we need - unsigned char *rawData = (unsigned char *) calloc(height * width * 4, sizeof(unsigned char)); - NSUInteger bytesPerPixel = 4; - NSUInteger bytesPerRow = bytesPerPixel * width; - NSUInteger bitsPerComponent = 8; - CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, - colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); - //Release colorspace - CGColorSpaceRelease(colorSpace); - - //Draw and release image - CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef); - CGContextRelease(context); - - //rawData now contains the image data in RGBA8888 - NSInteger byteIndex = (bytesPerRow * point.y) + (point.x * bytesPerPixel); - - //Define our RGBA values - CGFloat red = (rawData[byteIndex] * 1.f) / 255.f; - CGFloat green = (rawData[byteIndex + 1] * 1.f) / 255.f; - CGFloat blue = (rawData[byteIndex + 2] * 1.f) / 255.f; - CGFloat alpha = (rawData[byteIndex + 3] * 1.0) / 255.f; - - //Free our rawData - free(rawData); - - //Return color - return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; -} - -- (UIColor *)colorWithMinimumSaturation:(CGFloat)saturation { - if (!self) - return nil; - - CGFloat h, s, b, a; - [self getHue:&h saturation:&s brightness:&b alpha:&a]; - - if (s < saturation) - return [UIColor colorWithHue:h saturation:saturation brightness:b alpha:a]; - - return self; -} - -#pragma mark - Instance Methods - -- (BOOL)isDistinct:(UIColor *)color { - - if (!self || !color) { - return NO; - } - - CGFloat r, g, b, a; - CGFloat rc, gc, bc, ac; - - [self getRed:&r green:&g blue:&b alpha:&a]; - [color getRed:&rc green:&gc blue:&bc alpha:&ac]; - - CGFloat threshold = 0.25f; - - if (fabs(r - rc) > threshold || fabs(g - gc) > threshold || - - fabs(b - bc) > threshold || fabs(a - ac) > threshold) { - - // Check for grays - if (abs(r - g < 0.03f && fabs(r - b) < 0.03f)) { - - if (fabs(rc - gc) < 0.03f && (fabs(rc - bc) < 0.03f)) { - return NO; - } - - } - - return YES; - } - - return NO; -} - -- (BOOL)getValueForX:(CGFloat *)X valueForY:(CGFloat *)Y valueForZ:(CGFloat *)Z alpha:(CGFloat *)alpha{ - - if ([self respondsToSelector:@selector(getRed:green:blue:alpha:)]) { - - //Get RGB values from the input color - CGFloat red = 0, green = 0, blue = 0, alpha1 = 0; - [self getRed:&red green:&green blue:&blue alpha:&alpha1]; - - //Run our input color's RGB values through the XYZ algorithm to convert them into XYZ values - NSArray *XYZValues = [self arrayOfXYZValuesForR:red G:green B:blue A:alpha1]; - *X = [XYZValues[0] floatValue]; - *Y = [XYZValues[1] floatValue]; - *Z = [XYZValues[2] floatValue]; - *alpha = [XYZValues[3] floatValue]; - - return YES; - } - - return NO; -} - -- (BOOL)getLightness:(CGFloat *)L valueForA:(CGFloat *)A valueForB:(CGFloat *)B alpha:(CGFloat *)alpha { - - if ([self respondsToSelector:@selector(getRed:green:blue:alpha:)]) { - - //Get RGB values from the input color - CGFloat red = 0, green = 0, blue = 0, alpha1 = 0; - [self getRed:&red green:&green blue:&blue alpha:&alpha1]; - - //Run our input color's RGB values through the XYZ algorithm to convert them into XYZ values - NSArray *XYZValues = [self arrayOfXYZValuesForR:red G:green B:blue A:alpha1]; - CGFloat X = [XYZValues[0] floatValue]; - CGFloat Y = [XYZValues[1] floatValue]; - CGFloat Z = [XYZValues[2] floatValue]; - - if (L != nil && A != nil && B != nil) { - //Run our new XYZ values through our LAB algorithm to convert them into LAB values - NSArray *LABValues = [self arrayOfLABValuesForX:X Y:Y Z:Z alpha:alpha1]; - *L = [LABValues[0] floatValue]; - *A = [LABValues[1] floatValue]; - *B = [LABValues[2] floatValue]; - } - - return YES; - } - - return NO; -} - -#pragma mark - Internal Helper Methods - -- (NSArray *)arrayOfXYZValuesForR:(CGFloat)red G:(CGFloat)green B:(CGFloat)blue A:(CGFloat)alpha { - - /* - Let's begin by converting from RGB to sRGB. - We're going to use the Reverse Transformation Equation. - http://en.wikipedia.org/wiki/SRGB - */ - - void (^sRGB)(CGFloat *C); - sRGB = ^(CGFloat *C) { - if (*C > 0.04045) { - *C = pow(((*C + 0.055)/ (1 + 0.055)), 2.40); - } else { - *C /= 12.92; - } - }; - - sRGB(&red); - sRGB(&green); - sRGB(&blue); - - /* - Now we're going to convert to XYZ values, using a matrix multiplication of the linear values - http://upload.wikimedia.org/math/4/3/3/433376fc18cccd887758beffb7e7c625.png - */ - - CGFloat X = (red * 0.4124) + (green * 0.3576) + (blue * 0.1805); - CGFloat Y = (red * 0.2126) + (green * 0.7152) + (blue * 0.0722); - CGFloat Z = (red * 0.0193) + (green * 0.1192) + (blue * 0.9505); - - X *= 100; - Y *= 100; - Z *= 100; - - return @[@(X), @(Y), @(Z), @(alpha)]; -} - -- (NSArray *)arrayOfLABValuesForX:(CGFloat)X Y:(CGFloat)Y Z:(CGFloat)Z alpha:(CGFloat)alpha { - - /* - The corresponding original XYZ values are such that white is D65 with unit luminance (X,Y,Z = 0.9505, 1.0000, 1.0890). - Calculations are also to assume the 2° standard colorimetric observer. - D65: http://en.wikipedia.org/wiki/CIE_Standard_Illuminant_D65 - Standard Colorimetric Observer: http://en.wikipedia.org/wiki/Standard_colorimetric_observer#CIE_standard_observer - - Since we mutiplied our XYZ values by 100 to produce a percentage we should also multiply our unit luminance values by 100. - */ - - X /= (0.9505 * 100); - Y /= (1.0000 * 100); - Z /= (1.0890 * 100); - - /* - Next we need to use the forward transformation function for CIELAB-CIEXYZ conversions - Function: http://upload.wikimedia.org/math/e/5/1/e513d25d50d406bfffb6ed3c854bd8a4.png - */ - - void (^XYZtoLAB)(CGFloat *f); - XYZtoLAB = ^(CGFloat *f) { - if ((*f > pow((6.0/29.0), 3.0)) ) { - *f = pow(*f, 1.0/3.0); - } else { - *f = (1/3)*pow((29.0/6.0), 2.0) * *f + 4/29.0; - } - }; - - XYZtoLAB(&X); - XYZtoLAB(&Y); - XYZtoLAB(&Z); - - /* - Next we get our LAB values using the following equations and the results from the function above - http://upload.wikimedia.org/math/0/0/6/006164b74314e2fdcdc34ac9d0aa6fe4.png - */ - - CGFloat L = (116 * Y) - 16; - CGFloat A = 500 * (X - Y); - CGFloat B = 200 * (Y - Z); - - - return @[@(L), @(A), @(B), @(alpha)]; -} - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIImage+ChameleonPrivate.h b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIImage+ChameleonPrivate.h deleted file mode 100644 index 91fdc45..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIImage+ChameleonPrivate.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// UIImage+ChameleonPrivate.h -// Chameleon -// -// Created by Vicc Alexander on 6/8/15. -// Copyright (c) 2015 Vicc Alexander. All rights reserved. -// - -#import - -@interface UIImage (ChameleonPrivate) - -#pragma mark - Class Methods - -+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize; - -#pragma mark - Instance Methods - -- (UIImage *)imageScaledToSize:(CGSize)newSize; - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIImage+ChameleonPrivate.m b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIImage+ChameleonPrivate.m deleted file mode 100644 index 4c934da..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIImage+ChameleonPrivate.m +++ /dev/null @@ -1,74 +0,0 @@ -// -// UIImage+ChameleonPrivate.m -// Chameleon -// -// Created by Vicc Alexander on 6/8/15. -// Copyright (c) 2015 Vicc Alexander. All rights reserved. -// - -#import "UIImage+ChameleonPrivate.h" - -@implementation UIImage (ChameleonPrivate) - -// Would not have been possible without - http://stackoverflow.com/a/1262893 -+ (UIColor *)colorFromImage:(UIImage *)image atPoint:(CGPoint)point { - - //Encapsulate our image - CGImageRef imageRef = image.CGImage; - NSUInteger width = CGImageGetWidth(imageRef); - NSUInteger height = CGImageGetHeight(imageRef); - - //Specify the colorspace we're in - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - - //Extract the data we need - unsigned char *rawData = (unsigned char *) calloc(height * width * 4, sizeof(unsigned char)); - NSUInteger bytesPerPixel = 4; - NSUInteger bytesPerRow = bytesPerPixel * width; - NSUInteger bitsPerComponent = 8; - CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, - colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); - //Release colorspace - CGColorSpaceRelease(colorSpace); - - //Draw and release image - CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef); - CGContextRelease(context); - - //rawData now contains the image data in RGBA8888 - NSInteger byteIndex = (bytesPerRow * point.y) + (point.x * bytesPerPixel); - - //Define our RGBA values - CGFloat red = (rawData[byteIndex] * 1.f) / 255.f; - CGFloat green = (rawData[byteIndex + 1] * 1.f) / 255.f; - CGFloat blue = (rawData[byteIndex + 2] * 1.f) / 255.f; - CGFloat alpha = (rawData[byteIndex + 3] * 1.0) / 255.f; - - //Free our rawData - free(rawData); - - //Return color - return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; -} - -+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize { - - UIGraphicsBeginImageContextWithOptions(newSize, NO, 1.0); - [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; - UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return newImage; -} - -#pragma mark - Instance Methods - -- (UIImage *)imageScaledToSize:(CGSize)newSize { - - UIGraphicsBeginImageContextWithOptions(newSize, NO, 1.0); - [self drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; - UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return newImage; -} - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UILabel+Chameleon.h b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UILabel+Chameleon.h deleted file mode 100644 index 6bc8e22..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UILabel+Chameleon.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UILabel+Chameleon.h -// Chameleon -// -// Created by Vicc Alexander on 9/20/15. -// Copyright © 2015 Vicc Alexander. All rights reserved. -// - -#import - -@interface UILabel (Chameleon) - -- (void)setSubstituteFontName:(NSString *)name UI_APPEARANCE_SELECTOR; - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UILabel+Chameleon.m b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UILabel+Chameleon.m deleted file mode 100644 index bb28af0..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UILabel+Chameleon.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// UILabel+Chameleon.m -// Chameleon -// -// Created by Vicc Alexander on 9/20/15. -// Copyright © 2015 Vicc Alexander. All rights reserved. -// - -#import "UILabel+Chameleon.h" - -@implementation UILabel (Chameleon) - -- (void)setSubstituteFontName:(NSString *)name UI_APPEARANCE_SELECTOR { - - self.font = [UIFont fontWithName:name size:self.font.pointSize]; -} - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UINavigationController+Chameleon.h b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UINavigationController+Chameleon.h deleted file mode 100644 index 6913d49..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UINavigationController+Chameleon.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// UINavigationController+Chameleon.h -// ChameleonDemo -// -// Created by Vicc Alexander on 6/4/15. -// Copyright (c) 2015 Vicc Alexander. All rights reserved. -// - -#import -#import "ChameleonEnums.h" - -@interface UINavigationController (Chameleon) - -/** - * Sets the status bar style for the specified @c UINavigationController and all its child controllers. - * - * @param statusBarStyle The style of the device's status bar. - * - * @note Chameleon introduces a new @c statusBarStyle called @c UIStatusBarStyleContrast. - * - * @since 2.0 - */ -- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle; - -/** - * Hides the hairline view at the bottom of a navigation bar. The default value is @c NO. - * - * @since 2.0.3 - */ -@property (nonatomic, assign) BOOL hidesNavigationBarHairline; - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UINavigationController+Chameleon.m b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UINavigationController+Chameleon.m deleted file mode 100644 index 1599815..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UINavigationController+Chameleon.m +++ /dev/null @@ -1,214 +0,0 @@ -// -// UINavigationController+Chameleon.m -// ChameleonDemo -// -// Created by Vicc Alexander on 6/4/15. -// Copyright (c) 2015 Vicc Alexander. All rights reserved. -// - -#import "UINavigationController+Chameleon.h" -#import - -#import "ChameleonConstants.h" -#import "ChameleonEnums.h" -#import "ChameleonMacros.h" - -#import "NSArray+Chameleon.h" -#import "UIColor+Chameleon.h" -#import "UIViewController+Chameleon.h" - -@interface UINavigationController () - -@property (readwrite) BOOL shouldContrast; -@property (readwrite) BOOL shouldUseLightContent; - -@end - -@implementation UINavigationController (Chameleon) - -@dynamic hidesNavigationBarHairline; - -#pragma mark - Swizzling - -+ (void)load { - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - - Class class = [self class]; - - SEL originalSelector = @selector(viewDidLoad); - SEL swizzledSelector = @selector(chameleon_viewDidLoad); - - Method originalMethod = class_getInstanceMethod(class, originalSelector); - Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); - - BOOL didAddMethod = - class_addMethod(class, - originalSelector, - method_getImplementation(swizzledMethod), - method_getTypeEncoding(swizzledMethod)); - - if (didAddMethod) { - class_replaceMethod(class, - swizzledSelector, - method_getImplementation(originalMethod), - method_getTypeEncoding(originalMethod)); - - } else { - method_exchangeImplementations(originalMethod, swizzledMethod); - } - }); -} - -- (void)chameleon_viewDidLoad { - - [self chameleon_viewDidLoad]; - - UIView *hairlineImageView = [self findHairlineImageViewUnder:self.navigationBar]; - - if (hairlineImageView) { - - if (self.hidesNavigationBarHairline) { - hairlineImageView.hidden = YES; - - } else { - hairlineImageView.hidden = NO; - } - } -} - -- (UIImageView *)findHairlineImageViewUnder:(UIView *)view { - - if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height <= 1.0) { - return (UIImageView *)view; - } - - for (UIView *subview in view.subviews) { - UIImageView *imageView = [self findHairlineImageViewUnder:subview]; - if (imageView) { - return imageView; - } - } - - return nil; -} - -#pragma mark - Runtime - -- (void)setShouldContrast:(BOOL)contrast { - - NSNumber *number = [NSNumber numberWithBool:contrast]; - objc_setAssociatedObject(self, @selector(shouldContrast), number, OBJC_ASSOCIATION_RETAIN); -} - -- (BOOL)shouldContrast { - - NSNumber *number = objc_getAssociatedObject(self, @selector(shouldContrast)); - return [number boolValue]; -} - -- (void)setShouldUseLightContent:(BOOL)shouldUseLightContent { - - NSNumber *number = [NSNumber numberWithBool:shouldUseLightContent]; - objc_setAssociatedObject(self, @selector(shouldUseLightContent), number, OBJC_ASSOCIATION_RETAIN); -} - -- (BOOL)shouldUseLightContent { - - NSNumber *number = objc_getAssociatedObject(self, @selector(shouldUseLightContent)); - return [number boolValue]; -} - -- (void)setHidesNavigationBarHairline:(BOOL)hidesNavigationBarHairline { - - NSNumber *number = [NSNumber numberWithBool:hidesNavigationBarHairline]; - objc_setAssociatedObject(self, @selector(hidesNavigationBarHairline), number, OBJC_ASSOCIATION_RETAIN); - - //Find Hairline Image - UIView *hairlineImageView = [self findHairlineImageViewUnder:self.navigationBar]; - - //Check if it exists - if (hairlineImageView) { - - //Check if we should hide it or not - if (hidesNavigationBarHairline) { - hairlineImageView.hidden = YES; - - } else { - hairlineImageView.hidden = NO; - } - } -} - -- (BOOL)hidesNavigationBarHairline { - - NSNumber *number = objc_getAssociatedObject(self, @selector(hidesNavigationBarHairline)); - return [number boolValue]; -} - - -#pragma mark - Public Methods - -- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle { - - if (statusBarStyle == UIStatusBarStyleContrast) { - - self.shouldContrast = YES; - - } else { - - if (statusBarStyle == UIStatusBarStyleLightContent) { - - self.shouldUseLightContent = YES; - - } else { - - self.shouldUseLightContent = NO; - } - - } -} - -#pragma mark - Private Methods - -- (UIStatusBarStyle)preferredStatusBarStyle { - - [super preferredStatusBarStyle]; - - if (self.shouldContrast) { - - return [self contrastingStatusBarStyleForColor:self.navigationBar.barTintColor]; - - } else { - - if (self.shouldUseLightContent) { - - return UIStatusBarStyleLightContent; - - } else { - - return UIStatusBarStyleDefault; - } - } -} - -- (UIStatusBarStyle)contrastingStatusBarStyleForColor:(UIColor *)backgroundColor { - - //Calculate Luminance - CGFloat luminance; - CGFloat red, green, blue; - - //Check for clear or uncalculatable color and assume white - if (![backgroundColor getRed:&red green:&green blue:&blue alpha:nil]) { - return UIStatusBarStyleDefault; - } - - //Relative luminance in colorimetric spaces - http://en.wikipedia.org/wiki/Luminance_(relative) - red *= 0.2126f; green *= 0.7152f; blue *= 0.0722f; - luminance = red + green + blue; - - return (luminance > 0.6f) ? UIStatusBarStyleDefault : UIStatusBarStyleLightContent; -} - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIView+ChameleonPrivate.h b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIView+ChameleonPrivate.h deleted file mode 100644 index cc3b6ce..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIView+ChameleonPrivate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// UIView+ChameleonPrivate.h -// Chameleon -// -// Created by Vicc Alexander on 6/4/15. -// Copyright (c) 2015 Vicc Alexander. All rights reserved. -// - -#import - -@interface UIView (ChameleonPrivate) - -- (BOOL)isTopViewInWindow; -- (UIView *)findTopMostViewForPoint:(CGPoint)point; - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIView+ChameleonPrivate.m b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIView+ChameleonPrivate.m deleted file mode 100644 index f4b860f..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIView+ChameleonPrivate.m +++ /dev/null @@ -1,46 +0,0 @@ -// -// UIView+ChameleonPrivate.m -// Chameleon -// -// Created by Vicc Alexander on 6/4/15. -// Copyright (c) 2015 Vicc Alexander. All rights reserved. -// - -#import "UIView+ChameleonPrivate.h" - -@implementation UIView (ChameleonPrivate) - -- (BOOL)isTopViewInWindow { - - if (!self.window) { - return NO; - } - - CGPoint centerPointInSelf = CGPointMake(CGRectGetMidX(self.bounds), - CGRectGetMidY(self.bounds)); - - CGPoint centerPointOfSelfInWindow = [self convertPoint:centerPointInSelf - toView:self.window]; - - UIView *view = [self.window findTopMostViewForPoint:centerPointOfSelfInWindow]; - BOOL isTopMost = view == self || [view isDescendantOfView:self]; - - return isTopMost; -} - -- (UIView *)findTopMostViewForPoint:(CGPoint)point { - - for (int i = (int)self.subviews.count - 1; i >= 0; i--) { - - UIView *subview = [self.subviews objectAtIndex:i]; - - if (!subview.hidden && CGRectContainsPoint(subview.frame, point) && subview.alpha > 0.01) { - CGPoint pointConverted = [self convertPoint:point toView:subview]; - return [subview findTopMostViewForPoint:pointConverted]; - } - } - - return self; -} - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIViewController+Chameleon.h b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIViewController+Chameleon.h deleted file mode 100644 index f84b945..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIViewController+Chameleon.h +++ /dev/null @@ -1,64 +0,0 @@ -// -// UIViewController+Chameleon.h -// Chameleon -// -// Created by Vicc Alexander on 6/4/15. -// Copyright (c) 2015 Vicc Alexander. All rights reserved. -// - -#import -#import "ChameleonEnums.h" - -@interface UIViewController (Chameleon) - -/** - * Sets the color theme for the specified view controller using a primary color and the specified content style. - * - * @param primaryColor The primary color. - * @param contentStyle The contentStyle. - * - * @since 2.0 - */ -- (void)setThemeUsingPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle; - -/** - * Sets the color theme for the specified view controller using a primary color, secondary color, and the specified content style. - * - * @param primaryColor The primary color. - * @param secondaryColor The secondary color. - * @param contentStyle The contentStyle. - * - * @since 2.0 - */ -- (void)setThemeUsingPrimaryColor:(UIColor *)primaryColor - withSecondaryColor:(UIColor *)secondaryColor - andContentStyle:(UIContentStyle)contentStyle; - -/** - * Sets the color theme for the specified view controller using a primary color, secondary color, font name, and the specified content style. - * - * @param primaryColor The primary color. - * @param secondaryColor The secondary color. - * @param fontName The main font to use for all text-based elements. - * @param contentStyle The contentStyle. - * - * @since 2.0 - */ -- (void)setThemeUsingPrimaryColor:(UIColor *)primaryColor - withSecondaryColor:(UIColor *)secondaryColor - usingFontName:(NSString *)fontName - andContentStyle:(UIContentStyle)contentStyle; - -/** - * Sets the status bar style for the specified @c UIViewController and all its child controllers. - * - * @param statusBarStyle The style of the device's status bar. - * - * @note Chameleon introduces a new @c statusBarStyle called @c UIStatusBarStyleContrast. - * - * @since 2.0 - */ -- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle; - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIViewController+Chameleon.m b/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIViewController+Chameleon.m deleted file mode 100644 index 394edd5..0000000 --- a/FoodbLog/Pods/ChameleonFramework/Pod/Classes/Objective-C/UIViewController+Chameleon.m +++ /dev/null @@ -1,858 +0,0 @@ -// -// UIViewController+Chameleon.m -// Chameleon -// -// Created by Vicc Alexander on 6/4/15. -// Copyright (c) 2015 Vicc Alexander. All rights reserved. -// - -#import "UIViewController+Chameleon.h" -#import - -#import "ChameleonConstants.h" -#import "ChameleonEnums.h" -#import "ChameleonMacros.h" - -#import "NSArray+Chameleon.h" -#import "UIColor+Chameleon.h" -#import "UIViewController+Chameleon.h" -#import "UIView+ChameleonPrivate.h" -#import "UILabel+Chameleon.h" -#import "UIButton+Chameleon.h" - -@interface UIViewController () - -@property (readwrite) BOOL shouldContrast; -@property (readwrite) BOOL shouldUseLightContent; - -@end - -@implementation UIViewController (Chameleon) - - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - -#pragma mark - Runtime - -- (void)setShouldContrast:(BOOL)contrast { - - NSNumber *number = [NSNumber numberWithBool:contrast]; - objc_setAssociatedObject(self, @selector(shouldContrast), number, OBJC_ASSOCIATION_RETAIN); -} - -- (BOOL)shouldContrast { - - NSNumber *number = objc_getAssociatedObject(self, @selector(shouldContrast)); - return [number boolValue]; -} - -- (void)setShouldUseLightContent:(BOOL)shouldUseLightContent { - - NSNumber *number = [NSNumber numberWithBool:shouldUseLightContent]; - objc_setAssociatedObject(self, @selector(shouldUseLightContent), number, OBJC_ASSOCIATION_RETAIN); -} - -- (BOOL)shouldUseLightContent { - - NSNumber *number = objc_getAssociatedObject(self, @selector(shouldUseLightContent)); - return [number boolValue]; -} - -#pragma mark - Swizzling - -+ (void)load { - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - - Class class = [self class]; - - SEL originalSelector = @selector(preferredStatusBarStyle); - SEL swizzledSelector = @selector(chameleon_preferredStatusBarStyle); - - Method originalMethod = class_getInstanceMethod(class, originalSelector); - Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); - - BOOL didAddMethod = - class_addMethod(class, - originalSelector, - method_getImplementation(swizzledMethod), - method_getTypeEncoding(swizzledMethod)); - - if (didAddMethod) { - class_replaceMethod(class, - swizzledSelector, - method_getImplementation(originalMethod), - method_getTypeEncoding(originalMethod)); - - } else { - method_exchangeImplementations(originalMethod, swizzledMethod); - } - }); -} - -#pragma mark - Methods - - -- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle { - - if (statusBarStyle == UIStatusBarStyleContrast) { - - [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate) withObject:nil afterDelay:0.01]; - self.shouldContrast = YES; - - } else { - - if (statusBarStyle == UIStatusBarStyleLightContent) { - - [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate) withObject:nil afterDelay:0.01]; - self.shouldUseLightContent = YES; - - } else { - - [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate) withObject:nil afterDelay:0.01]; - self.shouldUseLightContent = NO; - } - } - - [self preferredStatusBarStyle]; -} - -- (UIStatusBarStyle)chameleon_preferredStatusBarStyle { - - [self chameleon_preferredStatusBarStyle]; - - if (self.shouldContrast) { - - CGRect statusBarFrame = [UIApplication sharedApplication].statusBarFrame; - UIView *topView = [self.view findTopMostViewForPoint:CGPointMake(CGRectGetMidX(statusBarFrame), 2)]; - - return [self contrastingStatusBarStyleForColor:topView.backgroundColor]; - - } else { - - if (self.shouldUseLightContent) { - return UIStatusBarStyleLightContent; - - } else { - return UIStatusBarStyleDefault; - } - } -} - -- (void)setThemeUsingPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle { - - if (contentStyle == UIContentStyleContrast) { - - if ([ContrastColor(primaryColor, YES) isEqual:FlatWhite]) { - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; - } else { - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; - } - - } else if (contentStyle == UIContentStyleLight) { - - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; - - } else { - - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; - } - - [[self class] customizeBarButtonItemWithPrimaryColor:primaryColor contentStyle:contentStyle]; - [[self class] customizeButtonWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeNavigationBarWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizePageControlWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeProgressViewWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSearchBarWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSegmentedControlWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSliderWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeStepperWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSwitchWithPrimaryColor:primaryColor]; - [[self class] customizeTabBarWithBarTintColor:FlatWhite andTintColor:primaryColor]; - [[self class] customizeToolbarWithPrimaryColor:primaryColor withContentStyle:contentStyle]; -} - -- (void)setThemeUsingPrimaryColor:(UIColor *)primaryColor - withSecondaryColor:(UIColor *)secondaryColor - andContentStyle:(UIContentStyle)contentStyle { - - if (contentStyle == UIContentStyleContrast) { - - if ([ContrastColor(primaryColor, YES) isEqual:FlatWhite]) { - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; - } else { - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; - } - - } else if (contentStyle == UIContentStyleLight) { - - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; - - } else { - - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; - } - - [[self class] customizeBarButtonItemWithPrimaryColor:primaryColor contentStyle:contentStyle]; - [[self class] customizeButtonWithPrimaryColor:primaryColor secondaryColor:secondaryColor withContentStyle:contentStyle]; - [[self class] customizeNavigationBarWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizePageControlWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeProgressViewWithPrimaryColor:primaryColor andSecondaryColor:secondaryColor]; - [[self class] customizeSearchBarWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSegmentedControlWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSliderWithPrimaryColor:primaryColor andSecondaryColor:secondaryColor]; - [[self class] customizeStepperWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSwitchWithPrimaryColor:primaryColor andSecondaryColor:secondaryColor]; - [[self class] customizeTabBarWithBarTintColor:FlatWhite andTintColor:primaryColor]; - [[self class] customizeToolbarWithPrimaryColor:primaryColor withContentStyle:contentStyle]; -} - -- (void)setThemeUsingPrimaryColor:(UIColor *)primaryColor - withSecondaryColor:(UIColor *)secondaryColor - usingFontName:(NSString *)fontName - andContentStyle:(UIContentStyle)contentStyle { - - if (contentStyle == UIContentStyleContrast) { - - if ([ContrastColor(primaryColor, YES) isEqual:FlatWhite]) { - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; - } else { - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; - } - - } else if (contentStyle == UIContentStyleLight) { - - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; - - } else { - - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; - } - - [[UILabel appearance] setSubstituteFontName:fontName]; - [[UIButton appearance] setSubstituteFontName:fontName]; - - [[self class] customizeButtonWithPrimaryColor:primaryColor secondaryColor:secondaryColor withContentStyle:contentStyle]; - [[self class] customizeBarButtonItemWithPrimaryColor:primaryColor fontName:fontName fontSize:18 contentStyle:contentStyle]; - [[self class] customizeNavigationBarWithBarColor:primaryColor textColor:ContrastColor(primaryColor, YES) fontName:fontName fontSize:20 buttonColor:ContrastColor(primaryColor, YES)]; - [[self class] customizePageControlWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeProgressViewWithPrimaryColor:primaryColor andSecondaryColor:secondaryColor]; - [[self class] customizeSearchBarWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSegmentedControlWithPrimaryColor:primaryColor withFontName:fontName withFontSize:14 withContentStyle:contentStyle]; - [[self class] customizeSliderWithPrimaryColor:primaryColor andSecondaryColor:secondaryColor]; - [[self class] customizeStepperWithPrimaryColor:primaryColor withContentStyle:contentStyle]; - [[self class] customizeSwitchWithPrimaryColor:primaryColor andSecondaryColor:secondaryColor]; - [[self class] customizeTabBarWithBarTintColor:FlatWhite andTintColor:primaryColor]; - [[self class] customizeToolbarWithPrimaryColor:primaryColor withContentStyle:contentStyle]; -} - -#pragma mark - UIBarButtonItem - -+ (void)customizeBarButtonItemWithPrimaryColor:(UIColor *)primaryColor - contentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UIBarButtonItem appearance] setTintColor:primaryColor]; - [[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:contentColor]; - [[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTintColor:contentColor]; - [[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class], nil] setTintColor:contentColor]; -} - -+ (void)customizeBarButtonItemWithPrimaryColor:(UIColor *)primaryColor - fontName:(NSString *)fontName - fontSize:(float)fontSize - contentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UIBarButtonItem appearance] setTintColor:primaryColor]; - [[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:contentColor]; - [[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTintColor:contentColor]; - [[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class], nil] setTintColor:contentColor]; - - - if ([UIFont fontWithName:fontName size:fontSize]) { - [[UIBarButtonItem appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName:contentColor, NSFontAttributeName:[UIFont fontWithName:fontName size:fontSize]} forState:UIControlStateNormal]; - } -} - -#pragma mark - UIButton - -+ (void)customizeButtonWithPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UIButton appearance] setTintColor:contentColor]; - [[UIButton appearance] setBackgroundColor:primaryColor]; - - - [[UIButton appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:contentColor]; - [[UIButton appearanceWhenContainedIn:[UISearchBar class], nil] setBackgroundColor:ClearColor]; - - [[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil] setTintColor:contentColor]; - [[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil] setBackgroundColor:ClearColor]; - - [[UIButton appearanceWhenContainedIn:[UIToolbar class], nil] setTintColor:contentColor]; - [[UIButton appearanceWhenContainedIn:[UIToolbar class], nil] setBackgroundColor:ClearColor]; - - [[UIButton appearanceWhenContainedIn:[UIStepper class], nil] setTintColor:primaryColor]; - [[UIButton appearanceWhenContainedIn:[UIStepper class], nil] setBackgroundColor:ClearColor]; - - [[UIButton appearance] setTitleShadowColor:ClearColor forState:UIControlStateNormal]; - -} - -+ (void)customizeButtonWithPrimaryColor:(UIColor *)primaryColor - secondaryColor:(UIColor *)secondaryColor - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - UIColor *secondaryContentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - secondaryContentColor = ContrastColor(secondaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - secondaryContentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - secondaryContentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - secondaryContentColor = ContrastColor(secondaryColor, NO); - break; - } - } - - [[UIButton appearance] setTintColor:secondaryContentColor]; - [[UIButton appearance] setBackgroundColor:secondaryColor]; - - - [[UIButton appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:contentColor]; - [[UIButton appearanceWhenContainedIn:[UISearchBar class], nil] setBackgroundColor:ClearColor]; - - [[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil] setTintColor:contentColor]; - [[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil] setBackgroundColor:ClearColor]; - - [[UIButton appearanceWhenContainedIn:[UIToolbar class], nil] setTintColor:contentColor]; - [[UIButton appearanceWhenContainedIn:[UIToolbar class], nil] setBackgroundColor:ClearColor]; - - [[UIButton appearanceWhenContainedIn:[UIStepper class], nil] setTintColor:primaryColor]; - [[UIButton appearanceWhenContainedIn:[UIStepper class], nil] setBackgroundColor:ClearColor]; - - [[UIButton appearance] setTitleShadowColor:ClearColor forState:UIControlStateNormal]; - -} - -#pragma mark - UILabel - -+ (void)customizeLabelWithPrimaryColor:(UIColor *)primaryColor - fontName:(NSString *)fontName - fontSize:(CGFloat)fontSize - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UILabel appearanceWhenContainedIn:[self class], [UINavigationBar class], nil] setTextColor:contentColor]; - [[UILabel appearanceWhenContainedIn:[self class], [UIToolbar class], nil] setTextColor:contentColor]; - - UIFont *font = [UIFont fontWithName:fontName size:fontSize]; - - if (font) { - [[UILabel appearanceWhenContainedIn:[self class], nil] setFont:[UIFont fontWithName:fontName size:fontSize]]; - [[UILabel appearanceWhenContainedIn:[self class], [UITextField class], nil] setFont:[UIFont fontWithName:fontName size:14]]; - [[UILabel appearanceWhenContainedIn:[self class], [UIButton class], nil] setFont:[UIFont fontWithName:fontName size:18]]; - } -} - -#pragma mark - UINavigationBar - -+ (void)customizeNavigationBarWithPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UINavigationBar appearanceWhenContainedIn:[self class], nil] setBarTintColor:primaryColor]; - [[UINavigationBar appearanceWhenContainedIn:[self class], nil] setTintColor:contentColor]; - [[UINavigationBar appearanceWhenContainedIn:[self class], nil] setTitleTextAttributes:@{NSForegroundColorAttributeName:contentColor}]; - [[UINavigationBar appearanceWhenContainedIn:[self class], nil] setShadowImage:[UIImage new]]; -// [[UINavigationBar appearanceWhenContainedIn:[self class], nil] setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; -} - -+ (void)customizeNavigationBarWithBarColor:(UIColor *)barColor - textColor:(UIColor *)textColor - buttonColor:(UIColor *)buttonColor { - - [[UINavigationBar appearanceWhenContainedIn:[self class], nil] setBarTintColor:barColor]; - [[UINavigationBar appearanceWhenContainedIn:[self class], nil] setTintColor:buttonColor]; - [[UINavigationBar appearanceWhenContainedIn:[self class], nil] setTitleTextAttributes:@{NSForegroundColorAttributeName:textColor}]; - [[UINavigationBar appearanceWhenContainedIn:[self class], nil] setShadowImage:[UIImage new]]; -// [[UINavigationBar appearanceWhenContainedIn:[self class], nil] setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; -} - -+ (void)customizeNavigationBarWithBarColor:(UIColor *)barColor - textColor:(UIColor *)textColor - fontName:(NSString *)fontName - fontSize:(CGFloat)fontSize - buttonColor:(UIColor *)buttonColor { - - [[UINavigationBar appearanceWhenContainedIn:[self class], nil] setBarTintColor:barColor]; - [[UINavigationBar appearanceWhenContainedIn:[self class], nil] setTintColor:buttonColor]; - [[UINavigationBar appearanceWhenContainedIn:[self class], nil] setShadowImage:[UIImage new]]; -// [[UINavigationBar appearanceWhenContainedIn:[self class], nil] setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; - - if ([UIFont fontWithName:fontName size:fontSize]) { - [[UINavigationBar appearanceWhenContainedIn:[self class], nil] setTitleTextAttributes:@{ NSForegroundColorAttributeName:textColor, NSFontAttributeName:[UIFont fontWithName:fontName size:fontSize] }]; - } -} - -#pragma mark - UIPageControl - -+ (void)customizePageControlWithPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UIPageControl appearanceWhenContainedIn:[self class], nil] setCurrentPageIndicatorTintColor:primaryColor]; - [[UIPageControl appearanceWhenContainedIn:[self class], nil] setPageIndicatorTintColor:[primaryColor colorWithAlphaComponent:0.4]]; - [[UIPageControl appearanceWhenContainedIn:[self class], [UINavigationBar class], nil] setCurrentPageIndicatorTintColor:contentColor]; - [[UIPageControl appearanceWhenContainedIn:[self class], [UINavigationBar class], nil] setPageIndicatorTintColor:[contentColor colorWithAlphaComponent:0.4]]; - [[UIPageControl appearanceWhenContainedIn:[self class], [UIToolbar class], nil] setCurrentPageIndicatorTintColor:contentColor]; - [[UIPageControl appearanceWhenContainedIn:[self class], [UIToolbar class], nil] setPageIndicatorTintColor:[contentColor colorWithAlphaComponent:0.4]]; -} - -#pragma mark - UIProgressView - -+ (void)customizeProgressViewWithPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UIProgressView appearanceWhenContainedIn:[self class], nil] setProgressTintColor:primaryColor]; - [[UIProgressView appearanceWhenContainedIn:[self class], [UINavigationBar class], nil] setProgressTintColor:contentColor]; - [[UIProgressView appearanceWhenContainedIn:[self class], [UIToolbar class], nil] setProgressTintColor:contentColor]; - [[UIProgressView appearanceWhenContainedIn:[self class], nil] setTrackTintColor:[UIColor lightGrayColor]]; - [[UIProgressView appearanceWhenContainedIn:[self class], [UINavigationBar class], nil] setTrackTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; - [[UIProgressView appearanceWhenContainedIn:[self class], [UIToolbar class], nil] setTrackTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; -} - -+ (void)customizeProgressViewWithPrimaryColor:(UIColor *)primaryColor - andSecondaryColor:(UIColor *)secondaryColor { - - [[UIProgressView appearanceWhenContainedIn:[self class], nil] setProgressTintColor:secondaryColor]; - [[UIProgressView appearanceWhenContainedIn:[self class], [UINavigationBar class], nil] setProgressTintColor:secondaryColor]; - [[UIProgressView appearanceWhenContainedIn:[self class], [UIToolbar class], nil] setProgressTintColor:secondaryColor]; - [[UIProgressView appearanceWhenContainedIn:[self class], nil] setTrackTintColor:[UIColor lightGrayColor]]; - [[UIProgressView appearanceWhenContainedIn:[self class], [UINavigationBar class], nil] setTrackTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; - [[UIProgressView appearanceWhenContainedIn:[self class], [UIToolbar class], nil] setTrackTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; -} - -#pragma mark - UISearchBar - -+ (void)customizeSearchBarWithPrimaryColor:(UIColor *)primaryColor withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UISearchBar appearanceWhenContainedIn:[self class], nil] setBarTintColor:primaryColor]; - [[UISearchBar appearanceWhenContainedIn:[self class], nil] setBackgroundColor:primaryColor]; - [[UISearchBar appearanceWhenContainedIn:[self class], nil] setTintColor:contentColor]; - [[UISearchBar appearanceWhenContainedIn:[self class], nil] setBackgroundImage:[UIImage new] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault]; -} - -#pragma mark - UISegmentedControl - -+ (void)customizeSegmentedControlWithPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UISegmentedControl appearanceWhenContainedIn:[self class], nil] setTintColor:primaryColor]; - [[UISegmentedControl appearanceWhenContainedIn:[self class], [UINavigationBar class], nil] - setTintColor:contentColor]; - [[UISegmentedControl appearanceWhenContainedIn:[self class], [UIToolbar class], nil] - setTintColor:contentColor]; -} - -+ (void)customizeSegmentedControlWithPrimaryColor:(UIColor *)primaryColor - withFontName:(NSString *)fontName - withFontSize:(CGFloat)fontSize - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UISegmentedControl appearanceWhenContainedIn:[self class], nil] setTintColor:primaryColor]; - [[UISegmentedControl appearanceWhenContainedIn:[self class], [UINavigationBar class], nil] - setTintColor:contentColor]; - [[UISegmentedControl appearanceWhenContainedIn:[self class], [UIToolbar class], nil] - setTintColor:contentColor]; - - UIFont *font = [UIFont fontWithName:fontName size:fontSize]; - if (font) { - [[UISegmentedControl appearanceWhenContainedIn:[self class], nil] setTitleTextAttributes:@{NSFontAttributeName:font} - forState:UIControlStateNormal]; - } -} - -#pragma mark - UISlider - -+ (void)customizeSliderWithPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UISlider appearanceWhenContainedIn:[self class], nil] setMinimumTrackTintColor:primaryColor]; - [[UISlider appearanceWhenContainedIn:[self class], [UINavigationBar class], nil] setMinimumTrackTintColor:contentColor]; - [[UISlider appearanceWhenContainedIn:[self class], [UIToolbar class], nil] setMinimumTrackTintColor:contentColor]; - [[UISlider appearanceWhenContainedIn:[self class], nil] setMaximumTrackTintColor:[UIColor lightGrayColor]]; - [[UISlider appearanceWhenContainedIn:[self class], [UINavigationBar class], nil] setMaximumTrackTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; - [[UISlider appearanceWhenContainedIn:[self class], [UIToolbar class], nil] setMaximumTrackTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; -} - -+ (void)customizeSliderWithPrimaryColor:(UIColor *)primaryColor - andSecondaryColor:(UIColor *)secondaryColor { - - [[UISlider appearanceWhenContainedIn:[self class], nil] setMinimumTrackTintColor:secondaryColor]; - [[UISlider appearanceWhenContainedIn:[self class], [UINavigationBar class], nil] setMinimumTrackTintColor:secondaryColor]; - [[UISlider appearanceWhenContainedIn:[self class], [UIToolbar class], nil] setMinimumTrackTintColor:secondaryColor]; - [[UISlider appearanceWhenContainedIn:[self class], nil] setMaximumTrackTintColor:[UIColor lightGrayColor]]; - [[UISlider appearanceWhenContainedIn:[self class], [UINavigationBar class], nil] setMaximumTrackTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; - [[UISlider appearanceWhenContainedIn:[self class], [UIToolbar class], nil] setMaximumTrackTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; -} - -#pragma mark - UIStepper - -+ (void)customizeStepperWithPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UIStepper appearanceWhenContainedIn:[self class], nil] setTintColor:primaryColor]; - [[UIStepper appearanceWhenContainedIn:[self class], [UINavigationBar class], nil] - setTintColor:contentColor]; - [[UIStepper appearanceWhenContainedIn:[self class], [UIToolbar class], nil] - setTintColor:contentColor]; -} - -#pragma mark - UISwitch - -+ (void)customizeSwitchWithPrimaryColor:(UIColor *)primaryColor { - - [[UISwitch appearanceWhenContainedIn:[self class], nil] setOnTintColor:primaryColor]; - [[UISwitch appearanceWhenContainedIn:[self class], [UINavigationBar class], nil] setOnTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; - [[UISwitch appearanceWhenContainedIn:[self class], [UIToolbar class], nil] setOnTintColor:[[primaryColor darkenByPercentage:0.25] flatten]]; -} - -+ (void)customizeSwitchWithPrimaryColor:(UIColor *)primaryColor - andSecondaryColor:(UIColor *)secondaryColor { - - [[UISwitch appearanceWhenContainedIn:[self class], nil] setOnTintColor:secondaryColor]; - [[UISwitch appearanceWhenContainedIn:[self class], [UINavigationBar class], nil] setOnTintColor:secondaryColor]; - [[UISwitch appearanceWhenContainedIn:[self class], [UIToolbar class], nil] setOnTintColor:secondaryColor]; -} - -#pragma mark - UITabBar - -+ (void)customizeTabBarWithBarTintColor:(UIColor *)barTintColor - andTintColor:(UIColor *)tintColor { - - [[UITabBar appearanceWhenContainedIn:[self class], nil] setBarTintColor:barTintColor]; - [[UITabBar appearanceWhenContainedIn:[self class], nil] setTintColor:tintColor]; -} - -+ (void)customizeTabBarWithBarTintColor:(UIColor *)barTintColor - tintColor:(UIColor *)tintColor - fontName:(NSString *)fontName - fontSize:(CGFloat)fontSize { - - [[UITabBar appearanceWhenContainedIn:[self class], nil] setBarTintColor:barTintColor]; - [[UITabBar appearanceWhenContainedIn:[self class], nil] setTintColor:tintColor]; - - UIFont *font = [UIFont fontWithName:fontName size:fontSize]; - if (font) { - [[UITabBarItem appearanceWhenContainedIn:[self class], nil] setTitleTextAttributes:@{NSFontAttributeName:font} - forState:UIControlStateNormal]; - } -} - -#pragma mark - UIToolbar - -+ (void)customizeToolbarWithPrimaryColor:(UIColor *)primaryColor - withContentStyle:(UIContentStyle)contentStyle { - - UIColor *contentColor; - switch (contentStyle) { - case UIContentStyleContrast: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - case UIContentStyleLight: { - contentColor = [UIColor whiteColor]; - break; - } - case UIContentStyleDark: { - contentColor = FlatBlackDark; - break; - } - default: { - contentColor = ContrastColor(primaryColor, NO); - break; - } - } - - [[UIToolbar appearanceWhenContainedIn:[self class], nil] setTintColor:contentColor]; - [[UIToolbar appearanceWhenContainedIn:[self class], nil] setBarTintColor:primaryColor]; - [[UIToolbar appearanceWhenContainedIn:[self class], nil] setClipsToBounds:YES]; -} - - -#pragma mark - Private Methods - -- (UIStatusBarStyle)contrastingStatusBarStyleForColor:(UIColor *)backgroundColor { - - //Calculate Luminance - CGFloat luminance; - CGFloat red, green, blue; - - //Check for clear or uncalculatable color and assume white - if (![backgroundColor getRed:&red green:&green blue:&blue alpha:nil]) { - return UIStatusBarStyleDefault; - } - - //Relative luminance in colorimetric spaces - http://en.wikipedia.org/wiki/Luminance_(relative) - red *= 0.2126f; green *= 0.7152f; blue *= 0.0722f; - luminance = red + green + blue; - - return (luminance > 0.6f) ? UIStatusBarStyleDefault : UIStatusBarStyleLightContent; -} - -#pragma GCC diagnostic pop - -@end diff --git a/FoodbLog/Pods/ChameleonFramework/README.md b/FoodbLog/Pods/ChameleonFramework/README.md deleted file mode 100644 index 3add5de..0000000 --- a/FoodbLog/Pods/ChameleonFramework/README.md +++ /dev/null @@ -1,700 +0,0 @@ -

- Chameleon by Vicc Alexander -

- -

-Support Chameleon - Downloads - Platform: iOS 7+ - Language: Swift 2 - Carthage compatible - Cocoapods compatible - License: MIT -

- -## Introduction - -**Chameleon** is a lightweight, yet powerful, color framework for iOS (Objective-C & Swift). It is built on the idea that software applications should function effortlessly while simultaneously maintaining their beautiful interfaces. - -With Chameleon, you can easily stop tinkering with RGB values, wasting hours figuring out the right color combinations to use in your app, and worrying about whether your text will be readable on the various background colors of your app. - -### Features - -

- Features -

- -## Table of Contents -[● Product Features](https://github.com/ViccAlexander/Chameleon#-product-features) -[● Requirements](https://github.com/ViccAlexander/Chameleon#%EF%B8%8F-requirements) -[● License](https://github.com/ViccAlexander/Chameleon#-license) -[● Contributions](https://github.com/ViccAlexander/Chameleon#-contributions) -[● Documentation](https://github.com/ViccAlexander/Chameleon#-documentation) -[● Storyboard Add-On](https://github.com/ViccAlexander/Chameleon#storyboard-add-on) -[● Author](https://github.com/ViccAlexander/Chameleon#-author) -[● Special Thanks](https://github.com/ViccAlexander/Chameleon#-special-thanks) -[● To Do List](https://github.com/ViccAlexander/Chameleon#-to-do-list) -[● Change Log](https://github.com/ViccAlexander/Chameleon#-change-log) - - - -## 🌟 Product Features - -### 100% Flat & Gorgeous - -Chameleon features over 24 hand-picked colors that come in both light and dark shades. - -

- Swatches -

- -### Flat Color Schemes - -Chameleon equips you with 3 different classes of flat color schemes that can be generated from a flat or non-flat color. *In the examples below, the white stars indicate the color used to generate the schemes.* - -###### Analogous Flat Color Scheme - -

- Analogous Scheme -

- -###### Complementary Flat Color Scheme -

- Complementary Scheme -

- -###### Triadic Flat Color Scheme -

- Triadic Scheme -

- -### Contrasting Text -With a plethora of color choices available for text, it's difficult to choose one that all users will appreciate and be able to read. Whether you're in doubt of your text and tint color choices, or afraid to let users customize their profile colors because it may disturb the legibility or usability of the app, you no longer have to worry. With Chameleon, you can ensure that all text stands out independent of the background color. - -Oh... Chameleon works with the status bar as well. : ) - -

- Status Bar -

- -### Themes ![Beta](http://i.imgur.com/JyYiUJq.png) ![New](http://i.imgur.com/BX3b9ES.png) - -Chameleon now allows you easily theme your app with as little as **one line of code**. You can set a theme for all your views, and for specific views as well. - -

- Themes -

- -### Colors From Images ![New](http://i.imgur.com/BX3b9ES.png) - -Chameleon allows you to seamlessly extract non-flat or flat color schemes from images without hassle. You can also generate the average color from an image with ease. You can now mold the UI colors of a profile, or product based on an image! - -

- Colors from images -

- -### Gradient Colors -With iOS 7 & 8, Apple mainstreamed flat colors. Now, with the release of iOS 9, Chameleon strives to elevate the game once more. Say hello to gradient colors. Using one line of code, you can easily set any object's color properties to a gradient (background colors, text colors, tint colors, etc). Other features, like Chameleon's contrasting feature, can also be applied to create a seamless product. Experimentation is encouraged, and gutsiness is applauded! - -

- Gradients -

- -![](http://i.imgur.com/2jN72eh.png) - -### Xcode Quick Help Documentation ![New](http://i.imgur.com/BX3b9ES.png) - -Chameleon's documentation, while written as clearly and concisely as possible may still render some slightly confused. But don't fret! Staying true to our vision of simplifying the entire color process, we added Xcode Quick Help's Documentation Support! Simply highlight a Chameleon method or tap it with three fingers to find out more about what it is and what it does! - -

- Xcode Quick Help Documentation -

- -### Storyboard Palette ![New](http://i.imgur.com/BX3b9ES.png) - -If you're like me and love to use storyboard, Chameleon's got you covered. We've provided you with a quick and easy way to access Chameleon colors right from Storyboard, and any other app that uses the color picker (i.e. TextEdit). - -

- Chameleon Palette -

- -## ⚠️ Requirements - -* Objective-C or Swift -* Requires a minimum of iOS 7.0 for Objective-C (No active development for anything earlier, but may work with 6.0) and a minimum of iOS 8.0 for Swift. -* Requires Xcode 6.3 for use in any iOS Project - -## 🔑 License -Chameleon is released and distributed under the terms and conditions of the [MIT license](https://github.com/ViccAlexander/Chameleon/blob/master/LICENSE.md). - -## 👥 Contributions -If you run into problems, please open up an issue. We also actively welcome pull requests. By contributing to Chameleon you agree that your contributions will be licensed under its MIT license. - -If you use Chameleon in your app we would love to hear about it! Drop Vicc a line on [twitter](http://twitter.com/viccsmind). - -## 📗 Documentation -All methods, properties, and types available in Chameleon are documented below. - -#####Documentation Table of Contents -[● Installation](https://github.com/ViccAlexander/Chameleon#installation) -[● Storyboard-Add On](https://github.com/ViccAlexander/Chameleon#storyboard-add-on-) -[● Usage](https://github.com/ViccAlexander/Chameleon#usage) -[● UIColor Methods](https://github.com/ViccAlexander/Chameleon#uicolor-methods) -[● Colors From Images](https://github.com/ViccAlexander/Chameleon#colors-from-images--1) -[● UIStatusBarStyle Methods](https://github.com/ViccAlexander/Chameleon#uistatusbarstyle-methods) -[● Color Scheme Methods](https://github.com/ViccAlexander/Chameleon#color-schemes-methods) -[● Theme Methods](https://github.com/ViccAlexander/Chameleon#theme-methods-) - -###Installation -####CocoaPods Installation -Chameleon is now available on [CocoaPods](http://cocoapods.org). Simply add the following to your project Podfile, and you'll be good to go. - -######Objective-C -```ruby -use_frameworks! - -pod 'ChameleonFramework' -``` -######Swift -```ruby -use_frameworks! - -pod 'ChameleonFramework/Swift' -``` - -###### **Note:** Swift support for Chameleon 2.0 is almost complete. - -======= -####Carthage Installation -Add this to your Cartfile: -```ruby -github "ViccAlexander/Chameleon" -``` - -======= -####Manual Installation -If you rather install this framework manually, just drag and drop the Chameleon folder into your project, and make sure you check the following boxes. Note: Don't forget to manually import the *QuartzCore* & *CoreGraphics* framework if you plan on using gradient colors! - -

- Manual Installation -

- -If you're working with Swift and are manually installing Chameleon, there's an additional step. Make sure to download and drag the following file, [ChameleonShorthand.swift](https://github.com/ViccAlexander/Chameleon/blob/master/Pod/Classes/Swift/ChameleonShorthand.swift), into your project, and you'll be good to go. - -####Storyboard Add-On ![New](http://i.imgur.com/BX3b9ES.png) -Using Chameleon's awesome palette in Storyboard is easy! Simply download and install [Chameleon Palette](https://github.com/ViccAlexander/Chameleon/blob/master/Extras/Chameleon.dmg?raw=true). - -Once installed, make sure to restart XCode. You'll find all of Chameleon's colors in the Palette Color Picker whenever they're needed! :) - -

- Chameleon Palette -

- -

- Chameleon Palette -

- -###Usage -To use the myriad of features in Chameleon, include the following import: - -###### If you installed Chameleon using cocoapods: - -######Objective-C - -``` objective-c -#import -``` - -######Swift: -``` swift -import ChameleonFramework -``` - -###### If you installed Chameleon manually: -``` objective-c -#import "Chameleon.h" -``` -###UIColor Methods -[● Flat Colors](https://github.com/ViccAlexander/Chameleon#flat-colors) -[● Random Colors](https://github.com/ViccAlexander/Chameleon#random-colors) -[● Complementary Colors](https://github.com/ViccAlexander/Chameleon#complementary-colors) -[● Contrasting Colors](https://github.com/ViccAlexander/Chameleon#contrasting-colors) -[● Flattening Non-Flat Colors](https://github.com/ViccAlexander/Chameleon#flattening-non-flat-colors) -[● Gradient Colors](https://github.com/ViccAlexander/Chameleon#gradient-colors-1) -[● Hex Colors](https://github.com/ViccAlexander/Chameleon#hex-colors-) -[● Lighter & Darker Colors](https://github.com/ViccAlexander/Chameleon#lighter-and-darker-colors-) - -####Flat Colors -Using a flat color is as easy as adding any other color in your app (if not easier). For example, to set a view's background property to a flat color with a dark shade, you simply have to do the following: - -#####Normal Convention: - -######Objective-C -``` objective-c -self.view.backgroundColor = [UIColor flatGreenColorDark]; -``` -######Swift -``` swift -view.backgroundColor = UIColor.flatGreenColorDark() -``` - -#####Chameleon Shorthand: - -######Objective-C -``` objective-c -self.view.backgroundColor = FlatGreenDark; -``` -######Swift -``` swift -view.backgroundColor = FlatGreenDark() -``` - -Setting the color for a light shade is the same, except without adding the *Dark* suffix. (By default, all colors without a *Dark* suffix are light shades). For example: - -#####Normal Convention: -######Objective-C -``` objective-c -self.view.backgroundColor = [UIColor flatGreenColor]; -``` -######Swift -``` swift -view.backgroundColor = UIColor.flatGreenColor() -``` - -#####Chameleon Shorthand: - -######Objective-C -``` objective-c -self.view.backgroundColor = FlatGreen; -``` -######Swift -``` swift -view.backgroundColor = FlatGreen() -``` - -####Random Colors -There are two ways to generate a random flat color. If you have no preference as to whether you want a light shade or a dark shade, you can do the following: - -#####Normal Convention: -######Objective-C -``` objective-c -self.view.backgroundColor = [UIColor randomFlatColor]; -``` -######Swift -``` swift -view.backgroundColor = UIColor.randomFlatColor() -``` - -#####Chameleon Shorthand: -###### Objective-C -``` objective-c -self.view.backgroundColor = RandomFlatColor; -``` - -######Swift -``` swift -view.backgroundColor = RandomFlatColor() -``` - -Otherwise, you can perform the following method call to specify whether it should return either a light or dark shade: - -#####Normal Convention: -######Objective-C -``` objective-c -[UIColor colorWithRandomFlatColorOfShadeStyle:UIShadeStyleLight]; -``` - -######Swift -``` swift -UIColor(randomFlatColorOfShadeStyle:.Light) -``` - -#####Chameleon Shorthand: -######Objective-C -``` objective-c -RandomFlatColorWithShade(UIShadeStyleLight); -``` -######Swift -``` swift -RandomFlatColorWithShade(.Light) -``` - -**UIShadeStyles:** -- `UIShadeStyleLight` (`UIShadeStyle.Light` in Swift) -- `UIShadeStyleDark` (`UIShadeStyle.Dark` in Swift) - -####Complementary Colors -To generate a complementary color, perform the following method call, remembering to specify the color whose complement you want: - -#####Normal Convention: -######Objective-C -``` objective-c -[UIColor colorWithComplementaryFlatColorOf:(UIColor *)someUIColor]; -``` - -######Swift -``` swift -UIColor(complementaryFlatColorOf:someUIColor) -``` - -#####Chameleon Shorthand: -######Objective-C -``` objective-c -ComplementaryFlatColorOf(color); -``` - -######Swift -``` swift -ComplementaryFlatColorOf(color) -``` - -####Contrasting Colors -The contrasting color feature returns either a dark color a light color depending on what the Chameleon algorithm believes is a better choice. You can specify whether the dark or light colors are flat: *`([UIColor flatWhiteColor]` & `[UIColor flatBlackColorDark]`)* or non-flat *(`[UIColor whiteColor]` & `[UIColor blackColor]`).* - -If you're trying to set a `UILabel's textColor` property, make sure you provide the `UILabel's backgroundColor`. If your label has a clear `backgroundColor`, just provide the `backgroundColor` property of the object directly behind the `UILabel`. - -Here's an example: - -#####Normal Convention: -######Objective-C -``` objective-c -[UIColor colorWithContrastingBlackOrWhiteColorOn:(UIColor *)backgroundColor isFlat:(BOOL)flat]; -``` - -######Swift -``` swift -UIColor(contrastingBlackOrWhiteColorOn:UIColor!, isFlat:Bool) -``` - -#####Chameleon Shorthand: -######Objective-C -``` objective-c -ContrastColor(backgroundColor, isFlat); -``` - -######Swift -``` swift -ContrastColor(backgroundColor, isFlat) -``` - -####Flattening Non-Flat Colors -As mentioned previously, this feature is unique to Chameleon. While this feature is in its early stages of operation and can be improved, it is accurate in finding the nearest flat version of any color in the spectrum, and very simple to use: - -#####Normal Convention: -######Objective-C -``` objective-c -[(UIColor *)color flatten]; -``` - -######Swift -``` swift -UIColor.pinkColor().flatten() -``` - -#### Gradient Colors -Using a gradient to color an object usually requires a couple of lines of code plus many more lines to superimpose smart contrasting text. Thankfully, Chameleon takes care of that for you. We've introduced a new way to have multicolored objects, and that's with gradients! - -#####Gradient Styles -Chameleon provides three simple gradient styles. Gradients can be created from any number of colors you desire as long as at least two colors are provided. Don't forget that the contrasting text feature is also compatible with gradient colors! - -**UIGradientStyles:** -* `UIGradientStyleLeftToRight` (UIGradientStyle.LeftToRight in Swift) -* `UIGradientStyleTopToBottom` (UIGradientStyle.TopToBottom in Swift) -* `UIGradientStyleRadial` (UIGradientStyle.Radial in Swift) - -#####Normal Convention: -######Objective-C -``` objective-c -[UIColor colorWithGradientStyle:(UIGradientStyle)gradientStyle withFrame:(CGRect)frame andColors:(NSArray *)colors]; -``` - -######Swift -``` swift -UIColor(gradientStyle:UIGradientStyle, withFrame:CGRect, andColors:[UIColor]) -``` - -#####Chameleon Shorthand: -######Objective-C -``` objective-c -GradientColor(gradientStyle, frame, colors); -``` - -######Swift -``` swift -GradientColor(gradientStyle, frame, colors) -``` - -**Objective-C Note**: If you use the Chameleon Shorthand, and use the `NSArray` literal ```@[]``` to set the array of colors, make sure you add parenthesis around it, or else you'll get an error. - -Note: `UIGradientStyleRadial` only uses a maximum of 2 colors at the moment. So if more colors are provided, they will not show. - -#### Hex Colors ![New](http://i.imgur.com/BX3b9ES.png) - -One of the most requested features, *hex colors*, is now available. You can simply provide a hex string with or without a *#* sign: - -#####Normal Convention: -######Objective-C -``` objective-c -[UIColor colorWithHexString:(NSString *)string]; -``` - -######Swift -``` swift -UIColor(hexString:string] -``` - -#####Chameleon Shorthand: -######Objective-C -``` objective-c -HexColor(hexString) -``` - -######Swift -``` swift -HexColor(hexString) -``` - -#### Lighter and Darker Colors ![New](http://i.imgur.com/BX3b9ES.png) - -Sometimes all you need is a color a shade lighter or a shade darker. Well for those rare, but crucial moments, Chameleon's got you covered. You can now lighten any color the following way: - -#####Normal Convention: -######Objective-C -``` objective-c -[color lightenByPercentage:(CGFloat)percentage]; -``` - -######Swift -``` swift -color.lightenByPercentage(percentage: CGFloat) -``` - -You can also generate a darker version of a color: - -#####Normal Convention: -######Objective-C -``` objective-c -[color darkenByPercentage:(CGFloat)percentage]; -``` - -######Swift -``` swift -color.darkenByPercentage(percentage: CGFloat) -``` - -### Colors From Images ![New](http://i.imgur.com/BX3b9ES.png) - -Chameleon now supports the extraction of colors from images. You can either generate both flat and non-flat color schemes from an image, or easily extract the average color. - -To generate a color scheme simply do the following: -#####Normal Convention: -######Objective-C -``` objective-c -[NSArray arrayOfColorsFromImage:(UIImage *)image withFlatScheme:(BOOL)flatScheme]; -``` - -######Swift (**Array extension missing**) -``` swift -NSArray(ofColorsFromImage: UIImage, withFlatScheme: Bool) -``` - -#####Chameleon Shorthand: -######Objective-C -``` objective-c -ColorsFromImage(image, isFlatScheme) -``` - -######Swift -``` swift -ColorsFromImage(image, isFlatScheme) -``` - -To extract the average color from an image, you can also do: -#####Normal Convention: -######Objective-C -``` objective-c -[UIColor colorWithAverageColorFromImage:(UIImage *)image]; -``` - -######Swift -``` swift -UIColor(averageColorFromImage: UIImage) -``` - -#####Chameleon Shorthand: -######Objective-C -``` objective-c -AverageColorFromImage(image) -``` - -######Swift -``` swift -AverageColorFromImage(image) -``` - -###UIStatusBarStyle Methods -####Contrasting UIStatusBarStyle ![New](http://i.imgur.com/BX3b9ES.png) -Many apps on the market, even the most popular ones, overlook this aspect of a beautiful app: the status bar style. Chameleon has done something no other framework has... it has created a new status bar style: `UIStatusBarStyleContrast`. Whether you have a `ViewController` embedded in a `NavigationController`, or not, you can do the following: - -#####Normal Convention: -######Objective-C -``` objective-c -[self setStatusBarStyle:UIStatusBarStyleContrast]; -``` - -######Swift -``` swift -self.setStatusBarStyle(UIStatusBarStyleContrast) -``` -######**Note**: Make sure that the key *View controller-based status bar appearance* in **Info.plist** is set to `YES`. - -###Color Schemes Methods -######**Note**: *Due to the limited number of flat colors currently available, color schemes may return results that reuse certain flat colors. Because of this redundancy, we have provided an option to return either a flat color scheme or a non-flat color scheme until more flat colors are added to the inventory.* - -The initial color can be either a non-flat color or flat color. Chameleon will return an `NSArray` of 5 `UIColors` in which the original color will be the third object of the scheme. This allows for Chameleon to designate the colors of the color scheme (2 colors counter-clockwise and 2 clockwise from the initial color), and thus, the chosen colors are aligned specifically in that order. - -####Analogous Color Scheme -An analogous color scheme uses three adjacent colors on the color wheel. According to Wikipedia, it’s best used with either warm or cool colors, creating a cohesive collection with certain temperature qualities as well as proper color harmony; however, this particular scheme lacks contrast and is less vibrant than complementary schemes. Within the scheme, choose one color to dominate and two to support. The remaining two colors should be used (along with black, white or gray) as accents. - -####Complementary Color Scheme -A complementary color scheme uses opposite colors on the color wheel. To put into slightly more technical terms, they are two colors that, when combined, produce a neutral color. Complementary colors are tricky to use extensively, but work well when you want a point of emphasis. Complementary colors are generally not favorable to use for text. - -####Triadic Color Scheme -A triadic scheme uses evenly spaced colors on the color wheel. The colors tend to be richly vivid and offer a higher degree of contrast while, at the same time, retain color harmony. Let one color dominate and use the two others for accent. - -####Getting Colors in a Color Scheme -To retrieve an array of colors, first make sure to initialize an NSMutableArray (in case you want to use the same array to replace with different colors later): - -#####Normal Convention: -######Objective-C -``` objective-c -NSMutableArray *colorArray = [NSMutableArray alloc] initWithArray:[NSArray arrayOfColorsWithColorScheme:(ColorScheme)colorScheme - with:(UIColor *)color - flatScheme:(BOOL)isFlatScheme]]; -``` - -######Swift -``` swift -var colorArray = NSArray(ofColorsWithColorScheme:ColorScheme, with:UIColor!, flatScheme:Bool) -``` - -#####Chameleon Shorthand: -######Objective-C -``` objective-c -NSMutableArray *colorArray = [[NSMutableArray alloc] initWithArray:ColorScheme(colorSchemeType, color, isFlatScheme)]; -``` - -######Swift -``` swift -var colorArray = ColorSchemeOf(colorSchemeType, color, isFlatScheme) -``` - -#####Example: -Assuming you want to generate an analogous color scheme for the light shade of Flat Red, perform the following method call: - -#####Normal Convention: -######Objective-C -``` objective-c -NSMutableArray *colorArray = [NSMutableArray alloc] initWithArray:[NSArray arrayOfColorsWithColorScheme:ColorSchemeAnalogous - with:[UIColor flatRedColor] - flatScheme:YES]]; -``` - -######Swift -``` swift -var colorArray = NSArray(ofColorsWithColorScheme:ColorScheme.Analogous, with:UIColor.flatRedColor(), flatScheme:true) -``` - -#####Chameleon Shorthand: -######Objective-C -``` objective-c -NSMutableArray *colorArray = [[NSMutableArray alloc] initWithArray:ColorScheme(ColorSchemeAnalogous, FlatRed, YES)]; -``` - -######Swift -``` swift -var colorArray = ColorSchemeOf(ColorScheme.Analogous, FlatRed(), true) -``` - -You can then retrieve each individual color the same way you would normally retrieve any object from an array: - -######Objective-C -```objective-c -UIColor *firstColor = colorArray[0]; -``` - -######Swift -``` swift -var firstColor = colorArray[0] as! UIColor -``` - -###Theme Methods ![New](http://i.imgur.com/BX3b9ES.png) - -With Chameleon, you can now specify a global color theme with simply one line of code (It even takes care of dealing with the status bar style as well)! Here's one of three methods to get you started. `ContentStyle` allows you to decide whether text and a few other elements should be white, black, or whichever contrasts more over any UI element's `backgroundColor`. - -To set a global theme, you can do the following in your app delegate: - -#####Normal Convention: -######Objective-C -``` objective-c -[Chameleon setGlobalThemeUsingPrimaryColor:(UIColor *)color withContentStyle:(UIContentStyle)contentStyle]; -``` - -But what if you want a different theme for a specific `UIViewController?` No problem, Chameleon allows you to override the global theme in any `UIViewController` and `UINavigationController`, by simply doing the following: - -#####Normal Convention: -######Objective-C -```objective-c -//This would go in the controller you specifically want to theme differently -[self setThemeUsingPrimaryColor:FlatMint withSecondaryColor:FlatBlue andContentStyle:UIContentStyleContrast]; -``` - -###### **Note:** In order for the status bar style to automatically be set using a theme, you need to make sure that the *View controller-based status bar appearance* key in **Info.plist** is set to `NO`. - -#### Navigation Bar Hairline - -![No Hairline](http://i.imgur.com/tjwx53y.png) - -As of `2.0.3` the navigation bar hairline view is no longer hidden by default. However, if you're seeking a true flat look (like the image above), you can hide the hairline at the bottom of the navigation bar by doing the following: - -######Objective-C -```objective-c -[self.navigationController setHidesNavigationBarHairline:YES]; - -//or - -self.navigationController.hidesNavigationBarHairline = YES; -``` - -## 👑 Author -Chameleon was developed by **Vicc Alexander** [(@ViccsMind)](https://twitter.com/viccsmind). It is currently maintained by [@ViccAlexander](https://github.com/ViccAlexander) and [@Bre7](https://github.com/bre7). - -Using Chameleon in your App? [Let me know](https://twitter.com/viccsmind). 🌈📲 - -## 📝 To Do List -* ~~Cocoapods Support~~ ![1.0.1](http://i.imgur.com/8Li5aRR.png) -* ~~Table of Contents~~ ![1.0.1](http://i.imgur.com/8Li5aRR.png) -* ~~Storyboard Color Picker Add-On~~ ![1.1.0](http://i.imgur.com/Py4QvaK.png) -* ~~Xcode In-App Documentation~~ ![1.1.0](http://i.imgur.com/Py4QvaK.png) -* ~~Switch from RGB values over to HSB and LAB~~ ![1.1.0](http://i.imgur.com/Py4QvaK.png) -* ~~Gradient Colors~~ ![1.1.0](http://i.imgur.com/Py4QvaK.png) -* ~~Update GradientStyle & ShadeStyle Syntax~~ ![1.1.1](http://i.imgur.com/AHxj8Rb.png) -* ~~Add Radial Gradient Support~~ ![1.1.1](http://i.imgur.com/AHxj8Rb.png) -* ~~Fix Swift Conflict with `initWithArray:for:flatScheme:` method~~ ![1.1.12](http://i.imgur.com/7NrZ7yx.png) -* ~~Swift Support~~ ![1.1.3](http://i.imgur.com/WgpBlLo.png) -* ~~Color Scheme From Images~~ ![2.0.0](http://i.imgur.com/HdE8kjQ.png) -* ~~UIAppearance Convenience Methods~~ ![2.0.0](http://i.imgur.com/HdE8kjQ.png) -* ~~Add option to hide `NavigationBar` hairline~~ ![2.0.3](http://i.imgur.com/DmlOKPJ.png) -* Allow Gradient Colors to Adapt To Frame Changes - -## 📄 Change Log - -### See [Changelog.md](https://github.com/ViccAlexander/Chameleon/blob/master/CHANGELOG.md) 👀 - diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUIAlertView.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/FUIAlertView.h deleted file mode 100644 index 790a2c0..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUIAlertView.h +++ /dev/null @@ -1,113 +0,0 @@ -// -// FUIAlertView.h -// FlatUI -// -// Created by Jack Flintermann on 5/7/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import -#import "FUITextField.h" - -typedef NS_ENUM(NSInteger, FUIAlertViewStyle) { - FUIAlertViewStyleDefault = 0, - FUIAlertViewStyleSecureTextInput, - FUIAlertViewStylePlainTextInput, - FUIAlertViewStyleLoginAndPasswordInput -}; - -@protocol FUIAlertViewDelegate; - -@interface FUIAlertView : UIView - -- (id)initWithTitle:(NSString *)title - message:(NSString *)message - delegate:(id)delegate - cancelButtonTitle:(NSString *)cancelButtonTitle - otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION; - -@property(nonatomic,assign) id delegate; // weak reference - -@property (nonatomic, copy) void(^onOkAction)(void); //called if dismissed with other button -@property (nonatomic, copy) void(^onCancelAction)(void);//called if dismissed with cancel button -@property (nonatomic, copy) void(^onDismissAction)(void);//called after onOkAction or onCancelAction. Useful if alert has more than 2 buttons - -@property (nonatomic, assign, readonly) NSInteger dismissButtonIndex;//index of button that was tapped to dismiss the alert - - -@property(nonatomic,copy) NSString *title; -@property(nonatomic,copy) NSString *message; // secondary explanation text - -// adds a button with the title. returns the index (0 based) of where it was added. buttons are displayed in the order added except for the -// cancel button which will be positioned based on HI requirements. Buttons cannot be customized. If you pass nil as a title no button will be added. -- (NSInteger)addButtonWithTitle:(NSString *)title; // returns index of button. 0 based. -- (NSString *)buttonTitleAtIndex:(NSInteger)buttonIndex; -@property(nonatomic,readonly) NSInteger numberOfButtons; -@property(nonatomic) NSInteger cancelButtonIndex; // if the delegate does not implement -alertViewCancel:, we pretend this button was clicked on. default is -1 - -//max height of the alert, if set -@property(nonatomic) NSInteger maxHeight; - -// TODO: not implemented -//@property(nonatomic,readonly) NSInteger firstOtherButtonIndex; // -1 if no otherButtonTitles or initWithTitle:... not used - -@property(nonatomic,readonly,getter=isVisible) BOOL visible; - -// Flat Alert view style - defaults to FUIAlertViewStyleDefault -@property(nonatomic,assign) FUIAlertViewStyle alertViewStyle; - -// shows popup alert animated. -- (void)show; - -// hides alert sheet or popup. use this method when you need to explicitly dismiss the alert. -// it does not need to be called if the user presses on a button -- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated; - -- (void)clickButtonAtIndex:(NSInteger)buttonIndex; - -/* Retrieve a text field at an index - raises NSRangeException when textFieldIndex is out-of-bounds. - The field at index 0 will be the first text field (the single field or the login field), the field at index 1 will be the password field. */ -- (FUITextField *)textFieldAtIndex:(NSInteger)textFieldIndex; - -@property(nonatomic, strong) NSMutableArray *buttons; -@property(nonatomic, weak, readonly) UILabel *titleLabel; -@property(nonatomic, weak, readonly) UILabel *messageLabel; -@property(nonatomic, weak, readonly) UIView *backgroundOverlay; -@property(nonatomic, weak, readonly) UIView *alertContainer; -@property(nonatomic) CGFloat buttonSpacing UI_APPEARANCE_SELECTOR; -@property(nonatomic) CGFloat animationDuration UI_APPEARANCE_SELECTOR; -@property(nonatomic) BOOL hasCancelButton; - -//setting these properties overwrites any other button colors/fonts that have already been set -@property(nonatomic, strong) UIFont *defaultButtonFont UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong) UIColor *defaultButtonTitleColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong) UIColor *defaultButtonColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong) UIColor *defaultButtonShadowColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, readwrite) CGFloat defaultButtonCornerRadius UI_APPEARANCE_SELECTOR; -@property(nonatomic, readwrite) CGFloat defaultButtonShadowHeight UI_APPEARANCE_SELECTOR; - -@end - - -@protocol FUIAlertViewDelegate -@optional - -// Called when a button is clicked. The view will be automatically dismissed after this call returns -- (void)alertView:(FUIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex; - -// Called when we cancel a view (eg. the user clicks the Home button). This is not called when the user clicks the cancel button. -// If not defined in the delegate, we simulate a click in the cancel button -// TODO: not implemented -//- (void)alertViewCancel:(FUIAlertView *)alertView; - -- (void)willPresentAlertView:(FUIAlertView *)alertView; // before animation and showing view -- (void)didPresentAlertView:(FUIAlertView *)alertView; // after animation - -- (void)alertView:(FUIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex; // before animation and hiding view -- (void)alertView:(FUIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex; // after animation - -// Called after edits in any of the default fields added by the style -// TODO: not implemented -//- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView; - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUIAlertView.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/FUIAlertView.m deleted file mode 100644 index 3dde013..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUIAlertView.m +++ /dev/null @@ -1,424 +0,0 @@ -// -// FUIAlertView.m -// FlatUI -// -// Created by Jack Flintermann on 5/7/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import "FUIAlertView.h" -#import "FUIButton.h" - -@interface FUIAlertView() - -@property(nonatomic, weak) UIView *alertContentContainer; -@property(nonatomic, strong) NSMutableArray* textFields; - -@end - -@implementation FUIAlertView - -+ (void)initialize { - if (self == [FUIAlertView class]) { - FUIAlertView *appearance = [self appearance]; - [appearance setButtonSpacing:10.0f]; - [appearance setAnimationDuration:0.2f]; - } -} - -- (id)init -{ - return [self initWithFrame:CGRectZero]; -} - -- (id)initWithCoder:(NSCoder *)aDecoder -{ - return [self initWithFrame:CGRectZero]; -} - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - self.textFields = [@[] mutableCopy]; - - // This mask is set to force lay out of subviews when superview's bounds change - self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - - UIView *backgroundOverlay = [[UIView alloc] init]; - backgroundOverlay.backgroundColor = [UIColor blueColor]; - [self addSubview:backgroundOverlay]; - backgroundOverlay.alpha = 0; - _backgroundOverlay = backgroundOverlay; - - UIView *alertContainer = [[UIView alloc] init]; - alertContainer.backgroundColor = [UIColor yellowColor]; - [self addSubview:alertContainer]; - [self bringSubviewToFront:alertContainer]; - _alertContainer = alertContainer; - - UIView *alertContentContainer = [[UIView alloc] init]; - alertContentContainer.backgroundColor = [UIColor clearColor]; - [self.alertContainer addSubview:alertContentContainer]; - [self.alertContainer bringSubviewToFront:alertContentContainer]; - _alertContentContainer = alertContentContainer; - - UILabel *titleLabel = [[UILabel alloc] init]; - titleLabel.numberOfLines = 0; - titleLabel.backgroundColor = [UIColor clearColor]; - titleLabel.textAlignment = NSTextAlignmentCenter; - titleLabel.text = self.title; - [alertContentContainer addSubview:titleLabel]; - _titleLabel = titleLabel; - - UILabel *messageLabel = [[UILabel alloc] init]; - messageLabel.numberOfLines = 0; - messageLabel.backgroundColor = [UIColor clearColor]; - messageLabel.textAlignment = NSTextAlignmentCenter; - messageLabel.text = self.message; - [alertContentContainer addSubview:messageLabel]; - _messageLabel = messageLabel; - - FUITextField* firstTextField = [[FUITextField alloc] init]; - [firstTextField setTextAlignment:NSTextAlignmentCenter]; - [self.textFields addObject:firstTextField]; - [alertContentContainer addSubview:firstTextField]; - - FUITextField* secureTextField = [[FUITextField alloc] init]; - [secureTextField setSecureTextEntry:YES]; - [secureTextField setTextAlignment:NSTextAlignmentCenter]; - [self.textFields addObject:secureTextField]; - [alertContentContainer addSubview:secureTextField]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow) name:UIKeyboardWillShowNotification object:nil]; - } - return self; -} - -- (id)initWithTitle:(NSString *)title - message:(NSString *)message - delegate:(id)delegate - cancelButtonTitle:(NSString *)cancelButtonTitle - otherButtonTitles:(NSString *)otherButtonTitles, ... { - self = [self initWithFrame:CGRectZero]; - if (self) { - self.title = title; - self.message = message; - self.delegate = delegate; - - if (cancelButtonTitle) { - [self addButtonWithTitle:cancelButtonTitle]; - [self setHasCancelButton:YES]; - } - va_list args; - va_start(args, otherButtonTitles); - for (NSString *arg = otherButtonTitles; arg != nil; arg = va_arg(args, NSString*)) { - [self addButtonWithTitle:arg]; - } - va_end(args); - } - return self; -} - -- (void)keyboardWillShow -{ - [self.alertContainer setTransform:CGAffineTransformMakeTranslation(0, - self.alertContainer.frame.origin.y + [[UIApplication sharedApplication] statusBarFrame].size.height)]; -} - -- (void) layoutSubviews { - [super layoutSubviews]; - if (CGAffineTransformIsIdentity(self.alertContainer.transform)) { - self.backgroundOverlay.frame = self.bounds; - CGFloat padding = 15; - CGRect contentContainerFrame = CGRectMake(padding, padding, 0, 0); - contentContainerFrame.size = [self calculateSize]; - self.alertContentContainer.frame = contentContainerFrame; - CGRect alertContainerFrame = CGRectInset(contentContainerFrame, -padding, -padding); - alertContainerFrame.origin = CGPointMake(floorf((self.frame.size.width - alertContainerFrame.size.width) / 2), - floorf((self.frame.size.height - alertContainerFrame.size.height) / 2)); - alertContainerFrame.origin.y = MAX(30, alertContainerFrame.origin.y - 30); - self.alertContainer.frame = alertContainerFrame; - CGRect titleFrame = self.titleLabel.frame; - titleFrame.size.width = self.alertContentContainer.frame.size.width; - self.titleLabel.frame = titleFrame; - [self.titleLabel sizeToFit]; - titleFrame = self.titleLabel.frame; - CGPoint titleOrigin = CGPointMake(floorf((self.alertContentContainer.frame.size.width - self.titleLabel.frame.size.width)/2), 0); - titleFrame.origin = titleOrigin; - self.titleLabel.frame = titleFrame; - CGRect messageFrame = self.messageLabel.frame; - messageFrame.size.width = self.alertContentContainer.frame.size.width; - self.messageLabel.frame = messageFrame; - [self.messageLabel sizeToFit]; - messageFrame = self.messageLabel.frame; - CGPoint messageOrigin = CGPointMake(floorf((self.alertContentContainer.frame.size.width - self.messageLabel.frame.size.width)/2), CGRectGetMaxY(titleFrame) + 10); - messageFrame.origin = messageOrigin; - self.messageLabel.frame = messageFrame; - - if (self.alertViewStyle == FUIAlertViewStylePlainTextInput || self.alertViewStyle == FUIAlertViewStyleSecureTextInput) { - if (self.alertViewStyle == FUIAlertViewStyleSecureTextInput) { - [self.textFields[0] setSecureTextEntry:YES]; - } - [self.textFields[0] setFrame:(CGRect){{0, self.messageLabel.frame.origin.y + self.messageLabel.frame.size.height + 10},{self.alertContentContainer.frame.size.width, 40}}]; - } - if (self.alertViewStyle == FUIAlertViewStyleLoginAndPasswordInput) { - [self.textFields[0] setFrame:(CGRect){{0, self.messageLabel.frame.origin.y + self.messageLabel.frame.size.height + 10},{self.alertContentContainer.frame.size.width, 40}}]; - [self.textFields[1] setFrame:(CGRect){{0, ((FUITextField*)self.textFields[0]).frame.origin.y + ((FUITextField*)self.textFields[0]).frame.size.height + 5},{self.alertContentContainer.frame.size.width, 40}}]; - } - - __block CGFloat startingButtonY = self.alertContentContainer.frame.size.height - [self totalButtonHeight]; - [self.buttons enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - UIButton *button = obj; - if (self.hasCancelButton && idx == 0) { - CGFloat lastButtonY = self.alertContentContainer.frame.size.height - button.frame.size.height; - [self setButton:obj atHeight:lastButtonY]; - } else { - [self setButton:obj atHeight:startingButtonY]; - startingButtonY += (button.frame.size.height + self.buttonSpacing); - } - }]; - if(self.messageLabel.superview&&![self.messageLabel.superview isEqual:self.alertContentContainer]) { - [self.messageLabel removeFromSuperview]; - [self.alertContentContainer addSubview:self.messageLabel]; - } - if(self.maxHeight) { - CGSize originalSize = messageFrame.size; - messageFrame.size.height = self.alertContentContainer.frame.size.height-self.titleLabel.frame.size.height-[self totalButtonHeight]-20; - if(messageFrame.size.heightself.maxHeight) - return CGSizeMake(contentWidth, MAX(titleHeight + 10 + buttonHeight, self.maxHeight)); - else - return CGSizeMake(contentWidth, contentHeight); -} - -- (NSInteger) numberOfButtons { - return (NSInteger)self.buttons.count; -} - -- (void)show { - self.alertContainer.alpha = 0; - self.alertContainer.transform = CGAffineTransformMakeScale(1.3, 1.3); - UIViewController *topController = [[[[UIApplication sharedApplication] windows] firstObject] rootViewController]; - - while (topController.presentedViewController && !topController.presentedViewController.isBeingDismissed) { - topController = topController.presentedViewController; - } - UIView *rootView = topController.view; - self.frame = rootView.bounds; - - [rootView addSubview:self]; - [rootView bringSubviewToFront:self]; - if ([self.delegate respondsToSelector:@selector(willPresentAlertView:)]) { - [self.delegate willPresentAlertView:self]; - } - [UIView animateWithDuration:self.animationDuration animations:^{ - self.backgroundOverlay.alpha = 1; - self.alertContainer.alpha = 1; - self.alertContainer.transform = CGAffineTransformIdentity; - } completion:^(BOOL finished0) { - _visible = YES; - if ([self.delegate respondsToSelector:@selector(didPresentAlertView:)]) { - [self.delegate didPresentAlertView:self]; - } - }]; -} - -- (NSString *)buttonTitleAtIndex:(NSInteger)buttonIndex { - if (buttonIndex < 0 || buttonIndex > (NSInteger)self.buttons.count) { - return nil; - } - return [[self.buttons objectAtIndex:(NSUInteger)buttonIndex] titleForState:UIControlStateNormal]; -} - -- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated { - //todo delegate - - _dismissButtonIndex = buttonIndex; - - self.alertContainer.transform = CGAffineTransformIdentity; - if ([self.delegate respondsToSelector:@selector(alertView:willDismissWithButtonIndex:)]) { - [self.delegate alertView:self willDismissWithButtonIndex:buttonIndex]; - } - - if (self.onDismissAction) { - self.onDismissAction(); - } - - [UIView animateWithDuration:self.animationDuration animations:^{ - self.backgroundOverlay.alpha = 0; - self.alertContainer.alpha = 0; - self.alertContainer.transform = CGAffineTransformMakeScale(0.7, 0.7); - } completion:^(BOOL finished) { - [self removeFromSuperview]; - _visible = NO; - if ([self.delegate respondsToSelector:@selector(alertView:didDismissWithButtonIndex:)]) { - [self.delegate alertView:self didDismissWithButtonIndex:buttonIndex]; - } - }]; -} - -- (NSInteger)addButtonWithTitle:(NSString *)title { - if (!title) return -1; - if (!self.buttons) { - self.buttons = [NSMutableArray array]; - } - FUIButton *button = [[FUIButton alloc] initWithFrame:CGRectMake(0, 0, 250, 44)]; - button.cornerRadius = 3; - button.buttonColor = [UIColor greenColor]; - button.shadowColor = [UIColor brownColor]; - button.shadowHeight = 3; - [button setTitle:title forState:UIControlStateNormal]; - [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; - [self.alertContentContainer addSubview:button]; - [self.buttons addObject:button]; - return (NSInteger)self.buttons.count-1; -} - -- (void) buttonPressed:(FUIButton *)sender { - NSUInteger index = [self.buttons indexOfObject:sender]; - if ([self.delegate respondsToSelector:@selector(alertView:clickedButtonAtIndex:)]) { - [self.delegate alertView:self clickedButtonAtIndex:(NSInteger)index]; - } - - if (index == self.cancelButtonIndex && self.onCancelAction) { - self.onCancelAction(); - } else if (index != self.cancelButtonIndex && self.onOkAction) { - self.onOkAction(); - } - - [self dismissWithClickedButtonIndex:(NSInteger)index animated:YES]; -} - -- (void)clickButtonAtIndex:(NSInteger)buttonIndex { - [[self.buttons objectAtIndex:(NSUInteger)buttonIndex] sendActionsForControlEvents:UIControlEventTouchUpInside]; -} - -- (void) setDefaultButtonFont:(UIFont *)defaultButtonFont { - _defaultButtonFont = defaultButtonFont; - [self.buttons enumerateObjectsUsingBlock:^(FUIButton *button, NSUInteger idx, BOOL *stop) { - button.titleLabel.font = defaultButtonFont; - }]; -} - -- (void) setDefaultButtonTitleColor:(UIColor *)defaultButtonTitleColor { - _defaultButtonTitleColor = defaultButtonTitleColor; - [self.buttons enumerateObjectsUsingBlock:^(FUIButton *button, NSUInteger idx, BOOL *stop) { - [button setTitleColor:defaultButtonTitleColor forState:UIControlStateNormal & UIControlStateHighlighted]; - }]; -} - -- (void) setDefaultButtonColor:(UIColor *)defaultButtonColor { - _defaultButtonColor = defaultButtonColor; - [self.buttons enumerateObjectsUsingBlock:^(FUIButton *button, NSUInteger idx, BOOL *stop) { - button.buttonColor = defaultButtonColor; - }]; -} - -- (void) setDefaultButtonShadowColor:(UIColor *)defaultButtonShadowColor { - _defaultButtonShadowColor = defaultButtonShadowColor; - [self.buttons enumerateObjectsUsingBlock:^(FUIButton *button, NSUInteger idx, BOOL *stop) { - button.shadowColor = defaultButtonShadowColor; - }]; -} - -- (void) setDefaultButtonCornerRadius:(CGFloat)defaultButtonCornerRadius { - _defaultButtonCornerRadius = defaultButtonCornerRadius; - [self.buttons enumerateObjectsUsingBlock:^(FUIButton *button, NSUInteger idx, BOOL *stop) { - button.cornerRadius = defaultButtonCornerRadius; - }]; -} - -- (void) setDefaultButtonShadowHeight:(CGFloat)defaultButtonShadowHeight { - _defaultButtonShadowHeight = defaultButtonShadowHeight; - [self.buttons enumerateObjectsUsingBlock:^(FUIButton *button, NSUInteger idx, BOOL *stop) { - button.shadowHeight = defaultButtonShadowHeight; - }]; -} - -- (FUITextField *)textFieldAtIndex:(NSInteger)textFieldIndex -{ - return (textFieldIndex < 2) ? self.textFields[textFieldIndex] : nil; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil]; -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUIButton.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/FUIButton.h deleted file mode 100644 index 45a9b24..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUIButton.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// FUIButton.h -// FlatUI -// -// Created by Jack Flintermann on 5/7/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import - -@interface FUIButton : UIButton - -@property(nonatomic, strong, readwrite) UIColor *buttonColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIColor *shadowColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIColor *highlightedColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIColor *disabledColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIColor *disabledShadowColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, readwrite) CGFloat shadowHeight UI_APPEARANCE_SELECTOR; -@property(nonatomic, readwrite) CGFloat cornerRadius UI_APPEARANCE_SELECTOR; - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUIButton.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/FUIButton.m deleted file mode 100644 index fd82d6a..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUIButton.m +++ /dev/null @@ -1,106 +0,0 @@ -// -// FUIButton.m -// FlatUI -// -// Created by Jack Flintermann on 5/7/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import "FUIButton.h" -#import "UIImage+FlatUI.h" - -@interface FUIButton() -@property(nonatomic) UIEdgeInsets defaultEdgeInsets; -@property(nonatomic) UIEdgeInsets normalEdgeInsets; -@property(nonatomic) UIEdgeInsets highlightedEdgeInsets; -@end - -@implementation FUIButton - -- (id)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - self.defaultEdgeInsets = self.titleEdgeInsets; - } - return self; -} - -- (void) setTitleEdgeInsets:(UIEdgeInsets)titleEdgeInsets { - [super setTitleEdgeInsets:titleEdgeInsets]; - self.defaultEdgeInsets = titleEdgeInsets; - [self setShadowHeight:self.shadowHeight]; -} - -- (void) setHighlighted:(BOOL)highlighted { - UIEdgeInsets insets = highlighted ? self.highlightedEdgeInsets : self.normalEdgeInsets; - [super setTitleEdgeInsets:insets]; - [super setHighlighted:highlighted]; -} - -- (void) setCornerRadius:(CGFloat)cornerRadius { - _cornerRadius = cornerRadius; - [self configureFlatButton]; -} - -- (void) setButtonColor:(UIColor *)buttonColor { - _buttonColor = buttonColor; - [self configureFlatButton]; -} - -- (void) setShadowColor:(UIColor *)shadowColor { - _shadowColor = shadowColor; - [self configureFlatButton]; -} - -- (void) setHighlightedColor:(UIColor *)highlightedColor { - _highlightedColor = highlightedColor; - [self configureFlatButton]; -} - -- (void) setDisabledColor:(UIColor *)disabledColor { - _disabledColor = disabledColor; - [self configureFlatButton]; -} - -- (void) setDisabledShadowColor:(UIColor *)disabledShadowColor { - _disabledShadowColor = disabledShadowColor; - [self configureFlatButton]; -} - -- (void) setShadowHeight:(CGFloat)shadowHeight { - _shadowHeight = shadowHeight; - UIEdgeInsets insets = self.defaultEdgeInsets; - insets.top += shadowHeight; - self.highlightedEdgeInsets = insets; - insets.top -= shadowHeight * 2.0f; - self.normalEdgeInsets = insets; - [super setTitleEdgeInsets:insets]; - [self configureFlatButton]; -} - -- (void) configureFlatButton { - UIImage *normalBackgroundImage = [UIImage buttonImageWithColor:self.buttonColor - cornerRadius:self.cornerRadius - shadowColor:self.shadowColor - shadowInsets:UIEdgeInsetsMake(0, 0, self.shadowHeight, 0)]; - - UIColor *highlightedColor = self.highlightedColor == nil ? self.buttonColor : self.highlightedColor; - UIImage *highlightedBackgroundImage = [UIImage buttonImageWithColor:highlightedColor - cornerRadius:self.cornerRadius - shadowColor:[UIColor clearColor] - shadowInsets:UIEdgeInsetsMake(self.shadowHeight, 0, 0, 0)]; - - if (self.disabledColor) { - UIColor *disabledShadowColor = self.disabledShadowColor == nil ? self.shadowColor : self.disabledShadowColor; - UIImage *disabledBackgroundImage = [UIImage buttonImageWithColor:self.disabledColor - cornerRadius:self.cornerRadius - shadowColor:disabledShadowColor - shadowInsets:UIEdgeInsetsMake(0, 0, self.shadowHeight, 0)]; - [self setBackgroundImage:disabledBackgroundImage forState:UIControlStateDisabled]; - } - - [self setBackgroundImage:normalBackgroundImage forState:UIControlStateNormal]; - [self setBackgroundImage:highlightedBackgroundImage forState:UIControlStateHighlighted]; -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUICellBackgroundView.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/FUICellBackgroundView.h deleted file mode 100755 index eac618a..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUICellBackgroundView.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// UACellBackgroundView.h -// FlatUI -// -// Created by Maciej Swic on 2013-05-30. -// Licensed under the MIT license. - -#import - -@interface FUICellBackgroundView : UIView - -@property (nonatomic, strong) UIColor *backgroundColor UI_APPEARANCE_SELECTOR; -@property (nonatomic) CGFloat cornerRadius UI_APPEARANCE_SELECTOR; -@property (nonatomic, strong) UIColor* separatorColor UI_APPEARANCE_SELECTOR; -@property (nonatomic) CGFloat separatorHeight UI_APPEARANCE_SELECTOR; -@property (nonatomic) UIRectCorner roundedCorners; - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUICellBackgroundView.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/FUICellBackgroundView.m deleted file mode 100755 index a2a5728..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUICellBackgroundView.m +++ /dev/null @@ -1,62 +0,0 @@ -// -// UACellBackgroundView.m -// FlatUI -// -// Created by Maciej Swic on 2013-05-30. -// Licensed under the MIT license. - -#import "FUICellBackgroundView.h" - -@implementation FUICellBackgroundView - -+ (void)initialize { - if (self == [FUICellBackgroundView class]) { - FUICellBackgroundView *appearance = [self appearance]; - [appearance setCornerRadius:3.0f]; - [appearance setSeparatorHeight:1.0f]; - [appearance setSeparatorColor:[UIColor clearColor]]; - } -} - -- (id)initWithFrame:(CGRect)frame { - if ((self = [super initWithFrame:frame])) { - self.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - } - return self; -} - -- (BOOL)isOpaque { - return NO; -} - -- (void)drawRect:(CGRect)aRect { - - CGContextRef c = UIGraphicsGetCurrentContext(); - - int lineWidth = 1; - - CGContextSetStrokeColorWithColor(c, [[UIColor grayColor] CGColor]); - CGContextSetLineWidth(c, lineWidth); - CGContextSetAllowsAntialiasing(c, YES); - CGContextSetShouldAntialias(c, YES); - - CGSize radii = CGSizeMake(self.cornerRadius, self.cornerRadius); - UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds - byRoundingCorners:self.roundedCorners - cornerRadii:radii]; - CGPathRef path = bezierPath.CGPath; - - CGContextSaveGState(c); - CGContextAddPath(c, path); - CGContextClip(c); - - CGContextSetFillColorWithColor(c, self.backgroundColor.CGColor); - CGContextFillRect(c, self.bounds); - CGContextSetFillColorWithColor(c, self.separatorColor.CGColor); - CGContextFillRect(c, CGRectMake(0, self.bounds.size.height - self.separatorHeight, self.bounds.size.width, self.bounds.size.height - self.separatorHeight)); - - CGContextRestoreGState(c); - -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUIPopoverBackgroundView.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/FUIPopoverBackgroundView.h deleted file mode 100644 index 96ccbe4..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUIPopoverBackgroundView.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// FUIPopoverBackgroundView.h -// FlatUIKitExample -// -// Created by Jack Flintermann on 6/5/13. -// -// - -#import - -@interface FUIPopoverBackgroundView : UIPopoverBackgroundView - -+ (void) setBackgroundColor:(UIColor *)backgroundColor; -+ (void) setCornerRadius:(CGFloat)cornerRadius; - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUIPopoverBackgroundView.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/FUIPopoverBackgroundView.m deleted file mode 100644 index 23462cc..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUIPopoverBackgroundView.m +++ /dev/null @@ -1,169 +0,0 @@ -// -// FUIPopoverBackgroundView.m -// FlatUIKitExample -// -// Created by Jack Flintermann on 6/5/13. -// Partial implementation created by Ignacio on 5/30/13. -// - -#import "FUIPopoverBackgroundView.h" -#import "UIImage+FlatUI.h" -#import -#import "UIColor+FlatUI.h" - -#define CONTENT_INSET 10.0f -#define ARROW_BASE 30.0f -#define ARROW_HEIGHT 20.0f - -static CGFloat _cornerRadius = 9.0; -static UIColor *_backgroundColor; - -@interface FUIPopoverBackgroundView() { - UIImageView *_borderImageView; - UIImageView *_arrowView; - CGFloat _arrowOffset; - UIPopoverArrowDirection _arrowDirection; -} -@end - -@implementation FUIPopoverBackgroundView - -- (id)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - if (!_backgroundColor) { - _backgroundColor = [UIColor midnightBlueColor]; - } - - _borderImageView = [[UIImageView alloc] init]; - [self addSubview:_borderImageView]; - - _arrowView = [[UIImageView alloc] init]; - [self setupImages]; - [self addSubview:_arrowView]; - self.layer.shadowColor = [UIColor clearColor].CGColor; - } - return self; -} - -+ (void) setBackgroundColor:(UIColor *)backgroundColor { - _backgroundColor = backgroundColor; -} - -+ (void) setCornerRadius:(CGFloat)cornerRadius { - _cornerRadius = cornerRadius; -} - -- (void) setupImages { - _borderImageView.image = [self borderImage]; - _arrowView.image = [self arrowImage]; -} - -- (UIImage *)borderImage { - return [[[UIImage imageWithColor:_backgroundColor cornerRadius:_cornerRadius] imageWithMinimumSize:self.frame.size] resizableImageWithCapInsets:UIEdgeInsetsMake(_cornerRadius, _cornerRadius, _cornerRadius, _cornerRadius)]; -} - -- (UIImage *)arrowImage { - //Create a UIBezierPath for a Triangle - UIGraphicsBeginImageContextWithOptions(CGSizeMake(ARROW_BASE, ARROW_HEIGHT), NO, [UIScreen mainScreen].scale); - - //// Bezier Drawing - UIBezierPath* bezierPath = [UIBezierPath bezierPath]; - [bezierPath moveToPoint:CGPointMake(ARROW_BASE / 2, 0)]; - [bezierPath addLineToPoint:CGPointMake(0, ARROW_HEIGHT)]; - [bezierPath addLineToPoint:CGPointMake(ARROW_BASE, ARROW_HEIGHT)]; - [bezierPath closePath]; - [_backgroundColor setFill]; - [bezierPath fill]; - - //Create a UIImage using the current context. - UIImage *arrow = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - return arrow; -} - -+ (BOOL)wantsDefaultContentAppearance { - return NO; -} - -/* - The following code is taken from the Treehouse blog and can be found (along with other awesome stuff) at - http://blog.teamtreehouse.com/customizing-the-design-of-uipopovercontroller - */ - -- (CGFloat) arrowOffset { - return _arrowOffset; -} - -- (void) setArrowOffset:(CGFloat)arrowOffset { - _arrowOffset = arrowOffset; -} - -- (UIPopoverArrowDirection)arrowDirection { - return _arrowDirection; -} - -- (void)setArrowDirection:(UIPopoverArrowDirection)arrowDirection { - _arrowDirection = arrowDirection; -} - -+ (UIEdgeInsets)contentViewInsets{ - return UIEdgeInsetsMake(CONTENT_INSET, CONTENT_INSET, CONTENT_INSET, CONTENT_INSET); -} - -+ (CGFloat)arrowHeight{ - return ARROW_HEIGHT; -} - -+ (CGFloat)arrowBase{ - return ARROW_BASE; -} - -#pragma mark - Layout subviews -- (void)layoutSubviews { - [super layoutSubviews]; - - CGFloat _height = self.frame.size.height; - CGFloat _width = self.frame.size.width; - CGFloat _left = 0.0; - CGFloat _top = 0.0; - CGFloat _coordinate = 0.0; - CGAffineTransform _rotation = CGAffineTransformIdentity; - - switch (_arrowDirection) { - default: - case UIPopoverArrowDirectionUp: - _top += ARROW_HEIGHT; - _height -= ARROW_HEIGHT; - _coordinate = ((self.frame.size.width / 2) + self.arrowOffset) - (ARROW_BASE/2); - _arrowView.frame = CGRectMake(_coordinate, 0, ARROW_BASE, ARROW_HEIGHT); - break; - case UIPopoverArrowDirectionDown: - _height -= ARROW_HEIGHT; - _coordinate = ((self.frame.size.width / 2) + self.arrowOffset) - (ARROW_BASE/2); - _arrowView.frame = CGRectMake(_coordinate, _height, ARROW_BASE, ARROW_HEIGHT); - _rotation = CGAffineTransformMakeRotation( (float)M_PI ); - break; - case UIPopoverArrowDirectionLeft: - _left += ARROW_BASE - 10; - _width -= ARROW_BASE; - _width += 10; - _coordinate = ((self.frame.size.height / 2) + self.arrowOffset) - (ARROW_HEIGHT/2); - _arrowView.frame = CGRectMake(-(ARROW_BASE - ARROW_HEIGHT)/2, _coordinate, ARROW_BASE, ARROW_HEIGHT); - _rotation = CGAffineTransformMakeRotation( -(float)M_PI_2 ); - break; - case UIPopoverArrowDirectionRight: - _width -= ARROW_BASE; - _coordinate = ((self.frame.size.height / 2) + self.arrowOffset)- (ARROW_HEIGHT/2); - _arrowView.frame = CGRectMake(_width + ((ARROW_BASE - ARROW_HEIGHT)/2), _coordinate, ARROW_BASE, ARROW_HEIGHT); - _rotation = CGAffineTransformMakeRotation( (float)M_PI_2 ); - _width += 10; - break; - } - - _borderImageView.frame = CGRectMake(_left, _top, _width, _height); - [_arrowView setTransform:_rotation]; -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUISegmentedControl.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/FUISegmentedControl.h deleted file mode 100644 index aa11e90..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUISegmentedControl.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// FUISegmentedControl.h -// FlatUIKitExample -// -// Created by Alex Medearis on 5/17/13. -// -// - -#import - -@interface FUISegmentedControl : UISegmentedControl - -@property(nonatomic, strong, readwrite) UIColor *selectedColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIColor *disabledColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIColor *deselectedColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIColor *highlightedColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIColor *dividerColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, readwrite) CGFloat cornerRadius UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIFont *selectedFont UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIFont *disabledFont UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIFont *deselectedFont UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIFont *highlightedFont UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIColor *selectedFontColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIColor *deselectedFontColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIColor *disabledFontColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIColor *highlightedFontColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIColor *borderColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, readwrite) CGFloat borderWidth UI_APPEARANCE_SELECTOR; - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUISegmentedControl.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/FUISegmentedControl.m deleted file mode 100644 index 29cfceb..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUISegmentedControl.m +++ /dev/null @@ -1,301 +0,0 @@ -// -// FUISegmentedControl.m -// FlatUIKitExample -// -// Created by Alex Medearis on 5/17/13. -// -// - -#import "FUISegmentedControl.h" -#import "UIImage+FlatUI.h" -#import "UIColor+FlatUI.h" -#import "UIFont+FlatUI.h" - -@implementation FUISegmentedControl - -+ (void)initialize { - if (self == [FUISegmentedControl class]) { - FUISegmentedControl *appearance = [self appearance]; - [appearance setCornerRadius:5.0f]; - [appearance setSelectedColor:[UIColor blueColor]]; - [appearance setDeselectedColor:[UIColor darkGrayColor]]; - [appearance setSelectedFontColor:[UIColor whiteColor]]; - [appearance setDeselectedFontColor:[UIColor whiteColor]]; - [appearance setHighlightedColor:[UIColor grayColor]]; - [appearance setHighlightedFontColor:[UIColor whiteColor]]; - } -} - -- (void)setDeselectedColor:(UIColor *)deselectedColor { - _deselectedColor = deselectedColor; - [self configureFlatSegmentedControl]; -} - -- (void)setSelectedColor:(UIColor *)selectedColor { - _selectedColor = selectedColor; - [self configureFlatSegmentedControl]; -} - -- (void)setHighlightedColor:(UIColor *)highlightedColor { - _highlightedColor = highlightedColor; - [self configureFlatSegmentedControl]; -} - -- (void)setDisabledColor:(UIColor *)disabledColor { - _disabledColor = disabledColor; - [self configureFlatSegmentedControl]; -} - -- (void)setDividerColor:(UIColor *)dividerColor { - _dividerColor = dividerColor; - [self configureFlatSegmentedControl]; -} - -- (void)setCornerRadius:(CGFloat)cornerRadius { - _cornerRadius = cornerRadius; - [self configureFlatSegmentedControl]; -} - -- (void)setSelectedFont:(UIFont *)selectedFont { - _selectedFont = selectedFont; - [self setupFonts]; -} - -- (void)setSelectedFontColor:(UIColor *)selectedFontColor { - _selectedFontColor = selectedFontColor; - [self setupFonts]; -} - -- (void)setDeselectedFont:(UIFont *)deselectedFont { - _deselectedFont = deselectedFont; - [self setupFonts]; -} - -- (void)setDeselectedFontColor:(UIColor *)deselectedFontColor { - _deselectedFontColor = deselectedFontColor; - [self setupFonts]; -} - -- (void)setDisabledFont:(UIFont *)disabledFont { - _disabledFont = disabledFont; - [self setupFonts]; -} - -- (void)setDisabledFontColor:(UIColor *)disabledFontColor { - _disabledFontColor = disabledFontColor; - [self setupFonts]; -} - -- (void)setHighlightedFont:(UIFont *)highlightedFont { - _highlightedFont = highlightedFont; - [self setupFonts]; -} - -- (void)setHighlightedFontColor:(UIColor *)highlightedFontColor { - _highlightedFontColor = highlightedFontColor; - [self setupFonts]; -} - -- (void)setBorderColor:(UIColor *)borderColor { - _borderColor = borderColor; - [self configureFlatSegmentedControl]; -} - -- (void)setBorderWidth:(CGFloat)borderWidth { - _borderWidth = borderWidth; - [self configureFlatSegmentedControl]; -} - -- (void)setupFonts { - // Although iOS 6 supports NSForegroundColorAttributeName, - // it doesn't seem to apply it to deselected segments but will apply the - // old UITextAttributeTextColor attribute. We therefore do a runtime version - // check and use the old attributes when needed - - NSDictionary *selectedAttributesDictionary; - - if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { - NSShadow *shadow = [[NSShadow alloc] init]; - [shadow setShadowOffset:CGSizeZero]; - [shadow setShadowColor:[UIColor clearColor]]; - selectedAttributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys: - self.selectedFontColor, - NSForegroundColorAttributeName, - shadow, - NSShadowAttributeName, - self.selectedFont, - NSFontAttributeName, - nil]; - } else { - // iOS6- methods - selectedAttributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys: - self.selectedFontColor, - UITextAttributeTextColor, - [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0], - UITextAttributeTextShadowColor, - [NSValue valueWithUIOffset:UIOffsetMake(0, 0)], - UITextAttributeTextShadowOffset, - self.selectedFont, - UITextAttributeFont, - nil]; - } - - [self setTitleTextAttributes:selectedAttributesDictionary forState:UIControlStateSelected]; - - NSDictionary *deselectedAttributesDictionary; - if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { - // iOS7+ methods - NSShadow *shadow = [[NSShadow alloc] init]; - [shadow setShadowOffset:CGSizeZero]; - [shadow setShadowColor:[UIColor clearColor]]; - deselectedAttributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys: - self.deselectedFontColor, - NSForegroundColorAttributeName, - shadow, - NSShadowAttributeName, - self.deselectedFont, - NSFontAttributeName, - nil]; - } else { - // iOS6- methods. - deselectedAttributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys: - self.deselectedFontColor, - UITextAttributeTextColor, - [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0], - UITextAttributeTextShadowColor, - [NSValue valueWithUIOffset:UIOffsetMake(0, 0)], - UITextAttributeTextShadowOffset, - self.deselectedFont, - UITextAttributeFont, - nil]; - } - [self setTitleTextAttributes:deselectedAttributesDictionary forState:UIControlStateNormal]; - - NSDictionary *disabledAttributesDictionary; - if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { - // iOS7+ methods - NSShadow *shadow = [[NSShadow alloc] init]; - [shadow setShadowOffset:CGSizeZero]; - [shadow setShadowColor:[UIColor clearColor]]; - disabledAttributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys: - self.disabledFontColor, - NSForegroundColorAttributeName, - shadow, - NSShadowAttributeName, - self.disabledFont, - NSFontAttributeName, - nil]; - } else { - // iOS6- methods - disabledAttributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys: - self.disabledFontColor, - UITextAttributeTextColor, - [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0], - UITextAttributeTextShadowColor, - [NSValue valueWithUIOffset:UIOffsetMake(0, 0)], - UITextAttributeTextShadowOffset, - self.disabledFont, - UITextAttributeFont, - nil]; - } - - [self setTitleTextAttributes:disabledAttributesDictionary forState:UIControlStateDisabled]; - - - NSDictionary *highlightedAttributesDictionary; - if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { - // iOS7+ methods - NSShadow *shadow = [[NSShadow alloc] init]; - [shadow setShadowOffset:CGSizeZero]; - [shadow setShadowColor:[UIColor clearColor]]; - highlightedAttributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys: - self.highlightedFontColor, - NSForegroundColorAttributeName, - shadow, - NSShadowAttributeName, - self.highlightedFont, - NSFontAttributeName, - nil]; - } else { - // iOS6- methods - highlightedAttributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys: - self.highlightedFontColor, - UITextAttributeTextColor, - [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0], - UITextAttributeTextShadowColor, - [NSValue valueWithUIOffset:UIOffsetMake(0, 0)], - UITextAttributeTextShadowOffset, - self.highlightedFont, - UITextAttributeFont, - nil]; - } - - [self setTitleTextAttributes:highlightedAttributesDictionary forState:UIControlStateHighlighted]; -} - -- (void)configureFlatSegmentedControl { - UIImage *selectedBackgroundImage = [UIImage buttonImageWithColor:self.selectedColor - cornerRadius:self.cornerRadius - shadowColor:[UIColor clearColor] - shadowInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; - UIImage *deselectedBackgroundImage = [UIImage buttonImageWithColor:self.deselectedColor - cornerRadius:self.cornerRadius - shadowColor:[UIColor clearColor] - shadowInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; - UIImage *disabledBackgroundImage = [UIImage buttonImageWithColor:self.disabledColor - cornerRadius:self.cornerRadius - shadowColor:[UIColor clearColor] - shadowInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; - UIImage *highlightedBackgroundImage = [UIImage buttonImageWithColor:self.highlightedColor - cornerRadius:self.cornerRadius - shadowColor:[UIColor clearColor] - shadowInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; - - UIColor *selectedColor = (self.dividerColor) ? self.dividerColor : self.selectedColor; - UIColor *deselectedColor = (self.dividerColor) ? self.dividerColor : self.deselectedColor; - UIImage *selectedDividerImage = [[UIImage imageWithColor:selectedColor cornerRadius:0] imageWithMinimumSize:CGSizeMake(1, 1)]; - UIImage *deselectedDividerImage = [[UIImage imageWithColor:deselectedColor cornerRadius:0] imageWithMinimumSize:CGSizeMake(1, 1)]; - - - [self setBackgroundImage:selectedBackgroundImage forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; - [self setBackgroundImage:deselectedBackgroundImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; - [self setBackgroundImage:disabledBackgroundImage forState:UIControlStateDisabled barMetrics:UIBarMetricsDefault]; - [self setBackgroundImage:highlightedBackgroundImage forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; - - [self setDividerImage:deselectedDividerImage forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; - [self setDividerImage:selectedDividerImage forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; - [self setDividerImage:deselectedDividerImage forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; - [self setDividerImage:selectedDividerImage forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; - self.layer.borderWidth = self.borderWidth; - self.layer.borderColor = self.borderColor.CGColor; - self.layer.cornerRadius = self.cornerRadius; -} - -- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - NSInteger previousSelectedSegmentIndex = self.selectedSegmentIndex; - [super touchesBegan:touches withEvent:event]; - [self sendActionsForControlEvents:UIControlEventTouchDown]; - if (!(NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)) { - // before iOS7 the segment is selected in touchesBegan - if (previousSelectedSegmentIndex == self.selectedSegmentIndex) { - // if the selectedSegmentIndex before the selection process is equal to the selectedSegmentIndex - // after the selection process the superclass won't send a UIControlEventValueChanged event. - // So we have to do this ourselves. - [self sendActionsForControlEvents:UIControlEventValueChanged]; - } - } -} - -- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { - NSInteger previousSelectedSegmentIndex = self.selectedSegmentIndex; - [super touchesEnded:touches withEvent:event]; - [self sendActionsForControlEvents:UIControlEventTouchUpInside]; - if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { - // on iOS7 the segment is selected in touchesEnded - if (previousSelectedSegmentIndex == self.selectedSegmentIndex) { - [self sendActionsForControlEvents:UIControlEventValueChanged]; - } - } -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUISwitch.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/FUISwitch.h deleted file mode 100644 index d325b4b..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUISwitch.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// FUISwitch.h -// FlatUI -// -// Created by Jack Flintermann on 5/3/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import - -@interface FUISwitch : UIControl - -@property(nonatomic,getter=isOn) BOOL on; -@property(nonatomic, strong, readwrite) UIColor *onBackgroundColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIColor *offBackgroundColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIColor *onColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIColor *offColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong, readwrite) UIColor *highlightedColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, readwrite) CGFloat switchCornerRadius UI_APPEARANCE_SELECTOR; -@property(nonatomic, readwrite) CGFloat percentOn; -@property(weak, readwrite, nonatomic) UILabel *offLabel; -@property(weak, readwrite, nonatomic) UILabel *onLabel; - -- (void)setOn:(BOOL)on animated:(BOOL)animated; // does not send action - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUISwitch.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/FUISwitch.m deleted file mode 100644 index 1956591..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUISwitch.m +++ /dev/null @@ -1,207 +0,0 @@ -// -// FUISwitch.m -// FlatUI -// -// Created by Jack Flintermann on 5/3/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import "FUISwitch.h" -#import "UIImage+FlatUI.h" -#import "UIColor+FlatUI.h" -#import - -@interface FUISwitch() -@property(weak, readwrite, nonatomic) UIView *thumbView; -@property(weak, readwrite, nonatomic) UIScrollView *internalContainer; -@end - -@implementation FUISwitch - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - [self sharedInit]; - } - return self; -} - -- (id) initWithCoder:(NSCoder *)aDecoder { - self = [super initWithCoder:aDecoder]; - if (self) { - [self sharedInit]; - } - return self; -} - -- (void) sharedInit { - self.clipsToBounds = YES; - UIScrollView *internalContainer = [[UIScrollView alloc] init]; - internalContainer.pagingEnabled = YES; - internalContainer.showsHorizontalScrollIndicator = NO; - internalContainer.showsVerticalScrollIndicator = NO; - internalContainer.bounces = NO; - internalContainer.userInteractionEnabled = NO; - self.internalContainer = internalContainer; - UILabel *offLabel = [[UILabel alloc] init]; - UILabel *onLabel = [[UILabel alloc] init]; - offLabel.backgroundColor = [UIColor clearColor]; - onLabel.backgroundColor = [UIColor clearColor]; - offLabel.textAlignment = NSTextAlignmentCenter; - onLabel.textAlignment = NSTextAlignmentCenter; - offLabel.text = @"OFF"; - onLabel.text = @"ON"; - self.offLabel = offLabel; - self.onLabel = onLabel; - [internalContainer addSubview:offLabel]; - [internalContainer addSubview:onLabel]; - UIView *thumbView = [[UIView alloc] init]; - [internalContainer addSubview:thumbView]; - self.thumbView = thumbView; - [self addSubview:internalContainer]; - - UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panned:)]; - panGestureRecognizer.cancelsTouchesInView = NO; - [self addGestureRecognizer:panGestureRecognizer]; - - UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)]; - [self addGestureRecognizer:tapGestureRecognizer]; - _on = YES; - _percentOn = 1; - self.layer.cornerRadius = 3.0; -} - -- (void) layoutSubviews { - [super layoutSubviews]; - - //container - CGSize size = self.frame.size; - size.width *= 2; - size.width -= self.frame.size.height; - self.internalContainer.contentSize = size; - self.internalContainer.frame = self.bounds; - CGFloat contentHeight = self.internalContainer.contentSize.height; - - //thumb image - CGFloat insetFraction = .75; - CGFloat thumbEdgeSize = floorf(contentHeight * insetFraction); - CGFloat thumbInset = (contentHeight - thumbEdgeSize) / 2; - self.thumbView.frame = CGRectMake((self.internalContainer.contentSize.width - contentHeight) / 2 + thumbInset, thumbInset, thumbEdgeSize, thumbEdgeSize); - self.thumbView.layer.cornerRadius = thumbEdgeSize / 2; - - //labels - CGRect left = CGRectMake(0, 0, (self.internalContainer.contentSize.width - self.thumbView.frame.size.width)/2, contentHeight); - CGRect right = left; - right.origin.x = self.internalContainer.contentSize.width - left.size.width; - self.offLabel.frame = right; - self.onLabel.frame = left; - [self setOn:_on]; -} - -- (void) setOn:(BOOL)on { - [self setOn:on animated:NO]; -} - -- (void)setOn:(BOOL)on animated:(BOOL)animated { - [self setOn:on animated:NO sendEvent:NO]; -} - -- (void)setOn:(BOOL)on animated:(BOOL)animated sendEvent:(BOOL)sendEvent { - if (_on != on) { - _on = on; - if (sendEvent) { - [self sendActionsForControlEvents:UIControlEventValueChanged]; - } - } - [self setPercentOn:_on * 1.0f animated:animated]; -} - -- (void) setPercentOn:(CGFloat)percentOn { - [self setPercentOn:percentOn animated:NO]; -} - -- (void) setPercentOn:(CGFloat)percentOn animated:(BOOL)animated { - _percentOn = percentOn; - [self updateBackground]; - CGFloat maxOffset = self.internalContainer.contentSize.width - self.frame.size.width; - CGPoint newOffset = CGPointMake((1 - _percentOn) * maxOffset, 0); - [self.internalContainer setContentOffset:newOffset animated:animated]; -} - -- (void) panned:(UIPanGestureRecognizer *)gestureRecognizer { - - CGPoint translation = [gestureRecognizer translationInView:self.internalContainer]; - [gestureRecognizer setTranslation:CGPointZero inView:self.internalContainer]; - CGPoint newOffset = self.internalContainer.contentOffset; - newOffset.x -= translation.x; - CGFloat maxOffset = self.internalContainer.contentSize.width - self.frame.size.width; - newOffset.x = MAX(newOffset.x, 0); - newOffset.x = MIN(newOffset.x, maxOffset); - - if (gestureRecognizer.state == UIGestureRecognizerStateBegan || - gestureRecognizer.state == UIGestureRecognizerStateChanged) { - - [self setPercentOn:(1 - newOffset.x/maxOffset) animated:NO]; - - } else if (gestureRecognizer.state == UIGestureRecognizerStateEnded) { - BOOL left = newOffset.x > maxOffset / 2; - [self setOn:(!left) animated:YES sendEvent:YES]; - } - -} - -- (void) tapped:(UITapGestureRecognizer *)gestureRecognizer { - [self setOn:!self.on animated:YES sendEvent:YES]; -} - -- (void) setOnBackgroundColor:(UIColor *)onBackgroundColor { - _onBackgroundColor = onBackgroundColor; - [self updateBackground]; -} - -- (void) setOffBackgroundColor:(UIColor *)offBackgroundColor { - _offBackgroundColor = offBackgroundColor; - [self updateBackground]; -} - -- (void) setOnColor:(UIColor *)onColor { - _onColor = onColor; - [self updateBackground]; -} - -- (void) setOffColor:(UIColor *)offColor { - _offColor = offColor; - [self updateBackground]; -} - -- (void) setSwitchCornerRadius:(CGFloat)switchCornerRadius { - _switchCornerRadius = switchCornerRadius; - self.layer.cornerRadius = _switchCornerRadius; -} - -- (void) updateBackground { - self.backgroundColor = [UIColor blendedColorWithForegroundColor:self.onBackgroundColor - backgroundColor:self.offBackgroundColor - percentBlend:self.percentOn]; - UIColor *contentColor = [UIColor blendedColorWithForegroundColor:self.onColor - backgroundColor:self.offColor - percentBlend:self.percentOn]; - self.onLabel.textColor = contentColor; - self.offLabel.textColor = contentColor; - self.thumbView.backgroundColor = contentColor; -} - -- (void)setHighlighted:(BOOL)highlighted { - [super setHighlighted:highlighted]; - - if (highlighted) - self.backgroundColor = self.highlightedColor; -} - -- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - [super touchesBegan:touches withEvent:event]; - [self setHighlighted:YES]; -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUITextField.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/FUITextField.h deleted file mode 100644 index 9fdb4a9..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUITextField.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// FUITextField.h -// FlatUI -// -// Created by Andrej Mihajlov on 8/25/13. -// Copyright (c) 2013 Andrej Mihajlov. All rights reserved. -// - -#import - -@interface FUITextField : UITextField - -@property (nonatomic, assign) UIEdgeInsets edgeInsets UI_APPEARANCE_SELECTOR; -@property (nonatomic, strong) UIColor *textFieldColor UI_APPEARANCE_SELECTOR; -@property (nonatomic, strong) UIColor *borderColor UI_APPEARANCE_SELECTOR; -@property (nonatomic, assign) CGFloat borderWidth UI_APPEARANCE_SELECTOR; -@property (nonatomic, assign) CGFloat cornerRadius UI_APPEARANCE_SELECTOR; - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUITextField.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/FUITextField.m deleted file mode 100644 index 25dd230..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/FUITextField.m +++ /dev/null @@ -1,112 +0,0 @@ -// -// FUITextField.m -// FlatUI -// -// Created by Andrej Mihajlov on 8/25/13. -// Copyright (c) 2013 Andrej Mihajlov. All rights reserved. -// - -#import "FUITextField.h" -#import "UIImage+FlatUI.h" - -@implementation FUITextField { - UIImage* _flatBackgroundImage; - UIImage* _flatHighlightedBackgroundImage; -} - -- (void)setTextFieldColor:(UIColor *)textFieldColor { - _textFieldColor = textFieldColor; - [self configureTextField]; -} - -- (void)setBorderColor:(UIColor *)borderColor { - _borderColor = borderColor; - [self configureTextField]; -} - -- (void)setBorderWidth:(CGFloat)borderWidth { - _borderWidth = borderWidth; - [self configureTextField]; -} - -- (void)setCornerRadius:(CGFloat)cornerRadius { - _cornerRadius = cornerRadius; - [self configureTextField]; -} - -- (void)setTextColor:(UIColor *)textColor { - [super setTextColor:textColor]; - - // Setup placeholder color with 60% alpha of original text color - if([self respondsToSelector:@selector(setAttributedPlaceholder:)] && self.placeholder) { - self.attributedPlaceholder = [[NSAttributedString alloc] initWithString:self.placeholder attributes:@{ NSForegroundColorAttributeName: [self.textColor colorWithAlphaComponent:.6] }]; - } -} - -- (void)configureTextField { - _flatBackgroundImage = [self textFieldImageWithColor:_textFieldColor borderColor:_borderColor borderWidth:0 cornerRadius:_cornerRadius]; - _flatHighlightedBackgroundImage = [self textFieldImageWithColor:_textFieldColor borderColor:_borderColor borderWidth:_borderWidth cornerRadius:_cornerRadius]; - - [self setBackground:_flatBackgroundImage]; -} - -// A helper method to draw a simple rounded rectangle image that can be used as background -- (UIImage*)textFieldImageWithColor:(UIColor*)color borderColor:(UIColor*)borderColor - borderWidth:(CGFloat)borderWidth cornerRadius:(CGFloat)cornerRadius { - CGRect rect = CGRectMake(0, 0, 44, 44); - UIBezierPath* bezierPath = [UIBezierPath bezierPathWithRoundedRect:CGRectInset(rect, borderWidth, borderWidth) cornerRadius:cornerRadius]; - - UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0f); - CGContextRef ctx = UIGraphicsGetCurrentContext(); - - [color setFill]; - [borderColor setStroke]; - - CGContextSetLineWidth(ctx, borderWidth); - CGContextAddPath(ctx, [bezierPath CGPath]); - CGContextDrawPath(ctx, kCGPathFillStroke); - - UIImage* output = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - return [output resizableImageWithCapInsets:UIEdgeInsetsMake(cornerRadius*2, cornerRadius*2, cornerRadius*2, cornerRadius*2)]; -} - -// Both methods make some space around text -- (CGRect)textRectForBounds:(CGRect)bounds { - return [super textRectForBounds:UIEdgeInsetsInsetRect(bounds, self.edgeInsets)]; -} - -- (CGRect)editingRectForBounds:(CGRect)bounds { - return [super editingRectForBounds:UIEdgeInsetsInsetRect(bounds, self.edgeInsets)]; -} - -- (CGRect)leftViewRectForBounds:(CGRect)bounds { - bounds.origin.x += self.edgeInsets.left; - return [super leftViewRectForBounds:bounds]; -} - -- (CGRect)rightViewRectForBounds:(CGRect)bounds { - bounds.origin.x -= self.edgeInsets.right; - return [super rightViewRectForBounds:bounds]; -} - -// Switch background image to bordered image -- (BOOL)becomeFirstResponder { - BOOL flag = [super becomeFirstResponder]; - if(flag) { - self.background = _flatHighlightedBackgroundImage; - } - return flag; -} - -// Switch background image to borderless image -- (BOOL)resignFirstResponder { - BOOL flag = [super resignFirstResponder]; - if(flag) { - self.background = _flatBackgroundImage; - } - return flag; -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/FlatUIKit.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/FlatUIKit.h deleted file mode 100644 index b879f2d..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/FlatUIKit.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// FlatUIKit.h -// FlatUI -// -// Created by Keisuke Kimura on 6/8/13. -// Copyright (c) 2013 Keisuke Kimura. All rights reserved. -// - -#ifndef FlatUI_FlatUIKit_h -#define FlatUI_FlatUIKit_h - -#if TARGET_OS_IPHONE -#import -#import -#endif - -#endif - -#import "FUIAlertView.h" -#import "FUIButton.h" -#import "FUITextField.h" -#import "FUICellBackgroundView.h" -#import "FUISegmentedControl.h" -#import "FUISwitch.h" -#import "UIBarButtonItem+FlatUI.h" -#import "UIColor+FlatUI.h" -#import "UIFont+FlatUI.h" -#import "UIImage+FlatUI.h" -#import "UINavigationBar+FlatUI.h" -#import "UIProgressView+FlatUI.h" -#import "UIStepper+FlatUI.h" -#import "UISlider+FlatUI.h" -#import "UITabBar+FlatUI.h" -#import "UITableViewCell+FlatUI.h" -#import "UIToolbar+FlatUI.h" \ No newline at end of file diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/NSString+Icons.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/NSString+Icons.h deleted file mode 100644 index 7859c17..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/NSString+Icons.h +++ /dev/null @@ -1,116 +0,0 @@ -// -// NSString+Icons.h -// FlatUIKitExample -// -// Created by Jamie Matthews on 12/24/14. -// -// - -#import -typedef NS_ENUM(NSInteger, FlatUIIcon) { - FUITriangleUp, - FUITraingleDown, - FUITriangleUpSmall, - FUITriangleDownSmall, - FUITriangleLeftLarge, - FUITriangleRightLarge, - FUIArrowLeft, - FUIArrowRight, - FUIPlus, - FUICross, - FUICheck, - FUIRadioUnchecked, - FUIRadioChecked, - FUICheckboxUnchecked, - FUICheckboxChecked, - FUIInfoCircle, - FUIAlertCircle, - FUIQuestionCirlce, - FUICheckCircle, - FUICrossCircle, - FUIPlusCircle, - FUIPause, - FUIPlay, - FUIVolume, - FUIMute, - FUIResize, - FUIList, - FUIListThumbnailed, - FUIListSmallThumbails, - FUIListLargeThumnails, - FUIListNumbered, - FUIListColumned, - FUIListBulleted, - FUIWindow, - FUIWindows, - FUILoop, - FUICMD, - FUIMic, - FUIHeart, - FUILocation, - FUINew, - FUIVideo, - FUIPhoto, - FUITime, - FUIEye, - FUIChat, - FUIHome, - FUIUpload, - FUISearch, - FUIUser, - FUIMail, - FUILock, - FUIPower, - FUICalendar, - FUIGear, - FUIBookmark, - FUIExit, - FUITrash, - FUIFolder, - FUIBubble, - FUIExport, - FUICalendarSolid, - FUIStar, - FUIStar2, - FUICreditCard, - FUIClip, - FUILink, - FUITag, - FUIDocument, - FUIImage, - FUIFacebook, - FUIYoutube, - FUIVimeo, - FUITwitter, - FUISpotify, - FUISkype, - FUIPintrest, - FUIPath, - FUILinkedin, - FUIGooglePlus, - FUIDribble, - FUIBehance, - FUIStumbleUpon, - FUIYelp, - FUIWordpress, - FUIWindows8, - FUIVine, - FUITumblr, - FUIPaypal, - FUILastFM, - FUIInstagram, - FUIHtml5, - FUIGithub, - FUIFourSquare, - FUIDropBox, - FUIAndroid, - FUIApple, - -}; - -static NSString *const kFlatUIFontFamilyName = @"flat-ui-pro-icons"; - -@interface NSString (Icons) -+ (NSString*)iconStringForEnum:(FlatUIIcon)value; -+ (NSArray *)iconUnicodeStrings; -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/NSString+Icons.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/NSString+Icons.m deleted file mode 100644 index b12bd6a..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/NSString+Icons.m +++ /dev/null @@ -1,33 +0,0 @@ -// -// NSString+Icons.m -// FlatUIKitExample -// -// Created by Jamie Matthews on 12/24/14. -// -// Credit to https://github.com/designmodo/Flat-UI -// for the aweseome flat icons! - -#import "NSString+Icons.h" - - -@implementation NSString (Icons) -+ (NSString*)iconStringForEnum:(FlatUIIcon)value { - NSString *toReturn = [NSString iconUnicodeStrings][value]; - return toReturn; -} - -+ (NSArray *)iconUnicodeStrings { - - static NSArray *iconUnicodeStrings; - - static dispatch_once_t unicodeStringsOnceToken; - dispatch_once(&unicodeStringsOnceToken, ^{ - - iconUnicodeStrings = @[@"\ue600", @"\ue601", @"\ue602", @"\ue603", @"\ue604", @"\ue605", @"\ue606", @"\ue607", @"\ue608", @"\ue609", @"\ue60a", @"\ue60b", @"\ue60c", @"\ue60d", @"\ue60e", @"\ue60f", @"\ue610", @"\ue611", @"\ue612", @"\ue613", @"\ue614", @"\ue615", @"\ue616", @"\ue617", @"\ue618", @"\ue619", @"\ue61a", @"\ue61b", @"\ue61c", @"\ue61d", @"\ue61e", @"\ue61f", @"\ue620", @"\ue621", @"\ue622", @"\ue623", @"\ue624", @"\ue625", @"\ue626", @"\ue627", @"\ue628", @"\ue629", @"\ue62a", @"\ue62b", @"\ue62c", @"\ue62d", @"\ue62e", @"\ue62f", @"\ue630", @"\ue631", @"\ue632", @"\ue633", @"\ue634", @"\ue635", @"\ue636", @"\ue637", @"\ue638", @"\ue639", @"\ue63a", @"\ue63b", @"\ue63c", @"\ue63d", @"\ue63e", @"\ue63f", @"\ue640", @"\ue641", @"\ue642", @"\ue643", @"\ue644", @"\ue645", @"\ue646", @"\ue647", @"\ue648", @"\ue649", @"\ue64a", @"\ue64b", @"\ue64c", @"\ue64d", @"\ue64e", @"\ue64f", @"\ue650", @"\ue651", @"\ue652", @"\ue653", @"\ue654", @"\ue655", @"\ue656", @"\ue657", @"\ue658", @"\ue659", @"\ue65a", @"\ue65b", @"\ue65c", @"\ua65d", @"\ue65e", @"\ue65f", @"\ue660"]; - - }); - - return iconUnicodeStrings; -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIBarButtonItem+FlatUI.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/UIBarButtonItem+FlatUI.h deleted file mode 100644 index 4f097f5..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIBarButtonItem+FlatUI.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// UIBarButtonItem+FlatUI.h -// FlatUI -// -// Created by Jack Flintermann on 5/8/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import - -@interface UIBarButtonItem (FlatUI) - -// styles a single bar button item -- (void) configureFlatButtonWithColor:(UIColor *)color - highlightedColor:(UIColor *)highlightedColor - cornerRadius:(CGFloat) cornerRadius UI_APPEARANCE_SELECTOR; - -// styles all bar button items that exist within a class heirarchy (same as UIAppearanceProxy methods) -+ (void) configureFlatButtonsWithColor:(UIColor *) color - highlightedColor:(UIColor *)highlightedColor - cornerRadius:(CGFloat) cornerRadius - whenContainedIn:(Class )containerClass, ... NS_REQUIRES_NIL_TERMINATION; - -// styles all bar button items (can be overwritten with the above methods) -+ (void) configureFlatButtonsWithColor:(UIColor *) color - highlightedColor:(UIColor *)highlightedColor - cornerRadius:(CGFloat) cornerRadius; - - -// removes the text shadows off a single bar button item (sadly, this can't be easily done for all buttons simultaneously) -- (void) removeTitleShadow; - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIBarButtonItem+FlatUI.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/UIBarButtonItem+FlatUI.m deleted file mode 100644 index fa13521..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIBarButtonItem+FlatUI.m +++ /dev/null @@ -1,101 +0,0 @@ -// -// UIBarButtonItem+FlatUI.m -// FlatUI -// -// Created by Jack Flintermann on 5/8/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import "UIBarButtonItem+FlatUI.h" -#import "UIImage+FlatUI.h" - -@implementation UIBarButtonItem (FlatUI) - -- (void) configureFlatButtonWithColor:(UIColor *)color - highlightedColor:(UIColor *)highlightedColor - cornerRadius:(CGFloat) cornerRadius { - [UIBarButtonItem configureItemOrProxy:self forFlatButtonWithColor:color highlightedColor:highlightedColor cornerRadius:cornerRadius]; -} - -+ (void) configureFlatButtonsWithColor:(UIColor *) color - highlightedColor:(UIColor *)highlightedColor - cornerRadius:(CGFloat) cornerRadius { - [self configureFlatButtonsWithColor:color highlightedColor:highlightedColor cornerRadius:cornerRadius whenContainedIn:[UINavigationBar class], [UINavigationController class], [UIToolbar class], nil]; -} - -+ (void) configureFlatButtonsWithColor:(UIColor *) color - highlightedColor:(UIColor *)highlightedColor - cornerRadius:(CGFloat) cornerRadius - whenContainedIn:(Class )containerClass, ... { - va_list vl; - va_start(vl, containerClass); - id appearance = [UIBarButtonItem appearanceWhenContainedIn:containerClass, nil]; - va_end(vl); - [UIBarButtonItem configureItemOrProxy:appearance forFlatButtonWithColor:color highlightedColor:highlightedColor cornerRadius:cornerRadius]; -} - -// only used pre-ios7 -- (void) removeTitleShadow { - - if (NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_6_1) { - NSArray *states = @[@(UIControlStateNormal), @(UIControlStateHighlighted)]; - - for (NSNumber *state in states) { - UIControlState controlState = [state unsignedIntegerValue]; - NSMutableDictionary *titleTextAttributes = [[self titleTextAttributesForState:controlState] mutableCopy]; - if (!titleTextAttributes) { - titleTextAttributes = [NSMutableDictionary dictionary]; - } - - // iOS6+ methods - NSShadow *shadow = [[NSShadow alloc] init]; - [shadow setShadowOffset:CGSizeZero]; - [shadow setShadowColor:[UIColor clearColor]]; - [titleTextAttributes setObject:shadow forKey:NSShadowAttributeName]; - - [self setTitleTextAttributes:titleTextAttributes forState:controlState]; - } - } -} - -//helper method, basically a wrapper to allow creating a custom UIAppearance method that doesn't conform to the usual naming style -+ (void) configureItemOrProxy:(id)appearance - forFlatButtonWithColor:(UIColor *)color - highlightedColor:(UIColor *)highlightedColor - cornerRadius:(CGFloat) cornerRadius { - UIImage *backButtonPortraitImage = [UIImage backButtonImageWithColor:color - barMetrics:UIBarMetricsDefault - cornerRadius:cornerRadius]; - UIImage *highlightedBackButtonPortraitImage = [UIImage backButtonImageWithColor:highlightedColor - barMetrics:UIBarMetricsDefault - cornerRadius:cornerRadius]; - UIImage *backButtonLandscapeImage = [UIImage backButtonImageWithColor:color - barMetrics:UIBarMetricsLandscapePhone - cornerRadius:2]; - UIImage *highlightedBackButtonLandscapeImage = [UIImage backButtonImageWithColor:highlightedColor - barMetrics:UIBarMetricsLandscapePhone - cornerRadius:2]; - - [appearance setBackButtonBackgroundImage:backButtonPortraitImage - forState:UIControlStateNormal - barMetrics:UIBarMetricsDefault]; - [appearance setBackButtonBackgroundImage:backButtonLandscapeImage - forState:UIControlStateNormal - barMetrics:UIBarMetricsLandscapePhone]; - [appearance setBackButtonBackgroundImage:highlightedBackButtonPortraitImage - forState:UIControlStateHighlighted - barMetrics:UIBarMetricsDefault]; - [appearance setBackButtonBackgroundImage:highlightedBackButtonLandscapeImage - forState:UIControlStateHighlighted - barMetrics:UIBarMetricsLandscapePhone]; - - [appearance setBackButtonTitlePositionAdjustment:UIOffsetMake(1.0f, 1.0f) forBarMetrics:UIBarMetricsDefault]; - [appearance setBackButtonTitlePositionAdjustment:UIOffsetMake(1.0f, 1.0f) forBarMetrics:UIBarMetricsLandscapePhone]; - - UIImage *buttonImageNormal = [UIImage imageWithColor:color cornerRadius:cornerRadius]; - UIImage *buttonImageHightlighted = [UIImage imageWithColor:highlightedColor cornerRadius:cornerRadius]; - [appearance setBackgroundImage:buttonImageNormal forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; - [appearance setBackgroundImage:buttonImageHightlighted forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIColor+FlatUI.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/UIColor+FlatUI.h deleted file mode 100644 index 3f8a82f..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIColor+FlatUI.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// UIColor+FlatUI.h -// FlatUI -// -// Created by Jack Flintermann on 5/3/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import - -@interface UIColor (FlatUI) - -+ (UIColor *) colorFromHexCode:(NSString *)hexString; -+ (UIColor *) turquoiseColor; -+ (UIColor *) greenSeaColor; -+ (UIColor *) emerlandColor; -+ (UIColor *) nephritisColor; -+ (UIColor *) peterRiverColor; -+ (UIColor *) belizeHoleColor; -+ (UIColor *) amethystColor; -+ (UIColor *) wisteriaColor; -+ (UIColor *) wetAsphaltColor; -+ (UIColor *) midnightBlueColor; -+ (UIColor *) sunflowerColor; -+ (UIColor *) tangerineColor; -+ (UIColor *) carrotColor; -+ (UIColor *) pumpkinColor; -+ (UIColor *) alizarinColor; -+ (UIColor *) pomegranateColor; -+ (UIColor *) cloudsColor; -+ (UIColor *) silverColor; -+ (UIColor *) concreteColor; -+ (UIColor *) asbestosColor; - -+ (UIColor *) blendedColorWithForegroundColor:(UIColor *)foregroundColor - backgroundColor:(UIColor *)backgroundColor - percentBlend:(CGFloat) percentBlend; - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIColor+FlatUI.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/UIColor+FlatUI.m deleted file mode 100644 index ce319a4..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIColor+FlatUI.m +++ /dev/null @@ -1,279 +0,0 @@ -// -// UIColor+FlatUI.m -// FlatUI -// -// Created by Jack Flintermann on 5/3/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import "UIColor+FlatUI.h" - -@implementation UIColor (FlatUI) - -// Thanks to http://stackoverflow.com/questions/3805177/how-to-convert-hex-rgb-color-codes-to-uicolor -+ (UIColor *) colorFromHexCode:(NSString *)hexString { - NSString *cleanString = [hexString stringByReplacingOccurrencesOfString:@"#" withString:@""]; - if ([cleanString length] == 3) { - cleanString = [NSString stringWithFormat:@"%@%@%@%@%@%@", - [cleanString substringWithRange:NSMakeRange(0, 1)],[cleanString substringWithRange:NSMakeRange(0, 1)], - [cleanString substringWithRange:NSMakeRange(1, 1)],[cleanString substringWithRange:NSMakeRange(1, 1)], - [cleanString substringWithRange:NSMakeRange(2, 1)],[cleanString substringWithRange:NSMakeRange(2, 1)]]; - } - if([cleanString length] == 6) { - cleanString = [cleanString stringByAppendingString:@"ff"]; - } - - unsigned int baseValue; - [[NSScanner scannerWithString:cleanString] scanHexInt:&baseValue]; - - float red = ((baseValue >> 24) & 0xFF)/255.0f; - float green = ((baseValue >> 16) & 0xFF)/255.0f; - float blue = ((baseValue >> 8) & 0xFF)/255.0f; - float alpha = ((baseValue >> 0) & 0xFF)/255.0f; - - return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; -} - -+ (UIColor *) turquoiseColor { - static UIColor *turquoise = nil; - static dispatch_once_t dispatchToken; - - dispatch_once(&dispatchToken, ^{ - turquoise = [UIColor colorFromHexCode:@"1ABC9C"]; - }); - - return turquoise; -} - -+ (UIColor *) greenSeaColor { - static UIColor *greenSea = nil; - static dispatch_once_t greenToken; - - dispatch_once(&greenToken, ^{ - greenSea = [UIColor colorFromHexCode:@"16A085"]; - }); - - return greenSea; -} - -+ (UIColor *) emerlandColor { - static UIColor *emerald = nil; - static dispatch_once_t emeraldToken; - - dispatch_once(&emeraldToken, ^{ - emerald = [UIColor colorFromHexCode:@"2ECC71"]; - }); - - return emerald; -} - -+ (UIColor *) nephritisColor { - static UIColor *nephritis = nil; - static dispatch_once_t nephritisToken; - - dispatch_once(&nephritisToken, ^{ - nephritis = [UIColor colorFromHexCode:@"27AE60"]; - }); - - return nephritis; -} - -+ (UIColor *) peterRiverColor { - static UIColor *peterRiver = nil; - static dispatch_once_t peterToken; - - dispatch_once(&peterToken, ^{ - peterRiver = [UIColor colorFromHexCode:@"#3498DB"]; - }); - - return peterRiver; -} - -+ (UIColor *) belizeHoleColor { - static UIColor *tripToBelize = nil; // Let's cook! - static dispatch_once_t belizeToken; - - dispatch_once(&belizeToken, ^{ - tripToBelize = [UIColor colorFromHexCode:@"2980B9"]; - }); - - return tripToBelize; -} - -+ (UIColor *) amethystColor { - static UIColor *amethyst = nil; - static dispatch_once_t amethystToken; - - dispatch_once(&amethystToken, ^{ - amethyst = [UIColor colorFromHexCode:@"9B59B6"]; - }); - - return amethyst; -} - -+ (UIColor *) wisteriaColor { - static UIColor *wisteria = nil; - static dispatch_once_t wisteriaToken; - - dispatch_once(&wisteriaToken, ^{ - wisteria = [UIColor colorFromHexCode:@"8E44AD"]; - }); - - return wisteria; -} - -+ (UIColor *) wetAsphaltColor { - static UIColor *asphalt = nil; - static dispatch_once_t asphaltToken; - - dispatch_once(&asphaltToken, ^{ - asphalt = [UIColor colorFromHexCode:@"34495E"]; - }); - - return asphalt; -} - -+ (UIColor *) midnightBlueColor { - static UIColor *midnightBlue = nil; - static dispatch_once_t midnightBlueToken; - - dispatch_once(&midnightBlueToken, ^{ - midnightBlue = [UIColor colorFromHexCode:@"2C3E50"]; - }); - - return midnightBlue; -} - -+ (UIColor *) sunflowerColor { - static UIColor *sunflower = nil; - static dispatch_once_t sunflowerToken; - - dispatch_once(&sunflowerToken, ^{ - sunflower = [UIColor colorFromHexCode:@"F1C40F"]; - }); - - return sunflower; -} - -+ (UIColor *) tangerineColor { - static UIColor *tangerine = nil; - static dispatch_once_t tangerineToken; - - dispatch_once(&tangerineToken, ^{ - tangerine = [UIColor colorFromHexCode:@"F39C12"]; - }); - - return tangerine; -} - -+ (UIColor *) carrotColor { - static UIColor *carrot = nil; - static dispatch_once_t carrotToken; - - dispatch_once(&carrotToken, ^{ - carrot = [UIColor colorFromHexCode:@"E67E22"]; - }); - - return carrot; -} - -+ (UIColor *) pumpkinColor { - static UIColor *pumpkin = nil; - static dispatch_once_t pumpkinToken; - - dispatch_once(&pumpkinToken, ^{ - pumpkin = [UIColor colorFromHexCode:@"D35400"]; - }); - - return pumpkin; -} - -+ (UIColor *) alizarinColor { - static UIColor *alizarin = nil; - static dispatch_once_t alizarinToken; - - dispatch_once(&alizarinToken, ^{ - alizarin = [UIColor colorFromHexCode:@"E74C3C"]; - }); - - return alizarin; -} - -+ (UIColor *) pomegranateColor { - static UIColor *pomegranate = nil; - static dispatch_once_t pomegranateToken; - - dispatch_once(&pomegranateToken, ^{ - pomegranate = [UIColor colorFromHexCode:@"C0392B"]; - }); - - return pomegranate; -} - -+ (UIColor *) cloudsColor { - static UIColor *clouds = nil; - static dispatch_once_t cloudsToken; - - dispatch_once(&cloudsToken, ^{ - clouds = [UIColor colorFromHexCode:@"ECF0F1"]; - }); - - return clouds; -} - -+ (UIColor *) silverColor { - static UIColor *silver = nil; - static dispatch_once_t silverToken; - - dispatch_once(&silverToken, ^{ - silver = [UIColor colorFromHexCode:@"BDC3C7"]; - }); - - return silver; -} - -+ (UIColor *) concreteColor { - static UIColor *concrete = nil; - static dispatch_once_t concreteToken; - - dispatch_once(&concreteToken, ^{ - concrete = [UIColor colorFromHexCode:@"95A5A6"]; - }); - - return concrete; -} - -+ (UIColor *) asbestosColor { - static UIColor *asbestos = nil; - static dispatch_once_t asbestosToken; - - dispatch_once(&asbestosToken, ^{ - asbestos = [UIColor colorFromHexCode:@"7F8C8D"]; - }); - - return asbestos; -} - -+ (UIColor *) blendedColorWithForegroundColor:(UIColor *)foregroundColor - backgroundColor:(UIColor *)backgroundColor - percentBlend:(CGFloat) percentBlend { - CGFloat onRed, offRed, newRed, onGreen, offGreen, newGreen, onBlue, offBlue, newBlue, onWhite, offWhite; - if (![foregroundColor getRed:&onRed green:&onGreen blue:&onBlue alpha:nil]) { - [foregroundColor getWhite:&onWhite alpha:nil]; - onRed = onWhite; - onBlue = onWhite; - onGreen = onWhite; - } - if (![backgroundColor getRed:&offRed green:&offGreen blue:&offBlue alpha:nil]) { - [backgroundColor getWhite:&offWhite alpha:nil]; - offRed = offWhite; - offBlue = offWhite; - offGreen = offWhite; - } - newRed = onRed * percentBlend + offRed * (1-percentBlend); - newGreen = onGreen * percentBlend + offGreen * (1-percentBlend); - newBlue = onBlue * percentBlend + offBlue * (1-percentBlend); - return [UIColor colorWithRed:newRed green:newGreen blue:newBlue alpha:1.0]; -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIFont+FlatUI.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/UIFont+FlatUI.h deleted file mode 100644 index 231c96e..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIFont+FlatUI.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// UIFont+FlatUI.h -// FlatUI -// -// Created by Jack Flintermann on 5/7/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import - -@interface UIFont (FlatUI) - -+ (UIFont *)flatFontOfSize:(CGFloat)size; -+ (UIFont *)boldFlatFontOfSize:(CGFloat)size; -+ (UIFont *)italicFlatFontOfSize:(CGFloat)size; -+ (UIFont *)lightFlatFontOfSize:(CGFloat)size; -+ (UIFont *)iconFontWithSize:(CGFloat)size; -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIFont+FlatUI.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/UIFont+FlatUI.m deleted file mode 100644 index 0694c57..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIFont+FlatUI.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// UIFont+FlatUI.m -// FlatUI -// -// Created by Jack Flintermann on 5/7/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import "UIFont+FlatUI.h" -#import -#import "NSString+Icons.h" - -@implementation UIFont (FlatUI) - -+ (void) initialize { - [super initialize]; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSArray *fontNames = @[@"Lato-Regular", @"Lato-Bold", @"Lato-Italic", @"Lato-Light"]; - for (NSString *fontName in fontNames) { - NSURL * url = [[NSBundle mainBundle] URLForResource:fontName withExtension:@"ttf"]; - if (url) { - CFErrorRef error; - CTFontManagerRegisterFontsForURL((__bridge CFURLRef)url, kCTFontManagerScopeNone, &error); - } - } - }); -} - -+ (UIFont *)flatFontOfSize:(CGFloat)size { - return [UIFont fontWithName:@"Lato-Regular" size:size]; -} - -+ (UIFont *)boldFlatFontOfSize:(CGFloat)size { - return [UIFont fontWithName:@"Lato-Bold" size:size]; -} - -+ (UIFont *)italicFlatFontOfSize:(CGFloat)size { - return [UIFont fontWithName:@"Lato-Italic" size:size]; -} - -+ (UIFont *)lightFlatFontOfSize:(CGFloat)size { - return [UIFont fontWithName:@"Lato-Light" size:size]; -} - -+ (UIFont *)iconFontWithSize:(CGFloat)size{ - return [UIFont fontWithName:kFlatUIFontFamilyName size:size]; -} -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIImage+FlatUI.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/UIImage+FlatUI.h deleted file mode 100644 index f524035..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIImage+FlatUI.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// UIImage+Color.h -// FlatUI -// -// Created by Jack Flintermann on 5/3/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import - -@interface UIImage (FlatUI) - -+ (UIImage *)imageWithColor:(UIColor *)color - cornerRadius:(CGFloat)cornerRadius; - -+ (UIImage *) buttonImageWithColor:(UIColor *)color - cornerRadius:(CGFloat)cornerRadius - shadowColor:(UIColor *)shadowColor - shadowInsets:(UIEdgeInsets)shadowInsets; - -+ (UIImage *) circularImageWithColor:(UIColor *)color - size:(CGSize)size; - -- (UIImage *) imageWithMinimumSize:(CGSize)size; - -+ (UIImage *) stepperPlusImageWithColor:(UIColor *)color; -+ (UIImage *) stepperMinusImageWithColor:(UIColor *)color; - -+ (UIImage *) backButtonImageWithColor:(UIColor *)color - barMetrics:(UIBarMetrics) metrics - cornerRadius:(CGFloat)cornerRadius; - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIImage+FlatUI.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/UIImage+FlatUI.m deleted file mode 100644 index 17e57ae..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIImage+FlatUI.m +++ /dev/null @@ -1,167 +0,0 @@ -// -// UIImage+Color.m -// FlatUI -// -// Created by Jack Flintermann on 5/3/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import "UIImage+FlatUI.h" - -@implementation UIImage (FlatUI) - -static CGFloat edgeSizeFromCornerRadius(CGFloat cornerRadius) { - return cornerRadius * 2 + 1; -} - -+ (UIImage *)imageWithColor:(UIColor *)color - cornerRadius:(CGFloat)cornerRadius { - CGFloat minEdgeSize = edgeSizeFromCornerRadius(cornerRadius); - CGRect rect = CGRectMake(0, 0, minEdgeSize, minEdgeSize); - UIBezierPath *roundedRect = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius]; - roundedRect.lineWidth = 0; - UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0f); - [color setFill]; - [roundedRect fill]; - [roundedRect stroke]; - [roundedRect addClip]; - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return [image resizableImageWithCapInsets:UIEdgeInsetsMake(cornerRadius, cornerRadius, cornerRadius, cornerRadius)]; -} - -+ (UIImage *) buttonImageWithColor:(UIColor *)color - cornerRadius:(CGFloat)cornerRadius - shadowColor:(UIColor *)shadowColor - shadowInsets:(UIEdgeInsets)shadowInsets { - UIImage *topImage = [self imageWithColor:color cornerRadius:cornerRadius]; - UIImage *bottomImage = [self imageWithColor:shadowColor cornerRadius:cornerRadius]; - CGFloat totalHeight = edgeSizeFromCornerRadius(cornerRadius) + shadowInsets.top + shadowInsets.bottom; - CGFloat totalWidth = edgeSizeFromCornerRadius(cornerRadius) + shadowInsets.left + shadowInsets.right; - CGFloat topWidth = edgeSizeFromCornerRadius(cornerRadius); - CGFloat topHeight = edgeSizeFromCornerRadius(cornerRadius); - CGRect topRect = CGRectMake(shadowInsets.left, shadowInsets.top, topWidth, topHeight); - CGRect bottomRect = CGRectMake(0, 0, totalWidth, totalHeight); - UIGraphicsBeginImageContextWithOptions(CGSizeMake(totalWidth, totalHeight), NO, 0.0f); - if (!CGRectEqualToRect(bottomRect, topRect)) { - [bottomImage drawInRect:bottomRect]; - } - [topImage drawInRect:topRect]; - UIImage *buttonImage = UIGraphicsGetImageFromCurrentImageContext(); - UIEdgeInsets resizeableInsets = UIEdgeInsetsMake(cornerRadius + shadowInsets.top, - cornerRadius + shadowInsets.left, - cornerRadius + shadowInsets.bottom, - cornerRadius + shadowInsets.right); - UIGraphicsEndImageContext(); - return [buttonImage resizableImageWithCapInsets:resizeableInsets]; - -} - -+ (UIImage *) circularImageWithColor:(UIColor *)color - size:(CGSize)size { - CGRect rect = CGRectMake(0, 0, size.width, size.height); - UIBezierPath *circle = [UIBezierPath bezierPathWithOvalInRect:rect]; - UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0f); - [color setFill]; - [color setStroke]; - [circle addClip]; - [circle fill]; - [circle stroke]; - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return image; -} - -- (UIImage *) imageWithMinimumSize:(CGSize)size { - CGRect rect = CGRectMake(0, 0, size.width, size.height); - UIGraphicsBeginImageContextWithOptions(CGSizeMake(size.width, size.height), NO, 0.0f); - [self drawInRect:rect]; - UIImage *resized = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return [resized resizableImageWithCapInsets:UIEdgeInsetsMake(size.height/2, size.width/2, size.height/2, size.width/2)]; -} - -+ (UIImage *) stepperPlusImageWithColor:(UIColor *)color { - CGFloat iconEdgeSize = 15; - CGFloat iconInternalEdgeSize = 3; - UIGraphicsBeginImageContextWithOptions(CGSizeMake(iconEdgeSize, iconEdgeSize), NO, 0.0f); - CGContextRef context = UIGraphicsGetCurrentContext(); - [color setFill]; - CGFloat padding = (iconEdgeSize - iconInternalEdgeSize) / 2; - CGContextFillRect(context, CGRectMake(padding, 0, iconInternalEdgeSize, iconEdgeSize)); - CGContextFillRect(context, CGRectMake(0, padding, iconEdgeSize, iconInternalEdgeSize)); - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return image; -} - -+ (UIImage *) stepperMinusImageWithColor:(UIColor *)color { - CGFloat iconEdgeSize = 15; - CGFloat iconInternalEdgeSize = 3; - UIGraphicsBeginImageContextWithOptions(CGSizeMake(iconEdgeSize, iconEdgeSize), NO, 0.0f); - CGContextRef context = UIGraphicsGetCurrentContext(); - [color setFill]; - CGFloat padding = (iconEdgeSize - iconInternalEdgeSize) / 2; - CGContextFillRect(context, CGRectMake(0, padding, iconEdgeSize, iconInternalEdgeSize)); - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return image; -} - -+ (UIImage *) backButtonImageWithColor:(UIColor *)color - barMetrics:(UIBarMetrics) metrics - cornerRadius:(CGFloat)cornerRadius { - CGSize size; - if (metrics == UIBarMetricsDefault) { - size = CGSizeMake(50, 30); - } else { - size = CGSizeMake(60, 23); - } - UIBezierPath *path = [self bezierPathForBackButtonInRect:CGRectMake(0, 0, size.width, size.height) cornerRadius:cornerRadius]; - UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f); - [color setFill]; - [path addClip]; - [path fill]; - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - if ([image respondsToSelector:@selector(resizableImageWithCapInsets:resizingMode:)]) { - return [image resizableImageWithCapInsets:UIEdgeInsetsMake(cornerRadius, 15, cornerRadius, cornerRadius) resizingMode:UIImageResizingModeStretch]; - }else{ - return [image resizableImageWithCapInsets:UIEdgeInsetsMake(cornerRadius, 15, cornerRadius, cornerRadius)]; - } -} - -+ (UIBezierPath *) bezierPathForBackButtonInRect:(CGRect)rect cornerRadius:(CGFloat)radius { - UIBezierPath *path = [UIBezierPath bezierPath]; - CGPoint mPoint = CGPointMake(CGRectGetMaxX(rect) - radius, rect.origin.y); - CGPoint ctrlPoint = mPoint; - [path moveToPoint:mPoint]; - - ctrlPoint.y += radius; - mPoint.x += radius; - mPoint.y += radius; - if (radius > 0) [path addArcWithCenter:ctrlPoint radius:radius startAngle:(float)M_PI + (float)M_PI_2 endAngle:0 clockwise:YES]; - - mPoint.y = CGRectGetMaxY(rect) - radius; - [path addLineToPoint:mPoint]; - - ctrlPoint = mPoint; - mPoint.y += radius; - mPoint.x -= radius; - ctrlPoint.x -= radius; - if (radius > 0) [path addArcWithCenter:ctrlPoint radius:radius startAngle:0 endAngle:(float)M_PI_2 clockwise:YES]; - - mPoint.x = rect.origin.x + (10.0f); - [path addLineToPoint:mPoint]; - - [path addLineToPoint:CGPointMake(rect.origin.x, CGRectGetMidY(rect))]; - - mPoint.y = rect.origin.y; - [path addLineToPoint:mPoint]; - - [path closePath]; - return path; -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UINavigationBar+FlatUI.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/UINavigationBar+FlatUI.h deleted file mode 100644 index 940d271..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UINavigationBar+FlatUI.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UINavigationBar+FlatUI.h -// FlatUI -// -// Created by Jack Flintermann on 5/3/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import - -@interface UINavigationBar (FlatUI) - -- (void) configureFlatNavigationBarWithColor:(UIColor *)color UI_APPEARANCE_SELECTOR; - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UINavigationBar+FlatUI.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/UINavigationBar+FlatUI.m deleted file mode 100644 index dbf4bb4..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UINavigationBar+FlatUI.m +++ /dev/null @@ -1,41 +0,0 @@ -// -// UINavigationBar+FlatUI.m -// FlatUI -// -// Created by Jack Flintermann on 5/3/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import "UINavigationBar+FlatUI.h" -#import "UIImage+FlatUI.h" - -@implementation UINavigationBar (FlatUI) - -- (void) configureFlatNavigationBarWithColor:(UIColor *)color { - [self setBackgroundImage:[UIImage imageWithColor:color cornerRadius:0] - forBarMetrics:UIBarMetricsDefault & UIBarMetricsLandscapePhone]; - NSMutableDictionary *titleTextAttributes = [[self titleTextAttributes] mutableCopy]; - if (!titleTextAttributes) { - titleTextAttributes = [NSMutableDictionary dictionary]; - } - - if ([[[UIDevice currentDevice] systemVersion] compare:@"6.0" options:NSNumericSearch] != NSOrderedAscending) { - // iOS6 methods - NSShadow *shadow = [[NSShadow alloc] init]; - [shadow setShadowOffset:CGSizeZero]; - [shadow setShadowColor:[UIColor clearColor]]; - [titleTextAttributes setObject:shadow forKey:NSShadowAttributeName]; - } else { - // Pre-iOS6 methods - [titleTextAttributes setValue:[UIColor clearColor] forKey:UITextAttributeTextShadowColor]; - [titleTextAttributes setValue:[NSValue valueWithUIOffset:UIOffsetZero] forKey:UITextAttributeTextShadowOffset]; - - } - - [self setTitleTextAttributes:titleTextAttributes]; - if ([self respondsToSelector:@selector(setShadowImage:)]) { - [self setShadowImage:[UIImage imageWithColor:[UIColor clearColor] cornerRadius:0]]; - } -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIPopoverController+FlatUI.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/UIPopoverController+FlatUI.h deleted file mode 100644 index 38647a6..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIPopoverController+FlatUI.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// UIPopoverController+FlatUI.h -// FlatUIKit -// -// Created by Jack Flintermann on 6/29/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import - -@interface UIPopoverController (FlatUI) - -- (void) configureFlatPopoverWithBackgroundColor:(UIColor *)backgroundColor - cornerRadius:(CGFloat)cornerRadius; - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIPopoverController+FlatUI.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/UIPopoverController+FlatUI.m deleted file mode 100644 index 6d9f518..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIPopoverController+FlatUI.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// UIPopoverController+FlatUI.m -// FlatUIKit -// -// Created by Jack Flintermann on 6/29/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import "UIPopoverController+FlatUI.h" -#import "FUIPopoverBackgroundView.h" - -@implementation UIPopoverController (FlatUI) - -- (void) configureFlatPopoverWithBackgroundColor:(UIColor *)backgroundColor - cornerRadius:(CGFloat)cornerRadius { - [FUIPopoverBackgroundView setBackgroundColor:backgroundColor]; - [FUIPopoverBackgroundView setCornerRadius:cornerRadius]; - [self setPopoverLayoutMargins:[FUIPopoverBackgroundView contentViewInsets]]; - [self setPopoverBackgroundViewClass:[FUIPopoverBackgroundView class]]; -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIProgressView+FlatUI.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/UIProgressView+FlatUI.h deleted file mode 100644 index e4ece2f..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIProgressView+FlatUI.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// UIProgressView+FlatUI.h -// FlatUITestProj -// -// Created by Alex Medearis on 5/16/13. -// Copyright (c) 2013 Alex Medearis. All rights reserved. -// - -#import - -@interface UIProgressView (FlatUI) - -- (void)configureFlatProgressViewWithTrackColor:(UIColor *)trackColor UI_APPEARANCE_SELECTOR; -- (void)configureFlatProgressViewWithProgressColor:(UIColor *)progressColor UI_APPEARANCE_SELECTOR; - -- (void) configureFlatProgressViewWithTrackColor:(UIColor *)trackColor - progressColor:(UIColor *)progressColor; - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIProgressView+FlatUI.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/UIProgressView+FlatUI.m deleted file mode 100644 index 5e0b464..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIProgressView+FlatUI.m +++ /dev/null @@ -1,40 +0,0 @@ -// -// UIProgressView+FlatUI.h -// FlatUITestProj -// -// Created by Alex Medearis on 5/16/13. -// Copyright (c) 2013 Alex Medearis. All rights reserved. -// - -#import "UIImage+FlatUI.h" - -@implementation UIProgressView (FlatUI) - -- (void)configureFlatProgressViewWithTrackColor:(UIColor *)trackColor { - UIImage *trackImage = [UIImage imageWithColor:trackColor cornerRadius:4.0]; - trackImage = [trackImage imageWithMinimumSize:CGSizeMake(10.0f, 10.0f)]; - [self setTrackImage:trackImage]; - - if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending) { - [self setTintColor:trackColor]; - } - -} - -- (void)configureFlatProgressViewWithProgressColor:(UIColor *)progressColor { - UIImage *progressImage = [UIImage imageWithColor:progressColor cornerRadius:4.0]; - [self setProgressImage:progressImage]; - - if ([[[UIDevice currentDevice] systemVersion] compare:@"7.1" options:NSNumericSearch] != NSOrderedAscending) { - [self setTintColor:progressColor]; - } - -} - -- (void) configureFlatProgressViewWithTrackColor:(UIColor *)trackColor - progressColor:(UIColor *)progressColor { - [self configureFlatProgressViewWithTrackColor:trackColor]; - [self configureFlatProgressViewWithProgressColor:progressColor]; -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UISlider+FlatUI.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/UISlider+FlatUI.h deleted file mode 100644 index 275899b..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UISlider+FlatUI.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// UISlider+FlatUI.h -// FlatUI -// -// Created by Jack Flintermann on 5/3/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import - -@interface UISlider (FlatUI) - -- (void) configureFlatSliderWithTrackColor:(UIColor *)trackColor - progressColor:(UIColor *)progressColor - thumbColor:(UIColor *)thumbColor; - -- (void) configureFlatSliderWithTrackColor:(UIColor *)trackColor - progressColor:(UIColor *)progressColor - thumbColorNormal:(UIColor *)thumbColorNormal - thumbColorHighlighted:(UIColor *)highlightedThumbColor; - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UISlider+FlatUI.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/UISlider+FlatUI.m deleted file mode 100644 index 8a124cc..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UISlider+FlatUI.m +++ /dev/null @@ -1,44 +0,0 @@ -// -// UISlider+FlatUI.m -// FlatUI -// -// Created by Jack Flintermann on 5/3/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import "UISlider+FlatUI.h" -#import "UIImage+FlatUI.h" - -@implementation UISlider (FlatUI) - -- (void) configureFlatSliderWithTrackColor:(UIColor *)trackColor - progressColor:(UIColor *)progressColor - thumbColor:(UIColor *)thumbColor { - - [self configureFlatSliderWithTrackColor:trackColor - progressColor:progressColor - thumbColorNormal:thumbColor - thumbColorHighlighted:thumbColor]; -} - -- (void) configureFlatSliderWithTrackColor:(UIColor *)trackColor - progressColor:(UIColor *)progressColor - thumbColorNormal:(UIColor *)normalThumbColor - thumbColorHighlighted:(UIColor *)highlightedThumbColor -{ - UIImage *progressImage = [[UIImage imageWithColor:progressColor cornerRadius:5.0] - imageWithMinimumSize:CGSizeMake(10, 10)]; - UIImage *trackImage = [[UIImage imageWithColor:trackColor cornerRadius:5.0] - imageWithMinimumSize:CGSizeMake(10, 10)]; - - [self setMinimumTrackImage:progressImage forState:UIControlStateNormal]; - [self setMaximumTrackImage:trackImage forState:UIControlStateNormal]; - - UIImage *normalSliderImage = [UIImage circularImageWithColor:normalThumbColor size:CGSizeMake(24, 24)]; - [self setThumbImage:normalSliderImage forState:UIControlStateNormal]; - - UIImage *highlighedSliderImage = [UIImage circularImageWithColor:highlightedThumbColor size:CGSizeMake(24, 24)]; - [self setThumbImage:highlighedSliderImage forState:UIControlStateHighlighted]; -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIStepper+FlatUI.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/UIStepper+FlatUI.h deleted file mode 100644 index 409e97c..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIStepper+FlatUI.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// UIStepper+FlatUI.h -// FlatUI -// -// Created by Jack Flintermann on 5/3/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import - -@interface UIStepper (FlatUI) - -- (void) configureFlatStepperWithColor:(UIColor *)color - highlightedColor:(UIColor *)highlightedColor - disabledColor:(UIColor *)disabledColor - iconColor:(UIColor *)iconColor; - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIStepper+FlatUI.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/UIStepper+FlatUI.m deleted file mode 100644 index eefd0eb..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIStepper+FlatUI.m +++ /dev/null @@ -1,52 +0,0 @@ -// -// UIStepper+FlatUI.m -// FlatUI -// -// Created by Jack Flintermann on 5/3/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import "UIStepper+FlatUI.h" -#import "UIImage+FlatUI.h" -#import - -@implementation UIStepper (FlatUI) - -- (void) configureFlatStepperWithColor:(UIColor *)color - highlightedColor:(UIColor *)highlightedColor - disabledColor:(UIColor *)disabledColor - iconColor:(UIColor *)iconColor { - - // iOS 6 compat check - if ([self respondsToSelector:@selector(setBackgroundImage:forState:)]) { - UIImage *normalImage = [UIImage imageWithColor:color cornerRadius:2.0]; - UIImage *highlightedImage = [UIImage imageWithColor:highlightedColor cornerRadius:2.0]; - UIImage *disabledImage = [UIImage imageWithColor:disabledColor cornerRadius:2.0]; - [self setBackgroundImage:normalImage forState:UIControlStateNormal]; - [self setBackgroundImage:highlightedImage forState:UIControlStateHighlighted]; - [self setBackgroundImage:disabledImage forState:UIControlStateDisabled]; - [self setDividerImage:[UIImage imageWithColor:highlightedColor cornerRadius:0] - forLeftSegmentState:UIControlStateNormal - rightSegmentState:UIControlStateNormal]; - [self setDividerImage:[UIImage imageWithColor:highlightedColor cornerRadius:0] - forLeftSegmentState:UIControlStateHighlighted - rightSegmentState:UIControlStateNormal]; - [self setDividerImage:[UIImage imageWithColor:highlightedColor cornerRadius:0] - forLeftSegmentState:UIControlStateNormal - rightSegmentState:UIControlStateHighlighted]; - - UIImage *plusImage = [UIImage stepperPlusImageWithColor:iconColor]; - UIImage *minusImage = [UIImage stepperMinusImageWithColor:iconColor]; - [self setIncrementImage:plusImage forState:UIControlStateNormal]; - [self setIncrementImage:plusImage forState:UIControlStateDisabled]; - [self setDecrementImage:minusImage forState:UIControlStateNormal]; - [self setDecrementImage:minusImage forState:UIControlStateDisabled]; - } - - if ([[[UIDevice currentDevice] systemVersion] compare:@"7.1" options:NSNumericSearch] != NSOrderedAscending) { - [self setTintColor:iconColor]; - } - -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UITabBar+FlatUI.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/UITabBar+FlatUI.h deleted file mode 100644 index 622e960..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UITabBar+FlatUI.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// UITabBar+FlatUI.h -// FlatUI -// -// Created by Jack Flintermann on 5/3/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import - -@interface UITabBar (FlatUI) - -- (void)configureFlatTabBarWithColor:(UIColor *)color UI_APPEARANCE_SELECTOR; -- (void)configureFlatTabBarWithSelectedColor:(UIColor *)selectedColor UI_APPEARANCE_SELECTOR; - -- (void)configureFlatTabBarWithColor:(UIColor *)color - selectedColor:(UIColor *)selectedColor; - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UITabBar+FlatUI.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/UITabBar+FlatUI.m deleted file mode 100644 index 166d104..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UITabBar+FlatUI.m +++ /dev/null @@ -1,28 +0,0 @@ -// -// UITabBar+FlatUI.m -// FlatUI -// -// Created by Jack Flintermann on 5/3/13. -// Copyright (c) 2013 Jack Flintermann. All rights reserved. -// - -#import "UITabBar+FlatUI.h" -#import "UIImage+FlatUI.h" - -@implementation UITabBar (FlatUI) - -- (void)configureFlatTabBarWithColor:(UIColor *)color { - [self setBackgroundImage:[UIImage imageWithColor:color cornerRadius:0]]; -} - -- (void)configureFlatTabBarWithSelectedColor:(UIColor *)selectedColor { - [self setSelectionIndicatorImage:[UIImage imageWithColor:selectedColor cornerRadius:6.0]]; -} - -- (void)configureFlatTabBarWithColor:(UIColor *)color - selectedColor:(UIColor *)selectedColor { - [self configureFlatTabBarWithColor:color]; - [self configureFlatTabBarWithSelectedColor:selectedColor]; -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UITableViewCell+FlatUI.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/UITableViewCell+FlatUI.h deleted file mode 100644 index 01d36b8..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UITableViewCell+FlatUI.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// UITableViewCell+FlatUI.h -// FlatUIKitExample -// -// Created by Maciej Swic on 2013-05-31. -// -// - -#import - -@interface UITableViewCell (FlatUI) - -@property (nonatomic) CGFloat cornerRadius; -@property (nonatomic) CGFloat separatorHeight; - -- (void) configureFlatCellWithColor:(UIColor *)color - selectedColor:(UIColor *)selectedColor; - -- (void) configureFlatCellWithColor:(UIColor *)color - selectedColor:(UIColor *)selectedColor - roundingCorners:(UIRectCorner)corners; - -- (void)setCornerRadius:(CGFloat)cornerRadius; -- (void)setSeparatorHeight:(CGFloat)separatorHeight; - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UITableViewCell+FlatUI.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/UITableViewCell+FlatUI.m deleted file mode 100644 index 2b41684..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UITableViewCell+FlatUI.m +++ /dev/null @@ -1,61 +0,0 @@ -// -// UITableViewCell+FlatUI.m -// FlatUIKitExample -// -// Created by Maciej Swic on 2013-05-31. -// -// - -#import "UITableViewCell+FlatUI.h" -#import "FUICellBackgroundView.h" -#import - -@implementation UITableViewCell (FlatUI) - -@dynamic cornerRadius, separatorHeight; - -- (void) configureFlatCellWithColor:(UIColor *)color - selectedColor:(UIColor *)selectedColor { - [self configureFlatCellWithColor:color - selectedColor:selectedColor - roundingCorners:0]; -} - -- (void) configureFlatCellWithColor:(UIColor *)color - selectedColor:(UIColor *)selectedColor - roundingCorners:(UIRectCorner)corners { - FUICellBackgroundView* backgroundView = [FUICellBackgroundView new]; - backgroundView.backgroundColor = color; - backgroundView.roundedCorners = corners; - self.backgroundView = backgroundView; - - FUICellBackgroundView* selectedBackgroundView = [FUICellBackgroundView new]; - selectedBackgroundView.roundedCorners = corners; - selectedBackgroundView.backgroundColor = selectedColor; - self.selectedBackgroundView = selectedBackgroundView; - - //The labels need a clear background color or they will look very funky - self.textLabel.backgroundColor = [UIColor clearColor]; - if ([self respondsToSelector:@selector(detailTextLabel)]) - self.detailTextLabel.backgroundColor = [UIColor clearColor]; - - //Guess some good text colors - self.textLabel.textColor = selectedColor; - self.textLabel.highlightedTextColor = color; - if ([self respondsToSelector:@selector(detailTextLabel)]) { - self.detailTextLabel.textColor = selectedColor; - self.detailTextLabel.highlightedTextColor = color; - } -} - -- (void)setCornerRadius:(CGFloat)cornerRadius { - [(FUICellBackgroundView*)self.backgroundView setCornerRadius:cornerRadius]; - [(FUICellBackgroundView*)self.selectedBackgroundView setCornerRadius:cornerRadius]; -} - -- (void)setSeparatorHeight:(CGFloat)separatorHeight { - [(FUICellBackgroundView*)self.backgroundView setSeparatorHeight:separatorHeight]; - [(FUICellBackgroundView*)self.selectedBackgroundView setSeparatorHeight:separatorHeight]; -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIToolbar+FlatUI.h b/FoodbLog/Pods/FlatUIKit/Classes/ios/UIToolbar+FlatUI.h deleted file mode 100644 index 1e61c27..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIToolbar+FlatUI.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// Created by Jonathon Hibbard on 6/13/13. -// Copyright (c) 2013 Integrated Events. All rights reserved. -// -// To change the template use AppCode | Preferences | File Templates. -// - -#import - -@interface UIToolbar (FlatUI) - -- (void)configureFlatToolbarWithColor:(UIColor *)color UI_APPEARANCE_SELECTOR; - -@end \ No newline at end of file diff --git a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIToolbar+FlatUI.m b/FoodbLog/Pods/FlatUIKit/Classes/ios/UIToolbar+FlatUI.m deleted file mode 100644 index 70da2ab..0000000 --- a/FoodbLog/Pods/FlatUIKit/Classes/ios/UIToolbar+FlatUI.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// Created by Jonathon Hibbard on 6/13/13. -// Copyright (c) 2013 Integrated Events. All rights reserved. -// -// To change the template use AppCode | Preferences | File Templates. -// - -#import "UIToolbar+FlatUI.h" -#import "UIImage+FlatUI.h" - -@implementation UIToolbar (FlatUI) - -- (void)configureFlatToolbarWithColor:(UIColor *)color { - [self setBackgroundImage:[UIImage imageWithColor:color cornerRadius:0] - forToolbarPosition:UIToolbarPositionAny - barMetrics:UIBarMetricsDefault]; - - if ([self respondsToSelector:@selector(setShadowImage:forToolbarPosition:)]) { - UIImage *clearShadowImage = [UIImage imageWithColor:[UIColor clearColor] cornerRadius:0]; - [self setShadowImage:clearShadowImage forToolbarPosition:UIToolbarPositionAny]; - } -} - -@end diff --git a/FoodbLog/Pods/FlatUIKit/LICENSE b/FoodbLog/Pods/FlatUIKit/LICENSE deleted file mode 100644 index 7f46f76..0000000 --- a/FoodbLog/Pods/FlatUIKit/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 Grouper, Inc - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/FoodbLog/Pods/FlatUIKit/README.markdown b/FoodbLog/Pods/FlatUIKit/README.markdown deleted file mode 100644 index e9b826d..0000000 --- a/FoodbLog/Pods/FlatUIKit/README.markdown +++ /dev/null @@ -1,234 +0,0 @@ -Background -====== -FlatUIKit was originally written by Jack Flintermann in March of 2013, before iOS7 had even come out. The idea was to give a nice flat look to some of the native iOS components. Then iOS7 came along and introduced a decent API to do most of these tasks. - -However, for backwards compatability, we will be attempting to maintain iOS6 compatability, as long as feasabilty possible. If we find a reason to move to iOS7 only support, we will leave a branch for remaining iOS6 support, and move forward. - -FlatUIKit -====== - -FlatUIKit is a collection of iOS components styled with the "Flat UI" aesthetic that we created while building [Grouper for iPhone](http://www.joingrouper.com). Its design inspiration comes from [Flat UI](http://designmodo.github.io/Flat-UI/) and [Kyle Miller](http://kylemillercreative.com/grouper-social-club). Styling is implemented via categories on/drop-in replacements for existing UIKit components, so integrating it into your project is very straightforward. - -Installation -------- - -FlatUIKit can be installed via [Cocoapods](http://cocoapods.org/). Simply add - -```ruby -pod 'FlatUIKit' -``` - -to your Podfile. If you don't use Cocoapods you're welcome to use git submodules, or simply [download it](https://github.com/Grouper/FlatUIKit/archive/master.zip) and include it in your project manually. - -Note that FlatUIKit requires the CoreText framework as well as iOS > 6.0. - -The Components -------- - -### Buttons - -FUIButton is a drop-in subclass of UIButton that exposes the additional properties buttonColor, shadowColor, cornerRadius, and shadowHeight. Note that if you set any of these, you have to set all of them. - -```objective-c -myButton.buttonColor = [UIColor turquoiseColor]; -myButton.shadowColor = [UIColor greenSeaColor]; -myButton.shadowHeight = 3.0f; -myButton.cornerRadius = 6.0f; -myButton.titleLabel.font = [UIFont boldFlatFontOfSize:16]; -[myButton setTitleColor:[UIColor cloudsColor] forState:UIControlStateNormal]; -[myButton setTitleColor:[UIColor cloudsColor] forState:UIControlStateHighlighted]; -``` - -![FUIButton](https://raw.github.com/Grouper/FlatUIKit/master/Example/README%20images/fuibutton-small.gif) - -### TextFields - -FUITextField is a drop-in subclass of UITextField that exposes the additional properties edgeInsets, textFieldColor, borderColor, borderWidth and cornerRadius. Note that if you set any of these, you have to set all of them. - -```objective-c -myTextField.font = [UIFont flatFontOfSize:16]; -myTextField.backgroundColor = [UIColor clearColor]; -myTextField.edgeInsets = UIEdgeInsetsMake(4.0f, 15.0f, 4.0f, 15.0f); -myTextField.textFieldColor = [UIColor whiteColor]; -myTextField.borderColor = [UIColor turquoiseColor]; -myTextField.borderWidth = 2.0f; -myTextField.cornerRadius = 3.0f; -``` - -![FUITextField](Example/README%20images/fuitextfield-small.gif) - -### SegmentedControls - -FUISegmentedControl is a drop-in subclass of UISegmentedControl that exposes the additional properties selectedColor, deselectedColor, selectedFont, deselectedFont, selectedFontColor, deselectedFontColor, dividerColor and cornerRadius. Note that if you set any of these, it is recommended that you set all of them. - -```objective-c -mySegmentedControl.selectedFont = [UIFont boldFlatFontOfSize:16]; -mySegmentedControl.selectedFontColor = [UIColor cloudsColor]; -mySegmentedControl.deselectedFont = [UIFont flatFontOfSize:16]; -mySegmentedControl.deselectedFontColor = [UIColor cloudsColor]; -mySegmentedControl.selectedColor = [UIColor amethystColor]; -mySegmentedControl.deselectedColor = [UIColor silverColor]; -mySegmentedControl.dividerColor = [UIColor midnightBlueColor]; -mySegmentedControl.cornerRadius = 5.0; -``` - -### Switches - -FUISwitch is not a subclass of UISwitch (UISwitch is too inflexible to subclass), but rather a reimplementation that exposes all of the methods of UISwitch. In addition, it also provides access to its underlying on/off UILabels and other subviews. - -```objective-c -mySwitch.onColor = [UIColor turquoiseColor]; -mySwitch.offColor = [UIColor cloudsColor]; -mySwitch.onBackgroundColor = [UIColor midnightBlueColor]; -mySwitch.offBackgroundColor = [UIColor silverColor]; -mySwitch.offLabel.font = [UIFont boldFlatFontOfSize:14]; -mySwitch.onLabel.font = [UIFont boldFlatFontOfSize:14]; -``` - -![FUISwitch](https://raw.github.com/Grouper/FlatUIKit/master/Example/README%20images/fuiswitch-small.gif) - -### Alert Views - -Similar to FUISwitch, FUIAlertView is a reimplemenation of UIAlertView that exposes all of UIAlertView's methods (and delegate methods, with the FUIAlertViewDelegate protocol), but with far greater flexibility in UI customization. All of its child UILabels, UIViews, and FUIButtons can be customized at will. - -```objective-c -FUIAlertView *alertView = [[FUIAlertView alloc] initWithTitle:@"Hello" - message:@"This is an alert view" - delegate:nil cancelButtonTitle:@"Dismiss" - otherButtonTitles:@"Do Something", nil]; -alertView.titleLabel.textColor = [UIColor cloudsColor]; -alertView.titleLabel.font = [UIFont boldFlatFontOfSize:16]; -alertView.messageLabel.textColor = [UIColor cloudsColor]; -alertView.messageLabel.font = [UIFont flatFontOfSize:14]; -alertView.backgroundOverlay.backgroundColor = [[UIColor cloudsColor] colorWithAlphaComponent:0.8]; -alertView.alertContainer.backgroundColor = [UIColor midnightBlueColor]; -alertView.defaultButtonColor = [UIColor cloudsColor]; -alertView.defaultButtonShadowColor = [UIColor asbestosColor]; -alertView.defaultButtonFont = [UIFont boldFlatFontOfSize:16]; -alertView.defaultButtonTitleColor = [UIColor asbestosColor]; -[alertView show]; -``` - -NOTE: to create FUIAlertView instance in Swift please use default initializer -s -```swift -let alertView = FUIAlertView() -``` -FUIAlertView - -### Sliders/Steppers/Progress Views -To provide flat UISliders, UIProgressViews and UISteppers, we simply provide categories on UISlider/ProgressView/UIStepper to automatically configure their appearance with appropriate colors/corner radii. This makes for zero-friction integration with your existing project: - -```objective-c -[mySlider configureFlatSliderWithTrackColor:[UIColor silverColor] - progressColor:[UIColor alizarinColor] - thumbColor:[UIColor pomegranateColor]]; -``` - -![FUISlider](https://raw.github.com/Grouper/FlatUIKit/master/Example/README%20images/fuislider-small.gif) - -```objective-c -[myProgressView configureFlatProgressViewWithTrackColor:[UIColor silverColor] - progressColor:[UIColor alizarinColor]]; - -[myStepper configureFlatStepperWithColor:[UIColor wisteriaColor] - highlightedColor:[UIColor wisteriaColor] - disabledColor:[UIColor amethystColor] - iconColor:[UIColor cloudsColor]]; -``` - -![FUIStepper](https://raw.github.com/Grouper/FlatUIKit/master/Example/README%20images/fuistepper-small.gif) - -### Bar Button Items -To customize bar button items for your entire application (including back buttons), UIBarButtonItem+FlatUI provides a class method which leverages the UIBarButtonItem appearance proxy to do this in one step: - -```objective-c -[UIBarButtonItem configureFlatButtonsWithColor:[UIColor peterRiverColor] - highlightedColor:[UIColor belizeHoleColor] - cornerRadius:3]; -``` - -![FUINavBar](https://raw.github.com/Grouper/FlatUIKit/master/Example/README%20images/fuinavbar-small.gif) - -However, this might cause rendering issues with controllers that are pushed from actionsheets, sharesheets or links in webviews. To prevent this behavior, scope the customized bar buttom items to your controllers: - -```objective-c -[UIBarButtonItem configureFlatButtonsWithColor:[UIColor peterRiverColor] - highlightedColor:[UIColor belizeHoleColor] - cornerRadius:3 - whenContainedIn:[YourViewController class]]; -``` - -### Navigation Bars -As above, we provide a category on UINavigationBar to configure it flatly with a single color: - -```objective-c -[self.navigationController.navigationBar configureFlatNavigationBarWithColor:[UIColor midnightBlueColor]]; -``` - -### TableView Cells -You can modify the backgroundColor and selectedBackgroundColor of a UITableViewCell without losing the rounded corners. The cell will copy the UITableView's separator color. The separator height is exposed as separatorHeight and the radius as cornerRadius. - -```objective-c -UITableViewCell *cell = ...; -[cell configureFlatCellWithColor:[UIColor greenSeaColor] - selectedColor:[UIColor cloudsColor] - roundingCorners:corners]; - -cell.cornerRadius = 5.0f; // optional -cell.separatorHeight = 2.0f; // optional -``` - -![FUITableViewCell](https://raw.github.com/Grouper/FlatUIKit/master/Example/README%20images/fuitableview-small.png) - - -### Popover -Like some other flat components, we simply provide a category to automatically configure a popover appearance for iPad by only having to set a background color. - -```objective-c -popover = [[UIPopoverController alloc] initWithContentViewController:nc]; -[popover configureFlatPopoverWithBackgroundColor: [UIColor midnightBlueColor] cornerRadius:3]; -popover.delegate = self; -[popover presentPopoverFromRect:button.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; -``` - -![Popover](https://raw.github.com/Grouper/FlatUIKit/master/Example/README%20images/fuipopovercontroller-small.gif) - -Colors -------- - -For convenience, FlatUIKit includes the colors defined at [Flat UI Colors](http://flatuicolors.com/). You can see examples of these colors in the code/components above. Using them is as simple as: - -```objective-c -#import -UIColor *myColor = [UIColor turquoiseColor]; -``` - -Fonts -------- - -FlatUIKit comes bundled with Lato, a clean, beautiful open font. More info on Lato can be found [here](http://www.latofonts.com/). It is included in FlatUIKit automatically; you can use it as follows: - -```objective-c -#import "UIFont+FlatUI.h" -UIFont *myFont = [UIFont flatFontOfSize:16]; -``` - -Icons -------- - -You can now use the great icons provided by [FlatUIKit](http://designmodo.github.io/Flat-UI/) in your app. The easiest way is to use a label, but I will be adding support to use them in buttons, ImageViews, and other conveniences. - -```objective-c -#import "NSString+Icons.h" -UILabel *label = [...] -label.font = [UIFont iconFontWithSize:16]; -label.text = [NSString iconStringForEnum:FUIHeart]; -``` - -The icons follow roughly the same naming scheme as FlatUI, but you can look up the enumeration in NSString+Icons.h - -Contributions --------- - -Contributions are totally welcome. We'll review all pull requests and if you send us a good one/are interested we're happy to give you push access to the repo. diff --git a/FoodbLog/Pods/FlatUIKit/Resources/Lato-Bold.ttf b/FoodbLog/Pods/FlatUIKit/Resources/Lato-Bold.ttf deleted file mode 100644 index 74343694e2b2114272f38b1124813b972cb592e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121788 zcmeFacYIvMxi>y@&NgYKU2T_EtJQY3RquVRVpZF6ms}-x8+SX#7;Ks`jsa6bLhr;7 zLRmvX2_=wlxhX&r!VRPmQb-8x1(FLlV6A@NXU^_wC2Rxt-rwi_=e2#jr#v%f=9%Yt z=4msBamJV#|EZX#Ykpr3t~ler{SJP0JwtQm-*fNy-xxo9Eo1Z2d*(0fSX8z^&G>Kb z1ejsY{PL>b{O!IgaDF%7M^|qd+dl8*TV7#IvkVpfb@iUz9_^2EZp91s;(6J+?d!Mf zT(UF5n7#`zZ>%5NwVh?MY}9`#o@cDzeAYVMCFdMu%=$88Z{EFO?bwAjdJV1v8@BA;yY)YZUSdqr;e89vSi5tp=8$~>W8>#Aw#T!1+v+jfrg^*Z zezZ>tZyDRWolj^#Lixie@7X%GW$n|C-hCe9yKZF6G;jO1UAvppm$x#0@O{SQ>$mS* zyZxB<>kgEs_YVLwDC)fR?eE|8ot4Ix|71DZpW_bu$=6nF7r%cfJ8xo6>>AyB+IfIY zV-nrPAC%KR99zU#TFJzmi9X$Xq9)~;0$`&%+{P|oTDB5nAu%5-WsP`vzUB>FaVDz* z(i2S0n0l|;3fOGrSNAZ)NO(AvQXYsDAfZLxar2*r$@FKemrw zp?#R&gUhecbCsk%h93`;R5MvI-Jw7H0$}SG>=*JNyHItQ72xRB%w(Mt-)`fteJQZ_o{Gw6UPD^OK>=F5bRcxIi+q9dzLQ z5*&wdydn3opk@o}RA0(8Y6rVY-OAe3udu6BXW>|l>tncnlU*h4W)I1mSV+B_-JnWm zS82QO4EHtdtW)(Tb_4yY-FQ~X0;*#yTODQRqfV8slx3)AO3EF0%q`P-}$@6E&UJdQrRe^mna zI6oT);eIO)J;BHyvK46CCz^6rD?Q5Q%Fhd!!-RWr?*OyPepV0orPB4R8%Mu%fIUI) zR-eVZQaSD)K-;fpD`g$p_dL5oeFYm7$Ca!exUUd+C)`gvw1X3Wp|KF-Kw}XxY zV=T_c?=Nt?t|?`;iE*GYNIlT5O=4VVEK&~|3yhiSBNi2SC)`gvG`rAW8Vig=>LIx& zULpMB_bD7NskXC@=qrsq-l3Yse9|#i zL;XYfgSuVl-+$m8^I3q#nP`oE6SPI+OEfm+7h{Yu{Ht;>E5^fw<8~aQI4;D&adfM7 ztOoD619Wu<_-Yl7MRdppwh9ORE&@J@zv#GJ{VwZED`BnD1?+4bS4jUpF$ed9>U&wE z`bVq>=bh@uLHEm8HI8|>KCHS7W3`Nx$;}gY;rb?VPvONkaK3}FiJ0m^(ELlxfi^vd zHs6oqk2tTzaV5@QQVy1e>$`Dm$6>(Hh~pWE5?MLqLve}c!W~FDDa15Vx{x(OI?~xm z{v_n*Ngk!#k|8hEOasZOgUn55dX|A%#lVa#i}u6|y2o!4ejR>@8#Etb$dtDpt*ESS_n#^{fFBxrsHi76$5I?JUA( zunyMAx>z@x$$D5X>tp?xCkELpHk-|1Lu@Xa$L6yIY$0337PDbC!j`b5Y#Ce5RzS{= zvN81I5WARtm0bdfd@Z|~-N9~Wcd}#bo9r(3E%t4854)G$#~xt!vnV^x9%A2R-(e54 zN7*Cn3HCU9l0C)VWjom#ww7&V|A*~mx3TT)4E7P*!!~iw4zuf7jP2qQm)UxDCi^e; zDf@)|g-x){>>TznyPJKFozGUYt!$kA1_SdiwuS9y@3U2yi7sN-uou{i><#u;_7;1a z{f)iJ9^)#E>o3_q*?+PR*+003YuS73EcSQy4*P%|WS6oF*=6hqyPRFYu4G5q*V#AF z!>iei>?U>t`w{ys`xEHuHTDPgI@`zo%>KxJ$5eb2FbjZ9HAaeI><+LAuH`wrl6Ud> zd?_E}2l!Reze_)selI`mv3i^yx5wuRc`7_jo-WV5UY|GQlYAPV(P#EKeQsZguh%!~ zTO0gIXyd2S#02W3T0NL4RXiKD&fxR-5#L~M;>q^7JRVVNO1@ zKlA!yuSZ|+`@_qB_{D1#x21+M}=C_S((AZTiiP8t7G`rT^Ri z{XhKv|BGKRX4tbP>KR?!^?_vRiM_C$w6|+p)pnLV2ny>Q?TFgfx&SAK@yvr) zO5LlYynEGXS7}t0xW`KT$2F?psHgjge~daK-pz8UeNj&?`jB{IR1W&bx=>afj`C3t z`qSA@c)*FjVsDd3wj(G6y zsJhtekMgm^IeII~qYm+G1n=v?TY5&L=dGIT%W=jm{;nwRjIy=|Ip^qhX;d3#o>A2G zkY3MO$C1(F8mXi-ste<$e$>;6*Njr#_&0ah?`grMKWbj<%Jq8D^0aVNR}$3~mqydW z9#0QCn!uZXtikU&vT%6%&0H#`4>R;EnqC~`wu;hdM%Yt}dP}33xGyV+$M_}cqElx7 zjt~J|ZT^Pi8Qg|98p56y)SiGE1rEj;W)FJGJUxOK zq+s8XBR&2e|JbT1_jf#)#ktLj7nm_Db|4-9#M3A*S$m|+@A0%8K`oZar=BwL+!IxU zw0MapI!YrQnLGTD>`{4gACf~V=SW8fMpD;_ArrvOvJtRd@qv6c<27NmNb5KxI)5 z`~t#7?K1ucpXBz~thUHiZtrd>D62S=4~Bcb(#X zUidiUR!h_f7SIBF?50(v3BI0An7OxrP3WzjTrAt3Ncw3a|W z2np=wDFeMLz4V5U>mUJ=G?_rs=TcqImm@SnFEMY6zaiI~GU(osctbp3dJuX(n(d>$ zCx#(N-SyH~QIq2BPWCXLde{vdcxFO^B|23Qj#`ry6w*aB8}$~6vmBfi3&h~I6Bi}n zs4WQ{rV9aGD$WSHOq>yDc{plMf>zLl0Id{f1X?A|2(&sJbtFM+=t6+jiZcSO6K4ck zAI5(T;b^@gxge4r(?P>t?SbIvf}r+qk6OFIM1`Z6q!tcOQhQYLcRiGrE=wg3>9gp6 zlO6w$Jg6$vbkFO;J(X0Fs^d&Ri=Dt<=(6OEP(QDd7>gZOKRoe1&dn1a#Nd6xpWi8e z`33wn=?C%!s{7SXYnY}+vqAHoHl#hMy;G;sRq5_c%T9YD{aSsx{)vp?jA-UgLx$mD z;{xLWVEKgYrtyfv!v)yBt><#wsIEEZoWjnL?WPg~mCMV`Rk{ijr zH1|DMo9l_Zvb;lie{mPP7rAeAzn*W%Z}Wt`W#0FFFZ*u~6b6?C{}NhOpei_4@J`|F zMP)_bDSo)*sqo>_w$gu=T~PK?`I_>VD{3mPs0>xkt9-Mn4u9{gZmIsH=K9*2+MRU` zb>C<(H~gm2*SM_loTgtjebl_9`PP;|%ge2**59<1wXJGbwGX#{FCs<$tHa%SbysiK zg09i7&0TxD4t8D9UEK40&#OIu>3P5BM6a&b+Uw~J_deYFgWeZ=f7AQd-Vb|YeS!Y; zetW;KzpTHhe`fy=2Cf~rb09kK#K4aRULJUTwq{P#oSAdx%~>&L)0{nXE|_z4&h84jml2V(7-9yXU6QeQWMV^Q3u(dCqyE`QiBu3#t}gweaSJ_bj@7_|Dk8M3bt{gow645h zG&H(*%sJLHwq)$k*n?xQtqQL?XVvqo_pRBm=GfZ)b&sxleZ6jd+lJ`IhK;}4^z0e# zGj^Zx`ewFy^Op22N4NHGeQ@hPx7BUCecR8s@7vL|W6zFTcf7wdYiHBWtvhes`Kw*& zyB6$vb$9me1+WL<%Tl>OP4I@mUTbHuh`qh7wWYbKv7x4_xX|ax%Qb-x)3qf7(Un8P zkxp3MjJugEaY^P?jH@KBssPbRGLtxrLztL4m731d(lqcrGL1%`&vZI1oolrjT2ET; zKy)ptnsM@~G_XxIX$%#dtkPsfMy*Ge8|nXV)uGkG4eC!eirVH)8ySf+T z!GL{qXRx*;SXAxzhYeYVyzv586&0&;)p_u9{$k=oiDBH*V4=Si zF)-%L&NARCO|4SXSfv5MxxgSSrGN@*9mYVyfME<|*$fQ?V_-TBh)n^>J`G5`79xsM zy(nG_4R#J1f$=26Ei~B@0LZx!-;`%ENDG6LXe~9`tAh3}#)q4%8m+&K*P7(%qw%`g zc$d)}auhXq@*4`XvkM#YJq<+;^|A41mp-s+)dNeVmQVhad{STNa1_>~HNfSC^5xP` zfXj4vKh{RfdOiH^HoeVc#GQ1FN|T`dTx&)eS3x6iQ$Gl^YFQ-%w~TsGkbElc3IM+X z0N4PE&|h=~WX4Te1NZwv<=o_*JmpIq+F)^@SYwxZ5@+gTvDa@5mzRfcK>*A`VzP6^SysW4o6b$(C^PD-^4s(_#=g zD%NOgPFs+Q7~w6>jWj6G0#~)4EyIC*=BL+En**ZxbmrB>sY3=%YisK2Eq>X+OSnZ` zw)1L>zrKw(b8vSvm#Zz+Rd$N^nhAMjix|+&*iEJIs0W3r%T}f-Qr)JU%(| zshVF|v=w#R+H_3?+XtVYwbdWyZ9lbWD{I$OAN6?UjPbi)sD7Sb8{1IfSEs3YRqO{9 z#r)d*fWbV6Ti1tzyrVE2+r+<7n4hkWJ&hZ&ck+V<^XvyXd2wXcJ>gX~X|};<)&YOm zRgsLw`k>$Cbl7zo!OMjDx;{@H2CKI?Q)Y4mhl8 zQ!;WwDzBkCZJb-Fh(YE*`^pQwgXvzgy(%)VA=GopwyxIQ_iWWmfxM-rP1iTJ7+h9k zQEjBa-+S4PnQdp@zdeH<@vr4pb`17TGnXK4x=T%xHz3ZZLJ$Q zyl(Kyo&D+q*`a?kEvj2;wOVprX|YxI+6DVpEWcy_Y~9x!1=4{~W7v}!+ho`!y&Y;Q z^&9w3t+%3?_(;uKC*ISfslN;VX94_}-E4#}i`W+}80_zeG}Kj=hl>L~lCBz+m<3%J zjSBMDYRN+zB5!J%R!3)&M3@H>xhWsBpPEYn4Ogo()EI{W@(V;TSf5u8@KjiX!k9YE z8jm*4d<`cpt5ONco*43c_L=g!I43q@L@`%On6oii;}k7ES!>j4V@d;T)PP8LvaC7{ zsM3619RNuqQcCoLy5rR)WH_jV=1(FcA}K9sg{D{=Xr;QUO%jx)P|@c=O24jOwy&di z-$+%}$iCj*vzJtT-(FDbcGrY#wor}RU0Yz6Zp{dI9{TjfjG*&T_4(7mpK=KBpxqu6 z;0{&qyo1ZDs+J#|x8U%K>gpAT7c|YTu-PhRH#H2DS*>LQe48=*lXJ6dd;tKft4{_v zNPvTwS0d2MuT?(`uAa?XB391&da5dl3jAJkR=SpT@D3eGV>jrc17e8}4uo7Pja4RN1-3l9@GMo(P-ke*wlh#zEA}km0ClDg3tt}N+QWbHB=jutQ+71CxR*m(Ig0~9y$W(OBOU$SC1#sHN%&zZdBhSYh_ceF3nX~ z=P&Lk%g%I_diiCdrqY{8`jSrZrps` zXy;iQ7Ptp4?-{swP4lPk)DO3M>nr)8nhQupfbPMU2;F0DgyK9xA{4p;;-+gEld46kLIKE4v1g@BjSrC?ZA4{F=lT+EH9OpJ zdT5MX5%u-rQmc`8WX*D|+G^O^zo8>PzhguHR)aNj*&1ori?N*#WZKiLIl9iBe|_uy z{rf+7>y4cqx*Ute`9KWOF}!CW_AGxd@t!mby{AShpvk(OD-(ydfQGEDzRt|E*DTAN z`Wm%%IlYHp{(#eB$RM}qFkIbqCE##?zc(5P+W?P8YH+VeSevcR6l`2w{@?>61se2dv{vG~omG~Hs# z*K5^#)LOmUtlaj6aM$e4$dtPuv4%_ryMEc4WqN}wW$Bl%S)q3rOd;!IkJt)K1_z!j z)f;7vefgT@db`0>{3zjkDZ5)$qWU`GeC-i4TCQjM^faATqek`v)V-2O5YrQrkSgH^ z>p_tvQNuzsXTh-$z!Usy1o?K0SP0)5NSzx*4t-gv)o7NN; z80|W%F2i41>vj~@q3vt#{tdTV1pGZG^ zk#OBN@gbsQ`OqQGk7!6&5Pc^r47M57Lj5*#kA!}c;gxdNrraf4E9Gt+mSl0tT>%?! z7s<^;)$|6h9G_rQu|x8(Z@Nu%c)A(HC*GU5P0mxl2pTDkX!L3E_P>j_XHfTQ@d9v% zlnbT;5^C_`5{X8_VUVHikuLa~G*_U|vO(%KMM^iy4xb}K{j1_q%oVI^;(gU3%!8y~ zof%0_Xj7^LbvWai6W$@_IJ|+l(M%?RLM6z2n$%fH?V{&4VRm^_A3>WIvq>C;e&Q6v zt&*4=IMfcaP-VG!y5gZ)H23l!?%46n(V?NE&+ORo!^`JRl+9XGSG#(!v~+NFZQYt# zWzsL7jQ#!Lk&%bF{>%uY%@+!q8lV z8bgu>LnuiZl2DC>q4?QC1Wk4hsRhX*Mu|FH^EuE$7567g(fi_E=Zbqr(t>EKy;YFK zUXtIu4Q37Lp&Egfa$HMG)*Rc@Q9fr=Q|x;c%ZmA~!txUyn}a`6zqmQy-7u?SWS2u9 z_8H9=7#E#?m-^x6&DSm;I(*LVme@lEV`=c}c{z0s{%FIxHR~H|=G5gb84P)4$A+6W z))IXz0Z()Y-4Gr(&RUx4YRXE(C5V;eSWKiFrX{$evkew>I#;P397$_#2KlYgszER+ zStUV1R8w+VTy-KG!xT|e#Yv%)Fac(qzA7rI(K0Axp_E!-brQcJ4#G*V>;G@n!J*%h znisE&e#jmGDJI8*bPmNZD5$T4P3~~RGH(OBVpM8rbl`_e8Jrz!Zrj}bSbw`CdiG^b(!lJxI}s;}a1kgqbQa%Azu?KBX4LZ-!`z?ERAR8UC*jl&sItW+Za z$kML`6z~R~CdL3m1PG1zO;9#z8*nXQnkLT@ua=3fz4HAJJ9934b^PX>kUB@Y@2yu= z>R3B}RPtVK&5PZ_$MPNf<*&u&d-@BgKC8y>l|gR8=PS%oL4ArPDrinyVDZYo z@0=amS+i>H&inSX%)R2@c6aSNV`*S8yD+D^Ye}SQL%08{7j4{h{a&~cTWdRFFIl_x z-nM+#Qy2HUpm1!Y44m+sEs;GJg~HNPgky;<29EoH<2-mAZXrop77q9vHa+~gJTFN} zfn2VFib~_Hf{8>Zp?N~^5vB>DQIK4qC-4fALvH+mWTa`6x`dS&0%QjV2O&zhFO#|^Zi1vp zc_-?G%MtnvY%8cY0U^LW1d{kJ5E7dtHFi zH-_5hmK60j`h1Q3MJ03FX_P_e7l3Al#28evn-pFP1#%qVHQ;@c*Ybqah9d$b0kWil|A<-H|8sR2sMD(r%rwP<5ZZSe< zoao@^FbJ2b;`*=?$4TaaD|U4CUhweNZO8X_I!aoCvG1BXOa9ECF}V#@d$}>tv9zvX zNxN_Vu9oEyuQa1(;|&|e?m4f2=7A{Czine}tT5XvRoV)z9xp%MygcFyqQqI}hB}r2 zXFFie+$z5*boSS$>Fi|HIDwqFNH-9h#px4POCq#%3J6Fcf*@<>6cF(`LZ^m^*Fkij zjkY54D8?Y!3Ot7$?@fJ#_7Tz(AkvmzG`^Q+~U zd@txn%c>*kamNV5cqD0uqLoA|m>Gz6NS`4>0_{L~ARhpkPKV_^Cyvk|4L&MmKOz9% zKzqm0UK6#~$k1K{_x6xEXClo2_#8OVrTE?FO{-d(_U@>NTiK zV!??IV%El2MGVc2mE}bR0iVSjk4+LkmY+NjuFMsv1rkg}GAi!orJw@2A-+s8 z;n!6-_sbN6Q#ldB_%g-fZzCQrJ$c`Nnncb)qGu=sW+F*F3<_%f!PSgB{`Aiq3+@ zIrSl9AnTmzETHzg>k1teBL`*=ZkyLqTkW~(4z*Stp3zv>K2#TIEVAe1=eR$8{v^C0 zvCavjrc%8Q`SPoIN5r#m0cXpXE?B*A^*~>HYh!&?MPbP8vY51LHlNSWB#pfpSe$R; z>CzG|r$biC2;HewZYbzj4**+I2OCnSsFw`+Na>i-GSVPa^%B#N;SLQ%s|Aw$&_v+H zKq3eIc*(Aug{qe*RU?(@bE-~Ls^)1j6Y-(XeM4GqWa(t({Iu;(R*nXzfoCy)BYX99 z?N@R>f`}?40|zRyJY}K1r0TVa*c4f&`COy&`vM^fU;$jEXg)#A$@LbID`Kw_rgDZbNRXlKe%+(q3z28RzqHf zZ$s>@2frJ8{*UL@ue&1p!uF$F{o}puJFbiAoV68&nSCB#+vYiC^^Zn+dfURYHnuf> zWy{K*qHKHYvPg-$FgvYw^x*6Zp1Y`X^}TOheCNOJT42fx+Vq~0u0=clgI9h3jGr98 zdQ-#35?Xe!x~dK)YYD%K|KsS7&u?+Jk9G3mnTMV|5PO@O2G+Lb zx+80PV(-85)uZPf{;T>}-I}8#)ywC0I65bm-MAwn?TZZuT82u?2Wnm4TeD@yC{1{6 zh+$@6?kQz2M6mj`Aefh%Z8sSqTS|Fp(i>2NVTHKhYIyu)I5d!s0Q-dSK=}x9JrPq- z(vE?SN0S0c_o~yBl~5Jg?kN@!bUTRn<}X$VEmDLQ!~sZ)tf++HpUTGOx&X1g@cb!a zKFRNGT(#StwP`pu@txaZ6AzDVewLfQdD{nzmgsWqj*9*ri`RYo?C$P8w=Sz68R+z; z+xbG%t}VN_KFhOiyMr5_-Lih+{tR=VIM8$O$vyj?x}ZD5S>#Sbf)UN@ph@*NK$96* zZ3Vx$-D)wV!IPA~>PWIP6-X{eq9ktR*>kTE94?8Pu36mEEkS zNsi9jB=t8oJstb-&hb~J!aKR)=}obBBYVEJDfTy>v*}xVBGNB!iGB3+CfK~+k9~B@ znNMCg^Mq#Rg-@b^#AmRD5l6T+VkT~x7IRXf)ImT}52!ff&I{31}+hg=$N_A4Pj34bG(Uji1Z^71K)RpV+QG z_N&;opT*X{f^Oi?WS`R5C6O%LL6%)2ik7q<;mA+63@AX$C`vDSl%eF(5v{v$6E)(P z))k{jge!o-FT>530s|R9%~zZnE1X_6B7i z6o$O{xj80dI-)xa{`#b}YtF-rhN+wDxlCC_YK;WR4-Yf-Nlc_lssUJ;{11Yd0>CIT z0255yc#0}iP%l)%p`5HNr2?e?ftNeKR9O*7fM+7n3JMRzc{*5CS8u|U(TdDW1JVS< z6fJmLh3o-nZj-qKa`DoOTfggc^FP*~dGYllH^)Bu!In)wZM<_eT(>Zr- z#~JtS>zH}q{^z`TT$^XRcKngT=8z@M+*!|V-nd|2Fv}8hnR^dCv3vgy5A`JJMZHMy zz=4P%CFDBkAQ>M{`r^-3?IjRj19Vna)$^sP&s*caaN-c3HJYaFZRS_nK z#9#HI*azcFVjplL0=PzL@AzS4MqVXt#TY*XVtEGbmD${6>{H>>3=ke@Sa{JWa!E97 zz&&~u4#k7!Ko#_ls8o4CKNO7wlTj1+GqDdjIg|kvns{G&6{mJ~A0(bF%aEy$OFSRy zb|M5p=?)4?P@OX6#v_3=GkXCc!e-zU4jLs$Oq7#=2^S6gX95uMry6qR)l5PuF0g{n z0zfD$^R7}I)k>O(;wU!2I~-Ed;DiIF*5s95Z8`J7J#`xz4N{)VRA1aU-0bF=lC8!LY(PVThL@|BtAS-`yUnGV{xG>Wklu~qxUMxvtsM5 zRb>lf|KOQ&F9K@+^5l%)nbDfgi=@>r&dZ0Kh`HTV;9Y27&%46RY6~Yk_c^x8k86}_h(@M79c3aCsX(t0AL&g zN43Qv={GTV0o(8jB1+jz0UrwVP}(J-ALa<|kOhl?;RX|wVz-Ikt25c0=AXVR%dr7t zg(v8#Fvhx7^1DAZJ8fnik4nRyZhv5=NA?=cI_Z-o@-b(d=fv}_{Ct;O?`_XLfgB}C zXEvVry@C%R-?G`NNJh59ZZl-)VKOH1VFWEIC=jHZ5F93Po9GB#r5G2y?=HFr_660Y zJ|#Yk3lNGAIzUskrfQPy$^P+tbGF5-mp(=>F7Xsw$1`O4-OJR+0^{7luakVQY0a86Kbgw&OA3U>Z(=*(7r=o$q z(+&-6(>*ZQ&b((6w6J#4!ajIz+qUPp@s?Y-@wsi=|1I_bw6TLTXC8d=Ow!6oCzD9_ zsO|s;3|P@GG#JtXaFwZs3wKifAcTj(Ag?ZkE5RegQwiyxpko)tAG(6j$y4AHa}!e1 zB}x{Vgb{iCq<_)C;|27aAYzgdacjn3kTAEAPI5Oy!z)+5e57OMr7vCflb`f&?F|Ha zxAy;pkH=*7v95jhtljv)ftfD_yH~e1t>^$FV{Bt@XnHZWE@(T~M>0wgNzZW@GgC6C zgOG(})1h&-@#cW?gkLP)S2LLw$|Q#n>m)FcLe@dl2}By~`*7gggv1Tt@mm9-szTx`MKZ z=s{&EQSZuA7o~j-Xu>A;ix*U)-A!Mp%xR+BihC=bI1A?%=`u*rkLUCYw?Uak$;XEG z>pFd&)mqiHw5?%&qpNYn-u-)5G-LM4rh4=h>r?Q{Ebt7ev*Z?F_q6>VA9*jwoN(%o zJ#(lR{mq7Kg4Biwew)a1(^7s5I?r~rWUn+)ng`XHlGby;jy>>sfK^|9Z7TCe)??*W10=VPv@5WKM?f;3U9 z#gL)ZupFK<*)E#9Nk0=>V|E)(e}wl5;k-ZGc{UnN)}M= zmMHo?t)+25=Wrx6LBHzP{;-}eFy$K@K0ZIK%=hc@NB^Nd=F2^Cv}Aqbu3>qnBlO7< zY9HeFIxpH+#5P7UiV8jXZkNfB;&F5Y>^d^{kfJN}2^vQj(}{LYc`RcWAUsy=Xj^K* z_>S_i^|7A zQs^s?)?`Gy?^4|u>XN_mN%u;cNEiJ}Od7_UK{{sE_(MK!tfpu0ytFWLU z*~1LD8oQRu}OS=ko*$M^^D`il%a z&EYd-dL3Mge7*Ois__@4DtWih8Otk~6%5TP=6|-6XQ>Uc=mxacz+kuIr3MBsIEkYq z&*x%TAVLzNhz1h!eTt%wg^q|ykqrkqo&-?r4=i*{c}9c7{7D$9D=C_+S`JG@B-=nj z-QXN|O7DI8U4veFbG%G_Y;{@a(>Gt)WDRDi@_vO1P;^)9dF1iy;lE!Z+MdZW({);P zT#g1{Ip+`@h>GTy$zEg;KSg}0&xEQ*-sgBv=@$*7fG2!qBE<}-&f~lI^})O&NAiNP z=e6x)&fq6J=p4g4CjNq4VheJK(8#F;{lSzi-Gs)Y9W3@6**dWg?e7%p9l%v_E~5+!BW!=bfJPZI7767! zeuK0c#7bQG@1W>xp*`-Fhp=aYA*JzYIMnjiTd-q^S^AOH1}L6SeSKNEgg6 zRI?tZsiSGB!g>eMyT29{7%#ufQi4M#U8`Yrc+a zG-ykJx(aW3BK#crGIana8KNRoLM#sBAdyCkg+C{4iyAs0k{^k`lC6U1O05NU19E5w zPEi3;Z_#c_>HSPa=n}&wV$4r{Q<_9SVo@Ci&a0RdaC$21>X2+8LXqOOlHSNEKv`?R zB2Bw|_cniFy1igvXi5Eyt#iVyN8fp1@%)yd<|=niKwom}s*ZU=k;dBG%~uWw zXW2Y`{@Q@qKXXHO(~hMrs+RSuUC@awb8c_mc-7*V+2AU2-KWkiZt%`%0OHX9izhx% z)k6m4uws5;#GdP9%;#|y=N6NFLGdF=iMCM^LM7Rg?mT2M+u(r0;6gsY&zvxyxRnA& zG>u_lhR~%G%PGHHL7_`4eof^2CEqBY^o=k*WGszS-U}W^;e@ZddU|2ZoX8-6Dn~*m zGoOlLJzQ#0YB0&as?!vul{n}m*5oMKD%B;EmDzH-LNc;&X%ayxNFZuL;=NRv@Lmf4 zWi{L<$-NB}?VrM394XZ%H>OS{(fZ<#Td!Zg;F7iVZM*JRTRuBdpQG30WA=uf|$ywG*+!R67dtOG>e$F#5u>p{S5qm1O2GThyi$ zB@cGxsoy$jf+gRHf(TMHeW5bKZlkFa#DMnFkH{+_K|jR?6G^j_NIN7_n39=M@4w$#^S=ddfnRVkqIo z5$xpk!GSYn=)hkh{#3>j>r>@L6-KLP=G^6V3oZpm?Y@2OqJ0$~$2_w(R}`;qY*;yB_mr3qVs=kXwyw6t`7cV4Mngiy>I1(?t30?}aGM*L5E(l@m zO;M<Lb_&M&(q&UP zt7__d@fN&Lqhv!Q+mK`rmBL!hU#!sScq`#V^eUnZdSohRIUwY`2yIK@u{-v3s59-R z@k9En_q8mZQR%=sz}}*D+jiBR@#x{%UFSZsck@0I|GBenp32;I=6%~-L0j6*SG#c)obbR0TiiMFN@ffEyA<{$Y?<1H0xQKb@F^ccxSk2@!NP5vqj2H}v zJMtMNa?B~QSS-_m5eIt%#Gc$PfCN=RN)b{fDF_oHNEH_Sz`h`Gqne`M)sv98sZx^* zb`m~yB^b#iDjau6R-3RQ6$@1r=Z}&CfoK+4AExL?p8vYq)kjBqS`iNRhPx|rxIQ*6 z_Zrmh+_i(lm#(U@oRep;l+SAHik_gnN11tI*U0}=S+V=;Y_@`rMqER4I2&FxXT{Kp zfxa2-0bdSQk{~4C#GCYF70_-9-PrX*S8b6bZAS^_f7zYRwFstbskf+7ts%`W1RV^S z#yTC5FOtWIe3M~myRrbj6_xc)uMF@gqpLc3rKhcrWZP#Ncl!D?aCbuL2U8oWBb{%~ zsoF(-!45>Q4nikyBI2VENB(4Qss4oCNA3%<$&4^J6t`Xh<*p@Nd}Ki?E8*im*qB2F z|3)Ieg_J^NWfk4wf9u#?!3(nUmZj@k&-mJ+ruvG;<$KQAv%InM+(-9(<=!0)!?QzW zS>7t&?2*{Thm%Pu&TCqRi15TgQK#d#8iCgiovrNmwoz_J7i18E;Nqz zqTF(y#TKlV*5!oTf`cO?gMqeEGGj3W2f+jq<~1ApiO9*YF`GFH);hGFq?Z;ab$ZHw6A|_oY}bk z@kzco)Fs&q(s#}1-m$qc?0i-)ts)w6<(P1UgSXTpj(u>kqN)0;3qMU zCxSb|y^#tK?-9H&1oA4_A)BT_bcBJ#Cu+ z6;S}KDn?|F{Ipmf3CTjjpdcMKq>@meXk;pkC%kD8Bxn~$XqYkkq#hGUfQv42DF{qW zEk}z_6+|SerjQnOnpVEy-_$}vf3J+!IthvFjd)fel_B0vw1z53rW_~^;CRjfxr9H9 zGykmpOZ+YQI@uWvR_AA)6obF*+%r<0mVS{{Z}ip`s)C65_YyrA)+uC}?zYP!I?lXu_{dz+@K{#(^i1`B#gCRFA;4GeE|25*OCGUUUFC=0hcjg`oa zod%D}NpVrEb!syFFNrdwsFNatKVXJvl{ovmL{TQ+V&yMSw$dS-Yw zekA6i9F}9Znz9JXLK2bx%7dgW7+Yd463)i}2pxz^%tIt!3A>csm4Kt?r<=1JssUasSpE3z zh}ni5L`al;TRyB63%3Z|khOwu9nkPXD3Df1@)@{^``i+EIVB7%$;9;KqzdAKBc&EV zz{M?UpM0pKSWiOHE0fbx!kma(<`$7wE!H&JrKVkvAMEWt`1r0}Ph8a3chM8O&O7_; z^Da2&9F@8M@Uv%8=2!obXZM};?BV_sH{E;e*!>TD^PBep7Y7kKse!N4!3z1s5ql2e zp74hh<`m+NLy@w=4j29~@CI|`!XJjU)$mS{4NCY?C?@IPk<7x?1n)MnnG=Yt{DK8- zsRe1CtesX+@bskVJL!SLoS!V5aI4l&D}35=)DNnCGIbQ0;!}FdQr&5AYY}q?Cp!&C z9Qnki7m7=W)WUG6$>an}gaYDqP5Q(v5EU>KQ{7^r0+VH`OYGn^**>+k?Y7Mcx7gyd zD*i6~VQ~|F7IxsBYj>>d8J>C34~0vtwmh~>b=!1*82BM}Tz(fckPDC4;fOuYMOuq1 zoEOF&r^p6O@rgR%i}BT$?Bs)BMM-_6tV(GlOtzZ zA%MbhPSPz|8f8Fmq>WNVR1JuaekO^4(&th=ImkAnv1=Rjs(sn9N2a)QRMIC8@Sl5YgSLcA$K(mS8Xfi%4^4OKhR(WKr$yie|Yimd)xqRoW-0FYKY&0yK zH-0|eP>h&VA?B=j?oVOJ?{#J;eb$6Kk^AF5eeMr@6Uh{w>A62AFFNUXP8JmLiipVl z`P?#JAopjAUtluzM>zhIxj)hy>2{O3sII%bZ$U}Vk`+sOO6oRTx4L%i@;UBCz1!g^ zs_SbAw-;GTdX}zS+EY?BcIC=V_czH+S((-xYg?7K)R*fiY9DUv-@mll;w#HtVKO`2 zPMfbZJ5Yv4B^{$(?K>A%&uj#)3y=%`Cv^++aZc+KXl0Rwwo1xGq|wKHVm>qi<6*4k zlRe0dBF~vDA<+ZZ#L6U~$TA>Hjy#&k6DM*Nqcp7y0wijVrH)g|LQ16+O~iL9Pf-*k z$hn4G2oz*V6htyPg$KS!8KgrH=_kul9f|OO8XMOtL1)EA5vx+HBGFv&W^(=?7hSQz zn)l5bRi6DkZiszYQRv8bnA7wIU4PxBS=U@7wK|=va(TAZ9(yu6{&Gc~K0~k9?=3AO z+hiN)`d#c7pA+|&Ku5KjGq4?;TAtKVfkT8T;F54d`o`S@H0zKkfoYe}#R%8a;P9NL zlel*Q3qulSAROpZV5vGN5r~f^p|J`C(!6vM5bji=?o%UhD!iUaaC%3=UxMABfguQL zN)1jr93#0O6PeXp&K_`zDT+hxPiAs zl?U9IDNhRCNxU^_wOJ7Oj%TT0G8DF3B1>iR5lhKYF(nHqcjFl2UbM{XR`6hH+mL-uY)S=i^v z&zqVjRp3a;lOjueYMxZ;BsO4MBJH!Tkos#GMy)=_aE~UCy(KrGxjWOAt~F&|s}AKn9((-XJ%-29 zjB1S`?QuillL{hA7nPJODwRT3C(!cqlDS1Ci^>QspT@${+`Q&Ice8u^co;3DJVFn~ z&_yfhTuyVAAp_=RBHPGeGr}>8$x~!hDRUzTIx&(tQyvqE62-&k2Q>IopNaX`PkMM9 zhU9tG$}~*6Ymt*9NTDrhIIM+dVk>2 zr(a#S+k$X`WbUYXPt23A1AV2IfkH6z=aOKsxBsp4YQ3r4CVlluQAr;1s*K1v>SB8%hL)zfYsmyv;>69u z(T}wrG@;X%3M8#t?7WS{4x}@>5xhx+l)v8C-rksL$_y{PWJRssWY(t5?9a%|uoX21 zu*HB4r~Nb2v}TjOcEu%2!vN&hx6ZnJR%`k46)P(T_b;j3nrX?<49}`xyK-51sH?s> zU0>AD6)a!2a&7(KuqMNrxutSs|6t|H6)Ong&&Q7QOMxqywWO>gBMOCtO^jIU?Y5x4vPiyr5bqvK&t`B3-oEU@7jv0~K>ar3G{40}VkdL4j#XD(NJg_7% zkGU2}88}N&H5o~mXDUwzDq7`F77>gf#(?&@B2<@Pi`q5`Xig4Cy|PKJSa%J70YYhU z?*WFR+UC>nAD(0Y3Y!9froxj901X(wzI=ti|48MQOe^p|DDWTbYADjD7uR=%1pa3M z|CY?Hl}iNvmzUGP0avT|QB_Db!J_P;_1f9k=@vWx>)=1j<++GO(qCdsCu#0B)VI_|6|ABaEhu$TVc(Dv^|v$prvjx8Saq?}8KduPnr zKT_fHx{@atM|`s)hHq>^x2A7a>?fL-_RR{Slw2rvBwHa6phPQFLpmGCCZT?is276@ zx407B3N(1r}N{RZT0U__VElJ{Dh*h<)HFZ18yMi?Xwe>OGzY zczcgaHsv!C<8P~e>QO!)0SNlgL_OYm_JmL6R=tf~zUpX|Sb3@6n{B6WE+nHbl{FT8 zE@~>UslJw7 zApPOcH}j+$vZ7*Cu}}#6C_apD9=sN@Ha1k27Z>`yZtOEi-f5MT+zqV}fo-{}Kth%u zDgQ*Uw7_mMtsoiGLnvJX2@ed2ugoO0`TCPo033tJh)SkZl`M{L%Rr}(e2J1;EjWil zv`Pc$C%!1zLg}PRbRDjR!p1zP5y%7qRkCE@7+Cg?&?10 zYEMou&k`)D_O4&YuPexp-B(%C-zW7OT?N@EX8795UEi1P@>RaG;#=qT7tLH*-=5{Q z2c3qC_rAL-yYL4c>%*oE=1{)n23=lhYY|5*MPggo^D3um587MLu8E}6cYa(>$cTit z)MzwhU}JWfc`0SfhQ0eGEMJs)UMBPmSH45SUe1skP#6RUCMcF%dXdgAP!_5HO_tzM zQ~_p(!-nd@j88uZZHq~-uD+lidHLkWuXl*;E@TY zIoIv~M#-wWn$hBG&%VZ)N7vUB<9cQBb#(o3UUgSNL3g#=UEN(!&{dr$-B!D@_}YEn zAW)P*(b^R#`VFVcnRD$qR8>fU4izfDf_AZegK7_Qe|_xxk!+tA>lQ@52d#v(S`_<1 zlVT2Uj36H!X&GUzZZu@e-VFqukHEr?SUL=jLa=Ck@#Xr!HL zk=r=sUD!|`8WCP9KJ0=w({F+}y`NR>pd!&I6PM01n6 zftD?pve%XpsfAF-@Pm|yDiXS&lDO?neFT9|`dtEqAR*I6T@3psF#BPEXV*{e6Ko?SjLzqGM-!*y$f8>dO12RBZ` z?B;n(D~8r?Tsu@Te_>fu<*F-IZhD|`{NJ0F?`|v%G%VTCP+F+^eU<@k9g8=d7e>ru?Dw$+P;GHU7{>tgl2A7VBic9{B)Abh3@(39!VR(2-QrJK5i4WDEV9qMR7pzzEPa^gu!?OoFA~jXC-&PLn0v#p+@r@YTk*&uH zr!CZuls$3a0D@jx0g{9Q078Ht37JU>Y0#%qKvfzI<}rNajLx-Mv+}hx3JU#iRA*DF zqm=>w8`Z^IM`G@Oqq=zOC?3##YTV)Ta1wo7hLY?*i^U}7P#HcCH~YU`4?Yn`jGCyA z282Elr}&tWbp_=~FswplC*36`mFRVw*t*`g|<>ohO{fr*g}Ds+d0BvoRVL`jiT zRFGI3kz87VikPU2tboaS63Z)2(uPD8h!Ra-rxCC0WXmha1UlX7ig@^t0!GT}3Tf;7 zY?m%0J6u-lE$*t!^({EMxxCaD_PK2qr#8Rg&}>SikNroe$=y6yY7WYMnT~+fZB4hA zv=@218-j99U8%v0Z>uy`mj`AH*Tg=^&6_J3Y`Iw;WWT}IUM5Aqb>G&|Y7vpJhz3(w!DJ~Su{6J(1Vc%zpboHW_m?exa-$(G zoAH%SY|40QsjDW%mcIB$3YG(32qY(UVh@2ba`1d9VawnC6`%3={maI%NaMRNmYT0f z&&jDDsqP3GGQ7=YXGp*N5~B9!vB%}}5A7ehC_l5n8GFIYwFcvLCSR2&zdYXvqOz)< zk~XQAK@<7n->9)li^lI!FT0ueu3k1u@2DRYy4U<^x))J{12EIAI+O6LkP3cUn@v%{ zr}va;Iu_&;Dh#wafPR zbf2@lu5S4`op_p?i>IL(6)soB3?V<3vLSre=-1d=&d3HM$ZjKl^3ZW|=h+M@fpE`=|mw$euLiOv|&5y>u z%@;n(SDh$(1Y^=IACy*Uc3^+R^Jr)B!jR7+zK4R{5rucM9(XM&K?cXv@1bD65-uO1 z$Ha|ae4>U7x|-8NlQ<>KggQoolzx!SK&_8E9*ts4ro@*`@S(=kZ)afR5$xK(qG@Tn zC#R?`?>twX<9t{C_@6Vgeqk?knXn;dVWvLEq1J0xo37UE@HNdTE9z=%a$lfJbLVVq zG=;KWv{zPEIs&EMe6tyw7wy`LG2yIVK1W&uJhZY0>3b&iwb-M$ups1d=Qyy}Oe=3q zdUR$q;(I38oL+51+AI=V5D0*_ko=wr)GiDVrfLin?B)2UO*q+N6!5hwA0heg)B##R zC4N)_1j5-sKZ>(K!Q51f3yUVj7f6Jo7ykD|o;wB7Isml5dyl%4aUo?C{og2iq5CTl<>ZMw(r= z@>vb}I+s4%l2PT)4cOCmXF7bgV2RghwaCWCg$?xCEa3ME)lum>*dAgnF7Bi;L~fH& z%1i>mT3mb}fXCP33h!d#D@|Mkp(w9Ky6$6(-*xp-V~li6YWSN=+$|aIj2&OT2{m;Hghk z4+9gdMG-(SWYx4rDc}SLj{y0vLZS>_1?MZJw2JU_JTLb%0qRfzZB-7166xG2aq9e* zw$4!VXi%@+SJOBpRy{wzBsU}A4X-GAzqU&C7RJguQLd(M23pv9F;>{ScFK3%6uiLA z3|M@733QHe2O>yGrgRCI)zG{OraZ@eB|SmpQvhiwfIHL|5-m1ArcL@APl>EnFZtE0 zZ@;?X?lWi1IP>le>SI6qWLSOoC&O~jjBQuXU;2&BEqM1*ejR^VHlm%Fuj1cCi${Kl z4?%W<59vqwrrNamV=1}o;*PgM;jWtx=N~ENHCsRA53_k+fI9=|{<3!>BkQ@WtLeSRzm@Jf!hG z3hN%x8ZC}2ueW!g^m^+^uRpS+uBgZF(EJ&TlXA>?Iq6q-+Xt$>bs<}Zevo2uY$fKg zAm-eXT45Un2wwkWY9XAqLxm4IPd2n9^a4B{(fC7*@CLjeWX z4VfO7j zynNB#-u|-|Ra7iGtG{!`jLx1JGt`fU=YFNH|IGQ}@cc9T`@S+a9J4JP8CkGkWMrYz zhbv&e4Ncl_L92e#%#wI0xT!F$F;(I%gQnv$b3V1blUX+GTyBA zcU*=n=i7E$z#NM0_QZCd>@KxO#RkFohp^vb8gs(8Rmle*3^0c`2W%NCGb^NXZqiFZ*G>G+-#79H4E8*uwHIRE(u9wjRX+_iY!KJ-3non zUIk6LX*Dapyx-}9dLJLf&`IVT*eV&P%oE^dY!rYLyGf`wqq1Xp=(LLrN;QHX(M zV~+K%TNn$)dG;ks1{TEgE}-i{iauLm^cF#fun#71LE;Gi{agv@xj1l#_j6?q)qfL? zUF$6K`7s4q8?5t^il%;PbVYn@VN37tMvcW%-OWcozISjB!A-#-KmEz#Ny)ZbvT{Ct z@HWTDC!R=%U26XP=7BxOXC&n(_r8O+wyLcw)z-6(#pYK^k|XVl7cE>ce_l~xeje|- z#u{9beRkyRL2X@j!yGr-+J(h~1PrP%Y74YCj`y`4cN{1FXpy@xkRMZdqBQ=5s1n(eN@fVb*kp>5bfpYmb4Ob7`GPKOA6ylS(hqO6@ z8CtG=s9spFH*WWv$RgZOKg3>|yZbfetDi8W&x(o7@sH>)w+&XHfa+XX{0Rg7l(YZ0jyh{q*xIds1+IW%XRcB3gd>=_X#OV}lc~%Oiqj6XT8DonMn?$jfK}kt?To3xNhS*H!oVj)2QE-+V2QEoG`M$y;fuq(#$hTR=GGVg z)FNc0jq8oPt$3Kn`vac%BFzqi6+i3=+s5akTH3aU`f$4lr4(jHm=7DqF!@n~@-Ov0?=ZIwc>b-v{P=tzWg|IJL!7lI>H1bu&^uLN-7Ep!4Pxn^; z6$mh2sF-`20}5fL@e(WkXB}|O3eExy{l8b1IC0+YIH$#Z`Hxes{O>m$u8bEgzYCf9 zairOLYixR4$SeL^63n}MUmKgo>sBm3nzfdM7xnJdogt+m50#8EjRo`OxN~RmMBe0a zNeP&lm71k}tE6S4F>%Vnoh}7Yk+_Fzk%_B_c!vlsBnZX1CAd5Q>!r3Z9KkpECXukP zgcK8-yD<=fj)#ZGhNngZ=5U|C$oN4;Ci;tXplv^Yk%OrW6v<_P&tK%QRL1{BMGi~l z$iJw_VX5S4AD^G`VX5Ti+RtC)uvBt>|M`m?mP&pe%CAy&^IEEoHKj1v0n>@E25dQf zQ5bSi=ivzmXgqW&IKsL4^OVdWIuw;TvzCcIb!BPPu7aE$oq5%J4`f6_Rn?)x7mUA6(95yt0!;srm7gv80g!4p*AO_^8wczeoN~mG95DGao~aTztp>1K-V9BhA=b5}!;r!l)$N zmL1Kj>M_B`9DrX<+;V~1tzn!jF?ByjI@M?;0~np%)nhpyd;Ru|DM1_NP%mSdP4T`IDTA+ z^rhZ*U5Zp}&9KzzJ|x|ZWO=NVC-C>K`fhI-kKy;Xh3(c*j!9-hMqyYKz9^aNUINJ+ z`y7!UVg6#+{HQ_sYzzPM4ilpkll7eYpd+>e#Bu#%7n z8}6u#u!KdJ*%4-5gc%ai`?PsWeQ$T~(R%aN-XGSPi_HbrfA4*|xBF3ZW$)2P&0EdI zb-h0{7osejKI;26?pC-2;Z8H$W_(HXY*)^t)MWT#alcDnoPJ)~Xav#Ca!$++v4up3 zW1lWu3FzZIkRL~53^aD!C5I-}roP}vdDz$Cmy|yeH^~jKl|x^rJz%Hzkxgnf8-?>h$`I5p2Yxp)z7i@5Jl z$>l#xgQC&~@a%KxV}3v%zb^e6njd8j%%?v3pLdww?SEc+=g+tM^Zn;StNcQhA7#$N z-~M|lVzED9Cs#Jcj~x*Q3xd-^xvQh^B(*d=8`vH`;Bo=K)fjZ15#~U{KZxq6T9{44 zT44T#DH0ciKk;ci5i}N9C&o%~aHGe--~ru0;P~lqcURbYKeiqC->WaLFpcB5Bm6YZ zk6UE?H}`DZP%^h5J99$n=p>~O)}FOCe@L9kBBKokF(CL#$L zX%bu+n>HRZ(QCbdgXV&-L2`I2I2D;P_$^j|r439OupVo}zRlqBsfp+fbdLPNkE2H; z0LwJVn-&#_~R@?>Yp)Z%5cS5&N+J-K*E@#G}u&3X0Bf4Z^xS=+e< z_imXrr@Uy|<#VTs9aV!y=dn2;W8f!0!+{&6lV{jiBp)3U!(kvJQYMKY#v^}r${KO2=8IR}Zv;5jm~?;jz3qvyL( zd{j^f*DKzPiW(pTj3fsB>)Lfi1ssIyuTxiy85L$kp|eQHVc{4J7+C{b;X3?$6XLq_ zFRvq#U($3V5;qv?Z%}Ofo5ooO*Ie$uW<7QbRsx+^iVd=p1s`!(cm$a-Ogq&n9Zcb> zVW=0fET33klb(DH$m^t9!+Y+iogbedR~Clxc-& z3rmuV?_OwLXsnsJelZXKfF2k3?zQr~=7r`##_-%w?3^*cYqQW?s2Cour_bk1F5eXu z39sXPOjOY)hq`QdM(F^T&BzoJ!#$`oyftBAv78V3&n@{&i%Rqt#R>L}gQ+sFMHLni zOnf{CQHO6}fHo9JPZB35i#}_Cnzj#`Q)3?=Ruz|j)`AAiqQk-h^IboEB-0;>KFmC~ z2xIGEW6_73baI*9b!yZ9BHh%HK?)AgYZ@(J7vhifK|Iq2RSD#9~ zqAYyM;JK~NGS)Y=H1G}mK;O`z`CE*E`TU0Zpa0FEe10qa`5XNCzF$L`yH)-RC_mJg z{~G?_+l}-2EMFdwzr~;Ldj|Qq^%dp#pZ`rD|5fC#x3PSG{s!h_kT?(LnoY(Y78mNp zTEOhwlA_$w*`?E_WK2-J1i!3PXJE`T2Om~TvTN4p__%0Xn9jS?`t}{_D1pHICK#CX z>0iRc1W_Y-*R2HP!q)N>MSiD9JdB+GCTV|+0dBkD`LMwqeq2L zn^oKP)P3K1^NCgSzk2e4^#^K~ES$IDyY5FW|8nx}EgLfD%^W{@$zARntCnV~O&d7O zv~e7@0&Np!{K14H0d1|b=hW8a%Aaps9yWi=pnU3p|M}kx%4hlh{67rJr*8Q3H!vUL zv316N#HMy4m4sM|8%m92F3CX~1fnAF0_~6-AH(hbXGkht^Fvo<;)cda zF*Ma&&MnI+`P{OcpTaH6L;r30__TR$$fC=Y+lFM2haBIDkhLNAU;vO~xXiI7@l&Tv zaZPn`hc0()M}%okLM_k7jhdX#XJ=tPABPw#&gc7Q)O{23k%41+sDfBZ>0A2xT<=5o zgL9SHpIm?6M_xf~>Hs(}n6nn_JNP8R2fpZ^)AyG!Xj0$rGt{&`aLBUuta4Uwj?|1k zRObb7PH+8w$wD3;So*cR37F8Y>zucUX9$))GCN=M`LA4lHPw7Lzr6l2Gy0LoVq<#0 zo@cFH_{>8*S8)8e>Dg)jxbQ*^4;M@xR~A1yHtfpIhnAVW6HfLTJqHTz%<8qJLicsn zk97aGfbRcEx<533i!m^ty6=DfH-qx2$KCng17B2GT*MJnxvT2N2N?%VU|`JoF*-TjkV9YQjGX7(>gtdIbq{-7VgE^W z11|s>_!eT9K@@!81FA-#6>H~OBYuQmz{(>$Lj$cPM1au^{_n_^E@C#=fGt67KIyh-!#st4_7#~TT z-3;By*6JWvVP;Il_DH%57-0s(5)R8rF-NB0{2PW3hj9ro;4{V%5tK6(Brot@m?arY z2o_wk9OfLp01QU^UuPS0+~@k_*D>egOI(=`5@J!+bTSTj*RX}#T*K8LEI>>k$QTA` zUVoK(jX$9UaoPdbg0M0=V*vfAJ>bXo(@tu1B0L+~=JfAPLpmI#PQ`fRGdHOM^1P zF0AN17~+7BqQqEczFsnB-VLRTZ&)^OS>c@7E<~JRU6?l|M1*Od6Y_1VW)6Knk2rj7+g(SqMHRM)P7x51-UPM~t;-Fi)Mh zA={vXxVhA&~7+fsFec{meDX?*wrnh8_X~2^kI2rER~K~u3yP(XxGWJQ&_@qg)!vg z^At8LWjwz2^At8LWx6NkuO%~fyT2M`?1D=JlwrJqYZBF(?2i6%$Mu>Oe(8aOkl-if z#!poy%#MFBat)oqA+ppGcFo0~R3P>zhDRX8o1H4ChJ9t@D;41usTZGFC2j&Z{JzB1N;o7M7Gus;{M@9F+(DK2z+;OaY{ zQld)>I+u^g7#rsw+MEd9`4s5uvnsM}OCNjTQC{>k=n|-;wF{O+M~<72ouF|}$hhDw zP=UK2uuf*h8KQPr1&-bNZ@bks55e<8gLgj+yqps&kvJ9aldgH7M;iODa7~K;QWSh= zCcyWBp%?DoY~=mU5m>zG+Yy)?6KThIAQYcvEE!txCE=F|&euVwDh_@MyOa8#!r6-4 zBsQoRJpdESxks=#mKunmFf$WIhS_9j!{}0qOEdpy-ka9@v}OL~<2@;@ro(#giJr{3 z!@altt0i{r4^v}rvYf^HsMX@ZyfMajT(XNXV#34vI2jdfj|j!BKA>Ee1qZLt2p--! z?C+2#f9ITQ%z*brwUNP%lDJp{2gYR#_z}5eO4m$~M@;VGVPp*3z|Wld zv%M1@{nNgbM%>8r^LgKxnCTjmIzU}rf3(t~?z*(@tH7~@Qa)QK-oW*!G>{_qt5E_=lpjGUgLDcGyVuCAk zWuK=QN*2MdD$~F8VoR{~jieWk#XcfX7BP@11bAXWIdD48K)NtU!q~!J9!3F!i=)w- zKcKi!Orfyz*niI!%qE1cI9tEq`isIM_rRjKE9ldg5)r}^A<|(0g5#cGS)|TCIFUN_ z4M);)b(DFba)@mZXx5qPfnQia}Udv@n16%tB}3l*!lyhP}YLWpIW$BRaTx ze8V);9*(2Qt%?4{AIu?X&X7a|>^ z!bP>;|C0CVg1j?Vj&1RHwmj_lvbAKmg-%??=)dap3-^EF{@`6J_ua9!GI-z0fo{uF z{$)+f-7;|Q`TvCa&@i*1?_rp`K@*YBbN;7m?shBlF?VZIzW;f~GWnm!D5LNBiCQD_ zKmS|f@0jn8Wm1e&p~|o%Mn?JsoWzfFo$R<;U2&Qm;ZBJ$aoAEacJ+nfuO*bG6O%z2WvdkdNa*fN z_gzK8-Z*KPckor=lbT5eUJl_>7A~-4`81ojj{+TOP)&S`Mm1OqiwG`bS)quzE^1}o zi0mw!zsq9|u#QFh8G}xtv63x;F=J&a%=uS#ECjkfF2`Ci4h;2Z z2g&CM^c@VdK-{4F-u=1A8*<*n;M4BAh#QAeMs=TAP1W_2_;v7+!CLViBe-R??v@RKV z&VP`j$<5ZYf=7Guk35#V_`#6vQ{* zW61B5A+6@W+J1)f25|m#;JksdF*yZkeOC}7 zBFr|k?~+1y&gjuO=-M2=-5GMXCB^nJ>QBM>#`ffKqY_Dl&Q;YZ1bC|NcnZov0`Swt zX2N+`Wyd)MAMPL?EJ2`A)2>^DKbm>S3Spj(q3~byd1uDle>NT=TN#5pz_<1HiEE@j8p;0c@z*8hZJ*!vEq!&4N)Iy{wz{ecV64MjK*F#83q!tPO~w2r0#;#V zNxU8NV0(gnWQ+qj!Fxu?SUl=icZ6dQa*Q)%8T1c-r}XE8e9Y8^t11_u~<!tbF`0=T)y{1{)l;c zn(;e*@6wFav170=AzITbtG;*C=gbkH5=YA0V4-*z5$-$*4aE%Jze533Vqh zy~L{2vTRs<1LZPE8+4E8Y#cDHLn}l6n4PupPrb)d=5Hv=xH&z{I(p*VX(ysaO-Kx} z+?6`*^7pLeSI!jQw`5}Ui2Fy5oaweKye%eWH19jyi*Mh{mhah}sUlqKxIf_v_~ z$sQhVbBrGqn>Z#S!}^a^U%vbF(&?db;SsT+F%zffr%t$Oa&&a64p6$)deW@1UG|rY zMvu(FM;%fOQ-}<-4F)tDHRYMP>1p@efs!34I0gl0+Ail;=ihzmCYC(H5tFTga~v!f z;kdoOHEYcD&r`0Me$8?%2IOFQRdSeV;2g;0(eSceQx-{|Qbeadz0BrZQ3 zEJfRB?9B&l*N|uCrxmmLZ`Tog)(p0&1V3kx&aKWgyMD1Rpy|#`GqTS4gWA~6zIX@ zAut-UbTC`++AwTFr)9xj;owFKu4G8EVks~&$%=b)up)?4^5bwb0ZwTg5tp{gF+L}` zxTP#5@5YRIV^Ygni<75}i|*Z&I%ZzRjd`iPe`Ec20@ka|)JXHK)Y#bGq{vh=9=C~? z_wK&@``Fl2YpQt{?N3m)dFHH=L>%<#nm%<>_5^$ff-+Y80cBj+&rVJTVpS$*;tau% zWSm|XW@0fK-(Xs8hg?|$gdQ527%E#&p%-1h40_iFy&h}@e<^H*g6o%p5<)SDGBO7h zhc7bL)rNmtZ}{5=@A%th2yguK`HKyHSFYJk{yPjXw+S>Drp_43&qWJfv*pb1M30-2 zT-;jbZ^D$amg3}`@eXsxwcGN_|CXzfQzCmup-s(8ktzO0wuG~7ziB*S{S&sv44wl} zg3)Lx3K`u$+T@4>;YrGoFI#HQfBT0TV$#1gMTd!hbK#cVYuE1CvT)&+J!{wQ-m=iL zV(spS7A$yZ_u4hPwk%k%Wfv6tMw}16&rCtx*+zlURT7;)n=zq`nG5t=&I00j={sx6 z!08a$dBX((F5?aP1^a9G3r~9;@(WZvxQH<17rj%0%gkUJ$Zh(d$^!iP{n>d#<_I{h z8h)LCp9c*$^xroQJ>?-}%FvuEZx7AcHYB_d0gAja1p$hI8&rn;8;uhNpX7gr|EKMw z)r*~cnypuSuC@5cfCAmuIqKQGo4EkoI85V_Q zEgt2~TLma{Y%n$Ba8Wv)vX%@x&MCsAx6dt}|0&+ZVpx<4fExtf@zBut(7t%a!fU*b zeG~%@1BSa~m@?>7=h$#AX9aMm@}$Vrfp1QJrRr0;!OL}-K!n|ZEN z4vMhxM0IS*=qrn5_AR6jy>>oqh%~>`hAz{X{Ir(MNMvk0TW>&?F`t#Rf6U4!TT1If}I?TDP_nh#idio#}Mld1}7c`Ov z+Rml;Oqsdp(pVe{gva3kmhiBMa9#@Jz&DvQYaBg?Ww9_^55|5U+;xa<4|hM7D+wKCSLwt;_^}nY7n`wK4;A^858yD>FbRZOxKv%Mw^!jBlI@cwO2i_>%D=2I zI}i8bjSK!J;-CHnh!L}RV^wf#3$9PVwkrB~(?Ulkj5Cw`>EPN#-{lP1>AADAT)Bm2 zUV3I@(%s)WwehjPpTF9kI5IkE+=S^RQ?@*rYJQlR+KXii^H63=@1b#BTS`~wWhO?( zg>PK++BY{p{q@`8zxJSMK4{(Zm5X05+qkYGGA?%1xKXiB?p~Udja|S|qaw?avbzsw z&&Uq5-&Og*&EI`ya-XfH#Qqbq>4fB*1_>=m^HjcAgb31DuGSgfzvS=|A^1*LptO!HYQ??V}RD z(-!&N5!s_A#kWVceJ3%=-us{Xj_wWlyZH3@_>4H;h_EaB&1qlkeKj-FoK(^Ks%2g1 z$T5H0JJbBx-$EWHZcZ_5kHSZkXYAt+Z~Vn@eY7#xgP^B?#;D+z=&q{VU8-@h1} z6o<1LF{I5M9G4P?8(=f5Ma>-tx7{`BvF(}Dp-YGl2q}fVoMIH2lS)QTo0>m+YSFYJ#+doXnDSoHrWIfX z));4oTAVP6m>32eh$sWH!;pT^Ed|st4vk>nF|Z8AK!4sMFaiyR%HxjbVW~iqVy;0d z`sf)zgMVB3{Ll2RX~OKM_ZLEb`VL;8<>0W^GI*_Wwkz1MT*n-=yD8ChPF%72u7cZl zRTnSqc>TNUI;)D8KX$I_uE(aE6N*;nX3cj`jg1}?{rK!JuDW4_eM0V%SxYwEm~o#i zFL`=O+|qBpRQI#q?)MuCt9IYD`5#(VEh-tA9ly4D?Nr>t5P8vii>z=Dn6*_dW-M21Can?_XM{ja!m4WyyH<RSCvAh1a6Y{Pc3jpXiZk0dFQyy(0ilfFztyn>q0X}@4fQRuUP7)&c1of$liaLyecPc zVMfS{BgcGnD|*p1}e^Z z5*^r|-`7{rjZI^WcDD94q5lXH^eAqA!nTNDZ%G^QEH^#k3H2AXyAh}Uk~82L)DC@< ziedW;l>{9}rSebEPWgkR;OFNOKknC7APN_QC}#7%gp*xaD>4wv5<50w#=>diLLYG~ zyl>m`jFssQOL%x6YK3;g7H1noB z+T>m47p(7C|A^CQ3Jly2l#*;3_~PbZM`uAw!I)9JSJxPCj@RgoL3KAmb8tb0#TbEj zMN2xIgibRwWF{Pkp`q{@f;j~1lDRN^hIwHq4oJoZdb$xaA-BLdCtCY~R((=g&~F5n zLL!Rx3zUko;G3k(1{Tl4akv5h;Df03J_sqv|0$IGvi*9h58yEQ)=?=1GtSk zT)u-03?mJL~sx7gfzXk>cy?#LJ%u@L!0%!HAL%&+#Qp9T%DgN7@^(O`!RY}%U6T4j~> z0VGAD0Usys-N}SQ9=_eoY35uLw7>qL&0`_7mcx?V(n#v~rj;tUTZ! zV{pXiflul|ey$xHQIvd&QvC4|=Bx-a-5U7Fj0o(7`?6WvZPxbIcb|AODmFAUHtL;s zq992eeDexdFE9Vnn$sIOW_n`c^fBiDnE&HX!CvX5OvSB+HTy%NS} zr5b_jX5||R?K?+rYFsQQM^JmZMl?-AwWu4jN3!YI7JVP6ANUG?vxQ(o>~L@D>Xh686$G9JPZ$(INLhGK#HFhMDjnh?pmZ1t zu*c1c!?G*Fxdz>^7_Ai{+|U$ve9idu?-qUaeEsCxQo}9NCVZiOMY_fNr`~#NX|yeQ z>^*4}Pi&bVVSgkkV#54;=8wJ{X1(z;Mm#~8=G&gbkw57r2(Ci3j&ATB#lwAZK4BRA zUYLh6Fm;k?;_xHPpL8xE;i0ofv@7rfcjJuhE%M{i<&0;YZ~~Hh0plMr2X%+=}KHdvUrXfJ2^)#_*U@r z#lAZG>tPvchGE*FfD!Q1On6|%Bg`({-wv}jJXy7F?~2Dh%)KYQddmmz1lk~{yzPO7 zQGYJAMOi{?AILeb1~84k@7;x{#xv*u^Go36iL#^jIuy;uK7(x$G61lHW}?Y1f^88< zgXr}BpP1oasSFW;-QbWe^ZdwhNh6~!{va7-@jpp#V&-%am{DSpgYw{KH=V4Rx-pDKJ?n!|47VojvF(bx6n=>GtQZn zXdX|WAajYZ@pO;+A$Sd!L9{vXV%C|!umY)S>296yDJhEsj$_zqNU?F8@;%M<4lY=nJ z&w5{r95Esx`q}5A5)#La4E4Phj&+uwM#V-zt=JB)qRj5lOZXn9m4x#=ZA_(5VjPA@ z+O5(TFv)T;BN!AgnK#SQ{d7!5iOh(3`uz_>9pT~gEik^J*7@P#zqwvL zoJ@m!|71CbeEXv!2YAE6(x(NhK~2GGF0mS1yk)bf8Yq$NL(69H5@Wa+2N{W=S@`K< z%oxN$UN72_>|tZXP#j}P8XmBsxnMfbR>OrbqTZp4rvsx8t0&|ynUu41&V&hbmgY=a zl0RWfF#0g`J2{JR8?$p!&g6y8v16SJCucjI*^_6?5bx1w+uG2#5Tkee8ZmnFU^_A~ zegJu}6!ZYW){#);fmSa4`6J(gfp}AbL34dC;q${Y`-gewbH~`R8E`W!81hPas%EzwsJ zv&S|5AaT~j(D$B+kN;lM_-Eoqd@qr^j4p(1F<-X5GK}s16K%KOPAm8XBeLt-Zd{~1 zz;^E+=Lk>8OpcnAdRvk0mC;cVDFqdaVZ7H$1B@*=KWW6VJFx(j7>$;S@ZA86@#O$x zeXD_SO2;cd-S;cxWGJ1b^kkt^=n}f&NwpbsgoPS@6f3;|CqmhbMZP`2#lliyxp0+m zqe|GMdaH!h%BfMhR#>On>xB)%Mq!h%S-4HOUGKICTZL`Hc43FGQ`jXspA?0Ah5Lm2 zg$INOg@=TPMePycQDL|6nD8lKkMN}Ml<>6hjPR`RS<(3umHC_~xv2c-g)b@RWu<>E z3SXB5-VnZ}c6nF$o^sw7ejxk^CEL}ScD1Hmt!YR+qyTR798*ELx!Pc}JY)!kt*0dXJO}oL?v>R+qyTR798*ELx z!Pc}JY)!kt*0dXJO}oL?v>R+qyTR798*ELx!Pc}JY)!kt*0dXJO}oL?v>R+qyTR79 z8*ELx!Pc}JY)!kt*0dXJO}oL?v>R+qyTR798*ELx!Pc}JY)!kt*0dXJO}oL?v>R+q zyTR798*ELx!Pc}JY)!kt*0dXJO}oL?j6{3A2Fwyp7CMD4;UeE}@#|t?sjytQO1M$a zR13EYTZFB`HetK4L)a-itapzHj|#hm$AnJ_dxR&2r-Y}4XM|^k&#APFNy_T9w<=ZsCY4_$tX959`8CS%DqXAecKzBSY!$W%+l3v%PGOg7Kc~7b2%l5_ zOTwS)*Vk3%8^SkL%O&C4!gqx4>DTv#9|%80ek`Q48W`dGG0?8GLl}c+Vxj-Uc>S6o zqi}h=z%JB%j!a9{uFKiGt3Y&z@!fnDXmG-RC zKUew}D*0E!*Mx7X%uB+zMCaQ|zaxBCIUg$h5z2{^KEz2M;tc8o&K}1zangr4=|dcP z^oz)$KE$C%6UlF!^dS!X)*?-Ph?73V8Ptb3=|i0KAr8HmZ&4rO(3e?0^&t*@nfcU* zIP_@dP#@yZubHMk#G$tmsSk1JtwicW9C|B}`VePOAL0z^L!3cO&lQ4Uzf~k1^2{U8N z8xO5uI$qC=_w7PDSvUc+wE?3Dbgys5mrP8aEzD4O2ce zBwnh7)ynrM|3Tc}5N~W2KBUrW^vqV}c=b%Ja_Yomy|6*pC~Oio3%3cktNa#WtFTSj zF6&YJp ze=K}Pcuvy0AbeK5{6x<`Cu%P${k-r6J^!NcCH?xc@?TNwyej;qTH)8ie-gefNxmU` zQ?k7zd`mj^w$kqi-&M|gdh&hY2f`2a>qnps+o3SF!FfTxmwZPW`6({`i=wV`pyH3m0zNA?i5z4G>_0LtW!Dl!UkcZuu0e~ z+$QW&$b*)PUsNELi00> z3BC)!bUl+LoGhG*n;bIG6Zx)7nCIJsbUsSXfE-o>=lD8-g}x=gV&$wsdu5&YJpe=K}P_^j%>sArxR zzM%XUg)b}TEy?Fy;YWCWDx~)!Fvj;XFise+oD5-|uwK|8Y!o&Ln}yqi&kEmC3GWI& zLe4bk^E1G7=+!igd5DvRPN7S<$oEU+FBX;xZ-fn;hS>`9R|!|6uT8`F=QMDwN?xz@ zMwPHhwNweKl~bd1t#G??T7<2_HetK4L)a-ith$Z}j|#hm$AnJ_dxR&2r-Y}4XM|^k z=S15D;d3haqVk^?zNDO&m400mz9D>1_`dK1;B>>*`|m)z&>@V$Y;QWGx(tXBB5(qv zJslE04$Klx7CMD4VV-X}es#mbOoydi11$872No-5k?)_8UMwsXmJ3%2*Z8*M*R?8V zz0w<%t`t3+L`jvfTKOL3Kj@o^w>ArF^y^loz52CQIotJoi?CJLCTtgW2s?#cqV}-p zIU+nN>=qsqJ|*lCo)n%Eo)(@Fo)w-G7Z-%jsr-w|e_r^Ka$Z*Y=c@O0QTvAQP0@cz z_?G1Vw$kqi-&M|gdh&hY2f`2WD^5~`)xx=auv$*pXWT~&i|UkpcFI0GWuKk0&raEA zr|h#+_Sq@>?38_W%04?~pPjPLPT6Ot?6Xt$*(v+%lzn!}K09TfowCnP*=MKhvs3oj zDf{e{eRj$|J7u4pvd>Q0XQ%A5Q})>@`|Ol`cFI0GWuKk0&raFrS>X2`W0n!q`zK(W zFkU$s!l}@}S@2i93|xeMF$;P~EESduR|)I%e7&$i*eGlgHVd~2pHyjkh5Lm2g$INO zg@=TPRq_$xQDL|6nD8lKkMN}Ml<>6hjPR`RS=IX!m3dJ)&kJ7`z9p{T6@G*#UD5=X zG{GfJa7hzf(gc?@!6i*_NfTVs1eY|yB~5Ti6I{{+mo&j8O>jvQT+#%WG{GfJa7hzf z(gc?@!6i*_NfTVs1eY|yB~5Ti6I{{+mo&j8O>jvQT+#%WG{GfJa7hzf(gc?@!6i*_ zNfTVsgk0FDR}dkXC7djD3SGiH*!*0K310$kR8F;UyRb#rDr^(B3p<3J!pHUQPT?-$ zZsBwK^(9~)WWEW=(Lx@qD3N1^JdGLhjPaQJ=V8o1Ovkt=Ph*BW(9HB?;Z$Ef(oUsa z!Ueu4eRoO6gmazSZ|2p1e)zHKJ#&a@P4CLjHQ? z-0s_k^hVXVNjX)*YUMnncWabWE9Cej4{c54_#_W)P2~6_4{c54_#_YB0CLwNY!$W% z+l3v%PT`Z{bgyuqaKG??@SyOJ@UXZ$B0MVW79JBmB|IUTdz3yYJS99WJR>|Sd|FTb zNcdynGs1J?^n#G%pFH^Y*cQ);+KYPkdEpCs{zc(S`t@byzalxmD*UA+{A=Mq313&q zZwNVd%7a!D-xIzs{6NUjR6expMIc90`5H~-L$8>_(NsQqACaS}e6$FWqp5tf2$7?y ze6$FWqp5uKDVD?0R6cspi}3c+TjEA7tAX^ExaBQzqsBs{=`C@iUZ&|SaYLVX0qHGq z8}ydAq17({=`C?XtC^;^#Ent$-9UOv+?b;g=`C@~TjGXRGfi)a8~alK0Hn9XEpLe% zw}!ENdQ02}y(Mmp*_fuc#BI=9;+D6>EpLe%qqvL6p|`{>Z;4yp61Ti1ZiC(uH)cTO zh29c3d|9N2-V(P#Z;4yp61PEbi5uQ6K0|Mb+n~3^4IdYC=q+(W+C+Lw+>kbr-V!&Y zO{BNP4gF{N^p?2c4I|Q9;)XYjNNxOxZ$-X(p%y-=q+)>cg-}tC2shxiS(AZ;kzc%TjDn8EpZ$4mbeXiOWX#% zC2siTE&}N-aYJXw3%w<7=s&5Yx5N$qHj&;Ew?S`-8@@aKN^gnVptr~{dQ05!>`{{RmbeXiOWX#%C2nXYb&TE;w?S`-8(PX7dQ05!@)7ARaU1lOxS_qP zF*2g|&VlxR9Z2n+Bki37?X5*R7T(=C&|aqF^~?k#73mD6r~1B)^a9X72Riv{;9_B^ za0ynI=0F3Pze;$k@Bbi8U77=3V#!rPYSA2M5plDyM)_NnrvA)<{_y!a)mtxY5H<>% zgw4Wj!Y4)5Ug19Be&GS(LE$0cVbOL(cvRReJSKcf*dshCJS99WJR>|Sd{*`TL}gx7 z&hx^Tg|CSBSB0;Omp6oL!8vNdIcP!3nJqX+EjR})$ej1|!#AlCPQF_@7RLbi7TBB^CMiTKFwGfXA$m#`aFNPfEG!i+!A!6acAI6c5SA-{rP8aEzD4O< zeVg&jZA!24?L>MldRZat_QSyS%Hd3~5WS3CY|^_`Le2yWVX>M2AiiFO=xfA>R9cOm z*{U3`o~cz%o%pI3HV7MqO~Pj3HX&z@h0p;aXO4x?0U~FPh0p;aXO4xi*p$Ow;XdJh z;Q`@6;UVE+(Qrg~RM;&%CVWbGLiG12eNuQzcv^Tycvkqdp8S#U$HHfX=Onia!e_cI2D7xes#Le5DGp=12@6}8K&!q=7ahVV^E@{;f^Y0=wCzaxBCIq&Jo z_k|w_Kh&=ufs(n~8yRbvpDLkxNjtGwmyM@PuPYHX3Cxxekr-f&P zXNBiP+XdlsD*2-FpBKKQoR^h;MI5~uSrB3L;hV-<>E<%o<`D1wzEGFG7oR*uM6g(7Gm(~MOpf@Nb4V-OT{ENXm)AaclWA?fUNS}W(=CG@Q^!XQK4!ZSNi;mG27*@^!XP< zl6;;%|6)jzNS}W(BuS*tzZjAv(&t}n(C1%l(C1%l(C1%_xiBfD&%YR70U~|=#gGq? zKL27^e%3{we=+98termpV$6t%^!XR#i@;y$^Do91fk>bK0?4)pXcsz!YasIlu($sS zT(5Mc@;$-_g`0(2gRqFsIs zELOTizpnB94ms<5&jHsfeW&s(^_EBI6`s?t7ldyr=aTSk;XA?)fu*9MR5X;r`|(@k zkcLvxP%0WqMMEik8vKQLr!mUED^4}C*627Ik-d6e@;k(ND5a}|t za+zAW44n2Lhpk+uRxVR3mw^}Nvz5!B+eEf<8MKN!P-0rTr4aVmJ3%24-1b7j|#hm$AnJ_dxR&2r-Y}4XM|^k7lqFYUj{B0r_06Z za&fv`oGurq%f;z(ak^ZbE*GcE#p!Z!x?G$t7pKd`>2h(pT%0Z!r_06Za&fvsHLg&N zD^%kO)rdQ+(Suf~#uch@g=$=(8ds>s6{>NCYFwcjSE$Ans&R#CT%j6QsKynlv0U0) zF6}Ls_LfU~%cZ^L(%y1uZ@IL$T-sYM?Jbw~mP>ofrM>0S-g0SgxwN-j+FLH|EtmF| zOMALahLxgWrD#|w8di#i zm7-y#Xjmy4R*Hs|qG6?IxCLX^hmBj%Ux*9vt-J*zF5+I{KH+}h0pUU6A>mJiZ|U84 zfom`}-VbD%h$|7sDRoX?RpBKI?Bu8s7pCW#QXV!wF9|GfqZwcQ8u2TVhc7#kJ#-zu z=|uL>^^)^?$$7oxydE>|{m7@B*Mq9x0V(J8lJj~{#Wdx-9`j;8LpiU9Uxi3HuZLfS zNI9>EUxi3HuLu1^%6UELCsNMqK|hglUJv?-l=FJfPo$jJgMK3AydGRIO*yXz7evZ= zz2v-Ja<0(mtHR*ut3so%3XQ%hH2SL0=&J&J{T9D+^i`qJSA|Aj6&ih2X!KQ~(N~2= zUlkgCRcQ28q0v``Mqd>geN|}mRiV*Wg+^Z$8hur0^i`qJSA|Aj6&ih2X!KQ~(N~2= zUlkgCRcQ28q0v``Mqd>geN|}mwGlo2SH?!P+DkyjnQYX0!AA6VrWt3l5$#Ci%Kk>Q zBatin8(|Gz0CHu2qt**HYQ111ECchovcFO51sh=pSQ=OMH^L4Oxw5|zZB69L{zkMl zkt_Qf(bhz+>~GY1!A7kYY}9(eMy(fY)Ox{2tru*BC1IId+24q^Beh)F-w1m`L6n7=$LrNIMT?zRR z8O2=*`4Ab!T?zRR8O2=*jUqCNyAm2jWE6KLG>XV5?n=eSRw_QWQt`2sijS>Sd~Bt` zDDFzd$5tvnwh|ghYL5sR#a#&vBr=M-5*kQk6n7;wkjNgU5QaHkx|^6pu?+y zjQrdL9cG%5pPSIWULYesH=$+uDur&Z##N}N`S(<*UVB~GivX_Yvw5~o$-v`U;-iPI`^S|v`a z#A%f{trDkI;C6DZq zM|R00yX28w^2jcEWS2a$OCH%JkL;31cF7~VC6DaVgJ{j!@KMGKGlXueB|V7NAr=}FfyGMK>DPK;gRoK9By1LL6L#sX zXO;fB(jOtcS#@nzU7MjH%wb)dRTsUj6Om?Jo6&;&m33`K3ldq^X0#xYb!|oq5?R+~ zNQr6IwHbWPHfm&rYEa{kk*2+^krk?u6{?XHssSbZmG-tqR;Wf+s76+(MpmdsR;Wf+ zs76+(MpmdsR;Wf+s76+(MpmdsR;Wf+s76+(MpmdsR;Wf+s76+(MpmdsR;Wf+s76+( zMpmdsR;Wf+s76+(MpmdsR;Wf+s76+3tE9SBQr#-4Zk1HGN~&8W)vc21R!McMq`Fm7 z-72YWl~lJ%s#_)1t&-|iNp-8Fx>Zv3qOKdT%E&PZb}B%sh-6oqV-m0WK0Mk=v+sM= z_r2=-UiE#i`o33v->bgwRp0lj?|aqvz3Tg3^?k4UzE^$UtG7>ib^xeXshySAE~BzVB7v_p0xE)%U&X z`(E{Zull}Mec!9T?^WOTs_%Q%_r2=-UiE#i`o33v->bgwRp0lj?|aqvz3Tg3^?k4U zzE^$UtG@45-}kETd)4>7>ib^xeXshySAE~BzVB7v_p0xE)%U&X`?cyLwdy0a>La!4 zBiMz5Z#wo~2-!z!)kkX8M{3nauvUgKNv-+_)>81Lu2mnYRUfHUAE{LzsZ}4TRUfHU zAE{LzsZ}4TRUfHUAE{LzsZ}4TRUfHUAE{LzsZ}4TRUfHUAE{LzsZ}4TRUfHUAE{Lz zsZ}4TRUfGXr#BdN;E_oGZJqqLb@JcVL2q9|4*j=v&{!h)>J752XLL4!X*>=)bL#|F%y4+d610^Xb2>lmE6({@XhFZ|mg0 zt%Jn)EB&{1&{956|7{(#lt}+=9ki54|7{(#lt}+=o&2|T^553Ue_IE6l0y1#>)_KM z(tleA{UOqSTPOc*o&2|TkS%Mc|F#ZNCDMOeC;x4o{I_-T-_}9GHyHJjZM|e$FWJ^h zw)K*2y<}T2+15+8^^$G9WLq!U)=Real5M?YTQAwxOSbirZM|e$FWJ^hw)K*2y<}T2 z+15+8^^$G9WLq!U)=Real5M?YTQAwxOSbirZM|e$FWJ^hw)K*2y<}T2+15+8^^$G9 zWLq!U)=Real5M?YTQAwxOSbirZM|e$FWJ^hw)K*2y<}T2+15+8^^$G9WZNLwHb}M& zl5K-z+aTFCNVW}lSg{BCfG#RL_&^7IBT3 zJ8;(`u3N-)i@0tP*Dd0@MO?Rt>lSg{BCcD+b&I%e5!Wr^xKi0c+{-6F1A#C40f zZV}fl;<`m#w}|T&aor-WTf}vXxNZ^GE#kUGT(^qrR&m`bu3N=*tGI3z*RA5ZRb02K zty{%)tGI3z*RA5ZRb01<>sE2yDz00_b*s2;71yoex>a1aitAQ!-72nI#dWK=ZWY(9 z;<{B_w~FglaosAeTg7#&xNa5Kt>U^>T(^qrR&m`buG_?Qo49Th*KOjuOo#%S zCa&AWb(^?u6W49xx=mcSiR(6T-6pQv#C4mvZWGsS;<`;-w~6aEaor}a+r)L7xNZ~I zZQ{C3T(^nqHgVl1uG_?Qo49Th*KOjuOo#%SCa&AWb-TE37uW6Lx?Nnii|clA z-7c=%#dW*5ZWq_>;<{a2w~Om`aosMi+r@RexNaBM?c%y!T(^tsc5&SvnP7F0R|fb-TE37uW6Lx?Nnii|clA-7c=%#dW*5?hw}<;<`gzcZll_ zaor)VJH&N|xb6_w9pbt}Tz81;4sqQft~ke_UUxb76!o#GlXKCp6~;<{5@cZ%yyaos7dF^^O^ zwBeoNx>HUUxb76!o#MJvTz87= z$HDK5#^d1bWgvG!J`V1f!?^v&K^u{A`;UV*BIEWS2W>>g?LQ9Mh>Y8R95u28#_d0j z@?SJ|s{EZQf2Yddsq%NK{GBR)r^?@{@^`BIohpB)%HOH-cdGoIDu1WS->LFcdPu}Du1`i->vd@tNh(6ze|y^U8rRVJWY&@?NVfH7iwIC zG$UiXP%qPrjP1g{26#yfM#gq2Ua53*e-bUh>VQwf;W%I$k;A;^N5U$?SeOt$jI0(`1F`&WNa6FdPGLX zcEP7dWMpg?_A>BEM#gqwF9VU0v0WI`Qf`cl?Sh_=7e>Z*VSGz!FX~-J#&%&Z1D|JP zY!}A8{FRZhU5bqD!d?cp&g;r~L&(V3F2ubP85!G!xOb)*8QTRtWDX-^yD*w1GBUOc zI~VvXBV%!L8^(Kkpr0=RIkMd&tGGv2aSycgMdWZ~y9fHoXJ{4o$SUrURoo-1i0Elh zyGK@WkF4SzS;alFidb1y$sF14kyYG-c4s-XihI!RM2>9tpxuca+3rER6FIWo1GzEH zk?kH?#XYi$dt?>&$SUrURonwPkXnvx_sA;lfgG5_k?kIE{gUw{xb6WmF7ZilN@T>^ zlZvW(5_--wBi5dTB_}ds?Mcjlh>Tc!5?l}&vGycdmdJ>;CqV;|5o=GPb|NFz_NvCc zs&TJs+^ZV*s>Z#laj$CJs~Y#J#=WX>uWH<@8uzNky{d7qYTTExs&Suc+@~7%sm6V(aldNZ zuNwEOMnpV8GKdmFtQz86l%`botH%ARaldNZuNwEO#{H^sziQmC8uzQl{i<=lYTU0H z52(fis_}qoJfIp6sKx`T@qlXw=@t|rvs2UHd#)GQyplUp*8V{<*gR1eMYCNbK530t4s_~#|Jg6EEs>Xw= z@epdRvZ1R98pCOrfih>RvZ1R98pCOsk=j);aMqTz^WI3gO3h=wDg;fQEBA{vf}h9jck zh-f$>8jgsDBckDmXgDGoj);aMqTz^WI3gO3h=!x0;izahDjJT8hNGh4sAxDU8jgyF zqoU!cXgDewj*5n(qT#4$I4T;BiiV@2;izahDjJT8hNGh4sA%XG4c(%lTQqcwhHlZ& zEgHH-L$_$?77g8^p<6U`i-vB|&@CFeMMJk}=oSs#qM=(fbc=>=(amG64Bd&YIb&t625!XH9x<_31 zi0dA4-6O7h#C4CjJ}DYbiiVS-;iPCdDH=|ShLfV>p6^*iHvtWhjB8I@vi4ELMAfa^&CdXM8>x$@YR|dqJ|r zNnoJxf@FI^vc2&C+PfMsxytJNO~?;~B*ch_{KRVvl*nfDV~h|e5{MCS4Jn{ei*+Zv zlig`%XV&>)lPK0&w36DUwQ4Cfwx!|^KW!Srj|jLs8CYnC-PF4bBTXq~-I=@h4sJWs z-gcg+HGSXr&X5GuwrS#%#7&;_&D}fq@0|CX^WFKr^PMBv4oJ2GlI?(GJ0RH(NVWr# z?SN!EAlVK`wgZywfMh!$*$zmy1Cs54WIG_)4oJ2GlI?(GJ0RH(NVWr#?SN!EAlVK` zwgZywfMh!$*=8Zz)g}wsvgM3sMIXVI zE1t6GDY(rU^Q>kWvYKVcYL+3ZS%$1;8M2yX$ZD1$t67GuW*M@YWyorlA*)%2EPhS! z2{~h)g$}UI;TJ(xvkY1MzTmf9@s!mpLlzpsyK}}o3k_k*8S|`W8M2yX$ZD1$3!PbQ z_CmIM(6VRT3)!+|&$w4T<6cOE+w2+lf@`+y8TYDZ+^e2(FZksi_KbV+glyR}?!_~( zWzV=5&%l;FV@~rLIn8V2G_R4jc*8soAdjj!O2 z9OJSflPzdD#${`a%hni|tuZcJV_dezxNMDa*&5@rHO6IYjLX&-m#r}_TVq_d#<*}okT(-uzY>jc*8soAx#${`a%hni|tuZcJV_dezxNMDa*&5@rHO6Hdj&a!<jc*8soAx#${`a%hni|tuZcJV_dezxNMDa*&5@rHO6IY zjLX&-m#r}_TVq_d#<*-~3+2W!E*m`&Ipr9atuZcJV_Y_RrFQJ$7?-UvE?Z+jc*8si#)2KJi~ zY1#-hZ5Z2J{XGI5W6RawBhW6kT>U))y<*GN-y_f>wp{%^0?m0DEmwb!Ku_3m_4f!g zgxBZl?-6JS_i*+12+(KC)!!q)lr2|(j{sA)T>U))Oxbev_Xv>UUAX#t1W2*v>hBRC z#g?nTM}QGquKpeYMr^tIdjuG<hBTApI7GU?-9tKEmwb!K<3=$>hBTA zob8yNwxpJ;zegZXwp{&PkPHiwA@aZC3I)lqAQ>X}oAywK1<9}=85ShNf@D~b3=5KB zK{6~zhFBA$vna!YWLS_43zA_$GAu}j1<9}=85ShNf@D~b3=5KBK{6~zh6Ty6AQ=`U z!-8a3kPHiwVL>u1NQMQ;upk*0B*TJaSda`0l3_tIEJ%h0$*>?979_)hWLSXSk{8Ob zAQ=`U!=hwZlnjwc7hD%5!=hw}Ydg%lg^?H zi;`hcGAv4lMai%z85SkOqGVW<42zOsQ8Fw_hDFJ+C>a(d!=hwZlnjfKVNo(HN`^(r zuqYW8CBvd*SdhaE!WzNp*Q?ITE?}GVZ8crw3oxTjA6WbA6l-p z8AA`q>u{~j7bJT82mO{uC*D%TP3f?wKijThvYWb+Kge0 znl0DbjG+(ZHM!Pi41SEy$+b3P=t_RD3tO&+E5mQIMtxH4>qS779M z8MecgtKrJ99d2_qTp9A=lW;X$8S-Jv)o^9Vhb>pbl_4LtTn$%-m9gb&xH7DaEmy;p zVP$N&8m^2Pn1yIr)1-`koGojblofeiMnBGN)-)+A^1KYIoUCb5hE?)OxEihut7Oa7aAjB}x49aw411&m zxEihuG>HpW!Mw#@HFb;pkZPt1i2Ri(gwI0TS4qMiG z7za9RS?ggO=&awMyccUdj6+u3&sq=T@MHXzwI0SH8MdtTFb)sKmbD(n;k(#Q z=v&r$7>AVDvettuop+`4u5{j&&b!iiR~`)Wve0=K5-Xsk2Xm$Ku5{j&&b!iiS32)X z=UwT%E1h?x^R9H>mCn1;c~?5`O6Ohayepk|rSqAWkQcct^L zbl#QDyV7}AI`2y7UFp0lop+`4u5{j&&b!iiS32)X=UwT%E1h?x^R9H>mCn1;c~?5` zO6Ohayepk|rSqAWkQcct^Lbl#QDyV7}AI`2y7UFp0lop+`4 zu5{j&&b!iiPiT5V(-WGW(Da0+Cp0m?4m3TX=?P6wXnI1^6PljT^n|7-G(Dl|2~AIE zdP36^nx4?~gr+AnJ)!9dO;2cgLemqPp3wA!rYAH#q3H=tPiT5V(-WGW(Da0+Cp0~w z=?P6wXnI1^6PljT^n|7-G(Dl|2~AIEdP36^nx4?~gr+AnJ)!9dO;2cgLemqPp3wA! zrYAH#q3H=tPiT5V(-WGW(Da0+Cp0~w=?P6wXnI1^6PljTtjL2^IrBFxA|T@p|{Nmy=_kDZF53zn-hB5oPa*?Ir&~ap|{Nm=mz)jy?O%r z@R+HJ)2cYFiqon%t%}pCIIW7)syMBR)2cYFiqon%t%}pCIIW7)syMBR)2cYFiqon% zt%}pCIIW7)syMBR)2cYFiqon%t%}pCIIW7)syMBR)2cYFiqon%t%}pCIIW7)nmDbA z)0#M~iPM@mt%=i`IIW4(nmDbA)0#M~iPM@mt%=i`IIW4(nmDbA)0#M~iPM@mt%=i` zIIW4(nmDbA)0#M~iPM@mt%=i`IIW4(nmDbA)0#M~iPM@mt%=i`IQ8YReR*tO9^044 z_T{mCd2GZy!DIXK*uFfrFOTiZWBc;hzC5-skL}B2`|{YnJhm^7?aO2P^4PvSwl9zE z%VYcU*uFfrFOTiZWBc;hzC5-skL}B2`|{YnJhm^7?aO2P^4PvSwl9zE%VYcU*uFfr zFOTiZWBc;hzC5-skL}B2`|{YnJhm^7?aO2P^4PvSwl9zE%VYcU*uFfrFOTiZWBc;h zzC5-skL}B2`|{YnJhm^7?aO2P^4PvSwl9zE%VYcU*uFfrFOTiZWBc;hzC3mvdb`@x zp|NZ^KUD{&kD+B1o;uKc1}#@~)`25iuIQ`-O>T2VXC0c{gO)2g>(J*7XgNPshbCW# zmh)3}`0%^Ya(=1~1bG(cr|Q6w_hLrAI&kEE&QH}fKULTKR2|6jTh33_q5u4rD?01I zj>mIFXC2tF<%-Tauw%;=opoTxmMc2znxCp`eyXndsXDBKPssVHI{Z9a&QH}LRkoa; zszaW<7c=tJVJW;j=cnqh5w@J4szbK?wyKsH`RcHj)u<0UKNLrG+Th=Id<5I9bH2T? zJq6pp*VsM^}@#XEVF#-6^(7wG@RPo*q&p~nYJ8txkFP=!{eSgt*x;gGN(>& zZ){J&c6Vd@6tix6Z)1C^nK%9M#`ZL`e)_(~_H;9EhSk`fVcKUjuYampI^zqC{im7v zGqR2CnbRJg@nU29bhC8!9gXc-rgQdFjqTZ?+vc=1w&$1?XY9H<(YrMn?dncj7j-PM zmM>klbTOJ`*2b+?dh7Z`EFAB&+A^ENscqJpZP7^QwrGdd7fp9tH$+mAOcn{|C}Bpw{yIH1M)KqQ%pCgRqz z)@7|c`Km;$vw7R#uFadSviQBl16J`dm%Z}mA=g;C;xcPPB$bXN;}_%Eqp5Byft#ih znPf+VCoJaqIy0KG!d5yN?u_(=lbfx?rk~1gYx99#Er(Z$<=|ygVQ`;}@{+xgP2rA+ zwJF>ajcv6$BdKUt9D<3)1F2+sdLST5odVwwPNu?ri#LWTyT-A}SKrmTC=j#N6Txk) z1vly%3wX(Zn`gCSzG}RjmZw+pWD|bcX;TQ!UO{We&I~GoMK^Up%wn(bgx(Q0t z5euhM(GDEnn@sd3l4+<)s>Q;+)6tF$j>og#5=})n#v)CLW_o)g$qopx#p;UQ5|NZ+ zku)@7QzF@u3V?`)lU8>)*^`KGwW!~bSfq=RX|+~EaJX@b+MJH|;3|B~R4fwNjGYZs zV~NCOt0%k}@{QaQ?Sve35`gALI2~weUpUpoP{JX|EjR)4N<*k!-4t(U0vCxV($=O# zESBiQ(*TW3lCp)2BJs{Z5UEH{ba664bE0CT!_inuDvM_gxJw1>N(aN%rbr}4Frn3b z;4|Ib0#QdHB{7#yCh%PHkGfAjIGC?-LXF9ww8jGd_sZfOznN&QIO0{;U)4i*f zEa~g(gEjQZE3|ebdY1gO{Y~XfEeVX|qfIkjawPudqMvq~MaRY!S{;fC8OpY7Qb@;<{k^Yrf^mm zl*Z9vNHPM6hq1j`SKFj-4(IoOLbvrb68fLcI8=hK)s~<1v?)AefIT&}`IO{+6TYEl zSla5rx5&7MzsMP}?ZSD1#zdtN2X!R_&Z%wGpr)=jHGG3)!n^iC|2N{ZsdtB8m*@U$ zZfH-3YO|$#2Ha53Zv<}5=U^uF;3)&^3Q%4o3%C|i4p5_I5k*>u1>T7s<&XjA0q=a? z7%1M5ObSN^cGZh5>JsfOs-uE4IQ=9phh3#&9 z$NSPEDIsc;Wj=;|JR-2Ha;q>Y)}vtf{Nr`s~rOQC>~|9nt-}^f#@EK6f>)c<>&yg+PbM z2e9058DnyAILdy)ULTMnk zAFkgmJgC*Y&!O7E-hf*B%=douHSZlues1qK7yX~P z;TzV8^H#)O>~OqNz>!+e3(Sc=y;uyN^nP7H=6bx>v9|83_2Pebo-tE2!eLNV?azX( z!`sjsFlsRcN1cLkm1$GZ*zv=b6`=GtC>!S>}!AZ1W~_ zjyczyXU<1;-#0`4Z$U5gR?NmE;J9ZH;BJLB-KBKUT^;1>^J{lUNk>2|A;m3 zyRjbWLGuuzuJ@P+%oE6*mNma^?ln)E$FXwZ(a@RZ^B9%A1DM}w{unb3cVqPIE9M(! z2Xdi&$$Tet7FIS4gx(lBJM^Z|IiYhy=Y`G>%@4gfWQE=mS`d2c)OGJ~YnzdYN0%;L zy|nSUW_nM!13xS0;MaFF(TU+7{Nj#u&RCu3O2i|ZXM`J{?{0iXg3sye!X24(WO_XK zxH0%h1s@*{KDOy&=7&2I>2L=xJagMCo4Wh*t1q4U?o2WvU(VwR!@v}QPCLN7+2FJXvI}`5;Co?^#4K1zp3+0{y8t6+j{Qj&VA{;mh-lqmp}iU^SjT_&OdMd z4fB6E-+%KpZ+_m2y=C5lYZjE=dfURcUC@5PJs14zgT7A#!xYWit$s7o?`42Bc~WQ#i%L9 zOfh1L@luSIVyqM+r5Gp0D5*)Q9f{NyLa!Jz%ZORV%NC(ijFsIF{XxAP5Nl4c;uPym zvDy@CO|jAx>rAoA6l+Ye!W8REvAPs%OR=&P>q@bz6l+Scq7>^%v6>WXNwJa?>qxPR z6l+Maf)wjVv3k@bjz@yyGR*K@jQPEbF}p{Z`eV~iPN#2Dkn7%j#~3&vS6PK;4vj1gmm7~{hj9md!&Mussij8S2X31dVU z4*~%o@O~0L=Qotp3Z|zpVVry1%UY%bLGyL9F-7YQL=Y%SylNaW1R;vc@kf{Ib3; ztNXIH?}h{4S6yFL^<_=poALP(%*k%X^;mzEm3&#pmsNaOeU%k_Gay#)W$j*8?q%Io zR_$fYURLa7z247&SgV(ndReEJReD*Ymlb+hpO@8nS(}%Yd0Cg2Re4#Hmlb(gkC)YW zS&NsIcv**+Rd`v0mlb$ff0xyFS$mh2cUgCrRd-o)mlbzeZgZ*3M<+ zT-MEH)m+xhWxdrp?z0G%Qvj;Zz;X&$wN`}n6o70VsOEv{GeGefSkG=)59+G|DQ1^p z)FnbJh$1o>ifvY4y%!bHZ zh|Cw`;*(hrnJI>OVwfccRejM@GYWw*2#i2r`~jm67<<6T1I8UN>VPo^j5uJt0iz8V zYoOYH*k+UgV+VlpEp^I z&{Oz34;sQYE3>mMJ8Q7d1y^}+H3Y7Pz*QccAS*bC`P-Pijk(*Hxs7?-n6-^L+nBM9 z`P!JR?H$1RacJ;M(BPM#!7o93UxN0&1X(-_Sv(6_Jgb_#vw|_}7qfaXYZtR}G3yqyYB6gTvtlvp6|-6~YZbFnG3ykwN-=8`vqCZJ6SF!o zYZJ3FG3yeuDluykvm!C;5wjXGYZ0>&G3yYs3NdRCvjQ>e53~C4`^>Z-|Io|?%?6zT zyPbPr9Y$1E!Cr^J?JjV;3*7Dkx4XdYF4*dN*y(E6DXJ46I3HeRH6-vnB=9^W@I18O zd2s(cIKLg7?*iwygY#V`hU@p>+6fS|oh9*i`oLn??_x+|9qf0p`2_aeifv{qW3Do0 zDr259W+`KiGG!>kJ->zP-vhcAbRXz`&~DHk&;y_cK@Wi*20a4$9-d(U#GGMI;O{{Y zGlUJ{)5i72aL*E`jQcwv#N8VgpB@MitdQ6`NNgP>w$Aw2cVbv_D|9|$&iL`ao7aKn zVS6EHG4NUgY}Z07-UGS@bOY!n(5LbJZ-H(DeFpSd&~Jl22f7RA`~~Q1pu0g|2Ymzd zP0+V+?meJ;LHB{~2ki#!0X+bE5cCk}VbCL>EUvc~=RJY#LC_Fr9M4z*)$!elA>XrL zANyb*`(PjYU?2NnANyb*PoXbE?K5omf^G+W5%eX{mqC97x&w44=udFmS3o;KUj^l` z?-@|!6(2nJFhAT5KirPH?v@|E5T9=YvC8*ye69ekIWP;zt^l$tfb0sqrM(yaxgGww z9VoAWe{KiTE8w5o@s^f`k8X#hw!u=!5Fdz6tskp6MRYy`cL*_k(tW zzK#3t!RG^@2SE>k9tJ%E`YyhE6!aMAanSehYy%+n2YYeN9Par9jvE9$h41sAXRvPw zfA0go-v>PlUY`T~05pbkOQ2@IF@fzWs0KPZeaPe+`N{Z3jvBsrH$Uyb_CtPW-HLv6 zKi)NNh2PzdHzx}gyB(JL2e8ncu+ZmVq0hlWpM!;RpxvN7pa(z?f*t}r40;5V#r5{$yeF_d2pR(I!*hNgG=^s? zfe!wDLA@C~WAOXsR`i?uVL|(0LHirOU$&p5?@_3EhmlKWs%4(q*&ybqWrkYjr)73p z=B8z4TIvGdtC+8&`EC_>@ZkN5d1%+-Jm#Qf23qEyU61pA1;os=%sb1hv&=cmjI+!) z%S;^1!@(>Z%)z1eEj$A=%rd{M-nZ~KGs`lsY#+|qiv7$e%Y3rTCd)h<%(B5evdkjO z9J0(H%lxrF>wS#5G?*=xxnh|qmU&{CC6+m2nIV?>VVND4xnY?ZmU&^B6_z<+nGu%x zV3`e;xnP+ImU&>A1(rErnE{r$F_;;Hc`=w3BY1~vhc31&8wT^e2Jdq1(8~<;G6TJA zhhDZrFBfvXEIj&$pqC4wmkaSe{~_pQJM^+0df5)WTnO)e9p?U+=^{X97|0BxZyiRz zI*fjG7>JAlkx?Kr3KT|xz$m2uG9>>3B>n;M8khtVGn zqdy!*e>jZ(a2WmJFr+gI>5M`;qma%hq%#WXj6yP_kjy9~GYZL!LNcR}%qS%B0wnPQ zBrptX9EAi%!TB&Oaul4u49;H$=l$Tk9~}0B!+vns5B`p~k>6jO(Sg@v9E6z{nQ@VM z75BqVe*}%$kMRs6#oSfQT*bUq%v!~qRm@n$d{t-RYRojuJj45O zMP?CZZJp=vE9^7MQN;YEzj^?*obk!brOaEJ1TkkRGnO)6X&KwhRqBG6r<7SrkKL8$ z!82Y7uXrWA;+61AO|##V_bZCpbEBqd>&m{o(Y@I z!KQPtX^vfR+#&~?%)useu*n>3G6$Q?!6rEtk%LXTNX9h+w|pCdC4GMD3fK+NOFERM|K$PA9m-^lEZ%-zV$jm+D~tc}ds$c&B5*T`&* z%+<(Djm*=?ERD?3$PA6l&&ceI%+1KmjDsL%Wo$l89s8%^X}$wKuwoy?3hzf>_l`fV zkH22$#28hWoE1HiS<&NrKJoZ|x=Fh@d1Gbfp*LKK-=8bd3$8>2(K3u?FGB>;MTj6; zh8}Pwdcc+F0av02T!|iVC3?V>=mA$E>IbV-@yXiJtQ>vxu5^4`!_nh&(vzQjp8OZ* zm+K^_Cts|>B&L&?PDa`sFELUl#(VeVQy#sjxJg<5qRI0AA9r?gTw!v4^hBQ@Ju!UO z(VaD!yxNh?QyyKp9lIH($t(YS=71;lVN%n6KALv?&4V60)G$ zcG|Q6u|;Xb7NrqaltwJv4#XC{AF)Nv^`q}c^wN`vD|!+!MQOyk?Le&C4#XBA8w{c@ zSS^mV;#et;b>dhhE?6V_Bw~)9#3~D}4c&p*v>k{)N+bR#jrgN9;*ZjZRoj7BwH=66 z+ksf5^ihtZId&48{7rMB|E4*4V?HN2JMrRlkMDW$PGk)IQ)KtN3%N$W zhTNH7N9N3LB8TX`=04;P{kC#$GW+Jk<`HDuL?%sS-`tB_oP)?Mnnw;%8yQ0j$lE!l z44$ZOiS<{g4u?FP%uI^vLdfA5LK|dpoQajApFS)X;1$Hhny#{;FZs^bqU2;Q diff --git a/FoodbLog/Pods/FlatUIKit/Resources/Lato-Italic.ttf b/FoodbLog/Pods/FlatUIKit/Resources/Lato-Italic.ttf deleted file mode 100644 index 3d3b7a2984aec7f247680b1fe7296700cd2a3e45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118352 zcmeFacVJxAl|O#(D>I{+(exsX+7$IsvwE{MYL-6V z?=a37bKsA}{H^mk+VPDu{^o4l4eh;i=cWGQR5IfSf5+JD-u8J5nim$$ml^+dHHum0 z&MPkc$&)94gU=^WerVOE;Vu0?xc^6t>6W6w->llT!>{`w=@>fLgZD*iwyfQ>ZSl4U zW2RP=`Ssf2?OT|gC87PF;=Ot8#!J@xc-^5RjJbZm*k8@-Muu0PdHgT;qWuEAuUv-* z)~{QJ@O?GDXRh0{V~@9d(JvVj4CrtEMI+lTjy&7^GUNKwjII4}9-*HKAH?@97&~--l@|*R~@yGp)-A3=l zk7TS4^D{xpL4UFT_?3XxK6bxwn!PPu%PMiT%b#b9Wjm|kkF&RhT((!p9sdX3-;Q_N z`AJqP9ALw^7Ybh*KZR#=as3)sF|K8}3URgKT8HZ;T>ZGdN9A!9Nnv(Bz8}H;QsL+9 zp!^dyNBYn4*QCeTu=IVlT3(NP7?+(5%We3+g$)ap?0`69{EYN_woQD74eK7jyUn;> zV5_BdY@7T%?hoVL_n28~Wc%bscB}LUwqL)P9gt3pzbGAHmq`1W4RZ+y&#{e|&tEWx z9|=Dke^97qbHoo>iR5E*#g(jHN@W$|-K*4RP z0bK@bN4a+KPpnEZvs9`tyn^pWW)!}_R-mmR@p;xIU(fo)ljCpVbDy}FiRgcZFu)4Z02P-4EO?SzU zvJ6@aT8GIO)?ucy7Qbad+>6Dt%6cj5Kx;AiLjT+GT}Nv%`J%Ou+$>AEW8UK5u=ek> z)ympqp41=pA^x7F3WKbh=0|I-e}}Es8CVhF7_GB**Kmv0mvHQy`?XBQ8ua1XO6!H| zW~`AD_ZM&#<64L7F=@~EU$Jg?%70{c^26*UTu1m5j0+F5mvG%FJUsqWsem2B)r@)l zR(_Hd8s@Ua!a{Zk*KVO{+=u7+axr^AUdDV_uO`_v{ylk+-6{P^!L>)EJ*->$BbzDw zW_%yYK8K5Fa51j+_OJ^C(&jR4HA(qLqST@UHxh#+6voI?FFDzok ztc1;ArL2sVvkF$ps#rBRaxJT4^=u|=E`DJIS74kF(FSFR)YWNjA!!V$ZN=*%#S!?0NPj_A+~keVM(&{=~Mi)og^VXaB|a zum{-|b`hk@F1CSlb}hS`MZuv3F0!?3H~R-W!#-xeV&iNh+t2=+onSAr18fz$n2oWw zu@L`co7ko71IVB&*&%ip`!;)%{hIxTz0dx@e#?HxUf>dYjlISG#y(;nvcGa2R{78D z683xcNA?$XklnzpVn^6v;LgqL7Iq`MgWZW4-p-D*d)Yng>+Bu&3$~TL%id$B*McX|8o4RW;diy0OgD-#`7G({G;s_USiHzjpeC)1#+5-uuCO-+TA(@Ba1OKfL?? zyT5$*^t(TJ_xX1peD}V0YTrJtgI=YK^#A(L{}12)Z{Z8VEby-$^$)EHjk4Z>k-@@I zjtBnHS9?dL?8T!}+meAmD3Ee^z(3mCI}jL+45s);tLanq;Glmrp>25eXfAzCX!DPj z(1#K#@oMjYe~tg};bH%%v3FnyPyF=GNS`X{Q{_;~(BR-;$|wsD4#xUM=R(1#KGZy_ z!^P-o8P&D)4UFnr!cPOkT85fOJtL_oCl=tHA6*JhQr3{a z?Qm$ACZqJtQfPdm{uInX>v2@f3JtfSu3Rw6hy0jNODDkrA41K8qelAHk8ehND;(8P z2ctq(b8IY6CE)W@M*JD&o{%4np?#E)vYHPc_M`7nIX@5@<-^)%%vPz7Hk5aR=&v2U zv=5D5v2tQAPch~UwT|+ZQP%J@=N!{69Mu;v{}9@G#$@8G`S8$FIw4#*YAC=%(~!Rf z-3(FN_`h!;O`J%!CS{p*uPno$JJz5I<^=Mry zH3S$8R~L?23yQq;g`>7<-eTsfP{LmDl)yY${vv<7f($}d$Kk{6q4v=5%26I_e%i*l z+l3AsSQZa}j{lXnqdYuvxG3cJ*B?eJ&WX4FBIUh*R0eACuzz%jRyxu*@Qmn}{3*|f z*^+Otxfv^IXu*;xg+sH3M&%YP&yXMUQ!!d>8Co40m0E^ZW4*Z(ycrmHH4b+ZdM2Y3u9#qM?K2yF)|?r8#aHS$X^eNR&hlG$OQ0o zSr|+Q-VTrQwpF2(DtU!s@WgNmN4>GmS~P$T5d*;lG?*t9g#1M`^I0IC`oW^761WS< znjC)&xKBLx#UCrBwW{ZoNkNxx6%RmsSa)a9s0C}E`U%g|3Z7!zL`6%LPgJz5VALBgT25b-q7}*~Dq5+0qM}s=_)}dlTBUL> zu%s6Z(6Cqe!8lsMs6$&uU2Pzu+#v|51p^bBb>H}&1v@6n+ z((lWVGS*}~obg@1(ZAS#ng7YahTxizA@o7!eOXJhugxjRc`V~Q}s&9ljQCb_V zn^kv3-2?US)<Av-fxWqf_d%b*6Uac9wTWI=edux`ZxEm#-_ktF)`3tFvoM_dxgR?k(N>yRYrO zdycEe)|1+k+f&{X>FMqn=-u1*-M*jp{jTqC{jA^IpVXh(U()}>{@?X~JkLBYeO}4D z=6Mgye{}xy^WT{N)A@g1z!v;s!QU1o4ICdhG4SHxyGxRm^e=gSsb^_$Y5B4{S4b;t zEBq@8R@ATPS+RJ<#ua;39A0tfiW5U?hMpT{!-nCF!^emJzH-gVk5{c+U9h@)^~Tjl zSHHgcgOP@j8%KV+=H+$5y2!d;Y`Aj6;~Tzzkzr%e#?zZ#z4-Qv|Gati=I?L*aLdZA z!L1K%E86z*c4>R}_FK2VxZ_*9N_GwHI=Jio-NxOeyEpDWvHKr;3ij;U^YJD9ms|~d z5WXz&46rE|Hd{R`i)h3XX>6ETUsqdGRZ$qu$qM?N4xMDwhr32s^bSN?U|BPs4u1?6 zL|)3cBygz&XeWqF;4lthVj3iwJ|!gR7%WDe&XmCn1{k@SOs_ZV{Rt^uqZ`pw)AUX0 zV4La^7#f(a(Rf2vz2A@$>HHtHq1VF=8j25!#ui8z92~6R% z*M5_*11KEYdiAN3oA=Pl6|jH;OT`Gh3OqN zdDXe8reyP~h7wP1n%$n3>nUl7J}ACiW4?E3L zMsaR-QFTsPy~E@1oIO(?*H+5pWMu-ofBY|k4r`al0_?Jgg|YNh zmjmAt^*UKwuN0JowUjAAwZl3HSTwAIC_12p#MU7h@6a6CRM`^++@fDhi3HDiCt}qB zH?0wBDhZ@8xr&!(~Ou(o}5OlM27MshwlZ&!mH|uq0pfJT(6m&X+MZT26 zfKxs;_SM1#3zwFcFI~8xP-yu0Kk?S(Qr=Q2#n~#bx5c}KZ_0PUYvE>hL>wj)eB*AD z+it}ZqfXLk^G$Xo06%#;O^4F!4!U(@OZ~Z^k@9i@YuZ8X#)KxBANRvKd8%x!GBnp+I_Sa+23$w_3~z z29evfxffc@f@Dh+u`Ckio}Iw;dQ*ngB*-#RqR}Aebe0T)jG6i6*y?RY3s*3OeLvvuDdOa$icTa{N8QI$$oH`u`sRY@W+Secv7WZKlB)~vu@h(oGVEX zZDWt0+3+zx5gkbJSj>D`^zKjwKas1q8mo9$d#aCLl;)2P@DoWcQ$qA89z>sYy6NrZ zTnR&ntbN=rt<94gZ6=U}Blt zY$EOddIKV{wGe=!HbgfP01D>FMLefUVe?*RkqG`TG;+cgeLD9lWL+fWi0L9kgkS~A zg*h*$Ck-NZr3+rCMdZ)#eyMS$Gu;txTH3m{VfV6{=KW7?PLLB2HNSvbGDvpG^-Iit8BKQrh{vRPsh zKNag!LcVD|@xW~I94F`v^hpo^K}D(nuM!d<@H2H>md&zX2mFE$Bmz9VP(75V$~sz2 zoz9{2>rt2Rs(RYGlB7s5>R83+^Xe0B6He6t^`Vyt&`+S4;3Gyn-DqUlI%xoI8bG8i zURMT_l64nq14R-DnY4M(bOMGLGI3x@C|D#A8j)1g16N3wa06G$N*e?Pvs5g)KuO`J zbwm4_s+YH9RW7@97Vg>CxHD&@=C+q-xH4y?<+N912)j*b-u-88Fs8XKlZD!${Y}-& zV#SxWW?iiouZR_|%#il1x_d)a-ki;|R^4+^bzaYw*`>3KJi*TGeKXn$-GTP4e1XaS z@u5U3KeFnc^(c5T3T{*jwimgBo!k0m%tFE0+aMQf5Gnbd{209aJ-j61;;f^+v?MPl z6mU5bO{|$W8%Ro}V{ID2czJhMQFf}V69w=s0WwuA1x8`9GWFo$z$g(E3gOKq2^gZ& z#lK9jo|&J$8E^`v6+%)b%MMxLfrKY@(>Fqc0M4jrql^Si08@0jSQBoUFs1pzwRMsV zbO-_YBxo6ghFTlcR6rjSR-|&Ka$+Y?GK(O(2tzzxV22{DEL;x(RwNWF1ypRRQgl;+ zm`+(~Wfk5CKbWOUkRyE9?u;b2d1(1> z4)kBUva({?rL%LgYS!N#-5Q!Xf5wUvv!c&z-zGm+(6gaI)X7fH18LQTso5<{%4_yC zM%OkUX?J+GzdICtOE$YKdl#*lvE<6Wxi{=w>TkZHvHzA04QF1dUR0m4a27w=@Qk8) zLT}@@DSF%72*t4!ZB5iP7B?sd%9>J=w6B<^7RgYb6ORE>un@f=?1(8`k}Bb+QL-kh zR!XaTqdybo=@Jpc(nln>iJQU-n}*bfoG13~6RN!F@bTy^U}+9ZN`8vYVeZSX%Xat| z+`hBjV77E_>&fFUbl(5K-7QwL-K{TL_@(E+IPV6Y0GMYyR4m)gHutt)eh@u_(T)Ej z`ZNArtv{2S`XliGRRr1xNe!c*SImm42EoB=ENOYvUw5)>rTjPbVuz(Jq~8h-jTMX2F&f_Yd}APpp}vH(3H7pt<1 zIRVV8&WIEzeFJZVXw*SKW^kHZjtX7AK3OmrOg{U`z{$+a%=BBzZn1d{2F{b`Cke&` zQ=0vx|76H-PqW@qdW$v5pyxbE9R8XkU`=!yS9grKMbW*cW5ndKC3$sb{eOJT8L(U2 z>KnmiS~GjK(PeRY=oMyzA#Z1=q$cSI;+i`m4m>e2lQF>nV+h$EP=&#N6axTqipivW z3KgJ8LNOM?2Q(mL!d9SrKu(DiOe&|SQlx*XN~da^Qh5}n;yM)}1Nwj%a>6Eb3O}vj zciWK*v(wBrb9O~rejCO*ELenk;Q=tQtO!^(Cae!fknDp#2qrWg z8Y1+XS7;);8r{>9RCZ?!CakeUPMQ_MSQN%>0<-t4(=CX(tFZVH$9E@ zMSN5%uFOwV^tGxf24^8`#uQ&6*^q^>FoVvE&o?Of_^I(n#3K0#_!<*A=a>?hlRM*fD&qU3QbB_vc_(vKpTe{N2hA||(Mu63KIF!v5`YQTU8yp(iioR^6} z@xSrPeU9im4wp4aF5o}B;Q^j%8xs$Tf12}aOQNBRZ~gdp2MJ-3AHk$f;6yolE@A^Y zz^mr<*b-SeFOTCxVF`>`7`+@C5v*G13Z*d&0pv&{!U7YO34&QrRBU1h;qxm|X-tAp zW}=E!06-(<7bvZu4jDyiM|1;YQ#hOI5)<@LNXi0aGDCO(NTGIi&gv?R{0EAL!GosOsyCXT9ws@#-_QZp@@KD{Zbsnatkec6**g{_WO0b0;56vxj0Q5zh3GgzS3 z7BxwB201&l^&v$@H8>O#*5gfwPon`uk0ru#oxfB+pMU+z%KSN-TK4W+cLG#k4{wo$0rS}|MV|(SrV8i^Ivj`me#;`X+yrz zw;~pg+h#S9ti~e5X(Gdt2=>6!fzy~Qx%J=^iWz~R0*y^-#Xzi5`8j0;0hmw4h(&~B zttrJ6>5sC2Ay@~?64~+=)~}&Ulq)Tv15Wx5LQ|}(L;Qn$G%8>Ao_YzRoYk$ zT5Sb>&jO5!*y)I^s4y=Fe#9h)%|HTF!|Xbl%e)|rv3kHjfZ8J5J)%TLE5?WslN+79 zf52>5&l24A3Kww*im|O2%b(N)s&OI*aFTdq@dn()h9b@XQeEWT5(aB+&{zm;gu#$b z0dbOZ9Xhk>go)!XSWJ#HAl1udRneO5o0qP?cYXP?``+5wxMf98`b>AKv$$nN%e?DX zS7pw=xT|z~>)L-89+u~17Dq2ns#$$q-(}yvd2Ui(WqM~)Mpj1k$dQFL%UUw+jtt>A z03@(=fOQG%lyr!r`-w{z7iNW$y^z}JJUxz)nWw#|_KNm!p1&+mhFC)e&xp&Eq9lU=F`aGz zO27rHFa%jvM+RrB9>c`A;T1zxJd2C$f>3@99^BUOh2z7+vo9ZAzxd{n%ImM*vA^%8 z*H`siwz#CQdsRjA-W4^OvsT~Px3%4$Ry$BPdvkY=uV&Czw){}vgKy+z-@0<(*w#q- zl6|wTdZjRQ_s;bvb~j#E)W2g^WN}SOX7}!S6^j}}!qesR)|3_Y)CCK>*VTr5XJ!#C zeh)acTUm=4>|Ub9qJr#9g%$z-30h2}Fb5bkfCvvb;Z2;hpf4$kl17WcSXl@XiKHmR z$V9D}l!z3@3V~pu{!f&|XjHC+hj2+jBE&(=C%N_rtP?0`QQX2YM-K5Yp`z=`p{o9y zzPe@k9qX#o>*iNRS6NHa@8kdU6}e{K!h5q?SJZawTU>T%&)mxfON2QkOApOo|D|hs z>NeayF#FP7yPBgqhgYaitMnBX^EYZ&v}TnK?(5unWyRuMfEn3X*Nbl}cE{0(QS;&| zbeIY0=L2wJtlvTe7{k+;wLw1DB(#DES6r|`Oeod}1) zCo)8c%TG1coEI|PR$s`L6BEue?gUl@+xiy3A_@7)Cn83Yn`B|fVUezw%+taH);8e` z!6Q{EH4RKqM&n(dSO&H^Vu)E&o0twZU|=e2;?i%DnLZUlMbnt=>!$)~T036!o(Cx` z5xbwgFTN`+f))n<7}Qf!*vW~P%DCX=kyUn~=O@HUo8WRqL+)Z<63RSkwTkfHjui@D zNi^7+(KZq|&1M2wQ@E?W~$Y)xW zg$tgjEY(X|#l>gNzCjb<XGmTlhO=3m&qK+9W z`l|cuauSn_*7IWc-n8;uZ+_=U-TYmP8tWqAyB{s-Y-*UjWMSWkrA{fEu%?Vf#lfZOp_)6B3A0mVp06hH2Mxk4P47;zR z-9@o>6F#-w1hrkBATlNDbHU~lQX&KYTFb!d1ds#78Io^5ZRBdoN>(sCNAvA8NC;tj z5%JdIOXoOwC{6$azSNV!by7@uL*@+hj9X9g_K?=$Qv@`QQsH>My$U zi{IL`^E>w}ZrgP{IwPgNwmRveP+rHC!!@NZcFyT-3)T0R)L*u9T~8rc%F*)f)Rd6h zFbkT-j?rE9JHH=2{lt;CZ|iO-(MwKq+3fxm&x}8C`R~8+$j->zJAZum@*mwhxYJd( zsDY}#$SV!J`O!J5uD&F5wqfSO3=x|gx4v}N$CP)&?)H=FeOFNq-8^B z3|%XPtda7Gk`SDvk!qG?ZmcCLgjeJ(jHNt)^q`DDaMF!jO+}N6lBxy`wiFzpZ2Af@ zPg4L+rW`S#BrfnW9uUFEz>cNkHz%jcJ!8*5oRH)8C zIa1_fXZH$yzUJ)g79aW%*)ZTT0=T%K+2*qsA|AJ!vHaYi-<{!3Px9coQ{+l)j$~ee znLJN`kscgPQ)w|l1YTG?_NwEGSDNCy#K!VtbzmPO_e;^OCTgpyI@N$ggg#sLsfEc@ z0C~nMDGI)7^OQLQQ=A+o9#E9l>`<0!BW8#B@KgN6mIv3BW_51vJaA?E)vsOhtw!#f zyQeqziUZOA{%zkSeYyLu{Ih(laNh2Y$c~lW-n3h`ta@Zmvv5;X&hNRnZN=7u;W-~TIa>{z;2-iy`0w6~VCOI8!X`JuK3oGt{vaxj{CazubGz_F}SRb+_p`N zcD!->g4(q=-s17+_&s{LZ_U=FkNoPomw4rS`+TLd!ac^s+~VA2U-<_Dki6t{N}B8?$TMP(;yAta!84)ESuIR;vb ztPWZ@I(DZrX3(pg1$wPzKcNhS(vomq(4XY7!(+y3d2O7_Rb@kQFrpXu+GQP5D3K>J z;e1fD4Zz9ChF1`XC>Z&Yn%-71O?3$xhy+@LKZpQB;(JnMqK}aB5Knd$iCgFGvLAoHkTE2L0M`q4{*b&V~%=+$@%I#O&*nj0) zclK@nCigxv@7jw8v+9j*i{0j_=-SY=@7uTa*KIs{jmeYY;;jyg(QKSM_OqPY9Otsf zes}l}wRZHAl(>^RG$JHFgE*4F#wr(T{b zyfpV^;l{CT$WpyjxC(PTfQkMQa}-%$JQk|ji)NKwDZZ_VNTy=fWUAariDY6?@joFs z9^wVv0%{~Pfd2W+mruQn_VHr;%=iaL!Z-$v<_qAGZkxrF5VK+_FUtpXqudD+81u95MlAk}^t4nTNeQU(nr9JKJoq`~jwn%30U=V77fAe~5Sb<^ z{L_^pK}_W)MF;ZLa^$}w>Lp8bQnRrN01X&YN~9{*D8w_EbSYfB@B~t_nH;Z6Avma* zibeyWuhfj88Z>a^>nJW;)yU>V!8yE$Qcwv6Zfp(}y7>p*g7o{xUUz4?l0tSq`k*7( zZq`MwwdI8S`d&Qsk{EP)1;5WZcDpwt!5H$54eE^61ff33Gj_3xKSYlr#aLvvI$}_g zAXq%}#)*{!HV~*uU!9z0fLCx?PrOp|3{qoH6}%sh94% zPZrIKO%`PLMa&s#sVQ!U*<>_K$P%weXp|n~ouyEop=~1ML!;6b(iba4nl&P+ zfG9%2idsn}D8Q36eTgtcrJr7rVhjEQy?^WI9|J~R`N&h(C8rs%75i`Q9Cv<> zc*vXZ@meY5DoQ?kSvV{nOe%7nd0Re~;61xffgxa{@XRE3eZ-8UZnqgJD^MRbEO%QW z1t|+1vXEe+Ah*UYC%ptr=p`^(a>%AF=Y7 zBMDhep+j@3|8deQMQDD4&S#04y$)4aPR+)YZ!BMN&13&|(ZRRwn7i#8-1#7Vc(r=% z9m{ro?Z)0}sDg?XSi1M^7j9oyz5KD?T=ykj_U`@_Cw_Zm(^LCfSB(Di?oFfnTb7^t zCx$K%50lno{uZ31aBIY6wL(Wtv0~nMk|@Jl6t^J|K|<;VRsoaKA?Yy&357r>sl8CT z@D^$B3Jl^k(3z_H=2EZlT~8{c?A0J>5DP;Mx@$TWa9T5}LMCvfSlEbP-2CDxe*Lx+ zn<_hxeCN=P&hIX`a-b;Kx~@&|jr~SGR=N6ygmYt)Q)4A0zv88V3>BYHg~uZ+ znOfUQX#f+EeS%XQn($SVa_~vTIDwU%XX&gkk?sEIE`MO!eW3*J&q=itD)9 z7M0GSlp;_`fY2j7JC0Ytg2|geGGnC?LyJYF*hEDtJIVV|td_-7k#KEN4JB!pAc*cV z(J$S}2~rVj9ez#7RMr1+!FrmooP?x$FeT*2LQuxhH9N$2bpl&2+4k6`it?3*7x~@1 z;?WuI=!c2Htm4)$Ex2;9@Ve`S!Li5WV`)-pN4a5fouh0fBz`(b5S9a@KoW9CD58X27My~4 zWYQ@Z4d_fU^=Eu?RXWdtmWFUOR#CO|Yd=$+PmiiYwTPMXIyE=s9K{U&L7keL4!7Zb zCYQyYT{pimvbrs^q-SK^NKeVEt6to3#W$Lo4M`SfLF?+Sw#{?$OL|tVU)56*+4K30 z7mwCRFIlXiyiji2(u(r-vYfoq&UKw@p1rnrWZ|I6Qdm`3(6gzzs-rY3yQFjD+<}Mo zch2v?d?Ed$W58uSB7BtZr>C48%F~>Xe1vx*bY#Gn6xVZg6g4aLR#1uY#0x6b6dtMQvays->6j}zc>KlV(M8y? zcJCQUI*ZfR(7>(OPmzgvq|-b&^SCW$y^bMgU}7GmrjTBWF5_4cm*9Abq_#;fvGSS( zClyG2sc6|4q1FVoL^FXIAwqbg{`~F+-G-Mg62zRY&9^mdI=Wa~fA+3@Z{0I6`@qv13XAdWs4LsiwSVypn*V<2 zFN-jL2c){eVYgWTOiiXc4T|o9NvO_4sO8$cCtfMa++@AQ9~UUpWhvjm@VyN zIQcj`0MvU8<1b)$Ma;+@3kEWrwn<*&q?}}<0Ui~~n^sgX!Y8;mw27SiUSwDYQB?dJ zDmHq~sULe!Qwl0CK<~s!NEcIPB|#}w6*5uN#p3hx#AgWY?A!^*Jj6V7;MU}H?34s; za3iwazhKBr3MZ#a&%n)Lv>W+t`kbU&$DTd;RZ$l7iTY^q3HeyE>#Wg|>-2d2^*-_M z_Eh@rtM&V9m2Xg9=i0Jeu58;GoD{;xUj*Hf{p(|oM2x;9yEV}SeMDPvw?#q1balz6 zXsg~yFNqSS=&ON=*D4}YBe8NCzK2l;L=giSDT5-JT{K-rCbddnbkjt40>wMLJf_tr zKz=}-)#*vG=YNZyI_Y-6&61GFH=5km*P)$ok&zQqk+vGnOnRrL z7AxADiZ70ddg?pE6%RdBEO`Yn&dMnT<#5EFQCThvF|`f#}bLMeF&G!{g~4W{h15VpX*av zT)uyP-DBrwyEDN~v)DNPh_F@5Cr6)@BOmt*srxPLjB?qr2}U7zuI7`gRwZHO#twhj zz}L@CEj7qb1k*mQ3Hm{Af5DvcFeeMEi5QU~spQ{N^gQQW#|F(x!GD^Sx-xVN$Vv=d zBxqvSEBdLZ`W_!R9X*jCq3wE|7Vz66D zCyC>=6Mj>L8Iq7i=}9}Q!C&Z=GCx9lg>f4d5dcDt+3Z*VLR^drku61|MsQ1~S7Kd4 z!#2M5N_&#w^+c!M;(g7Kxue78hXhVDwkQq45ETy|A+9h15!- zyht+f0m7va^^eiT{cGq?21*HstYcxzi5)wXdCrlp=MO;NOQ6gIgjyxUT@&InO+-Vy zf`F(loCzP#Svd-zC^PsVBh`4(Dp!)}1^F?T=R>nq>04kW;~$DAAv=_)slnKuZ8D6CKcxz0W>)H< z4v{CU9xYOLfoj(Cszqw2b_A~$WFfiBp{rrMaJu0;6k+nrlDdK}>87#YfP!(Fk6H~+ zb0yLYB|d18+%B>clPO-8}GmlR$0uMHN4}hw!dKV7}{LG{nzqqfO`So z8u6qc5{i7Nf|LS0Nm9Iss+~kTsSEugGQZtikV&OyiSYSr79e+JK%Ix!&jisaVLJjO zE!k(Ur0DS~AD9vA38HtJo?tGC*rcfT#{>ZtwRppYD`IQn)QU$4O(yk-_GJMUBBUi| zh>exR2eDtD=7*#^+6)HcxNcGng^s7M29S}w)%v71C_JHhf3c|^o1r0fVQ#?PlAQyF z8sf+^)QjolWT4|T=01IDAbVhFUFCtBgN=imu9($#Requ&Ii3HqWaX0HG=KJns`91X z^?9C!@@r$|Ge>6Sy!>qc!*?85QQ6wqo?rGDEiOJ!h)`m?fdF?Lkk6M)??jQ zg5HYR%MnXqn0!oLc+F#(I<(rw4#G}28WA86kTOCcR@iPD=F*B|(+FX);(F3n;9sc* zj}$WeE2r-W1P)F`pqC(TRd<8h9rdb(c;e)Oot>VkFL_7JsmuLsT2>S9<@{_zSNK=-~lNBEW zk--cP9NvC-Qz^_XQSP~zsA3`jCu<^Oksz#=~wt$DA}34c-2K!SKg%3M(4h8+o|WGH6_DK z=B5R*H&o8Oe6VC;rtht$4PAL({$l^bcOF?!FY0 zssl}I1x@6$8uom|RuB%?6x8Ho(GD52QISCk7cAi%Oi;;T!1RHcrL^}N%Sy3NP=%_A zV^NX3potS~S^A8XRBs0MA5AS!Zcpfi3Nu3Ez!lO7A!va=iq0QPcqjjx&IRab*dHem zKrvm&BJQH@L=v}F-hB3JeCMu`uDZf(zs+GSC>vh0IkM>RP2)Cp1^$ zJgBF&ao#yLDUsS(HHu}^VB^(566gz4#2f6ELTUm9x9~_&u_gpQ^e~uKPTJyJRaQlE zKxJS`Vwshf>G`gaB74`YYgS`t^DSmm)2hom8p`Z~*OA~hhdZjX4dyYsIDGci?{rCv z5@m!S(ApSoLJF4{fM9+>tqoN ziGzTqn=Lg*1gA}s+Exy(Am!X5QwpK#G1QK)@OUYkwh~*xW66V%PhPT@tni7FRu@Yu z1)cKpY@ooT^mnm@dxN<_Z{Cc&=DnvjExKu>s{iUI1~c132_~l}dwG5BNOwWSnmbos z+{c{;!Rfp#!5F=)vcD#Mu&1)WI&Bg67!8#x^85GnWM8tmdDEP*@YB-X*82L!to+v5 z3u@ahUs;pcysUcew$309F33yDXwLJcW+M-5_Vt^Z%j@i^qQ_Sg{dV!3p&0{<3p$sV zEnXf?_Z7Ml3~42e!P(uR+8&~(xj?Sh<<}6g`7i>T821#9%aTY|WZVnvS4c@!;y`>L zgG|r@v~}zvrr5I;g|MJN`V;#nZ+lML1$qd7bLq%mF?i+hp2FsVS|c?F1!rY{f+S`dhnV(gNE zdg7fWl0PyM!q@WMD=+P$ate&`MrBzX%0*mGXs z#et+Q@uRaQ@gv^gD-5|@p+cXpDCBm9iWQiQuZ`Z$zXq7NST5&;Wm%z=WPEek&6Cb} z0@Y$&NvVQ(r2H^-n>aX>#&?M;kuWB%bYAI1SaX6fO=*HxDAx8Q5fbYpR!v1>f?TX& z3LO%VU_VTV9j%U{B$cRbP8386L@bAts;EeZ+LHx_3RFcSQqx5s;47=nhw(L68w$JE zw}eWQ9J0ltx0~AAjEDa04i$Qn!UXhik_z-Qug+ZGQ)n~}CF*%cpA?yH0XR;aXX1}Q zLx@@_?hH(WgeL;CvJCx}&@+}~q7nLqicX^S;M7(jSmCb( z_GKyU%Syrn#W9N1l6cCI#{}=b0zwR39Sz1oQa@H%3$tOsu?iZ|PpbGyIVtKYOp}!Y zS7|IMg+IL^!{xK_xwiDAd!v_F(~vD@;w8sCDW+&NF*!9@H~Osn+Sz+ecD~5wif*^1 z7|niX)NFI|`(2i3Dxl4Asz2i|;**FoFX${7&2OVBIylq~<~KQRkoBP@P)$6HMR*7$ zu`3v)LEa}=t#GN~EI{x?stKQ(;#(p{Ht@`;XXMvDZX}xH*we@4*Pt(y@cf7ePf8fF z14F^I6px$sD~ep%*GEOb9meg#&*w zX)N@CRtYOh;{cUH$(A7X5l7Z4;gwnmP6Fg?z#c;#N>L(0oxCRJN$K`W2J5YT-`uqI zQcX-Zm8@DiH?t*8n+S=C!mq3CLwq~S!k3~LPjCMmn6$4mVph3fFZ6Es9D|FIyCGy5!P`k$ zIp5a~yd+hAav~Bf$7ihOCO=6me~D<}ylMb8^4%$(qWZ@seCDc~K2kMxd`gYU&US?Y zKf&3~RmYN0fkP-`7MkK@n&NPmxA=W9RO&*#i&vJ{pX+lkSvG%mYN1>6xkpcCC5tw@ zMc_ZGTi%j+uJ65m!)=TBs&jnrikuaGAdW%Xe?y7Ec^UkM)LHBkO zY#ri#!~$ZJ1inY1b&XYLol{U@*6|!c7gR8%uqIhATv!pSk)m@OMc_~6)X;7xAvG~) zMVwCXTykgQH}Oaedi5}hU?4%>rTQW0Elm#&=I8s13xU9mpN^r=q-{iH z|6)}oxDcuR;DrT^R?109jwORHw88OtliKM=J-DMlu2ij7EDu%vJvnzWoU_;6r2V zkmP`#HkqitS6WGR*I4%bT-50rw*0r zawRp3oZVOsB?X(P2%!U&!&g>0`AWqHQ#8D!C#~_Ry#pCREQ7x9>l+l!PyA?Xzbg}- zn9`+J_6pXsrqnbJ=Ns=kaOm!vp#lmAF*y#;DHDGVIA0)l3-oYK*7-#47U|FD z`D^vGUx>p4u+{Uq}s2KN_U7Kd8}hQvN|&}JFEZwaYT3<{@g0h`@#AL|bSC6HV3CUD|u;6y5WIASCZy2U&xzYE4P`5(yLOY#_a zPX0~}pwqmav>zcjsjjN{QzInI(2T11r$q9okP@OLXA_BLjE5W^Frv;$?~0{0DrdHP zX{&~EqPv>kB_h8|ISOdqU+;I>^^eOY!>>(_#0R5ya?AZLkNzu0Q}mCFsaI4olCs1Zz2DZ&&;5gYMO)KuP+Q4eH+$RV6zl-ik1MF@!iA;1TIH|h%jIj5io z28y|mnSL(*)VuSpd?)(xZEm;pIb;AP*iAfQNV6V^em{@jCcfadja})^cSG9~F1I<= z`9kXv2QgnOyCh_pZ|M#^Sa&pJrz|Ip5deGtLC_D z>1~_)Ty>50&N*wF0($$B#`b)ODk1%@^J zKJiB&g%s9KX9Fa897u&#GKEuk3N%eR-9?6aiR_39C}=T{5RMLn0|DT`BZc(=4dZZt z=etbNp($furw?J~G)v*-rVf5{R@<6L`I;3AGu1C6P4q<=Sum?*OK*WcCosPq9|{9G z0kn8~^aTGC{5gp%z%HdVpYppfgb69}g+QK03@a$=0kqIuIY~qp3SCYLF}p;HnFNV^ zNbfn1kYhDsl$?U&KuqTa+~v(X}ox3}mLtq$Wl0S9sFnv13$VH7##TzFxO^ebn96b zCl4DOr7^h-2PvGNw0To6i6sb?>MHR2L?93HhX5ubaue`bIWJ!O$)f*dOE|{|$H8=b z=Hb9AD=;N8Eh*eA*wWASVp8by5A93K0j&)2~zfcmFj*<#TTS z-oYUKB1K{Ur6uJCyTzOyo|%7JWJzPb&6AK5m^ZY(GC)5|acswiTNhuqti+hmy7iu+ z%YJm;*DCWr%lurfNS6bIu0!8jHTSf-rZ z6Wd;+DFUQ>Xil%n^Xr2RL3k1P&S@!L8@h>Rb2WbU+KLN;q_E1y=tkC8`=_-46BEWi zxJ5Ps_>5Da9qP<6N z#l1p?H#(S+P+5{zpC&w+AS8Oz>}TsNp_*`tF7tB+yxtlx_Z}GCG=JYfjibxuvLqSo zq0-sqO&9f*8T|amdf^Ux+BoalkgwBsB;q%0wiq*tTZ(wmEJrF&SpLY~S=r4?DhiB7 zOG-(mD?E2gTlDXJcoWmDjzW$jS9(?8fm_8)d?jLEnr1L&_d7@)C#&Gua01f z%!QmP?4ckvsmiMeY@Ob#&rz(Z9DNSNOjYb>Ibz2qA?6=QJGSJmf_1euYr@9{@5%@U z(vB`UTClFBW~AWQ;-eXXgQ14L;^KKTGc#w-D=zM92ni3wUIhc`$53=FRlRE|ic(Yb zy{L~$_Z1cQH-thB{Qw`Pdl~5Db(}vM&EFre&sPw^?P3zyS@UjpRJq-B(ck*o~U z7sNqF8Uwim%J49NfarIgvN2`aa-jUynr7g}st`1kBebWjh${G1H7)j3rS_s$0VU~i z1m`&&;+HI-z@ca5*QL-s-H8@DQS;p03RD}@G)l}!P6!YK&Zs4Fz)!4DBS^tE=n_C1 zc%rmM>==z1RdR3!&ev_BAJRYC9$1BcpW~I$H*QW!)xQO{lHhgm6{cX)Em472nxZEY z`9gE_@tn`+C?6A}CxtCyj@LEzZ-Ls>)H=T~)9yR_6YOb=euX!!TCd`BT!+%L`RANl zr^eeM92Je6h8)+4;rfSg3`~9nb%*As6(Q{zvXNBEGJD953mO*bSZ99|{rTBnqbA6p zZu~0oa{NZmEc_PwT@g!bb2u+MGb0VT{}VYVRkPqNoZnsNA)12b2&u--bs7RK2y3!{ zDltK3r&RDr(*)KIUw4$Gxc;ZgY( zR_mU0Z1$4=P1;sHXXie6g58ss+A$mc)3T1N(+Y-7_3=27WV8 zeV?DB`q!0O*%82@P+gDbj`V> zKb)MF{Ncz;pF@4L`#G&GwU5DvZ`v`hP}#vTc=aDnjTFt>bF)Cz@esX=)>oUb8=~J`6Y|+no^T+?GfZ>Zm~| z9dy%<=BGp8l>{eMNw0)Oi|7#%H(ro3LS`?VcsZr`fgr`tE+pAqf}C7bQl8P&pSAGD z4KmLy36^B0TP-%pUb&~WptTr3git(Q)Sj8xytF1cU!0xboZ3>celW$1v)!WqOg0&P(SKSJ z{niwIXxhibZ#jE}H%M0DG)GRJC!)6wPJk3Ro*zilJ2<=~$#@Xr*S>Da**@*5+*@^bn;z4DIo z*{#hrRh1PbMVUd5%b<&M(1r#M{y@n^ddkwFpPxuD$O>CB7;(-cv5QG(oPcj?+AN(f zPv?~qp8qdeaZmi5Mg7#VK$QlPt1Nt)QN>4sHpuoOdDr%@wlSTK4u;#Mwxij9@SOlU zC0Od|N2F8X1O*jBbc)8W{g@-pPo^CLpTtK68A_P?gC=y^G4@B2!#$Kkkr!gMVZNN$ z9N6cJ8q3o@j}-K8y8-O;A(egp_Ta(aJie0u<~a9%{?Usz*pm`}d3(V2jf7-h@Am3B z#cpSKR{25UTc4G6j-2|#>F9mp{!8~RKbUOHa7Ld_=0%poZSLIK?5yfc+HJtu7U{df z&2kf@_-FrJrpp9}W$e##(^e49jbe_NEI+R3H}j^^Z@eg@7*LZ;GJ9Ob)!g#a!e3Q! zr}%uPT30ug4eV-d+dWWPIFMe{Lt59eYf)+GqFpV`I~SFe zE!x?Hw;4*Q&Z>-zs!oLul(Al^OFD(UsMi0-+?#;MRa|Mq_x38a)RJ0@Woxx|Z?bHu zwX`Hl@-8nJ%L`yz77%tMBcWi3utY$sod5wNu_nWW-GBojY{MG150b%rA!IUHm`TV# z?EHbimze-|>wDk#cDGux%#xYsfBwnv>bm;gx>e_%I(5#eQ>Top8Qn*}HU1TqhEaY7 z^6KIkXfDbN=Q3?Brka9|hHla`o7c?)e&wVH%IWaC9NqgtT zXT`mqSre$uDP1(b9IH(6=h7SlEpE5>+I|XJ)EW<9HoO0Qf3q_ z%2>R3n{7$Mg3^Wab3s@CMn4XjGcntI7ssT8_CSNuFvQ^^4SO08ev6PL@Q?}Hk&(7! zCwR5Pr=fA7nhtxj!gkx=60%dzydxn$*Li1fJTd;`8CXFx4PWps`;+!h;CZ@oMKjW?#^q^2{aEpdcO098$PRc{_L}A`_A(1mmIhK z2Nx{Id(r+;^GWk5+dJqh=G4$xg~vR95JP+F0S%++IAbWcdd|$5bEB5`KWbp@D6%UiF9C_`ZL`E7)N*ZeV0S~ZTWkwg z6KTq%YO^QbX!B2V9|u`s_&&}RsG2E*5H}B!PSgp)mmcdj$u)Yut=su0yv;uyRt)wJ zU?wQ3u87Dv{G)26Dk~^5{bWAt3N5{4j`0`2XxsKz{v-lb?uWMC&+NxiGy_6yhyDMp@gigiXL zcAw;>LMV<{tjB{EVgy%n4^wiarx9 zP;S%vb?wfj`HQxGtGTXiX~Cisdpz5>Ep04cIX|_@c~{ZOQ|mVk?kq1_`HlJ({5|sd zzTNA#7B6qBS+_;~xCr*+pC|0cqO@e>6rGQ?dmb}dor1GsOYFF6#4K}k(eG@*_bb!A z4`2f6xgz61ovdd%}h!+-819jXPIsDOe-4mzG={yO_t(8SNwis6#{OdX(4jKa{CfF8`#_l+` zBM#mzHku)2tVKbre-+GG{A47F@(WwLoO5 z!&j(@AKq3uxqbNXn0nAq3{(chVT@y(asiX_chl5b4V-cAH;!uKSFhQV*>rkzrHJ6o znOdm_3wj<%a*`8S@zH9f+{Sjq2xYO~Ukyi^0K18hBTKoatg|}c#Y%uwDeHJWcL5Li z;z^uVq>u7`O&yF*##L1~j+_@`OYm+@J9kF#5Rza!%>5S~9!x9CUSf*fBpYP_F zO^A;kvwsFh1mAndOkER~_~RcZ#W$FTj_jPB=G>8;dt@kjJU^MTU}o@fSYST`@3n&W zVzK_!Z2ntQPMoKC^{SOCmNza5)RZq;FfS)NJ=IekSIwB;2=A?3R%eSbE3tHv0?s1q zVW^PxuyGe>n^>&p46z;}+g!>}fYU*^z{6!So8$ntN`{Z8Ts@^m+#3UhP5k$Tl}1&E zeUsrsQ8xbl)p4qV4isr6TN~lSEmP`c<{ivLU$v>z)(uWg+qAx^2*1BVM3F+>Q; z46ONMv(!`y!+vsvT90KEY`%m&Wy^~X@nDgH%gA!}$z~CcaK}n5j>C>vMOs{>qpxTx zcbeBs@ZcS%?8>cJUii3WGPx!hOl3=E#LnL#qyO0wO;~Mbo#m<{0Gq)JqZ39ikS()3n9k*`v%B4+> z4K-C2i|5bH+>*6rvh?)PLa2v8Ib)-l;LSJV;>%1=>`A5(BO&U{F<^pw6XMH_*f^xE z@<5n+VmywRa*S`BCV}HJilO|(7#^5o#fec;)$n>Wqb$T z2!C5)5_Wz@#CaTENbCCCW4+LY?0GJ4`LTM5$_#IU+skf#NryvXpIxMYzVPpSqb0Dv z{Jqxn0E$nV9^x~b2BvwjJrN)BOS&2@&cEdKaLiaT9x z;YYX94@_9n;gM&@;KMZFjGty2*f%i*5AUAV;7;&YMVs4AiAaR%h)Y^bd)w|k_B0VQ zohiPcJlYUnRD{H4_E=ithflNS5!?9N!JBNmv8Z2y%ohLDlu%Q}vk#GzGJM_`6?vRD zhR`d7F=3K`2vSTL{GeR1>VRb?5ab$QjB>r3Ki#0AHvo;mg}+5VE5CCz6oZTaTr`pT-po9-%IR$H_D zgu1zn^Jn1Du{1}@Q6XdFhjf8^$!{@#e`<<-d>I@11o2FCyj1 zlgi(TlzXDf-KCLopUFjL+xT7ZMm+_+A=#K|W;CTT)&s7Q3G>>BL`eB@x}BK~s@rky zD4mZn*vE^tSzKvQvp5yy8JT1AuE2gj)|@}Im;W}c6E`5pGhl8>yn z87aXO+q~2xwL$lxxZ;^toBw4VNXYTQ&JSi?6HL6`{4S5jvZdJm-$Je>Ay@eib+*%5 z+nlDErm<>8eO(pe2a5`3=cK2>5?^bs)p{h?p4MfWb_a8;EQyc9Ifl&$;Bs*7+lACG zRMn6$YZ3Zx`Dl>V2P26y3YWQaO{Dr`nw3H<1}DWJ{Lix4|Nbh|rmK=tVbf8qG>>W} z)|lLwnoLZ`(=`_x7^yCX8ylW>kN;XVLkD0TMaOu>#6taXU#r@Q(1OSdB4oDK>rebU z>qD3z_KZ-XnK3aKN_25pMBpE-+spKDMmaeca~V2BVEP1Y+9t)kIFW5}Rp#drU&x~F zhb~!m?31*%Mjg9#;ve?Un9grraaz^E~osn?)OeAr<}9OJ)!awAk;jne*x-uLB8S->c0#syF02})*i~w!u>C~ zSif~YRHpF#wgWEKZH?)gm`lFME-k7AZ$%` z!!*N(bucWM%OHx23k_75?er2;&!d$I?erh zQ}(N|N8d(#5%KG1}$EBJ+*<20F7t-;AQ0bLCUhmd8&j=eM-(_f9Hj{Z@JM zq;h^^tK7qKP^-iEH%9AJUw{hPV)?N$Ijqw=62E;Iasf8KJEN1#L;2{{_&=S+8XW@v(BZ^ zD%xy(|Ef&*Oe+yQo`ji<(M&MK;dkJn6Ug{7Syti)PPNIFVnwrLx~H-9#H1~#;)|Xp z@A;>B_r%i>d(Kcq6~prQW@MOzdbZ@NK8689wuFOSkMj?;G|j3L89K3lh{?Sq(-0oZ zEf~mlZVg8Z&MHe+kpPy1*wl8O<8N21(%XNxMT~${?N}ThfEq@3; zc?)OeAC+}J1 zo=~}Rdb|D)%Im?3ZftF;$6I56Y?_abkKgZ|PZ{(h$j~9lpiJXN#0WJ%yd+6|+bfZbB zMb*oaaQs8BJcLImwkQEn3|I}R2%qqRBQyT%)$Tjbt6F>ID?_j5;V7w!wXgDom%W!e zuBbZgyIaqHa^L#kht3;J@?}6g@+{==`Y6*Zgrj|Nim7xX4yT%Ft8l^l z1xBV?K}J5Ru8EMAs_CBR{SFtFr|@qF~OO4TZ?pCS#bQG-b_2!1IS<}pHXcW^L+;V^ z|Ec=Ytok^5w*0;AgFFd04@!JoT;v~)+0^1W&z$;|>o((YmZ4D?>N@0E^uLb%qIkUM zdw9{#FM3g;8Skd6zd*ISV<5tf;%Lenwm2$s1xB310XHH3hC9Q*dF&0BN7}yVC0I}m zzo!@;d3Q|g-|?0Wc+1KE&9}tqWMH^RBC~j0oFy>$2c2m;Yx*~MY&gNZeENQ1Umtck zTH*%>or7s1)4t?QadfTW|0cxKGzoQajyN_GX@eycfJ*fwcPwVs-P|OkoL1J|b8aq~z3udK7Y|+4bk%$JK$9_Vtl!$WXht&P zQcnEw*&P?ps6QCo_pLk5D&4TuzjK{G*8E-lH`bKL_a8WI&N_#^XxX-kK*!cCi z(@mk&y#DozXLfftoLDpKqHnFf^t1+N?wm}Y`zLvG^O6&)TQ;7ubxYfk*PTW6E#=KC zc@DJsN$Hjgo85&KO@#roa08e@g{Qyndziy=yUVyJ+wS(KI8tqmx8f@Q=+P(s>q?J>hTO}u1>@y=4 zd->Y)*Oz>GqV=*ZTTWb@KApYZ<5}K*<(4nVzh2Q?nr^R;veq?kDu1`;*=B40H4aD0 zFN-R_(D=7V`T3fEt^0o;RX(73)+#?YRK5fQ;wshi66$vu%Rj;&%;WHW+IB~kU-+t3 zj@jJSruwb>e;+C@L-|Fj-zqj+hit;6OXus~{j%Tjgx}$aP3oE~Kcwa@wfeRP3 zG#1yNb4APYbJvtuv|kMc=t<{Z=tM2FO^iQb4zL+9uubl_$uz-tQ!YQ}0o=1m_bfO5 zs(Wl-aLU==Ya$P5NdF8ZV>YQMFUX%61Gh1HXC;J(V2l!y z^xc!?u?}j$L_#_`Q;z&u7%E@80!i~w1w1u++6qFhj$=1Nhgw)_?3zApv+X> zDviC9LSygnQR8#!J(Sy1$FOw|$DUOWW%%^>a9mmUP@e0a@VG*Il)FalX;phJG#;N^ z5B^nz{5Eent+R4!zvQf(@If?Ra8?ckbyOZqt~_#S;;TM*R4U8p2jR`N+2Q+`_KY6A zS8466lXkQHbKK7=rDma`` zjMSGr_vUX^3no%uM!qw7!TQeUhQD)|7qHIwOz>{U|ANn|#8_nBORabAoWgv|caAw1 zdB=?svqV}iLrNEwV)rIJ9JG=#6~{pOf^5#XTpV%-*Hx~Y%Ubxo5RhbQwU8gWI`o{| zh7%TW1RB)k^64vpRXOoE`GlSy{}(?FJCqM`r8?XYD}@7RtNYe54)E(OsNE}eyk5N!3a}Hb8jpv zWRmnqg)WP%(^klx?=sh%OyL1-6-rB0HC;(|CWgT2g*ZM<+XZQknR%f+VUF9p_T-#x zi`H*CVHwhLJ2xD8^tRZd^!>J{pEOUNkyctfbI$Cv?9{l!ubb}=!s(Wf?frFpQ+oEQ z+Q#$d&Pp}gxJv50;j^>i^X64#&n|Jt#@ODqwPY+SE?$mfw3ui0Zsl3^8>?)MO&L{{ zI0mJ@a#hu;#bt9!3iD^q04MoPf5d)jD8?FXT{6-yAvGJ^fgqLxdoqx^8N9=zWf(@u z0Y#N9IoFA;ol$&6#vng_tyG2im3WLsVFryHoD5cHWE@$2 zO>|`rcI;S{VQ!C)bQ9unN`+h!CiAcQ;tDbUaX)oYbTf~t*%pZd{QGK4oYYR%*3>dx zv*1d_ij)m0TEfJ`AaU90Wx@9ZoA8rDV1OtbDq;Gu1M-p{#oAVqC!LL?ebLHWYmZ`Z zD&tt8z^o3xs=Xo1ymrprLF2wS)m((myb?2rYeXiVs3HCQz zk3M4#GWYcHj~st<{S}?$B*JxqCuBGA46;tmxvN5R?mvSZQ93#_yHg>HmqHd7nZMwE zd#pw=Ln%T(d|E=l2r4p*v|E(CAK;ilv=7z}t^6MN>R8m|=&@EaagD?|5X!Mwe25x6 zVNPvA1+iuh+(b4=?O1L%{j!>jSj3Hng?pGmmmIsESOae$a~`8<6MR`WwG#V8E|5sG zBGq9nHPpLMWHdwMR(_Q#m`lju({KQ?`{2TGpV(3g>~&T>a0A{rTGAF115Ob6C)Wy&^G( zdSR<^-zZ)Hjfj6NF((I9)cmbfUEGkYla;0%X@;bN;WWE;7%!m%&1`GJ?6M}Xb>!so zi9^heI_T`U{ae!J7p7Y?yfgZQvk)uQo;k;?Kli$wkyFizjym{k<4#|E-rVvmP5q8- zQ%*fIb)L^&_z_9?BFe;SLGI#kCxLkIFQ z3x@XhAuoN#w{aeA61Sd3b|_}WVc_CZFj1xr@(==$0o#*uQbylnot+%I$I41s6jgWIU$`pPn1@80_?Tu9mW-Sn(kbq0DKUw12Rbo^ol1_e9$(s1G%*$H4st?5#v&Pm{|V4<|r)wKy#?0a?!^>S^Ox zT?nTWJ^Dwqoj>wCl&BwN$;+rgs+p9i8m*09^X=Bmn*s+I_6$}txdX`UUO(%G4fm}& zn0agKeOrEL`*n8Q3fs4jys-Anytp+-;%pBf=!W*~sW8e{YVCb73OMIkaUzyqiasaH zFLfaZIC;*qVZQv>{TJr}-|#|LyhBDv4jyfq?oou_MLmh;NBwI`J(P0{3R&_6 z^VKQW0u&?PdWTf*7pCpcJ~tl ztImG(^Zn~CYu}tR`|Psq{hN0^Jh%oY%WU5D&_Ht}HuO*3m$csc|BU>TS@p&x#jDT2 zezhYvpL<{Liqjqn-qe1uclkFSJOWbKjfLYMJKw^53){!oYJSi(yLmP3pVeENw>HQI zTC}jZ&{}t<4HO^t`cDg;b(ra2Tf9jH+T{@pMHz_4?LHVg?b~Rz8bmc3TwOrgXck9(px3_<naNDis( zIIFkudp$*s=?TYK*+Owvs5=QEJNKwfSf$c@gIFz;!}_srQ=4{5OkHSPJ9)kdKkH6G z{noQdX7sa9pxk=)565~|eX^cSnDi|BWIg-3F*f#M2k$1}S z3Ozir0lLC^fU*`oC~)_r*YQz|p~$OP4>J?ghMvN?&d4N>@R;z^jFLt`o7y_mXP-u8`Wex~h;0FM;i|Vg)DK2PUAEkA3--Yy@&9P`#so^jSZt>3%d_ z?L!$4heWMtAI~vCxz#?NDv*oQJG4Ks;QVjJr8rObrVO}e#C`L_o1NFixGqacxy%(4 z{7hphltTy%c)naWV4}q^96>ycq0FnW@!Ua$z#^GJs%sa}n%FGtP|U zJw!%Qt0~ZN$ynCPZRlnu>B=`CRsHaTBG?gg-ZVFb)NG}00M8&RxOEB!a!8xq4JTC1 zwAp&>{$(Xq1*wjU-Nh@-$^i$F*+LF==7G`9W=HpOF>(owXZRB5NJj)Xc-DtV-PmXrmTIau` z{#*mOlX9|{hXxsLIpC3z#(hu#1QVsKX5rsPC_U(;1LDYkO; ziLF~8taP*m8y#8)!20~0Y3`V=msX5wly@5rzVwIzY;Fo$y_pM}icUPrDU#n*TaJ_& z5hu0!cedj`+dn#ovHSlu=48kED^9P#DS+bJDb=XzsWQ28jQ>kavcogEH=+{WS(Wo&+k^aw}|(Un8GT^Y@WY$h>acNXSav{G4yLatkHJA-9lH45iNC zcOU;`{Qo$vMUJ67vruzxo-sQ!BRv)09-acHHRsO3r@|gztpDX8dyHlNVK#H&7z-bEdx+_wa$xJRQ=rsT?2kei%zr@25~Nx9T^Ly$kw&Ihw*|A+S}70QQ?v zEQBBA`#3Wk9iDh?n|5I*t zsq`?vGqvQ{grCy7s4oKAjlYg>^0~fAbo-9+U5?Sdr>8c?{O;6}V}8J6x6U+f2;OM_ z%=uHS6s>GZD1z4^V^%Wq=sK{_3Jru)bs?gsA)sD{DOsAp(;EAU7Uw`EjU)yoVsXM#(dxIs^GQud$Y@+ZJ58BF(bIZ9`A{rn_)V<8R@|lhd+zM z|G{tZ1jhR^e811}{Q~Cinq~xQs-eL#$2&JOTHjHtHvEpYVJgne!wIx=@@?>xV%6H= zh9!o87W9Z8i#|+L%Q=`|*X5ewk`IVqciI}5VZZW=tFgRD{N^>&wLvxDeR#F?^{3Wm z&8Fmp71KU1o?tVkRATKWM{VpLcKTo^IOadZ0$BX9F3ca%1hI@DRtBLL;*?Os=r?Ap zAbk2$>x92(vsGKHf!f?LA@WAmhLnhQ=tX24#C(%!FulfDJJqp!!D%I-wVKL3>u70Y zHEmM0NK}C}!)e$o-w7_;XrAk`FPztS)#^Np-Hrzj zuFfsaWAJSI#^BgdtXGneI49xAg|#_l<}6pRjO=H=YWKv&%)#ctgp73CcQjYOZT!)G z$o>+vL7W#A%6Yf$e(rBc0B@12a2pb1V(rE{FG}N(KSAy1pFBH#WK&b&y5nK#@^%B51&zM+Z_JaaU-YK)tx?qAzV8C7v}=V*c5n5>Wm*)87~U+GiI_K6PhRj za>A-8^hm@rh8LHTC;x(tTwxtGo4=^}1(WWv8k~usQfk-i3U=rrt2ajyJ~5MC;L3Vi zsC%JP)_6Q-ccBsSFfx@+5%*k|xwM{-q0g+eBqvkJpLhN7GaW4^Mnd9L#W>ZDfRL9_v+|u+cp( zFBUctyr9Yrm+FoLg-vx^xTh?K$oV5%>dWp#4jODwRLqTdd1_6z*XvH%v$Updc~RBQ zzE${JJd#$pIBU*oe{O2w;_Q;umASTy;pN_1xn+SDkiKd(GSpUCrgq3uol7{btMJ zm8EHUtIs#L#`!)Q@+O*BoOaVWxbZyP*kRqcdSP1r+U}Oct8im;_ogrTUGfik@XdGa z{|LV!Yz12~ZH1$A;17MZ1oyOkkQdSXUAVqvENV`h6LD$+#AD<;gnf(EQu}G}$;BGW znq15u7g;mLK0T&1K=M4xHs@^5y?fApkZg%%SfmgAbG}V08E{)7c#zJ)#);%dp(J9s zb>8@29M3?OEHkfY%2~Fwv0+KQB{z_LI-mMUS_-2@O+)g7UV`<=K5h3yY;bAIikd{y znixb5GP|~y{$k43c+&;(5{um(9G`N#pz#>mG01t3iNxbc_C%sN)*ib~v=P%gW%My? zkJOmv(c%>c_~!p!jUFZ{D~Pm}O-3%erqjMkt@spP9>#}$W2On|Y{&}cj*nxR%Lr2? zX1cd<=N>0lc++`sl|1MRaV7`?M5IRKQAuTKUXC{B)B7ux6}hnrsw)sPy5)+zi+=b* z*U$rX%i|Lg;!-n_2ntlxkmQL344HFYD!hEv+hb z#H={u{7qxOy!5oS2nnzm|7c(1tODO=!_oF1O*3Y9h+>|6FI*O5= zOFr_?NK1f2!$~K&lR1##6tOl!#Kth-4I#hy@SL#=Lj|TZTz=h(qn_0*r~r|jAhPuU zRO3R{fhyp7LIBvrQ|=fz>gVCbaKkXC53?^W!txXE#larf@n?&X^#Dy5{uX{Wj&w@_ zLTym_=uPG(N$Vt9xL2y}IF%I#3Z&thpRPoii3_Uj&&D`h-k2w2eMx7oZeN)6N>a8j z%hR{;oYiL~`J8|9-d6vuy4w;Q8#B|rGreX-g6qfwX7}pgeVLi&rsm+4whh>nc1AGW zeD@5r0J6ck6u!JArVpNZ1FK#20c5zCojY?zyeE>0pfE3u$`IBI(0nwSOH7zGHNh%3 zb;$EY`H>&K7rn%I)2~A{rGujiCx%T9#o~$- z29oW$$}QhJr@r#kkxgg(=+fqS>(6cS2g@>`N`h^^J!Ad1HZ53mQt$QmopSL@S8iB( z(H&>bFfZ}g=VY5dPG0-1ySlc2=j27pE`8$S<9fE$CIpYqPERaKN>2UBj4c;lv*px# z_g~O5fBoJkySkshsbkgyr)JKEd)HVx{)r>oc^6I(X*Pb_l!~2cOZ?51&D7Lp=cM?M z;fs12$4505PmFwsQ^?tgQ*p?zmPEyuqMq){<**59PReUwt=_|?Kk9LC1Nj-u49B5W z(d38Wb8P&|&zbldM!`e{iuQ$p&4FQgtLe{jMYh_}TgGvLArne}PgSJ2Bx>Uwz6rAw z|FC53aa$Ixxu9i%!!hf;JN|87^F>=0+H46YU;XG=ZI|UcW8t4ZqqSst^;~b9FDAYA z{L{D2cFbJ3rgGh$*4j854$Tf^&dW-u>G=L>*^PNW58n65NZCo3Z1fc*fAi;~Cv0lT zUy`01$oSq>sk2h!lRw{A-FbI+>E@=AhFxPPCS@m_)dgSBs}KgyK$h7t)m}L1bQ*q} zS(pd79H-fsrV1Pknv}yCJ|Z_*OLd_eFhg@yEc~#3qu>N@hbv)SAvgJ4#{5SD{h#?f z$@Z%QM=rP9-*kGN-kEXE>pmN|zmgu9ofm+WM(K2I@Gj@&XmgzLuw=ue6EP$k=wC>e zbp+vNoPEKcTGKVu|95TW6?z#lA=paZ<%vLCiUz`5<9 z!y3yf^T2VivBIg`A@L2H9z$2LE)Y)TF1Cr}axbWMUhaGHr3YRNI)C=#m!9xBuiO9W zt*)K?Z$JBrvxyHlvk)VginT3e&!e2z$`<=LJ0bji*f#tp^8x~nq7bRn!(RXF(0z0v z;MXF2(C`CvYc-XGe#aZRKE#1D-2s2rDkh_U5!nC)e?Oavf+%kXhCfccPXm3VlG?hiI&lB2d^$8Xq|I`i5#xwSj<@ZI$w@iSc0gUcuT-M6^VeQV7ler>{sLV((49gaIK~Sq4a*{r z;mzS#VDNhAaTC%Q{|}vk55Rh6G@Xm9{|M5Du7^r=DohbXNPO7NfvAm?Z^;^p-j&CYQ$#E!YT~SiKv**Y)dC=T5 zlM5I4^NN=)&VsdO+g!A4aTe{dygL3=G~XZ0t64X9?z)=1IqS||y6MVumgEKa?*RUN z4*y-hKc{kKNy$ooZeINse{pSb3jdY_ic@m^EU$#j8{ZSW#r~4>fRSg6HhHqKb2ly) z2U$e?& zdqrld-IJW1Ue&T>L6T$nj~-1(Ix#uryxpIFcIN(*OT9_!T@ms}Y74gc~a;kU}uPTpZZ z(VIFeu4B={{5kmvX&Le7R4hi$jo^LWw3%_c%1ZO*ir zsaKn3gm{mN7tQyt>bvTr#NewJnO7tQ zE64iAf`3jjH(nInZ2!(DpA7tb;PByrpOZE=W4p1@{-)z9?0BDLENF6Z2N10KrkvCi zN)AN4g9E4skdAmYT8vIR_+pcasuTZVxx%SMu{5{Ikn{)a6^XVP8Nt%@^305~RP*LE zpP6`MUW47~JN&sl-R!wIDKq|mdlFpEgt%AZX3*HW*xVEJjIcfDpgsS~u^)`6_K+9V zo|)-h@E{X1@c#>}W?=;5A69#c(D4*%aMeZl4^HhOEh1J{oA&b#f9|t88x9|0v&`45 zW(7}WvuwZKIAZ>1aAcY$1&7$4?~U(s%yfPX9U|3O)TGVwY)`%~!Q;ZNd(eZyPi)1s zG^&U-3y@L5q;iRw7xT9Jd**PjITGyY{n$*6Npw0BV$GSscalBM#2DL?_R7QmeE4O% z|H$L%#mULV>9&=&RSODIiVk3$n&SDdpKNR)MNak z(1gbYAIy$G`wKs|eH@H;|Ke}3DNUnc++}~n`8Z~y+nYi$g84iXDFMD65MCNT&pBC= z0cJ-qo*mu>lRIQ64H(O<-2qSy3ZYHo$SOI2=r5fpvNl{%r23~+0{00&B%cfm*ywsS z?Q?L^6#UxHLLK0CL!BLz=$oJt&B5Q-DVkIWBv}x|(0qhE&umT$GkM!K% z9_%}ldD!-yHpe~cj$3o_UG2#wB?VreJ`4c10ww)*18F>c0CRxya(vTrK&f~NzFLW%q z1ZROFz!2TQnxMFZeSl7bOvE@&0{%8?_S%-CT>z{-RAR_IR{VvPc)waDo~@sI7QM^_Zp zKGcD8dsqi|)ih3D2aF2C?J&NiE-Upm)yx%NTn$8B$n}BFh1*xm?}ctk&YE2MY+4(t z27Ao(l|wxWw`QUmL+lKxh@Bj6te}ytCsn2}pioqMRO&&?7_TF*FN8ATN<`jv^P;nq zSMVEiV)nZ|%g($0)YX?)Ui9OG|5$qR{M}b4y8fJKKlSj_7ANPmRBySqYpM6M?ao4n z=bDk~OU1{lgQI5o_>Ukvmrs$Mi$I)2ib>o@l`u)}>Mz(F23hJv>&)^?cC~B@zGcGo zWg1&u9$PH-;l>)-O&ICO+>IkY5LL^g>hLpyVf!y(N0T`r#cRbrel$SMb##*wD@GI0jvO^Bu-s$!uxTb8A-0c z{xaVC&#_)wuWZkm_(m_feh-7Pu_=Z=U#P&e4oFuY^jHO2M+aZSb2LrxHA$#12)T>b zR@hz~h?^DDePwKBeE)wQaCuzr_I9@mjvBsm5bu0b?_7x$5zcCHP6&5dC46r(tT9-< zFdM=>Le%066!OJ*yB`A7+AD~#YQEXcQ(@s+ho)0ud-FdJJR5nr>-Vp|YP}opz0dhK z+vBd+!AB=Eei~`1Juat_Vx}m5ns5FeiIQfE=*vV%C_H40-eZLHP2cRXcbewD4ad8> z+zZy6;rv@$TS}TM-g#O>y?;ynZ1i{@_&mp*g7$$oCeF8`T&1NkNmAISVOm=b0;6Zm zT#%QNlDA;yECfosuE)PpQ~9q2T*h7iYTJz8I}h1TaF^mexzw7X;-j1La0C26mfvwY zKY`TTDQoM|@z1}{@vkVRO-dWIc!fV_TR8sNwWnlRSw=?LvXbH^E~hsY&kqFVhvT1b zz)s{BT)%*wc0c2TXU<6WVecUq7hs*qAEx6ap$h!}EBcq8!TQ2eqJM3fIdh$D&YXn} zMYC(l7pCQuI8Sxv;$L|+<)yCPc}4S9S7u|arnG2Yb7gkMY)DLgo0l-Yzu|fxGBd?E z`xx=R;?)1KC|?aAOIVl{^t6W#4W09ggv`{<*ZWFx&3iue<)rR>Jaul4>-`rK;vY(# z`J&eg1WURdedfo`XRw3@PBM*n4^|buk|3O?6+OuiBK*z;&uGD~k!zjNq?e|czxKts z)8`k)=gh3%>3k;9 zb+XC}g#n`q<+TP5V8LFdQedM>R*c_{>s7+l!e-$n;TGX8)!8ZR5%vlDRr7#wP&gzU z7LEw_3UAgMZ&7Wx3U3qMF1$l{r|>S}0pZ=kdxZB24+leE3EvgnJ`jGWl8O|{<{r`9W02+^(cEK@<{pDI_ZXzP#~{r;25IgwNOO-tntKe=++&dD9)mRZ z7^Jz!Ak94nY3?ydbB{rqdkoUtW02+^gEaRTq`Ai+%{>Nb?lDMnk3pJy4AR_VkmeqP zH1`;!xyK;QJqBs+F-UWdL7ICE(%fT^<{pDI_ZXzP#~{r;25IgwNOO-tntKe=++&dD z9)mRZ7^Jz!Ak94nY3?ydbB{rqdkoUtW02+^gEWsb3dVl}EEdiamJ9vD72|K<*HyyR z!e-$n;TB=L?(7oo6OIbUgx3nM6J9U8QFx1v4)lrxz2ZQxIM6E&^oj$$;y|xB&?^q~iUYmkK(9E^D-QIE z1HIxvuQ<>v4)lrxz2ZQxIM6E&^oj$$;y|xB&?^q~iUYmkK(9E^D-QIE1HIxvuQ<>v z4)lrxz2ZQxIM6E&^oj$$;y|xB&?^q~iUYmkK(9E^D-QIE1HIxvuQ<>v4oozh<9iXX z;t_gQ%U*8nI zC45_Nc}Mu3@O|Nj`t@VsC%`1o=O8e4{AHj=*Ir@bIM2!T36u3}p|E;)8R}pm0byEF2N;72d4cp4Ihhy8e}F{!uNFjzVHK;d?fr7_4vdCKJkFhAP@L3`s#q>0iSrlhxjC3lLveTdBBH^r%N0yKWeBuG0c)*9#toamqz=x5@`pE-6gFN6f$OAr%N|ulZd>EU&CJ*=w z@_^4E5BLo7fX^Tg_zd!Z&ma%@4Dx`_AP@Kq@_^4E5BLo7fX^Tg_%KF@S9`G6D z0iQu0@EPO*AI1xRB@g&8QtA+$=ESU*3?8@==+U)Tn22wk3|b8XeY#H8J=x>;pd?3_ z4_TEgIiCy(#u_N?lR-~n>G(N7%KT(dmAGR3yTDb#)xu`sM%C6L+@zAty56Get-3y8 z{3<+qlCHOnzmDte!dBr)pbOR9lbk*`tzP z-P5O%e)VWTI4B$v4hu(wdxe~vlJOmhoSTyI9f_QqlJOmhoSTv%T}gpkg|`WB7v3Sf zQ+Su~fbeeNJ;Hm12Zav^f1>t3sOyJ>4+|d=J}P`n__*$TLinWcDdE$i-ZR2y)tBdV zKj*S!NMpA4Md8c3pEFuABs0r@p)c}F;lGIf|0?{g@J-S1E#cdu>N~=B#Y^w$`hDRC zD)~@%ex&PUU@Y@G9xW-rh~{;&$_s_n<2R!uFn$PFH~s{$ ze*AvmlJUoZjVf=_v!@6puaM7URYvub`;*RSdNS9;5@g})KL ztvcTkz9)QN_$i*k>d*LEphxHxCP8WyVobdXEEdiamKqHxDc7}MSdH1I(5OK#3en#y zfwho9$}yGP2pR@4}~8KKLM7A-%7-9CE~Xd@mq=b ztwj7*0*UuJ?j*mJh~E$?0DdbGzmRgyjaJW6te`B)vBi{A0h((zj03e-Foa+|nX*eu+r`&)#YRI*vuTXelu z*Cz=t685Xk0pXxbhO`bf~sns;yJlrSfi-_o$>-*L}L)r(Z{fW5R2N*9or|-Y9%p zZ+S-eyh;uU-&8$s3Ex)D?+D)$zAyYxzkV$I1XzYVDC0nn&?}@aR|X2)4lEYV6P648 z!s_uF{2G9iD1(GN8(0r5t_)+7CEM_g%0QEQfYj&9phd8@4%JUxu1vaI8FV?8cdPsY z)v#Mgy{^pIqw8M%O6{%;+8ys76^;q76<#O2UU;MMWL5KTiy}ACwyN>?XFDPU755yWaY%z$8p&h`{j~jI4T>wR4zGIE;&{%IaV$?RxUYK zE;&{%IaV$?RxUYKE;&{%IaV$?RxUYKE;&{%IaV$?RxUYKE;&{%IaV$?RxUYKE;&{% zIaV$?RxUYKE;&{%IaV$?RxUYKE;&{%IaV$?R)HQ}i0IbD@#R3DFj*yq!cu(M3P`O# z0apoE3!8}8C>#kot<2|vaCetmJjzPMjs+^;Y0*BAHe zi~IG({rcj5eR03OxL;q~uP^S`7x(Ln`}M{B`r>|lalgK}Utip>FYebD_v?%M^~L@A z;(mQ`zrMI%U)--R?$;Oh>x=vK#r^u?etmJjzPMjs+^;WQDJ!E=_C=-ai%MA*m9i`< z(U(IA5Ud&hHIP<7B}OZent7!(^Ga#vmD0>BrI}YsGq03pUTNHM*CUf z7p@pD!}TiRYGJc*?f6QRZ&aNv!c8jQtm`eh-m2>p!1L9xkJyH7<0k^QkAEAuV|+WX zRqfn4elo7x^~PN)=@fRUGUn1x0YJ6WJ=j&>GUn1x0YS5W|85NER zuN7V=yk2;t@D{cCR^e^J+l6-s?-br8JRrPVc#rU2;X&a8!k?(k59<0M;lsj5gpUdz z6F#mxpAbGNd`kGVX!VScvwSr?QT!IqtFMUs1^~MDt$?|3$R@SK)7k zZ;FO*38@=Y!)HbOP)H4-8nT-BiICbt4S4J~Kxzv$;2a{gg&KSXBDIAYd<7!4g&KSX zBDIAYj4vX!g@Ek(0BXAu*R<;c@IDf0*9T%&<6fW zyFQ?C7m!^a(C7jMVu`T+bbyoYvu zz@S|pfY*g3wCe+)Cy{o20Q4l%t`C5oMB4QMNsoY}M?lgeAn6g1^ax0L1SCBIvg-q~ z>jUtbvUjxW1Mr#>Y1aqfH6_xn55Q|mq+K6?*OW-RJ^-&Nk#>CmzEfV)t`ER>N~B#M zfbWz@yFOsht`8Wr>jMVu`hY>ZJ^)VjSdu0|xE-faF_1 zc6~s0eZZhyA24Xw2MpTv0fTmZ0A422kam5*pj{s@Xx9hel_g)%t`8Wr>jU6+me8&b zz(dPx+Vuf&JCSyMEx5E6|BFS4Bu7}Nl2T}rwcx$$ zfUAV7h0VgX5*`rVExbo~ukfJo0pU;7k_UDD zknmyQBf>|8j|m^wolgj#6h0+L5div{UM2r_{+#sgs>j zCp)DM5`g#6PN{M(wZv{ULZeu=bG>M(wZ zv{ULZUY-TgPN~BfVF~S&I&k}AK-wvF;C9wbJEabMPNbbu2M*`2v{UN9+mC@qoRI1D z;OcImN7r6q;yAnmpvGFDPuI!1Cwu$~l;jBWp`F)*R*wS<^=q-N=LxAf)PrvP)h}Fu zkyQ`=C$1JY3)f;ss|WwH<`&^5m2cMd7F}=E^$EH@N!L5^9qU1D*59Ev?^0_!gW6&@5mApD8i|DdiP5Q;(ZwcQPCEpRgE1r2z z*Y68IP|1h7^CMkV}jZqTgVpjo>?vvz}K?FP--4VtwZFl+N!t`s+5 z)+TbLxB;^^kt@Xwn6-&qDQ>{5P2@^(17>X^SBe`jYZJLr+<^I-$d%#-%-2M&6gObL zCUT{?L9=iJW?^1)rMN-!Zv*DvH?ZPMpKzmm!i})ncuk*hBdGK$kUrr?P>D#Na3g5N zYx;y6VF&dB=@V{*Wp^czKH)}Kc4q_W6K;fzeGy2Xa3f^wAA$4`p#CTA9B`D16CSC8q9JCVFF3USq-Yx7EzAb!5_@3~6 zV6*CMR-MhNvsraEtIlTFUx#oH>ugq?&7dToVx7%sIgxcXqvb@_xdt=HN}xyR6(+)( zTZ37H*rAec;RVL&DA_ICBkWcA+roE*@9L@dbp5{Y1C@LPT!;2Q5A+DV!fj~nI&j6W zfgLL87G5xZ14?!a_XvAc{^<0qxcYTm2kDNS-45KMR<$wR^e^J z+l6-s?-br8JRrPVc#rU2;X&a8!Uu&92_F_dB79W%nD9B_3&IzLuK+iSCL2YQjrf|+ zql7fsD4J{(O*Y~?vYa&8D4J}@*TUzv%7QLlKZ)wq6TJ)9{y=9a5bCdXUllXI!_;Zu^ zbCdXUllXI!_;Zu^bCdXUllXI!_;Zu^bCdXUv+CTeIybA%&8l;=>fEe4H>=Lgs&ljI z+^jk`tIo};bF=E)tU9+s=RX_guls~6AP2UBTZpTL&B9H>Ey7!bw+e3)-Y&dDc&G3# z;Q`^@!h3}G3J(e&5I!h;Ncgbu5#gi4$Ar%bUl6`1d`0-K+Wdj=Bj7gZey;)(G5>Bu zkBG@CDHN_4e+wn6gsX+k!cD?0!hYR3ARH7935SIv!o9*+fa3#7O zl9|Yr=yvcDkt@;d;3XngqT9hsM6N`)%b(vae}23C`R(%Ox67a3E`NSIXbX09Ozhk=p^TATlDi16)C5L~aMTg2;&64sZpL5xE`U3L+zNJHQo0 zM&x#YD~OE9?Er7^ni07j;0humayt|c*#YgBePKjyhvFeS6c5<}jh7{i$nAjM%WFpD zc7Wzvk-v}ee!D>Vmw}A;+XXHnGTv_&=uc$4-!9Of$aue9;HY6B_uB=I zVmagec7cnCjQ86G3iDaU`|SdSiH!H#1qu@x@3#vSCNkb{7y8R<#{2C87qMo>`|Sc3 z5gG5d3tU8Gyx%VH60aHWw+p>y3FG~Cp^q;co$6z!`q-&HcB+q^>SL$+*r`5ts*j!O zW2gGqsXlh9kDcmcr~25bK6a{)o$6z!`q-&HcB+q^>SL$+*r`5ts*j!OW2gGqsXlh9 zkDcmcr~25bK6a{)o$6z!`q-&HcB+q^>SL$+*d>|JC7IAAnb0Mf&?TABC7IAAnb0Mf z&?TABC7IAAnb0Mf&?TABC7IAAnb0Mf&?TABC7IAAnb0Mf&?TABC7IAAnb0Mf&?TAB zC7IAAnb0Mf&?TABC7IAAnb0Mf&?TABC7IAAnb0Mf&@GvO=vr`Zw`2n19Cb~Z&@GwJ zEtx?7>>`vwHQ%*c@7j$o!h86x-S{FzzH2wW2$ApF zjW5Ed_^#cc1F!k69?5|oyzymRQ`YrJ4)jP4^hgf$NDlN!4)jP4^hgf$NDlN!4)jP4 z^hgf$NDlN!4)jP4^q`%rpR%q;a-c_Ypht3`M{=M?a-c_Ypht3`M{=M?a-c_Ypht3` zM{=M?a-c_Ypht3`M{=M?a-c_Ypht3GkLbBa^xPwQ?h!rrh@M=ln1j_X(sPgKxkvQe zBYN%;J@<&7dqmGYqURpbbC2k`NA%nydiLU7Tj5*h*zDEV?A6%p#oJlV`MOtQldB_( zaLutvUsM&4^L4MrX0OI(uf}Gt#%8a^X0OI(uf}Gt#%8a^W-nUKnmJ$hYHapuZ1!qw z_G)bQYHapuZ1!qw_G)bQYHapuZ1!qw_G)bQYHapuZ1!qw_G)bQYHapuZ1!qw_G)bQ zYHapuZ1!qw_G)bQYHapuZ1!qw_G)bQYHapuZ1!qw_G)bQYHapuZ1!qw_G)bQYHapu zZ1!qw_G)bQiHG~d!+ql6KJjp$c(_kI+$SFH6A$-^hx^3Ced6Ih@o=AbxKBLXCm!w- z5BG_O`^3Y2;^98=aG!X%PdwZw9_|wl_lbx5#KV2!;Xd(jpLn=WJlrQ9?h_C9iHG~d z!+ql6KJjp$c(_kI+>bu4HTuyzBE6mc@^<#i+u1K~XTQ9i{otnt{7P?Uzr3CO=r8y~ z-p+pX`bu2W+u4s^pADq9vtQoMetA3lgy_2SnQe(RM(z z9T05?MB4$;c0jZp5N!uU+X2ybK(rkYZ3jf#0nv6qv>gy_2SnQe(RM(z9T05?MB4$; zc0jZp5N!uU+X2ybK(rkYZ3jf#0nv6qv>gy_2SnQe(RM(z9T05?MB4$;c0jZp5N!uU z+dg;}2SwXK(RNU@9TaT`McYBqc2Kk(6m17Z+dg;}2SwXK(RNU@9TaT`McYBqc2Kk(6m17Z+dg;}2SwXK(RNU@9TaT`McYBqc2Kk(6m17Z+dg;}2SwXK z(RNU@9TIJaMB5?Jc1W}x5^aY>+ab|*NVFXiZHGkLA<=e7v>g&{heX>U(RN6*9TIJa zMB5?Jc1W}x5^aY>+ab|*NVFXiZHGkLA<=e7v>g&{heX>U(RN6*9TIJaMB5?Jc1W}x z5^aY>+ab|*NVFXiZHGkLA<=e7v>g&{heX>U(RN6*9TIJaMB5?Jc1W}x5^aY>+ab|* zNVFXiZHGkLVbOM2v>g_0v6l<7WmvQw7Hx+`+hNgmShO7$ZHGnMVbK;59FVTVqV2F~ zJ1p7`i?+j}?XYM&EZPo>w!@+=tVX?&t4qV8?XYM&EZPo>w!@w!@j)=A+qV0%iJ0jYS zh_)l5?TBbQBHE6Kwj-kLh-f<^+Kz~}Bckny_;y6J9T9CuMB5S3c0{xt5p73A+Y!-r zM6?|dZAV1g5z%%;v>g#`M?~8Z(RM_%9T9CuMB5S3c0{xt5p73A+Y!-rM6?|dZAV1g z5z%%;v>g#`M?~8Z(RM_%9T9E!fs&UR`_MZgcXRARFNl4@H-&Erxtn7jo+WZO$9{a5 zp8@GZ+mElqYx>ak;~VjsKD7PNporYfu^;q51mtdx{h<49d{VTnNyE*pDUfvJ- zuul5W_Jck|`q1`6cY56zRli2nuTk}DRQ(!Nzed%sQT1z7{TfxjM%AxT^=nl98dbkW z)vrDzsA(BG4*Rq{Tfrh z#?-Gd^=nN18dJZ<)UPr1YfSwbQ@_U4uQBy&O#K>DzsA(BG4*Rq{Tfrh#?-Gd^=nN1 z8dJZ<)UW^B-r0c3Rh{?!4(J1f5Ff@EFov-p7>tmFkTHSO2^J=gRTW$#F_ zr?cri*?!pl|Nb+JBryKqA&F#3diLzyJ9plD-uJxcJ@=gR-v7VPdi7baKI_$Iz51+I zpY`gqUVYZ9&wBM)uRiP5XTAEYSD*FjvtE7HtIvA%S+73p)n~o>tXH4)>a$*b)~nBY z^;xez>(yty`m9%<_3E=;eb%ebdi7baKI_$Iz51<}m;~gL{no4Bdi7f`F{k=G{j1-4 z^;@rg>(y_)`mI;L_3F1?{no4Bdi7hce(Tk5z51owr^8n9ji)@#6e4Op)M z>os7#2CUbB^%}5V1J-N6dJR~w0qZqjy#}n;fb|-%UIW%^zuL0{dV7&&c*MRjJ zuwDb!YruL9Sg!%=^{O<=2d}FBly|x$$M{vwV6rYzjOxIr-^(b2nq%_!GRl|Uu9Ez{ zj8^@rGx>WNjhK|=?`5=N%6anlGFmO8B!4fX@sw-G-^*yNg=@&)%gBakLH=GwHl!qf zFC!aLlE0Uc4Jpar%jo%mlKj1lo*yX5-^=Lvfs*{aj8WNtN*&_cB@);h6lrjGkL4$=@4v6dIH_zM*5D zUIrb71|5aOFXQt>*Fi_2K}VrMN1;JSp+QHXK}VrMN1;JSp+QHXK}VrMN1;KrHF9`* z8B|+S^7JyOwx;CiWl(KR$y6+w z>Girwaj+cI}s z=5EW}ZJE0*bGK#gw#?m@x!W>#Tjp-d+-;e=Epx~+hb(i*GKVa4$TEj4bI3A>EOW>* zhb(i*GKVa4$TEj4bB|^2vCKV|xyLg1Smqwf++&%0EOU=#?y<~0mbu3=_gLm0%M^~3 zEFkn9m)LW!W$v}iy_UJxGPNJ*Yp~~D%iL?3do6RXW$v}ieUdpE?2}AN@}Tx<_VK1l za>MpX4rj=N+Nb%&uc#z9Y@cQpl;lC}(_Db-$%ERbyKsg)sC~K%C3#T$UGx2}`F>kt zziYnVHQ(==?|04jyXO0Cjs33qe%E}zYrfw#-|w0qu*?INdB8FcSmpuCJYbmzEc1Y6 z9_?jJY<=NEc1|M9VmlwPosZbgM{MUKw(}9&`H1a&#CASnJ0G!~kJ!#fZ0D@)oVA^^wsY2Y z&f3md+c|4HXKm-K?VPopv$k{AcFx+)S=%{lJ7;a@tnHk&owK%c)^^U?&RN?zYddFc z=dA6VwVkuJbJljw+RjLYc)Bq)#SWZlk-|lP9r$A zW#1v^wVIsQYI0ty$!SdIQ}!KlUaQH;ySO|14mo)jCHoFJuhrzdR+IBu&8XLEM!i-u z>b06tuhoott!7j*w*{k;Ny%ExsMl&ny;gI~{(sE=f6V@W%>IAO{(sE=f6V@W%>IAO z{(sE=f6V@W%>IAO{(sE=e_S#X!Ewo?yxQfpdIRpb+U^;Z4=a!5xZCcy+Kw}SRU_kZ zwc58-{+y57{jCmvtIK85XVTyOMP1Y5@&%v&1s}iUPk+&8u=8=*8JSs^*!H;WKphG$ zCw+aTq~xurF|`pTZ$*u%jVO65YD{fJ$y-rlvI8Y=MU6=# zzRO!tW2!ABZ$*u%o z8jib$&yM}q!Fz*`XUBkR1$0*5oJgsO$Nyg)8MHNai9#3mr&<>Dh(8DUpcs#8c zwBof!2hNl6cv=yUl8ndG>dSnWETGfs%amk1o>pI`B;)b4`Z6UMkEhiyI40xqv}Vmn zCgbt6X3dmjJf2qkq$K0$J6rU6G6c`7OZ2zIu@*B!8#VKW5GHW ztYg7C7OZ2zIu@*B!8#VKW5GHWtYg7C7OZ2zIu@*B!8#VKW5GHWtYg7C7OZ2zIu@*B z!8#VKW5GHWtYg7C7OZ2zIu@*B!8#VK#6D)L1}Cw(z7PKPB11lj=LjBwKh=K1oTo@T9axGTBFy(wdTN z;Yn#tNw)B$w5B9mcv2AQ-W4HrT9z zZS%5iUbfB4wt3k$FWcteL9Eo3*t~3;mu>U1ZCmu>U1ZC!<3Po6pyD`CaU7^P4pbZmDvkpc$AOCDK*e#O;y6%o9GLbq&$K-AL@@1V zo@qbxOv_83(HWlWrsbb}%5&YcpLwSJ%rot0o@qbxO#7K<+Rr@Ge&(6>Gtac2d8Xxo ze3$3CX?Y+e&vn!CKuVtLrsaW@Jl9RjA2{Z@Zraa0(|+ce_A}44pLwSJ%rh-dpoTox zP5YT=T3*2!p6jON11Ey2eV}R|sM-gr_JOK>plTne+6SukfvSC=Y9FZD2deggs(qkp zAE?>~s`i1ZeV}R|sM-gr_JOK>plTne+6SukfvSC=Y9FZD2deggs(qkpAE?>~s`i1Z zeV}R|sM-gr_JOK>plTne+6SukfvSC=Y9FZD2deggs(qkpAE?>~s`i1JeV}F^sM!Z< z_JNvxpk^Pa*#~O&ftr1wW*?~82Ws|#nth;VAE?;}YW9JeeV}F^sM!Z<_JNvxpk^Pa z*#~O&ftr1wW*?~82Ws|#nth;VAE?;}YW9JeeV}F^sM!Z<_JNvxpk^PKv5qs=amG5% zSjQRbIAa}WtmBMzoUx8G)^Wx<&REA8>o{W_XRPClb)2z|GuCm&I?h9cQfL zjCGu`jx*MA#yZYe#~JH5V;yI#KKKKKKKKKKKKKKK^V8{hn33P=YZs zE1%>%tKYL;{hn2O@hKQ1v+`9wW%YYj@rUcd7@1Z4p#)=OR`G`tjFDNzA4)JrX1)47 z>(%dBuYS+Ulc_DM-?NHKl%p=e7@3uC^C_#}v$8EEtKYNoYD!kWXXVe7V2sSl!jxc) z@b9)rC%ixY_sc39$6{^{ez|#knOK`&ZXRDQRON3pkLQUKU%0k;d_}Nw;qK<~mBDQb|DbuiX#U}af6_d@Dp+~->&@fELF?70 zn#Wg1zOv-8=JAqX^)=sI)7AY#GO?*G9lg8dp6IHT_piK9#r@F@FGSNXe6FiK*4Y|e z*Rwg6dNKOgi-~yai;0%#)xf5}u8XC+mM)L3OSHs0 zQ~IcdNm{x3k?0rWsdPNqd9O4`q}rlgx^=3nC)pC`EB7^I_}ht8 zG!{)KW3BOySaNf;Yva4By?m}(Z@0(W%yUL;Dkdu=6Nv1NZ;Z9XqZ?x#iS`$wt?^W1 zQ>P4+=xkW0r=vrL!ulBgi?L)Xw)MUZF>KhpHu?6uM(=KzJK7P~ZK6w`vW%sOY$$!t za@k6%CE}^5?A8)X#y9q~>+Tz3YE@Mx)ulG;?n=iy(}@@#v~+cD#QcfQP0{XTqAQt5 z>&p*E6X|HGt*fWKHJXaYJEG6^B+_bZ8LczbEvcR9rO~ZzYTF*_tNU;0YL)lIpHD|O z^rWL({ms@ys=Gb*LgS{AyeZKcYsc`3bn4u1x5tv3WQ?{uQ2N7t+FTN0_nhW7ZJMSHrtETP)ep)%ijcKaaP^H({CO(MM%C-8h9;rxP8LLN!zE@%Uz)Y_@89SJ&of zM{Kj~8{d*>l^y&gH8cmYbi-e_#!_=_Xyeex%k%}=D=njLYQwy(T@upSm5y%gYH#n_ zs@kYEdXm^yHi~z)HVl!9cO>phcG0bHjC3r~p0dlTt_|%{4R!59%DubwXCMa_MB3K1-#OJuT^;q+B7{g&NW`9ovv-Pox`G!G*heQl0TsYI$2a-Tm;2 z6^i0c!6x9H4P{Z31MH2A#E zr}UEyw)l!@@VF#(`p!>CLWj;qwbQUp$7y}CR0#ISM^0SV@m=oN<2xgV`n365PYEAu zo&J7OI&tmUvd@*UOrJfiYm$e(q(@LRzKceq`Q8i9U9`)`F?rpX~Lg%n7E!nV8m#mYtz2@q1-#PV| zI~$d5DSb1hpR~RalV#&-ftZdrTjEB4@}sr(@^@J42l>a@)_kY;e6QN3RL6!d;JI_P zME{NY1W$?js6(H&+h@^?w%(-gH9RO`4>{vIJ<=TS!=vVWf6n8-Xq#}?t?CaO^n1<^ z&y~w}zrQy0ud}^7>U%b{!SA0^+s)NusiZY(+30PJmcGY50>5gs8a<6xq_;$+JFSNu zdZc+nck0`&pU$RbQo6Fy&$@MlKhggZzN+z!7M<^uj5+V87Mmnph!MI@2pKB*26x7* z`75g9Hhso@>7iH%Z;A%b=^R%ydUnIpXua-cUAa5DZgoGV-}d<1NNMQ5L2_H0u_qop z@4Ic#Ror#!S@&$!^~gnABGnm98+G1fd01o4wT79g=!>kD#sb)i(d`aNV%iTs)8a{+s+ay@?q7s3e}b2YsR8 zL+HT~b(ynf%HNMWioCP03av-~i7>>P&H662i%W}yBT!>BnA4`wqv!6;sBm_C-6{!u z``mtb#&hO+GPUCljd20lcq(JwocFfsOrs{9I^r(ajy}{S?`YTt8_{M-{crS|h97a< zdX7in{X`#dOSluCH{uSz854+1)VxdgIb+we+m27qwCeT4bjlX)NRoZ%SWy5plT7z0}RZL!qEZX>NUqRDGRG`-qUFiqQ zb!U9ATk&Cq{%`gF#@IlgXv8CIMy%=36+i0r=e9T_`HFL5@3ZfC4q5SM_PlfVkE{(( zTo=w$5~J9;?UhnH;sxDmb6TG$)~??~zfEeHC-s~M7uDPS;)nYlywkyVXZ1rY{T}}! zAJl4wDA%=OFi-hs3xb8g6=JAfq}7zg%062n4o~r1ip%Z;;=KA`aAWYH;HKc_;1;oY z-x_=*xJ~%p(cq&Rh3*g&+E0j0>|@gKp5Wtp%37vAyj&XaG`vbYGpofC@}S=7ct~rN z59_(?r-ZW%I`7XYLVj8v_Ly*29}j+32(O3`Z75t_c2L@SVt& zkww9O3MPX89=R&AICwqymyxR@OM*XACd+R}u8CY5xh`_O@>!HEp)8>{BOeI}7yR8|C^#DYuCk|pCvrpZ_q9?xpf-Oc z_!aGq!A~!0#Ive>=~x|_H-szu6%T5^Y>#5I$|xFW-ifeJkiyvWg*SL$BTS3A70av zNVfEJY;2D|-}p!iD_xz9!wpHz>wUQ7t-AQnE0darH?B!1+FKjfT-Vmqxha1dDj zq#GYLWTj&5^u~z#-F3mj?|xUkETX>`sjsXJE_>|pb?bvA?Xh&H`q?}>t*+qnGspVo zX03h&OI+Td&-lDivWlu+uQOK!k)OTZ-%1AGjubDOxO`yV*XOUF|Lp~@U$N!NE3T|9 zx^>ZSUiI2lf3WzgS3iAqamlY=^UyV4zi!!e&wSv{8=m>#;u~`xTKS>EO}}^ZqMIMP z`Q@9(ZdrTF*KQgA@U!OcGPkr>orHk)aaL4EFc;(L3 zcYgUNp1N__wcf{%ig%Jb9u1*>nrYD@$`zXt{7fXx&NQ7 zTD_`s)oZIJ9=P>^rytnpThWA_cyge~ zfFl2i>?d-c$b4e&ot<|Om&kY`--&D|a-GO@BF~8|Cvu#~a3a5n>?U%X$ZR67iL54a zn#gD(pNVWHa+%0vB9DnICUTg_U?P8s>?LxS$Xp_CiL51ZmdIElUx{oba+SzbB2S4d zC32L=P$EBx>?CrN$V?(HiL4}YlE_FRABk)va*-}x&F|BW3|W=rRFYAd*B(q>?fa(M z_f560P{s8F5(u1j+uGeqhN0!~WuJua(}lCx46VEpoTW z+#+v_tSxdi$kZTDgKRBwwaC;WPm3%qa&h z0fF~O^Ex5FZ8t`Moq6IfL3|jDK!JY+o7R*`jX2F^TXBLcE@MXc4 z1y|Phk2t-GIK7HEy^1)!ia5QBIK7HEy^1)!ia5QBIK7HEy^1)!ia5Pyz=Hn@_A9ur zV7`L)3f3z)uVB1_?+UgnxUOKjg69gBt42iXRYcPJGWxs`m3qx<1*;XDRxnz@X9b%T zTvjky!D9uB6&zMDSixTfdllSOFjv7_HLH8T+I(EC_=bAOalIXrS1&oP-tmT7>kaje zjCzN-jD#Kob_~cd;KqO&1MV`2G2q337Q@@tylc&y*1TuUTh_c|%^TLdU(MUqyju+} z45%P>x-n_Hq~mI zYPC(Z*rvO0(>J&2o7;5dHeI<*S8h8GTZvH-1kH8o?d#+(FR8bWs<)4-x8ES&dC6?c za4o~M49_ww%Wy2iunfO4?8@u)8)jvAm0?weqY;Ki_!(hmgqsm&MtB)vQT|o^z@Q9& zGVIB4C&Qc!Z!)aOa3;f;3|}&A$#5m_*Kc@|59$YwWEhg+M}{5wck}}@GQ7y}CH@Gjrz+eD_|7%j;h5HNUFL=LT{etrg#;*s= zObjnEti+8`f0t^zOSRpl+U`UD9HgwAdvrc1ep}(qfnT*fMGIk~Dcqn(UG$dfL{xx1Inb z1O8yxgW(Q7`w8Iui*GCBKU>su)~M&Kksoc5A8k=@S*s`E3H6o<^_B_smI?Ke3H6W( z`Pdfu*cSQN7Wvo~`Pdfu*cSQN7WIk=^@<7giV5|K3H6Ez^@<7giV5|K3H6Ez^@<7g ziV5|K3H6Ez^@s`ehza$G3H68x^@s`ehza@Y7WIG$^?(WWfC+j3guH)^ynl_ne~o-u zbv^IKiyQrHG51_C_e=qYE)2Rq%q#-7T)1*!%7rJFF_&?6<6AKfe%v#0ZlmJdM#Z_0 z>CWKdyrkX%CQbtp2PRy2aACoP0~ZEd_-|pqh5HufTX=6_y@m4@##{JqVY`Lv7N%Qx zZeh8F;}(Wn_-$dgh1(WpTX=0@wf%na5*AxHY+{4s<5cSp$da4 z{Hd^~!kr3pD!i$%rozwxB0p&Hpt!@83i>!m;IO2^kqSd9{HU;_!i@?uD!iz$qQZ#^ zBPx8Tu%W_*3KJ?ksIZ{IfeHgE{HL&=!hH(!DZHn!p2B$w<0*Wnu${tn3ezb(r?8yD zaSFpJ{HCy*!fgt(DensM?i!q?yf4K2E3lcuWeSt&h4l;~b`R}7fLR7&8F*!&m4Q_T zQW-d9pp?Ne3PKrg((@iY*kmA+@diDpWUKW9A{lsOppk(^1`-)OqOgd9K?VXD_+y}t zfjtKD7`S7gj)6JWp?iWi2HF@{V<3%zGX}~S7-JxefiDKS7}#PUi-9W!su-AJAc}z} z2AbG6^aGL@IAWlPfguKh82DkJhk+diau~Q_poW1N24Wa^VW5S96$VlmIANfKfe{8m z82DhIgMkeOG8njEpn`!31|k@5uJhhHSYRN5fdd8#7#Lt6fPw!7`WM(=Ab)}T1?m@= zUm$*g_XXM)SYIH0f%65*7Z_hP{RZC)bgvJqg_!N%p%yu+);OxxII5O7s+Kq^iyoCV zhh)tmS@Wo@HzcbK$udV}nWM7IQCa4wEOS(rIV#H>RgI6TmPb{aA=PF`cOB9lhjhmw z%>*yR)x?WucDqDRimz)P|GF_ZKtlry4J0&h&_L}1vkL??@XtU$1N#i*v-keZ>lHV| zh^ZfVCSjR`V-ki*_$6VNgj*73Nq8k;m4s6gMoIW2VUvVQ5+=#(RQplYepIUvqk1lT zQ_o}Ls`aR9J!&)((80h41BV0@5>UZFAOU{_^bxQ}KBD;ZEybU2DgKB#Q$H}b!P^FF z8=P%0w!zm1TN_+$Ftx$c21^?pZ7{UK&jvdi+-xwj!OI3K8=Pz~vcbm&8yj3~FtNQq zb$@@Py!WSwAo9=Vkr8te=fd&Q^7)W5?fPn%A1{ern;D3Ss1@;%nU*LX$`UU0}h+p7+f%XN~7f4^= ze1Y->#uo@*;Cq4Y1-2K+Uf_Cx>IJ43h+g1%f#wCq6i8m+c!A;th8GB4;CF%E1$NhU zs`)9^oV~fds`)9^{FG{VN;N#C8lF-OPpO8dRKruM;VDTyB`K_Ov**QL*Qq}z|DUsZ z!w1f9tDo@|tbSpRY3JXXz{R^~cmD2poxe4^ch+mXS+DVCy|d3A)=U=m zFSx&8ZG%S*7Bx83U{HfU4fZs+(_l`6Hx1Ub_fOLK>$&frj+Y|l`IjSb@yr!3Y5L>0 zyM3umFSY5V+>Aeu44U)rdG=C`esJE?B^&)<8~y0HH|OU!F70n!i2GaTUk`onYvdQp zH!s{>jEkj(=2q)3ygicl-a;3y&KJ+D?uXCLe(!#;RJ+Ux?J_5{%bZa5M6YscpHWV2 zgM}FW4%j>3?tr-i-VRth;Ov001HKN}I^gPnsRN!4SUMUx>91=?`t@cmdatr4dbK;9 z(C&0XyVD8nPA8O2(W`8VUS(7CzE69`@7)rYo`^2QC!#;wjGrIpyPdy#4CimnF5W$h zi&ygt|GmkJx9u)o%`befJ%2}mOSb*fdrSTNZS{*cmRvkD@QAXu=PR50DrIxeVOxP+ z1#;Cr%9RAMY7VXHomf?$F*?;>6fV^qD%BU>LZf;{2vF_9fC9S^w5=ZFJ-sBvr@txu zDbT6@j?kF?o-mg{Tj~=M)qpUYwhO0fr}B&j#n8Q5SWSC`MYYfPO&~cP4u*x?Bvd9L zIgJXT>bUTzPAVH|O!!k`b~6@KQRq}9<(XGt$1uv3FzlOnLJ#TQXX6Ro_7;ZF0;p6*oeDVL8mk%rEo4uL)t@jbyb;uu7+ zD})_(Q}gUizEeb~V2x`(r7J!iTm|A4SXba&%^_R~*D4}ZFz|~&fnO}VuFHaTk%cOs v)Xy?W{sr4NqE=iZ?5*d7u>}&=9|{HQ6zEy{ZbT?zm#Mr#m}QNBMo9Yq>WN6P diff --git a/FoodbLog/Pods/FlatUIKit/Resources/Lato-Light.ttf b/FoodbLog/Pods/FlatUIKit/Resources/Lato-Light.ttf deleted file mode 100644 index a958067a86f46b4b82b6b1ec43fa83f5875f3e43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122524 zcmeEv2Y4LSwf~)&?QORAzS<(~s#smJBwMy@%aXfgS+d-Fuej1ovyJIsu<2k7n1lqw zBf;1}cnJw5KnO{IBtQrxKoXKbsIjfx|L@G~N-|FJ{?GsSzVH3N?~Q!U-kqJf<+OXw zJ$J^8V~p8>6l~EO8hOyuWD6 zIbrsZ=03(sx8Zv4()G*MsCsX!V=R3w>e#ew!KU>r%G_xGMf`49wtD;0+tyw%fwA(Z z8T-vM%NMWNc40-=M#hY|-&3)C$%4hFCV%o<+>2{i?Q)zDSE%tDcPYLXEnjoawlUMU zbTG!J(0ffziw`f84FK@v0rTcJAX3c_a>xEK<4)>$KEWCEX znkDyL|H4a*J8wB-mLINPx9Ob5H)sEraaUI`Cfu@q!r`%l{8@1mc(=^m7@e1l_kO?YP!0e+tJ~8~2$;;6;Jw zd4<3WcQN+R6gIz8ssZSn?NcVOk&K<>RUO$K+_mcOa^DCub_4w`yrVM6*$=5s^>>*?@sI=_#oyQ_jN>8x$GNZYxeD$7SO9JL@vK{T3E$h;gTmFU2cI*A zEbHMfWkKN+)~RS@2hs1FxYu(p3vWo{cuG~r4$^tROhp+!=^igTD9mQP{PV0D=Pwst zW*+7DnNzr##ZYz%dsqkB9l`f-DtxX$`&SldkMf;>(fQ9AbdB&wb_M#DR83?v_&eE3 zVI{j2zaJvnOXtQjyI^H~IJbtsi7fyu#PvU+wiO?!=-*0qM0qXS zCBZ&69kefz=uWi%8mQ}Xe~%r0enyco&-1m233*`EAWAMFci?Qo9Vm63*tu} zzz+}cOtFhSOLYH7pc;?!;05tvD1Z-9z^&Y`a~}adRaCIv0X`5fh63o4|9-hd6QYaE z7bo$IctYc*_GzpV@1J9@QhR9QDMblu1fLpce7NtR=HD>B@5pTspGnrFPZ|$oi}-uS z=N`5NJP7B(j?Wsvi-2u_y?_MZJjG3{3~k&1xw-**bunNq0eF2efIioPo}@PbE~uQ( zR%l*jGx=5QR=^SNlUyx+3n_14?aKGra+J?ix|v1U#U=t~;`<@RB9=nAL*R3yr#}La z4pN;b0M{{=%VNwy#cCErpMC}q@-PFRj{^*OsKn>Xfb#(*fR%vv$)dG!@-czqhEpj) zX!ry!F@Z2QVZsEijjN)Q|Kvy)&P%uB;;$X3L^|5I30!nSVnR8``7Lw?SK^j4u9vSK z{2_mTp_;e#f8<&uJjUvWJLzE8m2A!kp^JbPwr0!oWL&T0(LWZ?gaBN53rYcfql#e>}P)901M>)&Vnom9AY8hFbe}mSS0rq=IkhN zjKzS9SP^iX#eownk^7P*SrRzKQozNm7`TL$0H;|x_XW$a3~(tc1ukP{z~!tw_c^Oz z6~M#TFyKm730%dhfU8+`?lV@yYJh85EpQ#H1FmQFzzwV+_bF>+jljd%aNs7^1l-J; zfm>Kh?r&@a8v#6$jRbCGt-zz$sN5%PG#d@v#@c|#ura`6*;wFlY+UYR*3R02$FuRk z9jpVmlXU`5U=wnGWfLVliA_X#GMfZEg-y==g-vBsfTyvkz|+|@;4U^Dcn0gr{h4*M z8Nf4HH*gP|3EazifM>DZ+()dB%>tgy`he%K*}!wzoZO$-JT@12KAQ);fXxS9$QA%E zVheMBWQ*A%;3aG^@KUw}co|y?yqqn|{ei7u%Yj$26~L?5O5oLORqjK!hOGu(%hmv| zV{3uevvt55*!tWDY$MwMyoqfDK8I}r-ptMc-oiHL-e+6c7T|4cEAV!<4R{CJ4ty@# zk^4P6kDUvAK06Qi0(L&|h3tad@7PXuA@D_PC-BAWBH&Bd#lV-cOLFhA%h;vByVzyG zyV)+_J#07dfg z-hoGRJ@7tu1MrP(A28-Q;Qj2T+;7+cwjcOrb^!Pm3E#?Y&b`fUW48d`&Ta+1gWU#v zC%YZ^E_O%mEp|7%6Zjyz3-}&(H}D~L5cpnpPwq{2A3FqmKf4$BFuM=<0d_y|H`w9a zuh}=*1HccmZvcObeG~ZG?7`fx*hB1Fz(?4(fgffM0YAcy0RJ0%IQL8TD0>9>JM7

_@=QvuA-{V9(`#&VJ0E2Y!*g z0Q?gBG4RXmMc|*XmvTR2udtVaf69IW{3?3|7~g<@&R)&E%6`Fq2K*ZPIq>W37r<|@ z*K$8)zhtii|BAf<{A>10;5XT?fZt-j&b`9kW^V%jhP?&+4tpE;x9m5-@3MDtKVk2& z-va-Ry$k$%_8##2?03K)0Kd#WWWNXg1A8C%kL&~BKd}#UFR_ob=H5ed`QosO}Dkis#4oTMwOlOejg8pgML>CZ;$Ctvv^C&5_ z=ptyN)(A?qQmfI>7*uMN4!@xy6=*<*L>DCwY7t#93Xqb<2?9`cf=bY$6AG;YUB)eR zs{*vv|N40@EASkQa1SrPU0f3;HAd!>H6Mg-(s0s!EC|29rz|>K8f+d4s&j9VHCrsnrTS`lnT^wOWirrPu0ktqQ$15VO%1 zBpIDhDbP1`j-&`ICQ5@l_#IVJRZuHE(S;EGOwB2j7{7vsuhHlwy5O8btJTq=)=AVM zNu}cqx=8Xxzd(LT$4Rb@dWkL?CH>_U5W1a{uM=rdP<%)V=mZX-BWi_#hyY2E^^AU(D^zL} zM%1sAkW!(6@If>5dc8`fg9$A_cyJi>20Anb{D_k}qK8^-r2b1orB56Z9nr8_2aVQh z6vRJ^k&GWnH2%;6RR;{&23@ExT8+*Eu4pj`iRe1mOEk-*nsGVZ0bpiZfi6Y}IMD@) znkS0XO(2yCbTNQ(1{iaVXfW!GFfs<688t&NpweV=G-#A&4I|x6T!fx!$Yu`EMIwoc z=mN57VQgT$2k9b8biwsXqrpgr)=1QmdQW5+qzg4LaDY5IjUGCu&?*gDt4T|Q%F~4^ zqXTpyqkpp>2e@uv173f@}koj4X_lDH_%09AYlkK(M7KZ zF?2?w651vjO*-&aXV6=-+N(}{5YN1as zL>M{A3=T7qfaFhUG@9tpnq<0=b;DtjtTFLFPZMcCXc(5sppoce)Y?Rv6m)u=gYr{l zIM79{33P!n>U3Iz9fZP3T2Z!*|GE(nGmG(hD#Gz!irMH(JV8v23(kYP|rBZrij zRayg(T2DPR5Lq-BKhXw<)ktmP7nNud>ClNp9ke0SL6od9jguO{p_ee4hGao{A-5)- z!$QVS(sTn{v;3ii&V!!#Mhtd>D|(CvQfa_+i~;KPOgC_`bPsd54WNr!V=$OSbW~%2 zg+NCk!jcpd^Nbpc$tZ$0X0r;CVl!I|7Ng!EnjH8I+HBCM&_}%<Q!dF%c|GvwWNbYD=>`?waQ?yfG#jnXu{;iv|zw^(5BH~(nw0nz~TJ0 zbiInXeMT%%YqTbl)q=@RXToHGFD6NpjV6@}WvyK_TdcUks)n>Xtu~CoXtIiKlSzcs zLZuBxy%Ba2Lp7*uWE(&cqrpnDrdFd$R06S3+ckQV#*W4yPDT-A(dsdNEe&53ofhdT z++efX=rGx=IB=5aWq@=Nrp{9XI7|`-|I7vpBv@rsTa7+D89$O}{Fz{C=+LN5Mi>>E z_b@QC4_v`mOlGqg-?Y+5nb9O&D&0Zzwl9b@3XGuH?66^e)0;sTd=W*ni2KYCY6!H` zVzD{QqTQ}BSWOG|{m@ zSVX#s_~x|32{c$>2GCKASQ2Kn8lQT%&1wg2oKCILCVHJNi_0on9JYYPVugBJ^cs`d zXco1i8N#7<(eNPrX6TuTCMQ%$BiD)=mk#`Kp)nXBvlV2~8ypV1UXl)*&n{hs8(dBo z9cGsU2l_(vFqvFNA_H-i8o+^0;xL&_R+HUmHK|3d(;Rl24WhwfHPW926p`qnwTLdz z6Z(iI9AUW97KhVfBcj{&(mqLh+;P%?Qc8ksB2-|FSsJGRqHCsfBSqJISm^EG+9?Y7>>=w@(6lg)0TKO4<7ICMIj#RIy)ETIW!5x8P=d29}+(`I!VX{c5P4$Ifl z^_ZU`aiWVJbn&<(y1+-m7rWhNr*48Sc9||7yUpX#!3qRDUc1*}vAG=)yWOEP=xj!v z*(zEsdW%(}3t0uD$zUbA(BuSCQ&ljWUcG43dnLN)tPY}!=ytmY=t63P>vdj_L>Idk zKf2LIfi6S`q6;;ELoz>BvsI>xRb$n8tnq*qbg?@``jaZ73PBeyQA-4%!NBf3B; z?KYQD8Yr{caG5mYNjI=~i493cgUR6tcr}=;9q=oS4v^B}BqnOLD42q7x7Y7<`2Bi| z+ZOc)o#3t0=Z-s_F1=Cj6!liS1?00q1gzR14No*1?N*-!#M0}XYH8$pt3GHjJB&dz zVle3KE}hO`GJ^sp8ot{d^^#GcsV3kL(%}sHaG(vD3_%M~mzYWo;BZLTYPY&=UW?17 zwd?)%;;`LpGn1y{&q0;Zp>sL{pbN}4hU6)Mv^so#huh=9HxUDLI+=aoV(AW6QsHDw zV*=kI0nBd}H_Rh3Q93+sozCrXn`1s-Fzj)M!bY3lkqAdUQJ>Qj@)dhLKBH*#SPXU- z)XL<*P#wCc3--Zc6XFnd0$(dlt`+@i~)*SqvZG(4-_>~TgR zbLfj#D^gW3oN>|a6XR$E(}*WvFo_m>BoeVm(h)2POIP8BqF9^`U!17pCy}8e?jY(C zH>m*}J_$QL&Y&~w@VoRLQ_NG9^w`~Yf51V1zWh{fGC{T>XE57nB2*1$(HDvNf}xPl z8^XwaJ}>il!4S;+H2GsPXO;CHm4rhv&?cS`T@i0- zA{9)9y@7amSTGnCtzy6~x_vI6*X;Ef3?4(08nQdB=nGhiz65nkNin^cSGYq$A)@LC#>F(2rQXC>jDqi9jS84fvxr>RXWc{J1dh0N|6= zHe*|e&SDRRisJ^0*%^Wvut9voB*USQ(TI}0G!{z~heN4iv!}>EtT-J`NB!YctR@_e zLYqSlvp3)g_$~f`(daX#sUe5U7VxG#UN>xJSZATC%szA4>JD4eW=F_sH3y<5(Q0=m z5(#@uIw})H9Fj>&!_<$Aqjf}-l#9(iTI5Hb8(=lJmB)X z!q7qdg=B+GT?nKhXRuQkSiIR{F@=)FAxLF77@o}ecd_tIY!b;(CG zR0g`hY-3cZQSf!67!RZp-<;HHgoPrwQjS097B;#whHX4fPcm6m28Y&{G&+s$`s@*Vtuv5x*4n*Er_)|kVzoIvfr^T94-G$^ZYd}6ARAj#RYOOjW*ClC zDghgWqc%t*Aa0@oI+7BO6h+dJ@?de)Tx72*>TDD$*1{%ha=@mB$RtCUQIT~^4qBhRi!e%*+?x`=$b1$lHE^5+iZ&0WZsdypshAwM2K zUOa?+cm#Ry81mn7pXyLlR?q|OOBmR!8^7+W4Eku6zGGtj_LVob~$jSW?nYRy+ zk9(X`ApiI?WYmyNW1n&=PK^xQcI4UUx6@xz{3(do^;lH(`YPkdZ|; z7Wv3uBk#8XIlY$#EO%AE{8g) z)-bz^Q*dt7+R9DiW^wbmZK(A}sPzrhY74u=eoQ!2Ys1%SwG63su~aLETDjckx%YD4 z&pnmmt$l9~2{-SqYedj0dy!_5f@4WENzrXYNJ4fCb|C^ux z=BICe@%E>0|LN^NzWv_Y@4Wrgj(q`d|9~_tF>2$TFQr znRZIg!yI>Y?@=yy*-_ROcpTP9m^ZidDC08W@R${CN4WX;!e?-zB!ZHV36DJ@#K%tS ziS>r}hWCzNyf-{HynMmpBZ|26i655i?JW-`q|rtwzZkg={;l6(@1YA(L4>?#bF;U zpXQEXT9FFhL*X1))(%+gFce9X{vKwB{jhcOVWUf=GuTYQ!Hn+1=9pD_w|S1<~JHXG;T3|WZG#uX8NNT6%U)2njf*$Tbr!6 zS>Lhw?W63s*q?GtaXjI8-?`NJrt5w8SkG+F+dke`>-&}8?ceMFU7#|sGO#c3?Z6vB zZ?G&lEp&1CmdL*7;n>qfE92KDY7Q9SxT@yw>nVqjmVM;Rl-* zH{I84Za&cbM9W<*AC9n&m@?wxk&Pp-Z=Ep8J$mKnzm3ke>Drua(YCU-#Dc zn9r~w%P`hGwrFg{*ru^hjD2qG&&R$q_M@?1jZ=)PZeQMhPW#UGE87pW9~!Ue7}+tQ zqo-qW$NG-*I`&MsW8!NQ-<|lEi6Rz;W(Xl0|C66pUuD7GI1s%Ap^I2;%OE{X!BT3py5mCA4~h0;-0Yd*@F-z4!L({q$nm-`;aZTgnp z{E1pRQOlGqy~m&*!=wt8P>pc@=Eqq*<37WU=Evd5aGzBS<64BO${_Esn-n4!OD0+r zHPvN&ENTKIZPm3^l}?9U6^kagh$T`7;8c#Prg0^;bH*ei!y2pNyslNnhldTXjQYz* z#L7mM`LJMnZYC1WWWte5_D12JQ*&ZM->G{QYwcJv3=N-NT{n4nX)5X2xFb|vQc^Rz zyr@3ua0OiYQ_qCU%EAD}9VfOIDMyf2@!0+I33n%GWrW9e_i;FJ0-QTV`WW0i6LVXv z4M&-w{Bh{CfPtxA0hHqm=%hwjU0$FSBhnzQ8=zHyP6UWnN15%-Rv#Ql8=OQNm|_D{ zY;fpoaN2BeoNRENY;eKL_-**iF1TRwmR~ zgz6SPPg@W(!JUK6D?%%PA7=7I?6#-}{&duqtWoanf2MTG^x5_Gv!_of<(p3YsPLOT z;xW~L29FB&@x`El4xa49qs)mBx&Tg$Qj1Y)rSU5;eizOd-h3R6l;X30I&wXY99vOa zda1u^6NlcFbC$?pkyC4VEMl5@Ew{N)Qtr;ac{3LJEH`sSgC&_qcn(6*g#Oh+s%|Z` z8>MEVLnxl06Nw=wI6A?}ERY1+NGFVR;y6q*`TwK{L6kg_1Tzdzg8|d0h|fxVy6_pq zXHot$gHI2>SKyO=ugiaLcm<;sFw~mrI$K0AacRy*-9hR{UChDq9CgR+mqZ^sar$ma?iaud1TLl_dI6Tu-T@>(M)iNv8n3qxEWX7Lca zQJ}4|j7!$RUIY~`8^j;NKY}BAs)L+M4GU7nCxxIAhK3h8B0dK@lN4G6&K~4lHj}^y zcRtnbGnlo$MD>`S`f%GtOIoUz?3<_ML{pJ|$$=40o!O8aF{d?9K5u46U8r%*olEtc zXe{FHsO(zP6q<7Wj7a|t(~1Xkf(Nmy2l1%~dyYMbB0Y#4J%~p=h!8!H77t=K5B7U{5CeJ;MS7Td z&VNNE8(PJG*%S3fn(`h;bchi|V4=HUp}Ro*E?DR;NHrdN04xJ+1?&dw2iy;M4Dc-A zb-)LJF9A}g)hM_CNkAQ79AGA38DJ}5H()>De!ydZX92GRJ^*|PFjJ@1D7XMgKpkKl zU?yN0K)n&f-h#p|0KXAd2Qp9cPdY&pf;vCLIw1K~l`XuaCLD~-e{>=Ljf!cjn_AXP zDJz?@rln=|)ba_j=BcHnQ<`G2rYWVRQ=4P_5|za?`jp1#Y*YNIV(MvEmraN@;p(Y$ zwfw25nt54IX=%@8GkbRRmX`MJ>Y2E9TqH7X?Zk;|#zrDz*KpTpbSJK`a#PN@ZXI2> zj;;%b$F6~eUYYw?*#+Gg3AcJ~!NQy-uks`-?V<(Y7zoEeI0nKo5RQTR4Af_!J_Gd` zsLw!s#P0GW%P`5pA)rYXM08bafu`h&JClt_15qvz00UE3F>I$%;8N7$0oaaxTi{MG`zu3$B%B|N_wp>@ukw$ z7hE&B^ZHHWs%M?oK5ksq+)J{T51+fKe(d>c`V!e1m2%Xoj+AnL*`#Il*ra68d)t~y z;-hERO}nW(+unZLc%wM?*}m+X8q@RDJtK-L7hE-~{gO4^zA5{=$8PPZJo(Fs8z&~h z4U@{bA1GD+N%Pi1e=+BCY9-D2!Q=RBG3vk>y*l^|$pYS|k@>*>k(^K9j%{G%pU9Hp@?B*xDPl#TN z)gwOXc}lb!v61(pUs${r(X3sQS&Kcwf=;uxbS-kq*f8)+Vg&3td>!t_qbvohPz+#iq716&ARs#Wj_KJhd7e6yf+&4$?1K@P zl7v7h3xVvH@Sn8`SagPivH=Ax756V(_&y+3`~o`Wr)FLh{0uuk>3&ef2u?z@_d1sBs!_6 zAo&$MNqZRw&%)Zm!L{J5U-vB(Bc|+qe8q~RdnZrcdvwK$$M;TIJZjyI)28iPKWfza zebc7hxNa2x%(3jpkIbC;2xmTaj5AXy`|+^{KfATP{npPO{MM(pjvIIDrw|Fq`WKLG zlkzI8c#S^}+b!S}84S`A1>`|75N!{Jn2-=!su)xRioz*oFyaOitV=v%sjlNNm*Yvw zDzY?O4L3%}KBqHTv;pqs4z8v@*`YWun#lf1Ye;b`PCVHm_2nY;#R~bXWWOQ1CXgSF zzK~t39`L9K=gE9OY$Ss=lEKHZd_esm0hahol9;EkR-!OCuR*~LNCD~r?SLM@a=4*>VZc$qbAUGh9|FDtNSxQ8;0B}s^?-Ij4`4Z98( zktRTRI8~8KXMl^)oP(vC!di{w3dNEw0zYf&4eLh@>sr^G9TOfC;}@B2r`G8;+YTe3~qX(iT2^)3zfhvtpv>=-j? zQ%6zp_$5s-PSbbw!YVNPqTI&{CurWz-6+!>^C;%f63nMcDb_5(N(AHrWbOFpJg^cE zti*%k2!(jWGsHM6_z*AXTO9fphrY$3Z*k~b9QqcAzQv($ap+qd`WA=2#i4I;=vy56 z7KgsYp>OemzMXv~d3}o)^bG|>A|xq|)I*XKET73X3kBI`HG;{FU~(gv+z2K&g2|0w zawC}B2qrgz$&FxgBbeL>CO3k~jbL&kB&D$+DQ92FX_6A;NMNL(n__Zj2#=GK=PLSv0bTFIb+qGOGeGw-B(&X|MpF@ zubf*^*|olT^!n~blO~{63^R6+AeGMA)iY*YSA!UM?DCm6u5NB!e$hy?QfIPTYZ@9# z{Y`T=)wZsmT0Vv^owT~Ob8UMx)xM;qAX<mdnUoImoYxz&}fKy7+0kxt%?YJ zoM1G4*xkQGGz(h(*%{ru(0@BWmwUHbZ_KXbZZhi2g$KWHN!U-l0-e~G`&jr$xf@da zXW1qeNxe3rkzoTmP(~dp8xqJ5)d3B9SS;OC1_^^}1N9+o2o^m-2tgY{(1sASAp~s*K^sEQhEPEp&c2eoHiQb=fPyspsA3U8ns#XU zcu?5n7)v%yDs>WTZ9nn_vTVlaZFOr8Z)lu!*&~aGubew6=*PCrVG~!3op$w#;iY|7 z%x&1&-m;EAPdV4_%cd;ihz+;RUjOiUqa3j^cTx-%1#1@HFlWNfzACHT#&4qeh{uz~ zA1hp-y&ra@iBdKq92@fFMadqKlP;I!d7*NEA3EZPPIg5cZw{JRIbehoz$>CavIQ~u z(D9gf{+zyB){Pi*?t{w~9ojsyYd&|eCEAsp6{>a&KbZaLuvr&R?cTefx@ykONj+E0 zuM{RVt+{pn{DWIYjokLFHPe53F|Tp;|FXC});uOVXY#HEwYBpunK<>5zG2M^&Vwvn z3>_%Pcq}j_`3XxyJ=MrPWzGp8t5EBm)Dx>w(D|%76J8ki3 zPnzip!aT{o5hV4#bVQMnF_!uS^%$lGU$iQM!1Qg7dFbP3=rw&kS=qjLH z_G0Z2NjvJYLnQ4GNjpT+4w1A&B<&DMJ4DhBk+ef3?GQb8|To0@j6Y^$EPYwFaklj0>)H+Ob!nOYK`wAEa@^x9dIcFbxLtu5UvnmR9C zSYN;J($1z8-7QwJY1WQOv#woQJE3&?IpgM>*AWVJoHu9OInzt|7lut=+0eXVQYJHL zMRUW->4*q^NHv-B+<|N9x@hM7__2)~pAUD)MaS?Z2GIw<{Wp((j17&rf ztPYgbfwDSKRtL)JKv^9qs{>_qpsWs*)fFhK17&sc`pA&QCfRYI#U(_iCTZ1GUNDix zns1(Y!>Xpy+wNUB_x24VT%{w6vsa1HZth^P%F%c)7p?3IJ@uGjjba$-?O-G@!}Ot{qMN=_L9!n$g$iF6QQ4#v(E3FbpFh;#<`n`HrF9O z>JXlVOvl)zgAo!NV= zLfh$)7L8TNkF}H?{6}N8B4VQPx-o9I6g?efVU)wt`N!cs4CZa}tHE%S3YP6COXFUL zEGG_-#{oHUKu#Qx6TGPgune#jup6)+a6jNNz_WmS9O;0ZI3zi-oj&wJy6=o|`fD^% z{^RIcSa}*b`mO&g+UD3@oL0D6QG>a@^cX~hVr^RXfw)LsBrQCcKo$D5(kc`u8Fs|p zvh`D`vDzoCqTI#*#US>-9!Zu2`C`$~Z{;85E^5V7GT9F;cw{B}0Uohwm0rNa?&IDS zek&}2B~-Jz!3dwEkYX1p($9ZtherJ5=<>9nk&pc;M7d8Ge(Hw=e5QlDM2<&JVoZN1 zjLD2H)0ouw#99n;lvF>3JZ5}KW5UBjxCCR8eEC|e93?qebIx(nVB$+cDSOn?|C*Qo z3#V<>Td*CYNx^x<%0m?fMovUQkLt;?)XSEoOqQ53 zNK6?drVJ8O28k(y#FRl|${;aikeD(^Oc^Am3=&fYi76{cOc^AmOqQ6_)5Ta+Jw0E1 z+PXx<*EV&2{n+#7)Rnh)jj!Sjt;&jV)5lemw9l;?wO~|2Evg?rUB8qDUuDu&GHJuu z32Ud1sH=}2`lhnDrLn1V;po~K!$Yxj%y4qWX;KCvf)=ZDR=ky<3cKzWknfnr>eEQj z;y50B^OGxymg#XB(N(Ka&&+fi-^}1V3VA#8G}+ny3CIf%sOtEj1uwxIOLUs zQ%{l*$I`PDeCJp7oi1b)3k&-Bu#AIWWOXX4Dr?CH4{<6*ELxPHV7<1eFx$m3t<~Ae z5XRFYc92(G)6>h>Up1|MTCK13{O_JqGbi3>&^zN5-iGB<$`{=K_W758{`i^=-{*wu z_kF$?596uC_1RAk-J5;)=R3B%$eC~5^~IAL8kg+pKUp+!T#I9hyDB>ChGh-*)bJZ&>caY_b$2Y>_ty38E1$~#{q~2mpMGafTdUF(@0haU zc`p9M{aoUerF;Jz~{#u2!uczvYI`)R@Wu(H;+bDNZUWKko$5^InUA zq|Y$K-yP~gNDBgk9@ueIA-m`m!y>e#FUZ+hyhAF&K`Y>fDNar{S(W$qkH1f0H%;P4 zFU?-d@5ufJI}PwpG;p_Om*DZc-KWmwe{4y+-D#{J;|(TEu><|G!v!v3mmf#>0RZ{-#pf2wN!mA%>9xT=L$^pwoa> z>qoEZOm$XHTV8h!UJA(JO+FthMc9f;ZqsoZ512J*De|Gn;8=#boD_#dC=Q{RH&Tds zQP|i@t0NIOsu7r=2uw``F>eIw5kbrwLChOL%o{<>8$rw)fnY=s^F|Q!MiBEx5c5U~ zG4I(|LhE!I^e|nBl+w`iG)!C?CN2#VmxhT;!^EXw;?gj2X_&Y)Ok5f!E)5fxMx>NR zq?AUalrBU{XJ1J^Qc4#hB@_@T#i9FBE^2V0j+ay7FbJ~ROIfKFPVt&foysgf_lBMu zK7VN8lE-qlOx(F{VR=Yn(fZTPU2Df)^u}#7yAS+i`-H8FyYXVbzo^sYoi%}FPjZGs zcXPV$t#GABmXsPCp?JvAd+(pFzv-iUX4+GYNd;aqNxBN1P;Q4#7_k1i+q2m zf;C+)W$O*XAWgg99^i~z3^!E#69~yysPVE zsOzo|NsdXUqv*e$&5&0JDDO^M3SVKsgFIu+PfNx~OH<)-nEt|Q01Xmr1BkV?D5>S% zBF{m&4gy8A-^H))-^c&q)Dh+G8U4>p?|)- zP)?xi!eA?gaMVx4@ei@oLsupYpcc)1@_Ga$NL~&9&!=!-2iZOVd}hM#>Uc`XAY zXax>09fFo2guuWgJ3y8yuYp=B$d)P%OO=MDO2bm6VX4xvRB2eMG%QsbmMRTPm4>Av z2PzFqm4>BC!&0STsq&UVgMu570@MTA0X=}_fNg+1fCGTTfTMut0B-<31kmc7G}qHw zQ!_Tx4H^X58ITOZKsGzb3zg%yEt^xG{a7z@yK6RHd{ghu{oh%<_$a5oXX@o!mX`ap zW;_Yru;BXTd*8l&M)$4194!XZKJI*zwmz$kHzpmDQ8>iupIqilk0{QF3RR{e(R1jd z8*ci`y*;unDV>roT|_(RAV&ZOS(10s(GEH}Bl|dcPLM7&B#69N?SQ7KNOn|1WG6qV z51NO;X)*5@DCibEutB;=Z`0)=T{P`u_gTz>snJrUbS^u!ciA#w%Q8%5v#>XAHNTH^ z4x+=&MSlfWPWfv&_fW7)JXOmN>B(TjQtegT++|QEs;4*iF@Fq2FMCO@$30{&%;zZw z2QX;gC~c6J|Ns0x!Pjx~2Y@dDdHFy4O7ik=E66_z1G`KTNof}ZxtG#h`h?$Tx48(Y77-UyRu^5gvjc&kChqWw#She@081PH^sbuP#5 zy+z02J_&GX$OweMeY_J8)= zlRnV~MiIYzVYocf87Iy-2UfN7)7D^rd_+Cp5Q68kZ0KN~zJqCY%qC73L_wk|REtt< zX)c=NoDNd7N(9it4pFZ%YWR%CY#KL9=>M6?Yxao!&j`I^O%@G5oV(2*Hit~Y>qgay z?TYVu1E*qMukd!jcd|pdTV*_zf~d&jm+Xj*9ilaPtWN;!7&EQaTaXVjOJfu8jdqo2 zVPRC#8H&0UxR!Px7*Hk~MA0!t$;JUHoH3i9;ewpuzYfm#d9s*^aAp!akcEbxsDZ7) z2Io9AIEBfq74`|UkP<(&T1>iSlX8zyF&P zhr{&$ZBAVIH2I!4e)Y(rMUQ-S9?YT3mpzsJ z{GNRu9hy1w&`0}j{L`WC?n8ef`RB=2DyBm^3SJj3Q*)XEykba-Bi`Ya1F_F3v8E6l9K7NcA;ztx@uZ;fd zfG8ZQC>*LN9I7ZBswf<)C>*LN9I7ZBswf<)D2Nn=LluQX6@^0;g;y3W#E)lR3B`{l z^e|JH*)w2b2BXU$e#{_#%piWuAb!jse#{_#%piWuAb!jse#{_#%piWuU}n!?X3rF6 z_Oq`fKeJ~FGdl|TnO!YUiPDnOU>JGkeh=l-=_#Aqx%J)lup#^Eh$|=k2V%bJ$vZD7 z&2G_~xUpXUe<1F%tUnD|cY*lVB1;50q4R=-L5 zhwc{o7t)`%;)9t1dJ1HyI?w{eY3e}h!?Fv3XIdmbs2Xc3q!}wd|6BcveRJG4?t@;l zOP?KXNftl;#oQa0)&A(oY(KxVf2VTylaEc^wWL)idirm}Qf!OUI-#^{OUM4}NnbeZ z0smNd3i{H_-F=j`VDuvZ4roh8(iWKx_yrWG!8mK6E%JO%(V4u~U(onQQk2Fa8t?l84H~GSIcjK*8k(bq=BS}LYG{rcnxls1sG&J(G^U2; zsG&J(XpS11qb_L9*;hiELyimnCkr_yOhPD<(qA3$IKWK6GQd{AZoq!P{eZ^+&jMZt zd;s_okoSqtzLLD=Bnz5@0%?x)+(CYkMI~pc6ZxkUWU(ky$-A<#etUt|Vk{oJV&cTj zlZ%@dU%2bS#m&v<9A16p3lsc!D#4$s@0j1*b!lHk{u1qr^na_ebF<#p1gXaR`N8RF@L?U7t!m6zaspsaVwJ z-nAL@R_?b-n`uh_(LUvF(QtBQS#@njag*MBV!JFW7Q6`R5ZX>c$^Ti~`B`_c?fe67 zgC_=~uY4W(2eKr;7`>yM+Ca=eZt{??Tnu~WvGE{gnGw)%OXx+`IyHAKmgD_2h-=mK z4p|kqL~xiUWk=7>&c%CGHQ6~BkMHDWdzr^mW>;K+x9=G6E#q;QO5YGxyy*7%+$XC+ zUyM<4JI3gT@yPe@j8*nC=sW1y=Wof!NYaqB2rMy*LKLKxr-c0O3ErG_FEJUF+_&)# zZ0=6HNOED;#q}>SnU&d53SG8CZ8gl{U*jJ(X!`eQL=8VdW9;whk0Ua=QZ)5nr!}L` z9`yMp^x4ijXp1nm?m&m-S&zf4R~W|`k>we>H0bKd^O)T8A@t|3Sl0h}FXA%pMw4Bm zv75MkDywN0-`;75a`SrmVmA(fs$T z%*G-bL+&f=TmGT4uy2{3X`+lNp2?G^cTI6p5VgErsdxjV2( zu%G(qrM5Qdx^Bhg++O%6TIQ#x8}Jf>ffbIyp1~T?ra+9moO=YX;<~-oVA1?ix!+{{ zi&{tj(-n{ZW8!0BH0FaOtK*(N%IYy|GyoEqIVfsDAcAoTI8%?&%Q5@ol!eAGKKw$n zj19k(eto@2I}qRGyCctOv`Kg{@pK%t<&blxfG2|KjshOZ5potBArxds$O%Wt2}j5Y zN5~0B$O#+igd^mHBjki5X$AX5vgtWUzi%1aRplzw2fFjr9!cM?~SR7 zlr=DEO4YpG)BCs8cuHG}I6)C>nqE^mzMLMk!Jetyr^271+jbTs`Jy-?4xq?^L4Fwg z5qVXNJnA^kY7tLR23ITT97WUe3X`0`iJa-X{0m7N8lqB;3;SVY`NIF&COg_F$nxcY zd^x}w2jt5E`Eo$M9FQ*uq zhkW@VUw+6J&6R%0mml)whkW@VUw+7!AM)jgeEA_?e#n;}^5uto`3v%O_Lb!23%eua zRruPS&~BuVmO1Qu_xBb|$?)Rv&MxC?oEaQ>)ouX*gHhIMzZSbkHjO2BI}7Tq`lBc$Bd}2>$OO0eBW`gGj@;2h=ppCF$4#FIanMRJb z$u8KKRk90YKje2JP|^|$P_LY6AM)BiC@p8qL_-}T$u5%tv?ncJNw$H~o_Vdr)L#&8KZM&4;r2tg{Sa;o|vXtQ@iIY=Usd&d<(;acI1vM=}oH+h?uJN~WQ+ou71K z>d2*iym7|Z0o%aif8hF5xC^!+jy24C2G=l^@V;o(G6EThU_Qaqd61bjzNInK&?W_1 zvnkk+ybugZMLsnS|KvC>2j!>Q%8iK)RI@fk)bTB6F$qUxiFFm}iwRzM1t0wN~t<&sRGVnlV%7(Vk2)Dpl4aLD>)0-mP=nvQMjuq85311z)#!t2^g%WHAQyd5 zjXtPGA5^0cs?k?ajkB*rRt={M&y9;%e392HvHuZTl3%=}*BQ`OVd7i<1Mg8$;B5v4 zP2!{-gk=LWHTTEXb(x%hzdu+#=i zJ~6Mhee?7(uX|J|UFJ}!t)){(w`}aGNspgjJ9%TsGP1!@R+=&w@9Asb+*Nk+`SOM^ z{`&{5m>f1dmg%euM_ao2viK;x_h`&%1kO@mcCQy)Nf}X{(Kqf4Z z2@7Px0-3n22LOiw zM*+_P-T-_EAekt5*Fm0=_Y}LqvpzU)%)@J^oj5hqEt=J0%vx+Wmsh{= zp9)BilgZX8$a8^tmy7PO)f&cY*yT@Ac<)p|c#oTD4beHgRysnT5r_}tb1!GFk;Y8# z>ACed?O=orBCBJ?r(GH|t#{K-r^1+H6hXv>6xln z_>YLf(KAZIVdzwlO`|CbuQ`w`B28I?dwTL)Ck8cVa5rE+(i-X%(GnExqb9D=E_Zod z`?M`Qc+nF?mNS%@JR)}u{!^N+?0B73Z+05Em!_MX`s`ebKUg|n`OvA$H6nMe-jtoE zv#2yqV;29D2luoUpXf8$gr|T4D1()QYpn(D4a%b|L68{bLno$6x61ZJ`E4n7#J*AZ ze5jD-g&0Z{MaplLlV35G0X^iMDfHA0UhOH(Jw{wd&&bJn{j!1iCg1KLz4CjY22bP( zIC$a=Ta?eA4=#h{MNv9I`>z89;}j?uClqAk6o8Hepko2(SO7W}fQ|*AV*%(`06G?c zjs>7&0T3zx9Sgv&1YlPJFiwGjaXR}-D0WR@X%hwt!5}>wf=x%jgN6$J{ScE??Nw+4 zqdI4luesP|ZS7iA-LYkQX8r}6tLKeR&pT(`)V;OBd!B2H+lKir+|V*>cwpH4D`$~8 zyZ+`x=lTvRU3bfZ?tZ**Ge1Xwr&tOGS1?Buc3l+a2$wWR4CN*Mj|Xs&R*p=VG4K?? zfcBrk$NW;{zhK+YB_!H|F6|DaAS}NxPfG=vOEz%H1}@paB^$V81D9;zk_}w4flD@U z$p$Xjz$F{FWCNFM;F1ko%I_D{px_3i0QG=&Ko4L!U>jf$-~iw-;3(iZz#D)M0r@F} zIE2-hLEg|LLL6!P&bq;Q1Pr*Td&NJPM<^D57xbpRPuC5;4}@YYdLKw(HycG&^12

ask~-O`^ssB zwxD^kcP8&1J|=C@c1W6+z%>TQ3+)4>_bXAD6dfWVXK3LW(@|cA)B`yL3r*V=dB+6p zJm-*7%7vK0NTqoxa3(VE(9wR?7=~%l6l5Ie+#BEb-M| zEeXvb;k^@2@|K>Z@-p9~3F|$l=3tf2G_5_q$|ueDc>n)rFtuOF{+hgIL;Ea;S{iyI zFwCr!75KllCz7j0=7SzuYNbg$KLKc^2>=t51_d`D1*iwK19||<0owq300#hv0Y?GP z0p0+72>1$+j|0!XlENfjP|o~2Rpn5y(js!2in}(KPKX)>i^>_P2yM8oRCv#1d3F2c zHtQ%e{;$C+FYU)}68ZUuPce@-ao@zdq+z*f4_h;+Sp5nBQIWh`jrOlOV5_U~8N@F^ zT;%|T(nIWZ0~z0jAz7Ef{cG|wweq4%18)1DzmrW`F(td4fJvqQ4kQ7Snt(}7z@#Q% zQWG$#37FIbOlkrqH35^FfJsfjq$Xfe6R^wq^-(nnEwpgc|A)Fa0gtP=(uVKtO;Wd7Qfptl$y(Zyti5Hawc3_!$u^R$#k(yW%wih} z836{zc4h#B4I~p_02{&@_ASW}8yh>2d@OZ!ZmOyu+DVyzwF^QhMU~l7` z)h&4yT^l!T?5ZeVeMRr){f!xLPU$UdTHD&PVQwzI+KjKtmVfz-wO?znZ%W9To;5wN zps>6d_W=0o`x@tM?Wt&;Gcz`JM!^jF46T|E|J;T3z0EaeEuI~iqjgyT=V`v`oC{I! zZEK~?GZmH-!HDHBPXi><4j>6cq>(v(5tIb-pzv(1yLc=Qt7=QVo`qJ-LMvvW6|>Na zS!l&9v|<)oF$=Ajg;vZ$D`ue;v(SoJXvHkFVivkWK5FT9?esGVcSTl27(@h9q!Vn; zvKgtB!)Tor9IwYV%_q*e@avw0M>0*Xr_>CFUQ8>fnwlRd%*4IW*@c%RZN0?yP`sxg z-aI=lA+)=FWPMRXVRBkln!C8TT5Wm_Y%liXc7Y6Y`oy)3bwb3_Tv#g^H|ES3&6$=B z#t~?B+_JfiaKTA)0SNh6A19Kxgox z1qV9AfzEKCGaTp)2Rg%n&cH3z)?UZyXAQWu69ZL~m9wM@7R!#m=b*}|5GDPe0eSUkae zN{53|=;esVU@Vg)o)Ai3l#p!yBkrbm#>bkTm^6QSjEQSdasBr3*zAR&?=DP=34M$! z>0vY%`p}i!8m&@shCMSq{rJ13#c3rOc3X2CI#PGgTV>C3g(!;aB*_DE5p z?ZT0JY(KUiP4gXpa!H{t)!w;8b#H+!-N&${>oCqdN;iE-jO>$n;1_oW{w~+bZU*EA z>zr3Pczprng&FvyM8OkXZS*e-KY6${i^?{bZb@xOH?a{*ycGJxt_d$%srPNbt_M%7 zS@s6p3JE)g;zkEZ7Xuao2R3i6DQGU6 z9^;x`-c(StdCNdu<+8eI@t)$6&P`2qn>TGTOw$#*+w4Z$g!PeOd&e+|hB=7U|6om~ zYsnJlZ$A4j>bp7gnJqKYrf5$!#Su^s915!~)6kYt+w6R_A=k@A_;lhkh)?cQHnUBW zke}sxo))w;mph94$V_;qmr@oj#fB@vb`eLt<^IpwI+DvR`kX)$b0aY9l0v&kX=rqF zSEMnM;v$WiX*FhMq%q@?B8{0|go_V@Md{|#C$?qXz!tP+Q~7jP%=EHmwB_c3;0bMs z4zM}`)P%Bs)qKK!-1Y(XW^<@JfY%O46E4&^m!5!}Xeio%sy5YOT{+DNV)DYyjO?C* zrs9mQ8I7yzs?XniR!Lz)afaDBqj6_BM99IQ$pK4;J7k2*5cVSM zM|cR~Fv3d+)+PWq^Qz(Y3|EH0QH<4TSWKB2w#bbke^=v=xV`b$gzmN#M(+z5`I+PQ z{+a~bB$A37MQT-#yGHHyHyyviLH`E&!@)%`GI)*DW0I0OY(^dBxl!L!VSNB-q2(K7c57-9zVwJBOR+?)dISZeH*Zzj9Aa zCaj0za%-2>!4GAt-xC|_$jn%%RV_YL9F26^Aa~dUQ{x?PYJu zf5q09a*xi_y^(mTe)ymCMJl$oSXg z(YO*N`W&-cU*0;#^GJYAK*)?4e~;*abDE+ zn3l#79V7N_P!TpfZIFZbCK-}2SRhg(x@g)7q~QskNTx=~vI7F&r2niOaZCCjs1~;v#gQd4s-kM)r zlz&?l{%*$K->AGTzo?^R(Z;&Ejf+c47V~paiR~^vT6LTC=&j+O;_o74RmH#S&RSGb zvIx!ytzU^J!o=P&%gHn5e|HqL74cpahdCola|ZV`=o6Kvd8Um~@FcGYVNohd($NFs z*0h|VMxpI>ibe)4=-A@iWv5j){US}pCoQ|DlYny3ToQdFyMHhr;Xf#Z;4Z!<_a1Xi zXwA}Wuem1H>x}c6t9i~PwAx%7y3xEKbmN)Uhi#L6de+E!srZrKcB?1h_x z@MUbQGmDPmQa3w96i%R+U~p+CcZ=sDWs%xvm2&h*vv<$ulkA<~L zQ}|nJ&h8)ECtN_*v0&Wpa&(W68Mq#>u+7PVPk1~bAD6zn)M~C7dt&(Tyi|UW}&~Vt+uS9cH#Qw-W_>`XDt}7 z!I;_DU0!`gLq$bk!Rn^Y9R&p&7ti_9lG!yiBaal#t0^rm$(pgDsdQoO>>__gVL#;o zzvF;yrgJ6tyo}c9o>$cW{Zk-M>Z^-Df2rUcG~Wq-qd>;;(NCP8VV;{U z>VA{d?ZBnBr0xQIO_}B>L<5KD{IJo0;zen7(yemyNxbu|d9N6)!iz|bQe^{v#OZTB zsJ1I|Lr)j91YKyZF0k${Ec3dcCFp{dpbJ`pE@%n5pe5*nmY@q-f-YzYx}YWKf|j5Q zT7oWW38;em3p259=s9&J;Tw9oa6?ZQZs?(s^C^gG;aiec;g+OTkz0~hVZg6~NVf_i z-72)^D*f98ybNJ4!hVE@5Dp`}gz!4Ty9l2ls5-HTWFpK$s6*&L;J-}>mm%y$*pKiK z!eNA$5MD=k7vVDmT{skrNG8H8ggS%{1peEE5JUTH2#!z9#jMtr8zqYM+@0V(7 z`Y-QXzTn3oQWRJL=R`8hq0M~5GIpMME`ySKFSl?}hHIz{op-yt5GvnE9s583Gf zHU%4$iRMX?zVX{>Nim1Kaqjp-F-g-BCj4bHz2=t_-HGv@(9cujVpBsu^Tgv%bH_=O zxgNdG?6v==?KzOsbRJ=}yokc~5M_&r_=)8*g2E7`p8M=gJtJwh=R((;e*XUS?v-(j z@$eidUKSclZE>{Pvg96XMOP&@Tnm1_L@{u6P(0<9dbDGLWR&J`%(8>0&1?e79rf%z z$(c@AlchBdbqZa|x*ahL9CQu0fZ+YnQqSjt*XLrSrb6YnAhim*TYQ&cs(6Yz$=_}BVGvx zaY5eB@B7M7UH z|9sBG96}(%N->93QEUUxS}hEIIkTOY{?FjjpuZR9o)IFP#PR$UD~B+iVA& zw0ZJV`j6aCMA^(*BU)0K8+(}CQ{s)N)*>C2pkp>kVPz>6L|j+VnJtN&HcYq)#v+kC zkVsyHL{9%Am(P$%m_+`HAU5x&VEV1*?yJw8Y5XRj#7V5D-dVIO#^3aw=p$p6#7n!#l&*U}Spr0?< zciS3VD=|ecu}WaswNh7FKDPdv`-#(;S)3W06!V)Yb-~6Nd4ZX}_SzKFbZ$7;s?%Baowg>_sl`}h z)yZPM6`)Iavj!bkpmu(=uOBiDYdUYNrcD&qo4C?EimF)W9;}M-uAZZ4CKJm7sfSg? z=mM_HX06~LMoxpy&e9g=)o9HI8B$eNjn~aSqjp9|F;3i}Xm_OK zH)`HD`AIgWmb7>$^4ZmzP|Ytowd`ZRk!AQZMN9h z*!WomQ*w#}S-F9N)JhvJXRXRjn%9tOcSPFb$Bt`kPOQ~+rkxkDp8QO^8N(aRxD2&9 zUyt?02k-D?W;*wcxMMy_#%_*jTqC=qH;t+0Cd;B>I@*sXNGy3UvaibXKd0VTwX_Y? zw$R%hd5`6DHKJXev{^T4zcp;}8?{CHf(_X4bbI=Hr{N7)PPczyCf0O&>P*7Ztpn37 z97>#ggSOC*vn|{~pRiB6@R4)R+FjtZSEOc4+^b!+uCt?LRetDjda4tfwd}_^qw^il zJ9!~@m(>f@@Y%5fusoI0-hkIc$3ib-?TyDGC1p&`5BCtp2z#6gQCbjLj&$-U!y!bj z&~QBepUXpsSDbg>a8uLpedjs%^!&l=JoX2#eS6(mS9LDCVqF!oxZnKH9I_okc~a;X zf>NyZDtH}@=IaT}`2M7v{M59R@)oJb!W1wAJf#D%)li zb!EFUs{CTFBffe&=kxEVaP#?=F^4vs+|8gw;b(YmE^ z#rwG*NsbQZ4`^J2+Kp;oEf136222=)r{x~K({X)ltS2V@wfesgU2Q*Tn^N!UT zg22VKmOb3o)L@lZH@=d5ak-|hTZM%S^xl3uEc;r_l(dwSCH``nFXoU74uCwaLpbsO z+k_MTzB)0^=kb_@9bx|t+iG&nbz$eeiahD6Q@ zWF|&W0Z#pum}z-6JTGll7o0GdoOHwE)Qz3=9_2Xp72jY>=xBz`Wo~Hw<5Lrcnj_X8 z`lUJT_^&-VzFGDe?yS_}-{&Vi_gvBp^Yy%Oqwvy~9Vloy3S17|iU*5Q>&8DyALGX=M<|{_Y9*efH_39eKQ!ymj<<(@ z6`3i+ca(q+hudx;+iu~w)}3_xXda)KXSFUl6{R(*GEJjVt;_Q=2^jvCQnL*0`e#dW zC$@M>w6V|qlQQ0-6jz!p)s~U4^Z30J`r+wl``cdoQ_|nu<`kO=X(wk~=Zu^c=@_bM zITo%*&6XLh4CIpS}3( zML(X2U%Irz!QXyqOp5GhGxv|{h)Fv~ljwdmf3o^Sx^G0!K+%k1Rw6cC#f*#qGW50x zt8N3UZi}$$Hn8e8uNc?IHn8e8uNc?IHn8e8uUumJKtTyo&e%P^?JY~(YEWy ztzPo4dGniVzW7EQ7cbB`XZ!WbGfuJAxhVF6@0qqc|MYD+F(uGnOf#2ESQcSS>;4&y zX*$2>m|mkXdSZI~gmjK+>v^wv=D6oMcCB=1M3oNzsphT9e>U=WnQ_$jZs_Sj6FZ=5M9DnT}yv2{{6n*}!fv*Z4ZbPK+Y@aOOUXiSc9d zZ^UCE?Qv>LKpKy>`n1Q*E37gV%NbiqPqHwHI)$Z~2EC?oK-uuq$URur)(&^X>0-r; zZ|J^AtH)ek5|kFcF(|KqCZX1iIJwY9RlaWB6?B&F4SL;~7QQp+rqDq6-k{&uZqt=P zx<1JEcm}Ty8hL8&$OF1Pi0z1ea;Ce;OVJYOzhv`wYG3*FSNm2eJ5HH z(m9`}kCPCicE>amvTi$@M+RCHVW5au473PzR0Ps50`DsV?<)fDD+2E;0`DsV?<)fD zD+2E;!pn-l`-;H(iopAdz(9*Eh82rQCc-R)I)n~{RS269E<@Ohupi+egu@6gA-s<8 zE&>@S)e1Ec23i9KS_1}J0|r_H23i9KS_1}J0|r_H23i9KS_1}J0|r_H23i9KS_1}J z0|tsqEG-6l`k90oXibEHB0>hLaX?pkQflhnz_4)|7l1M8$<9=qI>5#bw)dR@?D0&4 z`3-K?((MKpz1V%FcZP5FQv;W7#3cvYU+o==Pfo49|D2&e=JzkRz2E-bExhl*F}$K{ zBxAv&XOFw|pegtrU*hK*%&CWT^FeFN%}ELWu_5&Sckcf09{X>Cjl2P2|3^K?)2nNA z2?EBId`xTn)P={-0gZFA zCUW;e0yb~Zsge84Xa#2jbBXvhv1|gk(vJ&sHm+EC-j64hBNQFB*^jP9!^a1;7s@LN zQ3x%!Y@j?T(7Dfc@*5b=HDe}U!C+1cz2V#w`t|rr7%blwFXC=yzw=gOvH93hEMV*~ z72~UL5)TZ6F)#v1yxiL@!KbzIE`hXTowPnRQ(Ayu9* znr*hrm+xLvR^HyzUY=XKV9|ow+^RKS={)C##&l@MyakP`TN>82N~EAyx27B%)Zv<>%^jvdo$>M3vS4ir`{ zX{qdJu5atDo4%-}xMbBe{l~NH@11kcPy@!9eET~0VVt#bJi#vdUp4+tOy4#keb3nQ zKcA4kc`W^n3F#}x(zi@VKQfm7E2e|A@m}W#7>VwB} zBLQNM%u6wZP_i)Oq76IIhMj1`PPAbs+OQLC*oijmL>qRZ z4Li|>ooK^Ov|(qY4NpIla2s|;+7J=6A=yuFg#GkJ*bgFB8}_35y{LXKs^5$1_oDi} zsD3Z1-;3(^qWZn4elM!ui|Y5H`n{-rFWRs-!hTLalPLRvVSd;uJ>osoW9Nn&;QEx8RZ8;Z^#vNV^8J$i&s{ecXeFUQ|Yp;nALHP{aE8g zj|`H;GA>83GV0JYQ+T>$nt#%A}h zE+9JC!-vB59qF$l=Uqb#aqxDDlz{SfKDb25MH`Jac= zk0JddC-b+`w=f-2>*~?p*soj95_d1E;Sj=$2>*ug4#Mvd!gP50nS|-EHbRGpkPfwr2}L^{XwGTj{U)`vCk4I1 zelCW_!z1J#uYOXzk0!a!BtnUtFk9HtlDQj(O;?Q48wk%@%g73u{rr$jrgp1aNC7%I(3ow7H1vaq{}TDt$Wz-%i0E zS^$-{kJF4ynrWifT3FMGu8N>!HY+lnAYx4?voM{^(!V-j2f`|ZO$e7E>_ym*@DRdb zgqILrM|c4XYD3~Fl_ zm!i8$F^o$wC`%!km0}o|Vi=cV7?)xgmtq)~Vi=cV7?)xgmtq)~Vi=cV7?(zd@#$w0 z9>%a)v!q)@IE=?!<65c_%N;If6qtU&qd`m^cF#b!H`iCVr)?o! zpso6P?MhEdO4af2msgmdm2O+Ide7Q2bMxvwYs!{|+$-&yTc6oRk7!E=eTfHKfA}}_ zidI>AF|Pml(Wd)?wg-!6w_J4Z$UDu$-#q*K7mci6ps^<39U6nH!ebDe8DsXu^lirY zbdEvm`JYcn=UB7Sw}jK>k3jjaQ~ukGU*I$Bm(BTYSTg3C-;<0$U7V4oelEN26<6xh9806__-W|kwoz{?*W2@*%durpmUmB*cW;iNXM^#RiNh%B$!1uug zF#}MK=9JJ!dqB*+wS|6c8Orpc+VcJY|1QloGdJv{#JSLIPnyzKenx+WzcM>D_Q8=w z4`3qgvbCOTYmKj}E}UC6r7%13c#Q4KpV{l>Kr10dxT zAz5$jh|6inLW~DUpA6q8yLCC_TJiPJ4eQRT~%&s8X zf+)x;jC0-@(rR>>-?q-hvTR3bNEROFGce9Ai+}>O#v+Vp+QQK~b=lac4yy>G^JCO^ z)=}8+N2P$yG(v2#9wS#f;I8J)-Thy%!;(l-!aGr`s96Ph`u< zE*wdzU9hY;b#`HP^I*P;Ib}?~VUI_4p0v;lB%EMg@Er5O1=0@|LSWjr!cGvMg zK9~Ft=h}Yq(-u#H>z_ydW2J4$IrCH8>uqnTEI|mR(;<&0(PKj_%3?_qu_yz}LOs2F z0;-?T{^3l#4VN5zdv%p3(b;$WBil!70%@^*wr${XKheHE zZLO?*{dn_Z@jh#vybtNtI(eH(*Y7s$iyw=vb?(DDFkt>RdWM*G#k7N?q5!u+iw!ru_#`Y}4MNKqcWPu-T`%f)>v z6I7D1wUO!N_|by%_ujjH&oA#@z54E7?pc5D-t!CW3yyzh@t&tI8h&Qak|led8NTT0 zJ&T=HBhUAaJh9yD>bZP%`MFP820wU$yG~4{y5p!+Te*y!S)& zI`lTKm6(gFpl0i~?K+B$FgrRmvj0`5825lX5u+_eo%X+Yca9aasPYUD2z7hh_v#&+ zp~4HcC=UsreTybUx4FV>Czpa~t|f?KH-u((n7McnXLY1!tI@O7=-F!YY&Cke8a-Q$ zo~=gDR-b);tz!OTU^R81@)M@Lg+ z=0e089ZgV-G-2VUVx$R6>n12hnxGhI!pzkK#YhtrBTZnxO;C(9K{3(<#Yhvh zD@|6JV-d+jn1xV>(1EZDVH3h-2zwFsBRqs~7~v&^*Ad=Dpmv43O6`#n;#jpcw<2Pd zupODVBlC7--j2-Mk$F2ZZ%5|s$h;kyw-NF=`oTLl zUjJ-y>Vp2uM%MJ~=qV}!^zQ5}D(c;7Z?X1|R?b>9asMcCtJlppUUz%MPyKCs=5INp zXtK9@`vuW$Bg_#i;ZyY)*ZUY&bHG_4ADfnZyc+&%k4ZjW!E|Gr@jcBQ*7LMcv7S#b zVTFQxtmmn(v7Y~haj()X8x`8FG%A0$8BqE~n3J!QTu%S_eD5Zu%a^0xyFUEhgX5n6 zHS)2ZPcqLR_xxQ*x1Rr{G5&d$(|SH(!t*Sr_53gRJjU|2(0=<{ur1T)y?)=9AkpdLmm`OOQmu@5f;m~9UJ1?25wlDU%jEL)_vv= zvfs?ic>T%z8vd1qi_NDV|F5&Yx~`;RhBE}|AQy1r}59H+ts!+95>iz zLH?+vqa3;jI{%pD9hWL9O zF%GBgUT4gw6Y};NEj)h%bvF9VgT6`}>#IrDKT#KUmU%Ocw`plvHQk1@%(NoQo6(9l zdpx&06JzH6bh&en=U%V(UY8T^1g(e9=G$Dxg(^dh<9b^v>X&A$oOmyn6SU)mh7r^O zktGAA@?j+j_upfB#OO);@Ej9eL|Qj;lbp~r+=8i&xLKovM>Bu^+F;fK->i8R74wRG z3$lZ29oPHY)>IYDubMiwYJNf0nl_kb8$WVU21!a8NQMQg`U+gy|hOH>g6E=9v zT_;{CPLZoXORs9_dnWrCzzLn-;hba!%0??#s|R=n z3_UR6Tmp~hL&ZSn3^?U?Sx$LNUS3Q2lquF{PW{~Ks=0Hks^>b>^BYUDvPv5B^BZPo zX3lQNXF7uV=GxG=%-3MT2?vxs4{5DoPoO@C_Ev#7icefdWsI$o%qJs@qba3zQ!6K} zs%JLMneFqATTPR%6grODik+MBe%P`)sA~p&a`$H{ZCNuYP_uvGt2yen(>3O`)7)1w z+iXZFm@_lCVNP{+@oZaDYT=xjGaG8Eo!F(xZz;=$@j$RN90B{;i8JB%K!&G!c{NYn z(pZ+G&S|)zk+V9UF>BqE_UDWe&d(?`mH{+lE-&7X!{uhr zJBXG)=}ixxGxsI(w7D-4 zB(_P1t)gbumPp|M=e3R%#-ZRes@6p)+=)#`+owZNONXGA4j~~Of?7HRwR8w-=@8V? zA*iK8P)moPmJUHJ9fDdq1hsSsYT^6QV-U$e@FUbBv?HuUI1k}cggprR5FSK0gzzH5 zzahMX5Ej(ZBZ3+t5Y)JaqGPmdHZfLvx+RR>Ch4pMmq%1#Jiyl^c4?~}7o{XWc4lby z;O6OpOsCTuHznii|2r+!{$_qc`tft@-xz7S;NrLhe}eON+p{yhn1#{qe{Y*^f53Jw zn83+>ij3cJ{Cj)K@!#0a1q0XbocHN>UX0v{JClF!^!?%E@N-uFryw+yODOO?~2N7GWzXv&Fo6;|ar6CJsQOA5QLZ%B5<#<;4_p3~42 z8=HWio5lr>G&9@zf|WP&W&X^YwgJkUyI-yt9mJ(?21WiW9eGcQvGR7lFqU_$tLmIN z_0haX4Ko`jfmQC47NnlOm(~uu%+3=PkR%=xIB8+K$-)H35~D zASDlD07kUG`=U0(E<7*1RQsL0A%FbEt(rYn<_S%WGNY|+ezocu=&-8r&s2a_VNF;%qJy-Qxq9AeRt><`>&n% z;{^1DmOlZ`KbB2E#5RC?kG$#A1?u3z5ZZDx4x53nz%a>Im4~ZT504;NH#Axsk#%4?CDjh8?Hb={Y>tmjX`XPx0m6osrS`tzK`&l$;E2&$qfVGDBB- zGjgV6ctgAGxBI5p67A-jUTdeS^ z#`esNNi8xme}*pytrVK-^_p*@m2!OWjXuq+gwN%jn3*99SpG1^W?`BcS$;9#jBtWq z40Br9vMr5GFfuG#Hqg|#Wm%c6uW5izi162Drfx8eLw}z+A^3YDLH>JF9&V!#02QX1PEaS zp&el*!g&anBJ4rfhwvc6A%qtZyzA#VVczUC-bS#kx4Ni^-7}%ug#~}|&&?ALquT#v z;@_dPiGO!aIEXstGhFsC6aPY!#b8bRaqO2NL(#u!1$6SOi~-|sZ5w!FvqSPTC20qx zNwn!w#3Dzz9pMuSmm+PWzJ+Br%z&t!nvGwsmIPK2jvY2uqb08x>xHQErAZVYPAF$D zz{SAWv4!Z?X!wcn33W-db209?Ps1BMtqTP(<{$&X3%BLND+`Cq;oi$yie_Qv$%2k0 z3p$o8=vcB)?JVe6vY=zhf{rB%I+iTxShB!)vY=zhf{rB%OVKPWMRlnRZ-e>^GqDbr zpE?sBF6Sx!KGuLzTp#GK553d}`s)Mz^@0BSK!1Ipzdq1kALy?S^w$Ua>jVAuK>+K6 z0M-X7u8-^I{|lK|zJE?#lCbZeKDd$SLt`H{=Azd(y?WSKjL%_w_Th6UCB74uVlgME zT(vaiZ6sgxV8It;WP7BdXP~ipki5fkWOhbgQ+H|Uvc|l;#$~0Y-A#G6b6mcJ*5k3> z^ft%OD!L~;U3La9Ju2@pU+_Ih9sV=TBX;`F1fS)agKI8vEn3?B z39p$GU1XlZDJJs6JK#6Qd=>9VC(d$>;UjPZ@|R!MX-C46KHOrW9?>J$(Rl^W+qy&O!B_|Smw3CtTq z&YO)cTa0z{FTG}3cCaRBGjjHoUe0qcUsDUl`I@^tj9YWI6`zgt*+{1i?E=IXgyXdN zphY^C?@7bW~_K8kKF zIM_{ov}rp&XW+Awk|9)qGWEq84W_?vh|Hr9SX|}h($`Xk6_qbM_}k=0G7W_Nc{SBs zmDJ`8BaojJ=Z-7L?>qOhg%=*))0gngJ51Alr~S;`Ke@3hWA?m~JZDVWw1R1AEnhyc zZJNhdUX|ugofhxg`Ms~q%`7M>$c)P?TT(N%>z1Eh*O2N@tE}J{wHY1u4yOxaCkGSY z9hU7D$;i?J!7DOi*uvqcl7?i45i7ljMi&}{Hm<2?lw`z{5$7IlR0Dh}ZA6rq!-h=J zgz#-tNTACudgI|xqL(9cPWaNaJYOvxL(KHsGkA;=8wx3KeuQXVjr}!e?7ukU+`(q& z&trWaU+gcPEkSo&%uhorUu^$J`zJ|Wb0F3+^1sZZvqQU+lFTm`hZfjc9I>IB%*z@^ zj@uj!2jC&%QaYQU}!~=1}198Lyal`|0!~=1}gVK8- zj(8xBcp#2=AdYw-j(8xBcp#2=AdYw-j(8%P@zc+Qn^LseqVC?Z_^(Dc<@zF?E-lM< z?2Gc6pxhekniq~58qCMwss{`g`$pd7vf`!}hK63aX+`secWwxIe5vL?p7p@?wsXGo z!Ja)IeEXcX%N{t(d@0puo}aq((tFPP%J;s~(gHZ|o=caehHg$x3j9a}?91nOK{(KC@9dU_zq)4qM= z#!BwbH;=Psouq}1E(k0KusmeT4b=Y^cG=5GRFvz=Asm)NI4p;7SPtQ^9KvBagu`+O zhvg6s%OM<=LpUsla99rEupGi+IfTP<2#4hs3B@3if#64|MQBG@iEtjmr3iZv_8~lo za0uZ=gnvVL2O+HDE03u75aBMn#au0S4&x72kg}lY=5dQc|A{9oZpd$KZJ)LBnlr1~ z|L&i^+I`iAnnk;xy0B*BinesS!!&RCyUHbX1@0J+v$N-GLrYWLCGF=dIP13agR>T$ z>uk!*OZRl_ec>z5g`W8Ix;f|Guy*(#Z&{HOT-h+Sp{6wHXYZ$Frp37bSlE8m_qSJX z>?&XMH;w(K*3&wsNYJSk%$Gy ziTJIIXg(&DA}serZLq_-5i0@2JKn1$q$uR+Ci4}8rFYA`8mH?gXN`ROte?Q4<>%+S zZf4+_4wH8?JC36rlITwt(jIqlFeH*twzx4}%%l>9MYFL2ST2EhmVmY^m}}t*$V{VS zAk3U`IEb^-asMCx%XZbs4oA`-*LrOCjBJQUQI3C@ef)!-{Nx0CrM=9X!t&f_`?CD6 z|2eu`_+CH$9L|C8ceB9TpLQL>UKOuhmz7Z}g|1Xf=t8kjU2Qpm4#CgB^1#8z@DeEFBBMWCQncpyNTEqM$vuAhK=jPUT+8!zC4CdwrJ4;F< zUzypn=C3R-U(q_NWZ6aS?ZeATX0@&?D_hCGhuhmPT2|6kIJdX7v~OB( zb2(?FpJ2}dzN*^1JSyoVSpc!7XYJJBW zJuTlE972isj>}gog*H>zBeaYh+#n$C*IMQdR#se%x$zJ;1}Hew%_tSr$ry1dxhd6l z@HVU-a_xC3xc90y_W|=4m$YAOW`thaWZoT`yRBne=w-8SQ>e{;j_C>g_u`Kihkk1& zE`}!AX54Kov;UoADTMtZu+$rPS~;1enr)~@I&vDq|j zHM#b8N0PlhTcNKoEv=9R^r~1N*?u}Jw6_JqznK&p57)A>W@2oz zr}?a8#d>+QIPy2AW@da()2sWcvM($zyw)QX~%tJHiyIc?azLTXYm6# zSHfLn55U3zw)hcG$Xuqfl?})UE`DNG;K{7Wo-r0xcp?Y8QqXpf*;zz45AX{*e3`U1 ziCX({FUBGpYooz(P|NKFCy2V*Co36i3IUhm-YiBvcTead`^B$LeR$4!H=UW=p6S3n z*Cn}kK4xp*5X!Odh=XO!@^ycIUaiMn;g0#{13kwZ?YoX&8LsCY&by77W(Vd$)Qets z^YFg$^~}fLDX0~6O{gntJyS8u6IF!gPqJQ~RL>O7_9@nEKOObtir6~M{4Dw`$)7%?_924;MI>+G5LBf2C_)yZY+2&{xf#(fh$ZvByn0kj6t8M_$Os97j&x zFoGo@)ov*el;T_o=}FF{q!|@!al6jUIh}Lh>zUi}=y$uzW!?!cn@14sD?Km6oOJH z2)VIOixC8Bp^E1V?qSO%zdk{49KDAPyM)th_a~%J!!>NyHET)J(i6D+;= zY%bRhr}IVRG$C))iL8%&jw^#y&OuOVgirLr!i={_ki$mo%;FcvCdb^tSGeMCk4cGL zgjc*AeuXneuP}`&=kIOlC_C=A=I%S@XoLjhAF&|7nR4_pHQXL>2u#zIkz?@QuqcoH z%xcS)syfwW=I`7#w`aqKp1Iqczu$Updv|yHSr@Awuej=P{r0axPk*MZ*bdl=`Fzte z5)v||`+PGp6J1}6{1vttL%ud+m-7eak6a_j_x~STv0XW(O*3aUm*(V@HqV^dRGL#0 zu@!Um&ul2p%q(u0nO9$&kx^WqH{MpP*p*-_aveNfTdmuRXPa}9XV%QjZLF)wDK4?q zrQ`=@&TOm;xR%wHJwc3f!= zI{yLmb#k7DYsJU$wB?C$F^Sp9m!yi&MZc$M&K;U3{$;WaA5O~RXnw+QzM_X}?m z-lejAQ>D6Bc%Sfo;RC`4g%1fIRtX;wJ}P`n__**1;Q`@6;giBc!o$KN!e>>^=alF3 zD#;5_NA|9&{V* zLASvkbQ|nJx4|BC8|*>1!5(xQ>_NA|9&{V*K@a+f+VMhRv9L-Q5H1{j2j8{}JA^&L zKH)Wb<|g6I!dryd`9^ zUo-j&aGl}<%6U*Z4+)2rvR(0=itkeV8s&eJ@MhsH!hOR1!rO#*>5b1T{<82jrM#tl z-WI;2oZl6`FZ@9GvA+F8cue>y(v#2{^MP@r{|c5YT+K?Ug2HJ?ODZNQ~aNm z^S=sT7rvuB-xa>6a=x$l2f`1P@~PsVBOjmo-KT!{8SHl-#_u*D``xF0_hGa$&VKh{ zv=UigpZeX0`re2*``xF0_u<^pm58(7ed>3g!G8B)oHA$jyU$?1`!HG=XTSR}W*KL{ z`!EuT>~|kVB9Z;>!$>5u-+c!A-G{NjIQ!jau-|>4eCES`_ZjSWpTU0j8SHnT!G8B) z6!2U2yAPv)$bL_T%u)-C8@&hUR@^I09BoHR5_&Khz0Y{Eo|!s&2=Qscnc!Q=Xt&pZ z`TDj{@nT`==n&GY6b}g7MsGsOLSehGL%3-44Wus~-2q&toV$fR`nFf`KE;9RnG6pKEYIrEUjo-EWu4;dN2x#@P+bO9iy`5#QZB|>&Sc{f;ibx9yT09_l%0BJ zmr|}!y{;7Q7G5R1TDV8JS9p!;c$4sE;Vr^_!u`VAgx^$M?iJoAykGc$@Im22!iR;A z2p<(bCVX7@gz&p6{{h7h3ZE1n5*`*F5gyf(-xEG9d`9@J%Kx06d0r)aLGc%bKhiTV zEBzIvyrq_TTS%{P$D9D z9`kG-#wO#5pz}OXATe3bV75_l^p;A6o{Bz`! zk6Nz)x`ke05~w%dn2BfdF{b!Tp|Dt33YT5^7)?wM2x~{bhIk!v&PO}k1FRo?9@sc~ zF|b7`t1$}l!I6jqddr~RG9(;U%EjQT`Nk!}?MmOF_)dMhODWgrjW-Ez7TzMipnuZy<$K=NHvs zCs8S+I=`sSFRJq!q&mMrs`I1GUj>rt{NVXSQk@?X8j)1zhlEBX)%hWz5lMA^aC_!V zs`G=-Gft}W8>Bj1I3gs~;o=b?sm>3c&lFOfAMy`VNOgY5Ja1r^E)FyUAN!cgicmXZ zvQnmka*Dv!i8G<`E<%0zWa(%ba3S7R1X+~WAzY>>yM;YU=~cW>@#TuI5?(62Lb+Wj z+%3FHc(rhkaIf%T34$AwP_zpFeCD1K1*r0|gNu<(fRsGj_u@M+;Q!e{la z7xc`F!XGL96~*6E%X}#O98Z>_-F^s6#Qa{0b|WS$C0}@j@Jius;Z?$`g?og1h0hA# zQw|>rKSv6DyFzv<)2J`gs4s&A@&-~k-pe%J%g_tIM!a3vAzTD5SB7-~)BA)gG1AL0 z8#2!|!gazyLmJfs{vb33qcvVnw<~>z;yd;2E~Q+fd~OonEWAayPq<%r zoA54`@L`qV5#gi4$ApgypAa4p9uz()JS03UJR*EvdA^|di^7+c@`~cG>0NKBgl`Mq zQJLQrzNdD6U-1uwA1dWzJ^6|7nDA44TP03gB~DuB0?BEs#A&O=LO_%d5G4de2?0?;K$H*=B?LqX z0Z~Fgln@Xl1Vjk|Q9?kJ5D+B=LO_%d5G4de2?0?;K$H*=B?LqX0Z~Fgln@Xl z1Vjk|Q9?kJ5D+BT z9mHGi0aCYsYaxZyEd)W6`+(Ff1o2)zL)}6UG)bgxAqdKR4M^QW5R}O{bqhhrr9(jK z7J`tDh}10vL77DA7I00aa1q8uP`ZVnbPGX)x`iO5CO$*mLJ+bON84x`m*03qh5PDi7 zbqhi0X^GS=1fi!TQnwI$K3qfdW8K-U`2yHEqx&_=e zCZuj5Xi&EhG^kq$8q_TW4eAzxpbeIvx`iNUm?flcAqd%zNZmpZx-6zsw-AH`xDQC( zLJ;=LwLt0?a2u)Ugt~>GLESO!&C)3E=_ZLE)3aL&C$tBf@9(-shC(3rcxW_=@l?mH%xa zd#zr*R*zm|+p^c{)obIyAYN!FD_y|(C8fwsLr~%`baju3MFlLEd4K<+siChge zXf@QJ)lh?0Lk(IDHE1=|pw&==RznS14K-lw@aT=<0WyDI+y#SaRf z6dn>D79J5E)sx>7J}rDk_^irLj@k(NVF_Q*^Dhd2q-VIAYXlXsJZ}l#7QUml;&JIl zj7`$X`-*=c{7@+$>&Z`q$Aq8i+t2Y{INF1Tq)GJC1o}CGc%iUZSS1Vy7eW%iP4&VK zVUMs+xB~jICXCJ3fa`>V%6Uk*UARkljdHt5c(d>p;XdJh;cdc)mGdLQM}?0G9~V9$ zJRm$Md{THwcvyHu_`Gs^LGc%bFDvC0#otn?-WGl={6u&R*o-#eO?KSlZpLULa*w+i zKNF8+x_%q)^9d!%VaZI6(xK3d4SHNq76Ej*H+K}iKu14Fof%_c;u2XzK>BGW{g_j6-2zLtK z5xy&YU-*IWQ{V!;_&`;9X1!f=etwn|}ywQGBkxT|N2{Qr4m`7N87_Z&3Px zel;xIDSSuxuJC=~2f|N*9eQtv-rIq-{5weDdpq>r4!yTS@9n?}o!|1k9eQtv-rJ$~ zcA($+E55e_eM;neJJ8NVzPAJIOyqkPVeVT3bPK&g&U%Y9-z|a+#&3s(7aM0Ieu;30 zaHrDW5xy%VCtL(h$X|URBqv-1NpcDPu?Lr^2bZV^m!KB>HG6Q0dTn+`S zOSj(At+#aREj^;f9#LbDsIf=X*duD}5jFOR8hb>IJ)*`QQDcv&u}9R{BWmmsHTH-a zdqj;rqQ)LkV~?n@N7UG>_x9?&y?Sr2-rKA9_UgU8dT+1Z+pG8X>b<>sZ?E3ltM~Tm zy}f#GuilG`2|@F{dT+1Z+pG63$13JZV>xJ^NL}J`$SOqY0GC5nAyNmp9I^_LI>6aM>u zt;GyW&z4jKa@+j$+zPh>lKf^&(R8>6hfwFUhB0l25-RpMFU`{gQn8CHeGA^68i4(=W-VUy@J1B%gjsKK+t> z`X%}FOY-TLO$X5XMB17TpgoDSH61{E5@~BX zfc7NP)^tGDeFL)Y8<2J1fUNrlWZgFazVR%cp{?nFtosJg{wyJFO$X5aMB17Tp#6!o zH61|v6KQKYfc7WS)^q^vPo%Bs0O*S4q^;=y`hq2)t?2;zf=FA_0rUmqv^5=o48|6q zt?2-0&jX~b=>X&|rqI@O0CE?Rwx)yN$@77v6kZL-lnhvR^L#pYJYC5Ev4ymR? zs_BqwI;5Hosis4!>5ytVq?!(?rbDXfkZL-lnhvR^L#pYJYC5Ev4ymR?s_BqwI;5Ho zsis4!=~mSARbwk^`UcRgI4y;?qP|S0&Bj*Lmzb<)@`be7*oykT2Bgi#R_z~c)&9{| z)RgJ8+1QF%m`IzAt*AATHXB<}YyOHh8(UFpB5gLdqSi#(Y-~lXiL}|+idr*Hn~km7 zKiaDOqpjLM+KO5;PwpgcMXgy{?j&wSt%@Je!u{}hV%*-f8 z@o0CeIT1<qd@5z}c)wk%ysqZt)#rFOdNb#>|U z+#|&{fh=jgS8eL#noqyy@V)>0yodR}Z{GiXV&tM2xhO_1ijj+AnZ!^-G1G(Y~_AkLW&kuQGky z$*U>GG-HM_%a~*QI%A$s4Rc)JcuvP{$ZA7Yo4mr$SXLXd+K|95t+Q~falK7I2onza{JgSCPj#6DJqccxCIkuh5(@y4T zC-bzEd9(|~Y|gRmWS(|1Pdk~Xoy^m&v-LdAvF&7@b}~;pnWvr1(@y4TC-bzEdD_W5 z?PQ*IGEY01r=85xPUdMR^R$zB+Q~faWS(|1Pdk}sBdDr6Rp+@8R5ya^Mo`@dsvALd zBdBf!)s3LK5mYyV>PArA2&x-Fbt9;51l5h8nv|?Zf+X>tB;J$6dy;rh67NakJxRPL ziT5P&o+RFr#Cwu>PwL#R(rmu=ND}W!;yp>cCyDnY@t!2!lf-+Hcux}VN#Z>zy?j=_ z_DB-%N#Z?8yeEnGB=Mdk-jl?8l6X%N?@8i4NxUbC_ayP2B;J$6dy;rh67NakJxRPL ziT5P&o+RFr#Cwu>PZIA*;yp>cCyDnY@t!2!lf-+Hcux}VN#Z?8yeEnGB=Mdk-jl?8 zl6X%N?@8i4NxUbC_ayP2B;J$6dy;tXATBzHiw@$VgShA*E;@*d4q5Z1po6&RATBzH ziw@$VgShA*E;{%|?jSBYh>H&5qJy~TATBzHiw@$VgShA*E;@*d4&tJNxac4*I*5x7 z;-Z7N=pZgSh>H&5qJy~TATBzHiw@$VgShA*E;^;@BSEKh^ynSJPId@8*&*zdul`ui z_!pc`d8tS55O&H}eSABkcL+P#A?y?aPwUt_gq_k|*-%>h8SfBwYNhPaJA|F=5O%Ud z*eNvpjCTk-*&*y?hp>|!!cL*&SG_~nDbKWASG#q}Gd;T6ty7-q(baC9@=TB3A?##_ zu#+9aPId@8g`v;NJA|F`6OY~@>|}?qlO4iNVQ7ioA?y@-9=$`@$qr#BJA|F=5Oxa5 zM}ia>rob=-hAA*ifnf>^Q(%|^!xR{%z%T`dDf!Qnn#YyEDKJcdp?+7cy-rob=-hAA*ifnf>^Q(%|^!xR{%z%T`dDKJcdVG0aWV3-2K z6d0z!Fa?GwFie4A3Jg4AWqk2E#NMrok``hG{TNgJBvB(_oke z!!#JC!7u}c88FO%VFnB{V3+~J3>ap>Faw4eFwB5q1`IP`m;u8K7-qmQ1BMwe%z$AA z3^QPu0mBR!X2385h8Zx-fMEsap>Faw4e zFwB5q1`IP`m;u8K7-qmQ1BMwe%z$AA3^QPu0mCd9X2CEEhFLJof?*a6vtXD7!z>tP z!7vMkSuo6kVHOOtV3-BNEEs0NFbjrRFwBBs77Vjsm<7Wu7-qpR3x-)R%z|MS46|UE z1;Z>DX2CEEhFLJof?*a6vtXD7!z>tP!7vMkSuo6kVHOOtV3-BNEEs0NFbjrRFwBBs z77W#`TiGcGhB+`)w=-q$92n-nP&~-Wy&~Xb^mj@Q40B+Z1H&8`=D;uqhB+|Ifng2| zb6}VQ!yFjqz%U1fIWWwDVGay)V3-5L92n-nFb9S?FwB8r4h(Z(m;=Kc80Nq*2ZlK? z%zBc9MX zd-Rtg^d=xo7h#yGwX_^eVecS27;G%I?yYj7P7syL2Vv z(W~q(A?BIA%I*?YKK7jvU97UZSY>w!G0*8$c9*VXe9m5FcL_I-US)R)D<6B6-Hq1W zXx)w0-Dus7*4=2`jn=w@jrUvYZnRd_lCu$8}M(b|0?ndiw zwC+ahZnW-3>u$8}M(b|0?ndiwwC+ahZnW-3>u$8}M(b|0?ndiwwC+ahZnW-3>u$8} zLF*p0?m_DwwC+Lc9<=U3>mIc3!PY%!-GkOWXx)R>J!sv7);(z5gVsH0-GkOWXx)R> zJ!sv7);(z5gVsH0-GkOWXx)R>J!sv7);(z5gVsH0-GkOWXx)R>J!sv7);(z5gVw!h z-HX<}Xx)p}y=dKw*1c%mi`Knp-HX<}Xx)p}y=dKw*1c%mi`Knp-HX<}Xx)p}y=dKw z*1c%mi`Knp-HX<}Xx)p}y=dKw*1c%mi`Knp-HX<}Xx)p}y=dKw*1c%mi`Knp-G|m< zWRl-cx_n~zkTKA!KA6oaJwL0`Fu2oeh5AQ?kKD6#b>pryZL+d`Y?nCQ7wC+Re zKD6#b>pryZL+d`Y?nCQ7wC+ReKD6#b>pryZL+d`Y?nCQ7wC+ReKD6#b>pryZL+d`Y z?nmo>wC+diezfjK>wdKEN9%sH?nmo>wC+diezfjKYjH;^&-9~pKU(*rbw677qjf)8 z_oH<`TKA)MKU(*rbw677qjf)8_oH<`TKA)MKU(*rbw677qjf)8_oH<`TKA)MKU(*r z^;6RKdG()nW$#nc&ZF;FdP>@PbY<^TIyaB5?0rh-=FyeCPwCt|y0Z5vos~!bYW9?* zcywj&Cg$J7{F|766Z3Ck{!PrkiTO7%|0d?&#Qd9>e-ra>V*X9czlr%bG5==f-^~1* znSV3$Z)X0@%)goWH#7fc=HJZxo0)$z^KWMU&CI`<`8PBF7Uti={9BlR3-fPb{w>VE zh55HI{}$%o!u(s9e+%<(Vg4=5zlHg?Fn^xfyu73&w8!Dvygapec}dj%l)jxCG`cn~ zFS&k?YxDBd=H;oa%IiAk5A=*{^YXgd@v&?3^3>+#b+zMT*XHH5tE2A*?do_=*XHH5 ztK-qNd3kE{^3>+#wa??{U7MHJZjX;$o0nJ3^S3m*HZQO1qD>lIo0r!w)LO0S8p+SN zHZQL$3V+JAd3o&+`x)2f<+UT|(Y1MbU1|7L*XHH5SLFA&HZLz!t&3~(@s&@7} zU7MFzwX;Xp=H=xN35~AJ%j=5HXZT&-@7lb)s-68F*XHH5zvO3*GmbO5HZQNbS&yzr z$y1w`S4E1SaYagAS8M*%45MrF@~TnstFFx(AlD7Z>wc_bU%3sC>jubm1MbpzzO0dn1dEbDoEbpyh|XX`7s0dn1daPTv}avPA= zKMtOe)`vB^!s;1m>e2N%&rnX?5x$V+9{6wSc z>vriJeC+zVT{;tg%5`qLB-f+s+;&N>N7uRSl3b6jbK8yF-N@aI+}+6CjojVH-HqJc z$lZ@kh=%Ddyu;a zxqFbi2f2HYy9c@Y^`055?;hmtLGB*p?m_Mz1)-HY74$lZ(F zy~y2*+`Y)%i`>1)-HX0^k-HbUdy%^rxqFej7rFb8yAQehkh>4L`;fa2x%-g254ro0 zyAQehkh>4L`;fa2x%-g254ro0yAQehkh>4L&r0s$;91G_=tz84Gf!xAZQ-+;*~iXZ z&uUJO&Rx&qz0cyk&q|7)aqfCnQan0$Ju4|5ox29nZV>GT(QXj!2GMR1?FP|q5bXxh zZV>GT(QXj!2GMR1?FP|q5bXxhZV>GT(QXj!hLAgi+#%!+A$JJ5L&zOM?htZ^kUNCj zA>V?_ak>da`z*5KXUgYcRzCX zBX>V?_ak>da`z*5KXUgYcRzCXBliGu4#XSN&%>w%kL=RZTa?&Wfrfl-xte zRZSVk&WeYSdkDFQ(Dx8>4pGdV1|9{p?AFgugO>`V@`Gdax8;z@zKohm{R{>|eWv*_j+>XL6XG$zgUThuN7NW@mDkoylQ#CWqOX z9A;;7n4QUCb|!~)wdS)r%K7`(u3=rX`5D*453@5lEW|9)zjh4^F^~SWYnYwMVRj~m z*_j*`hK~f#3B$u0o$;O%h8~^qo+INuC#`+#jQ5;0_2`WE92xI9GTw92(a$*JJtw&y zo$;QNT#wFpN7?^8%Kqn3_CJrZ|9O=C&!g;r9%cXYDEpsB+5bGs{-@X><-;R**9hJ< zf_IJJT_bqc2;Mb_p4MN;1zv= z6@7sfy?UVujRGtB0xS9gD|+>*(t4-BioU>#zQBsUz>2=WioU>#zQBsUz>2=WioU># zzQBsUz>2=WioU>#zQBsUz>2=WioU>#zQBsUAOto^u2=L0;h#zQBsU zz>2=WioU>#zQBsUz>2=WioU>#zQBsUz>2=WioU>#zQBsUz>2=WioU>#zQBrJd*mSC z6@7sfz4jD2_KLp1ioU>#zQBsUz>2=WioU>#zQBsUz>2=WioU>#zQBsUz>2=WioU># zzQBsUz>2=WioU>#zQBsUz>2=WioU>#zQBsUz>2=WioU>#zQBsUz>2=WioT#)kp`W! zSM&u|^aWP*1y=M0#eoTHf z6pZ0NWAdLvI`-XmWAYr2zT0k0KI74M+l|RvJo;|CG5Ll^-)%Q0e<*4Eb?xGg$@(6B zx80cR?$LMKjmf4SeYf41EalO6+l|Rm9(}jnn7%bU`fj^1;qRG!x80cV_vpLr#)Q8| z-)%Q0~A zir`ZOpCb4a!KVm5Mer$tPZ4~I;8O&jBKQ=+rwBep@F{{%5qyf^Qv{zP_!PmX2tGyd zDS}TCe2U;x1fL@Kl)$G1KI*6^R7>Df0-qB2l)$G1J|*xeflmp1O5jrhpAz_#z^4R0 zCGaVMPYHZV;8Oyh68MzBrvyGF@F{^$34BW6Qv#n7_>{n>1U@D3DS=N3d`jR`0-qB2 zl)$G1J|*xeflmp1O5jrhpAz_#z^4R0$MtP;PoU1{x}G_%?-U=qO8mI8`ePbh!FXKx z+^@QJ`nay&R%mqX^l^RHOlWkK_;GzNH)wPP<8gia_*GYlAJ_MbM^}j-SGM#Fu3$W_ zZ0XTe;>VROJ-SN#xU!{3SBW22=JBzs#E)y2%rm=6{J3_>Ji1E!xW27Cx=Q@GzO#Jn zD)HmWEq=yT;>VRqUNX(Kj>pk-98Jg3bR12`(R3V5$I)~gO~=u698Jg3bR12`(R3V5 z$I)~gO~=u698Jg3bR12`(R3V5$I)~gO~=u698Jg3bR12`(R3V5$I)~gO~=u698Jg3 zbR12`(R3V5C#2&e%DldJLtSa5^@OzZvG3iOP!znV(f4jlC>DJDK1ScWF`-!S=zBNZ zkHMqsCnu<%)LompTVXOURv0xbsma$+N3zn7H?$JE9U>OURv0xbsma$+N3zo5984H%NU>OURv0xbsma$+N z3zo5984H%NU>OURv0xbsma$+N3zo5984H$`Gqrby1PqH$a6at>dJ(eexkvy||EKe#Id32BENul9a-D7!DXn1swWijgr?F#-} z!JjMma|M5{;LjEOxq?4e@aGEtT*03!_;Uq+uHerV{JDZZSMcWw{#?PIEBJE-f3D!q z75uq^KUeVQ3jSQdpDXxt1%IyK&lUW+fdZ*|dZ*|dZ z*|dZ*|dZ*|TJvYki&k}}6HDRcaiGAC>LdH<3! zCqMVAzHeww_Oe9ZH#8@EdGvilbF!C5-#0WTdwKMILv#F+GRH3|bNrGrrzr4Q`InSA zq36-Rq|6C7&+pDcbBY2>^e-uM@_C1p++`qddmcNUscEIcBPv+F`z;MUV&@DKGc z&z{E%^soBydD^x9*8K7L>Q&r5e|&*{PE&oS?Ij^mC*`*`%&tDR( zy7Yg{A72{EF8R{@@si;7H~jhh@nxdC7Wppoi&^HfYd_w)zC9LQvo;aFq3Oo(ZOd+5 zcC&_C!zJ;LwZLy|^KXEgk;Iq+qxG|iFHLi-RYm7Y_Ze9HgwO{%( zX#DIyeJ0EnZxjZxsApOqS>4za39oKk7j142uZqN@Ygz6 zjT>%W*=Pjk-y3^{4Q{A|9bOlanDBKEF~@bDvaaflO9hZLibmpLol#R`EV8<-S<+WF z%BDJ*c&jY7zBLhPNkkj{LQ`wYY5|&vwyX)Sk40N!(S$y{JRD7g<7->nnpcJ6k;uC6 zSKFcqnOa!2#Mf)qmc(`84QplDHlMHLuWVf<--&!J5nkDr2yft%tD^Ds&5iAKp_+M3 zw574xct;cQQ$O9@7+WJS;?c(=@ulI1mJ*5>Bc4LTcHqb+7^g;AtsRUL?U zWL@;;SgV7|j*)1LHplT)ooijYcwJpQx-q;u5>cS6@mn@X&&1lB1a(v>pa#-5by6%== z^!$SN#&4-d$(I*m`Ic9tom>Crv~$BR5_99fN zKPa92-jnA(b%vYt+9P^TO!GyNAC|65d01Lqc3o~A7oYbUNwv-~Njw#SllA{u?Uzf| zi5Wks&qp;wv&I(A`T@<>$iJI(8NGn}tuKG(W*se9=jWgEG7$oNSfBj7=8J1K>(vsx zf8It>J!j-?={ka~(jx|*3+HvRjD_dIk{Z|N8udu%{f)vsBKuhXN11Omubhg6b$vBo zSo$}-{_3CpdFK|_8P)y5Uc7Kl)^)XBvDbt-TBldl1WNz19=7`$EMRZ4El&2MHtA_k zw0AAU!GiaH9t13PgJNT){x10Bsq^}?uda<_?PO06BeSlJW8fhnxo{rWy?mDS$g5lR zMxw(WRJW0%&Ng%8gr&P}WgP6cb=`fw&3d%VBNNv<>oK=pNA?}ZVw88)KhdP;TQr9~ zwu#qTgj`tOWW3eXNTWYt$@X9WE3D(Sdd+f;uMx8EgoCf@IlrSG<#oTZ_14dytEF4l z4aBsq(#EGxSZSr^T{WMFBEi>?wo>o1)D0)eTqQZ4*V@|ZCp4{}^BTS0f}RWh?ej8v zzgV{Cib?yrXV`}x*Kr&xJUpL;nvfXRv&PG4*RgW^S+cP*qVd34sIIr4YXU9LU&sA1 zJ?A-A>fc7|R3B~AC+*{o>RSG;U_vq5d7=x$UXW^9$a)O3&2Kq(w)T zV(c74t@4gKHpa*{i|PM*)YSdR$E!~92z$S?&&_(LCHeLGx0wGr`#UrF%v&Yr1gf2(*2dRgXU{d0zsF9sS6p_qAFP*! zZGY#nX8m>kTO-RnsH;9x=DpH0ez{LB`2UG3Bkk9m$F5EA(=W=@Kj**Do3$fyp5Ar7 z_H`Bo7Y2*9gYkOp(_9=}q6)+%;u#h@uedkg6kHL!Ie1I(*5FG0=6-eXw&0rJS~2;( zLq>V0zMS4Aj>mV4E%Cil`^MmXy3o2wZn9Kr`GWa2F;Lwu2BJGu^Kh4TN0;l;>?7*T z{!#6VeoTq;9=YAU!6yX3{p!K|K=3K`EnX4)Jze}hs0+5guM6adf``>f_7PpqeL?+K zzo>4fzY+YV`g?vkXb2iZ=j#rtbdU-DRnV(nnX|z^(jL|3;P-=Vp$mdLze`95d4eKrJ*IkU#QCF4?}MVT^4#{=yFxrsP;mYR(~FPQ}7>y9|kW4KMMYR z@Sk+=?00lW#{S@d>XQe9q2Rmf2{f$E6??Q7_s7BE;EzIA1mDz-Z@+B*d%-`|FBsd^ zonVvhZu*vX?s|fM8G1`_B>2~%w}!3^T@|`I^tRA7p=(2L54|H44!tvUUFcmGeEM@M zRxEC7i7s1q_p4C0e^jTUTidN$d5OG=u4!$FJi54X{_iK||3>P6 zFZ^_4Q(Gc(VN3nbL-jxL`kyb>|2)p0i@vz3HPP7Qi7$Hm!N!j z&51@ob=w_xeCRUvue88j*Es*NHL=FWB1^rqaOtY3&MqE}^RJ8Rr_S+32;=Y#P0?6W z+q%`wk+0QX(l$(MOZ{+VOuGOaE_wM}_~+|mTC~^SlZZC2s=w!rYuj4ZG{)N2H8-{; z>Mz#kiZ?bV6pSIo-F3m@pZ-))7Sg{jQmlL`IPc#3Ry-UmX>LrkD9$c$(CQt2{lu|8 z`KWftf+dVs=rzAyAH75Cs1GTUL!WBlQ;!9;^R7Stv*-VC(M5}nT=-jyuXx??>(^d% z&qd7_Uw-jlT=Jevrj}g3cOl3=i64it?O;2Yuob z_xjtf|Lu40eb1-fd;NR=`i9bt-+A9R-@p3(-@fUNn|^q6=h7RNj^2{EW&bUIwQTva z;_`MJO==S&A-hBHXfAF#ouKeKO9T(oQ;*KqM{NAAkJbU7sl4_s#p? zcmMZ3x%z=_#baE+A3F8xvt7p zRj#RWMV0HRw(H?qDpyjuj>}XdS5CQZ%2iXYnR3OH>!n<4<4POX z*|^HaRZ^~za)p%Zqg);3+9+2>xh~38QLc${MU?BI&Y|^M(9$=ZYMsr$VfGDkZOd>Urc zFqejzG|Z!677cS~m_ft*8RzWwTI_bSeiOV{zX)Ee-vgZ&9+MrPmmQy%9mTe(hbuB% zf9v`%*JAiy7*~e5F3eS7t_gERnCrn@4dz-fSAw|?%vE5n0du{Dt1Vpp<=QV-e!1?; zRbQ_8a>bYLgmJZ(YrS0Q`T_xcf30FwCKEl-zu8nYIgzF+)4eVNAR|2~Z z*j2!;0d@tj>mXbO;o4tUK)C+F)emPUrjP16*X)%~>-+XjUE`X=@_u=QyVKk+T%Xpx zH3wh`G)JHr0?iL-c0h9jni zp1JqTyk`bCv+kL5&)jY1+cVpqx%SMoXP!Otwasb18x;XB%342G1iYv_vPz1A7iF>M zWv%CBE%DXs;Vwe%A>__r?vUj^I_?SPj$rP(?QUT11?Em*?k3@067D47J`(OC;T{t1 zAmRQI?jGUZ5$^eAE_5@YyW5w0eYszRyG6LmmpetcPlUTf+(E^G>kV9O;93J$8o18D zRR*pxaD{>E3tU~`+5%S=xURre1+FP@MS<%HTutCw0#_2aj=)s}z8ll`V!D37)dQ{_ zaOHsO23$4ZngLe~xL&~30i{m2HrlAs!+qY|<;^|b+~Ljr-Q3;Hz1`f|?d-6W`GKF5|E!SztdRda zsc1i{Xg{he@wdyDo>YXJ3w=mYJ*21}QZygc-Ec=0%|nXjql)GsMe|Wb@li#mddccD z=7}{+tT|%M5Nm!|v%{Kg-dyu$nm5n9S?0|#Z-#mE%bQ)^-126YH?O=|<;^K?MtSqe zn@!#(Y>}F**C%YNh&Btywc5|_tiQPQxW??r6yBXNczi#$*bFaI{knczI-H7fk1RijE|pJzLq2_teEJ&s^f%1iS^cd8`?BwPqH#7M`J$f?-&G>D;Z?k=y>)TA<=J__u_e1(?hVRem zui3r7pucAJHm|o?z0K)uMsM?Zo6Xx?-e&SPkN2zPX7hHNwcDKCX6)|M!))E=>NZoi zdAiNgZH{g;beo^s?A+$&HZ!+*xy{OLPHr=DKP$Or<2Dz!nYhivZ5D2GaQ~rR`y)Nf zzHRPp=XCRKn|0fq+h*K0-?rJd&9!Z&ZS!m|qfi?@YIiSq|ZT@GoKM!j@Ge4X6*{sjzd^Y2= z`JPX#71Uu@=T%=Tbm@D|clPzJr)eU)sTkgczx3xs<>xTm8#I=cIV zyE&R?**5oejk`E5T-($$YyJABzCLY`A2i4h8tCs}E@d+*yH}$-HM&ouyEM8-qdPRZ zn}d5fxRZnXIJk?0yE3{bqdPLXAEUc5x)-B6F}e?`%4f3T1`BH;?sX@NfK<5Q_Qgk0hcTsc?#e;gdf1GC%SK< zyC&AxrM`x0kdHOcS)qO%rTd@t?{PicPr>~W-5t@q#qNygzKHIM=$?qPdboRnyCE)< zMTX`ra7gGM()ZdSeWxALciJIE->6U@73!lxdQ>Qn3gP-4?(UD^?g;LU;LZr{i{P#Z z?up=z2=0gAZV2v$;7$ncgWxU*?t$PA2=0I2?g#FD;LZo`d*H4I?s?#j2kv*^ZU^pl z;7$kbbKouq?s4D_2kvj+?gnShPUf%f>RFZN%5CmOJm(~O(u+cevzxi-zTX`W59Y?@=!44a4a zFuSI?HO;Jfdd}nZbnnkV*pee)f9`IBadyH@vnxoVVrRFC!JE^%z%}i=uQnQkplhll)<|8#5skuna zL~0&VvyhsD)C{ENA6+<`IX!=Y&ZfS%van}zh0f>n`qr7J^_lbSaPD`m*YZ2pnf;5= znSFL=$KK7kcz7-GaJjxu8nkL^(Dz7#YCY~#t;c=(UGE0fdfcb)kOqB+H0V2|LEj+_ z`VMK(cSwW2L)`oP27NEMW7-Y6;@2FfZKg9j3QnJ%=REbbcBI8>z8>dSV}|It-?6kif1^86Zb%UMfC;WS8c)fRacNu?TVUH=wSvR^Z%Ir$J{?={xR>5S$}-LQ~f@t zR@I%fssszYg2JwoC%{kDGkkvVq_d+I$xXXZ8R*AnQ?=NTe*`52P@3s8WcMh%Bg4Wr2m+?6pzZM&xL+iDmb#_L?nf(oR?(F{0 z`#_wF-q#Ynzq&giA@w?2q7F350I6@9JIU3=lTh#3b(hZJbzHf???5HdxDGIRnGn7+)Hkui=2ALh17Y^J;KgY*S|~D6YsoWMQE|c2lco~Gj9av lkgWM}^|$+~Z0l}wf2K}zKXQjUeKsU(nZw}<^##;_{~Jhi=h6TG diff --git a/FoodbLog/Pods/FlatUIKit/Resources/Lato-Regular.ttf b/FoodbLog/Pods/FlatUIKit/Resources/Lato-Regular.ttf deleted file mode 100644 index 04ea8efb1367727b081dea87e63818be0a4d02f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120196 zcmeFacYIvMxj#H}%I>PIv|UlIRhK2%mSx$NTqXBzV;eB0g8|2YX%5%~ z98*FIA)MyCx4Kg#`xi<80&wcXUWp`Wuak} z@z-_$%)DqxS>=B{^3YaXKLGf#^*hJ+488W*|A#TdDpdIP`t$aC4gW~L2QN5)=b=q| zHt*cKVsDtSq)x#6dh__cJxZw%LcKm9`?)Bq6 z*B?&A`_VqBWas#SJ(Ah@FO)xw^4?wJJ2yVNAb%m_`;IeaId9MIeft~#zS_a~RcVaL zx9{1zanF6mPrFc_-ro<*ps4#)$uDmB%i7fD_gIGU`?$kixn<2BaegCo)l_HX7Sq$l zQv6O}65Yi=lrugVS%zEEROeKO>1k1u_Dlo7I|1fkS1==6hp~{DpOvx(JiO8HYy9F& zR;>I+rZT1;Q0;(C*Us`Y>;V6pNtRMoNs<&*iU6QJFXmNwK%pJa#^o>2^-?yVaKHr zb~TPZ*~`Z8Yy(Drjr62Ak4V3p`Wx;w<9G$f792Zp6hzN-y$c7GJI4RXE~A64aomdI zk8&3C8+Nc|>L5#0&Fm3%1zVy1l0Bjv!Lb9spTqBW*dx*=_NshyW%to)9dlsDNj^y8@X$EiQyyaMk( zDFe5tJ1GAh^{ipX<@;D4&b>-H>yz$gZaKm#l@WF`hV}}6dg@!ae;n8M8Md*T={}BL zWe{hSk%R1Jc>`;ae#c61|DXawQcp9p{4UGFwOPJ{b>qDyINruFg7@#&agXaGII3|R z!XaSfKeD}On;CuUlpbcQ>0xQT!&!{_h~FJ4)KS?rv3%|--h$6IDVlF zu>tf~8wVPT_yc&s?=X&oGY*V}7&Dxy-}HX!t9akN=qrsq##m{=I9$PMsedScv*||k z?`6EBmo?Hj6RnAJl(uAyFVWbHGk6L3A{wK^j>C)N2^@6)Y8+M^Yn0bmIo@#x=;{ve zS0j!UbVxs8jX3B`^m<j>M0ghf6SKQdX>5d{TpE| zIEL~2m~xPXaNQ_-r-=6^aL}1}@sBtzV{9s->}PJ}Ugk!dFwRr2;dmF;d)+ zyPU0OyVxZADF)(SY$v;zy$c<51-pvf#{QFim;IW(&3?yz&wj(+VNY{~y}*9R{>I*8 ze_?;+25w}3WEZgCvOlmtvqS7Ub|t%>9bq@H8`(|lDEl@aN3;HF$!Jq24`rUqyzu4dFAMN#i_4O zJu-FM)ZwWMr_P-^XKLkCZ^RL?M+}p>Z@&8G_ul;OoB#RdD{sE==F@LZygC1k*WUQS z>wka!udo09_20ez*6VM+{@UwLy?)p0Cx6!X(>n~Xt3*rxxBvYA`2D|&Uod8gcf*8t zY*S!@4UTLaEuG-F;hlJXa6$>Lm{7V_j`#w;%p)V-iNV1U-$Zyc(>qa5SM{T#-id^+ z@eLCN^fRH$J5f#-N+yhf_6Y+HMn}hlp=0sLgt4ReF;G~?So?%?V;11#5LCCi zskn5)RDzpHW8MzDW{m2_|BFWg-e&v^OjtK&W%_(*c|ysAsd&OvR63DZ;`R2RqdMLK zcQEeW}rODEFic#58{2ZW{MQHeS8ydiIoAOmGv-DAG>Vox#x?{dl#cNY7;m{_ zJQLSrqZodGjpM!GoIv+@eP#glbkmraIz(NlLaPdI0FB}YkWoCL5;0I&lmowja8bLA zzu=S1fNylVMhuCax&u)^p$4Pf2{faZ4smtXz0-dZU?bu#BKxc)3@ER+X7lIIs+yXuXJd10OrHE+d>m&jD6Nw?q`=g%DCM& zkqQ`3$%F-`K*@x)Sg(9WyMiSXw&Ek87b1)!;DNSMsO{5+FvCI+8w;>UusIp%HqCd7A_EnZCF|_l-sy;sw)#&~wmiKlNQ7hCJ%7 zkH(6c6m55`hdI>4F5tl14GE@qD!*jH9;={$eoUmJ-a>JefvX~c7~FQ_M{&u7BL-bU zKLm8CxFYC~xFXQ9k_l%Fw48nj&Ni7|jruGRb(D`^mqAV3Zo|Hy^El&I$ zeM~7ZbPaXlo+1?s0T=!A6l~w8@ZYuUI*LZ9&&cmF7I{#8aOz$48AYA?OXQe<{3#Rv z@rC^B(#!HYs@)JYY%<(#_^xr#c&|w^`As`a#}ljxcO-Tu6(v2Dyeq|!vc{ZielfK- z^;c=;wC1!87Pqy<`YqcgyVZV?{cT6PQ*!QgKHv(vUQRcq-fJeHE`(Hdh|6N~>zFda_!l%+Wt!jFp>6gvYyzsoSd0%fSYI&q}P3zI{w(!r}(%Me7o7?xaKhg2?uKMnGdmiX{ zqUZUZ@AUkn=T|-N_D=Mz=-bq{x9^g^BYn5_-QD*{-!uIi`uFr-)PK1DSpTX1hx=b0 zcxvG51K%I``M^5^e_OC?Vei7>g<}hMEIhFA(83!Bf4TVmA;XY$$TL(lR6Eo@v~Xy} z5^0HfiF-+KN#&B3C4EaC9=>(>?%_vJaEdBAa_eaJ?c8nYty?w<`SK3z| zSo!wKzpRX`9$OPxo4D4w*1tBiwsCFu+M%^;)^1yS-r6h1YR4`a`_9;F>Yo+r<#-)rA{YVR-iJ&b{K?ub%tM^Lo$Qa^8*SegAyx z`76#pdj3xitUB<-fp_5#B9UtOg~~ zSlmCcc5o!z!8n3!9wtj%l6fWLio}(2kewtmiNiUBi)m6+x=KheAoj=%hNK*3G8yUG zXiPSG6EgcJcA%=ZxvMh3H#H+p24$&+seAeHLFGj`uSfIv0gnH_tEhl-8C9 z6wAS6#a&ug?w#LISYMEpl##r?rQBJNZLwq*ILliicgf#9U0ErwKYgcit}~cz34~YH z*9|rm2lHH8&-GUo7laxMs+z4%tMl{+Wnqh_(B&%dSXz~P-``xTQgl^fKb`tB{~^XK zh56VeVKZZ%EV~uIQj7*wAE!(}!b{3kVA28q5(W$Smt`xgk0|~#@C?G zB!?vxcM=VXA=X!WaspSNsXf#g>a{8>GWyNXmHvr$Kx_Fi5b;Pr1vDrW$VEB&&!=RD zO9dpl=m82u3?`uBED^=CAfb~APz8Wjqew8CIY^?6TYQ$-C9g`8vvS zy#5()AmIHB_fKC@UuzMUUyQ!Cuy)=M2JN@EgonOpS!mzt9$B`rn9uqfz#Fo7G5Nja%Wl8OK>%S|*%27@_=aFfiuYIO9A0c9{& z(?fz(;8jb(Srt){R3-?9kXWx35y+}JvmnP9umDv-t;iJ(qAQ;vGd#wO3C3!cU`VJY zih~TP#1L0OO{ON9QYp-ZaFm*u#3|s#L~B5l<`fR<4zT1jo+2lw5S=Pa<``RgXr{Md zc7uVkSrm7%c;EY>TuMvbm68+z< z&v9mbB-Xn=Vf#2!IrK%|bVD7A7bLUjlhz|s=OCq+qEeTG=qBpT)vEUyH40HfJRg)m zg34us*n-e%^!w4QF1%m&0CK*7u((D!p4CLU+;B$x|;Xhzdc#XbhPv1dEsRh{ zfyp2Fn+MB0ZENRwl9R^!hmy>}ijYaNIck<(K0g229bL+eHqXl`Lyhg844=;!$#PZ? zUASt+$pig{30t;wRb_8=FfC#>lyX0?J4+5U zIU&-(RW(_~(DYCEQLg%<%K@GW8)y^^2CE@PbM<<_oxI~NR>V>MN#x=k}4G4F|%Bm1Ys^O#R07wGSmEI5Pj?V;Y5&{QwLNr5kL^Ndt zwUD{s0JT(Awn&1sG&=eSNa>~O<@;MZ_bn?gU$(Eaj@NXJ(euxgtxt zEG0YrvJZZnm}NVp)>JRwHx0gjS^1IK;7aT8RV&NOS6(%|?CMqJ<*Tk<*1oFA?QUAt z-nOzKBcov@Ki^_||4>RA9~wSHfQN>cT|&RjVp0BAL{B_KK)6pdXEdM2k=j zsK#K3R^uR18SeggH5e2XTc&H4`=5(Z(Q@W*9bY|eeJk4L_5cHXpdTkYm!tGh4WHtbn&^TPR;t*!gut+w@@ zfuT@hV}jEe_M1m9Wxe-AZvLkmmr`K{L@HUo-{I`PwJkhpKx7K36= zTGYR_&Esj?+P^5toVazTbncHMJHMQiW-?oi<@Kj|_wZv++EVeFiv7QQ z>zxY@{^nP|+*gj*n9`EI%qi!9voU$C^ql%j%&u(__$+7T=`MlK4A8W{w6Gx8o0Dlv zg9&9+UOE@IVu@p{reDNGWsG5KR;vHoB60#W#dNQD>)xcJMT`g#?jMurGt`MKc zt6(j)@K&fuP^X9IaOz>cGn?~us?qLyxa8s7JbS?Ug_17>oC(Geb5f=S_bfiE)n~y? zYZd|=YrkRhr)AjJ_iu2>Qd089{tb4oHP8O?Hwtr7ok_Tzlq^X}Nw}ZnO!MWxEZVmL zGsu4BDCR294I|$L=cL306C536aKOxk%puD(54s7~4>|>&gXK?Rh6PDsNrVlFPQtj4 z!9@*8GAV(NIpI}}?tBiPC1CN@_$<=3{I}hiTs%l zVs6jF)`kt483skt>E4>kx$wq_qB&2danT&$Sx-{Mh-GTvVo<~oiDEQlQJ1SO&d)Lu z)z!7gbtEX(SaM3-p0b=YcX>~#C&iqY>Vu=jkpqz|4N3PvXyt_sj8- z=(~+A2^+|^i1i)TJJmw{wsNl&?RVT=2i=Xni{z#bPNjUZP_gm-rEZSQb|!b7={xeN zzfIjI{at+lv4qmFA;G9fqD|L>R+6d7HFyCy1n*9yj#cBu#S)FTOW1s55Z-03%kGy( zQ_6k)j(}hNFRvepf;CV5Ss8#HB>U?8aH4KaDf(!;qm~ou7b*_56E|8lFN$;#vbd&g z7Bai&xr1EQurK}*JOZIfq9AnAoo>4%R0D_EVHLJ4x6U>^l!3+9eQoEiuUt1cc->ca z?flwxi=VDreXza#;HtX1RdilmCw=F+$p1VsGV%nsJ@*{9e`#doOOZc3ckdgAo0<;4 zaqqpa)A@Bm)+=x&a@0G}iT?;ETP-6fNC{T^6d379Iss=|4T{IUQ(wD&D(*>x0axTlx04Dv*yQ-%m(d2cj zNygRY!3#gDJ_u`J&EVmS&z%>!Bq_z8xnrKKz{3Btar=(lt*vWYa=Z--%d+7%r>(nf zQw`yB$JDz@2>9%y2qb46ZA}doNaljhjs5-S^apbm->_%pv(u#K6D?G8A*N1t`?Vt7Kvq zpM1@K+3b(qIeC>mTd_({-*>01PW}TduWm|nMy}x(xGXE>J0s7!o4u1w8lB4#;3mZ0 z45x)k3-fcb-H7O!NNMU6-b4YBl440#og7q+hz{a9vOY~Vx3l{9|>D|Aiv}ABkNALc{#qzF(ouA#b{-H~HyDt6Go;9x>2mXHikblAVMvj@&k;Gy`8&wvDVLoUN(Q^fBAU4(1@fK){6%B*MutTNXD_ z1vwK$oroI4wt}w*Q;Xs=R1TV3izGrTBw7lOpje3i z;>yRDffa|*ul)#ckS1h*TseAYR4c2(;V0iqk0=p(G*ytVi~eZ9z&7i*)Uo}s%ers8 z`kZ|&dq2Bw{M6o-{d=yyvFFmqws-GdP*|~KM^n>|B^8AWc6WELZ^`ntjfcbIZN99Q z^=S>;Zd-HY@nF&Y`xhPA)Y!P`$fEuC7X=?bvgWpJ4M+2P);ITUZO_SR-`dx_z9(Or zDDGKRQ905c47QI{R;=p59JPeZMW)n7$Kp=nwQ}h03>SC}_@CyrY$5d#9093->wx|k z>%d$VhLFx{{wOSDxkB0!`eC}1B*Ffn*_tR27!oG^G$dL>`V|%>Ma89@y5} zxxFt~wr~?T1-QEm{?i5WPlZo$e3nm<3;J^dNl_7RCbk3foJK5?YtdcFSh}p6#Z|31|9kzyxi&%tq{sTM(17QQXT22Zv@h zR1Zh2=9p|qvqxI(r5PEecK(7r?ezQ7%lxKGEg6ZwN=h}TX^C$oy3;P>H*0ixEB~_m zXZd8juXd3COLwRbF}eb96{8*YF=- zBLM%1_Wo6GFBVQE71xpbkp~@sz)~K?oVeqUY1GQ%jErJxb(*aH?y@vD+L)$d&hl4@ z8J0^UyZf}Z`ltRZ{S)%106FI`hs_OjWu^IfelO)N#H3FZ*>`s6VEAKTD6mT`e?gP` zs0va@AvuF-BMKnXBpIoIinA952ZQy5e9{XdWDGm1@ne-y$yXssrM;9+QTu6DE&>z+ zk`Xl5Ok^WyGY-0w;LqtF-Q2wBnsxQ1T|+%piuGV}Y1g8zQh(#3(s|39^O7^npPo%) zYDRW-fh#n8pnqW3l6keYz7zK)6}2@qbd59@cUQPQxgOUCr)JZd#FkB23|Zi z0gjsq4x34{yRf80N(3sC6EHYQ5;Ksu3>9s}j4F_%st7wEi-b--a^k*;dY4D*P597y z6SR7Hg3QEh&PP_CkQpBNWHqCy319`NG$hS_Sj)9klRQNKrz8C2;K>Gk+DIQ~hu!MI zTqOd@Rh2p1palH6L7Hn)pu7|s`8+78I-AH)aoC;84GY($G#*~qJkpficG=f1?$}tm z+GfoubXAOWeKmD&8j{kOPYO*6SV|(OJU-&}g$3MHcZo_pCzr17B z#GQxM*38>}Q$)&XZK|*gm$&cu^3?+e?3K&f zcz#0brbAu5%fV?9<_DNMANFPn!e3ttCnKzsoRnZdtTq-|%C^#EKcXkVEhq%Z0kWK= zXENx5Tn9qVNA)x$I5IwWp&(il0pSrv05Q2q&LUV3HA8OEiNZ;tI8b722#rd#w`%SJ z(P)y7CUaz;$U5Lva0_X0jq3bc-ConxlNVoY^k>{E&HF~=X36ynCz4na-FD;%+-J>F zPn^C`>Zx5^*yTo)2dh_@atb)H!>TP}Plufj2V+GAey=0P;YoMmzD?$0u8s6uNis#1 zfFC1-nr_abbGc}5Y%bNnMbufhW{aX_fPCa?3Ar_0S~Jk81hgP**{Tl(hFMQ+87m~r zdd;6fJWaQ+qJaz~#|VQp7|7Eve2?&NANtybO}>teop+wzS`H|f4%GyiLBjvLK zbCe0t0U`FEVXV|8-#XnXP-Ww-U>f*bBHF@!=TAztO`TS z+iAC15)jRa`Gs*YZ{asb2@uIfI*ZO3^M;T3iDKRme=sL16{i;Lrt20-J-q3e$mx@l z??~w2+#4TscD-nO?0TP-B&MP^!m|qe}5TcV19kXKF0h(N5bO3s~9Hr(6P=vQ( zSC*UwN&z8)mvm?y?WwgB=>m4brRjczv(_DuxrC< zxRbzQGi5Ow2toR|9#P9^0$%hec{(*P3pY_Cj#*tvm1)fKVLr(CG2!3)NXN(`*?nqZcf>;Oj^F7F_rI^-0bgJ8yQT?V9{)eq+8( zaQMC4{KB@3vW}vW%p`L`o_o9j#5*^(qS@8FE?$ z>;9#C=5y4VOY|T(T#L|x%s|qD#G}ewt11eL2aG0Yi-jN-S{Zs5(v-|8@-+kts>EBl zf)NFEk?-Y0JQguo=o?FwTL04N(=WXwD=$gcP3}jM>E+U;pp92S%E!<@nJtdZZ)$#G zG6)v5FCtmfvy&ht@tSB9%Y`cFf1+;f0iB|=lX!gBcl`t*ra9Eow+c)>* zy}`w_dA{wi?(ww3l`N$^`a{*QS%K1S!)Bo)(^nPygbw{2ftH>oa zK45d((o7Lck}boRKJvl~avp*}Ss9MW+g#qngxt)@QA1){g4B>~NmeKK2;vd)TmCt& zRkk5)5(y40mOW#`@Cr&rU&*vUAVX(9JVH2HjDUEg2>?+ThF)My3i6pg&*kwU5B zd!!wwUw!eOd#Dkj4Tj5c8DP(clf9noET@gE@|Z=QMcNP}sENr+;!v9F6%EqI&vPaW zz;X#n#8$M?D>wrR$j2yBl~Hgy)7X^(l+0XxijRB&8gCjvQk$flsR;g134P=c_W(VM zv4e!5*&58>`13goQj!?3qPV=<>_|*>n)$C&vfMX3BuNoRMrl@QMkG;|AG*PvmBRld z8PaPqv#Q+kIj+R_H!InW@{H4$m6pm^x+@(YyrrHS^9(`-szM!Eg8O!OhKRa1Xfe*sS+b?wb|hyvX-xWf!}}l z+lSh^uld&HZ@<0d(q$zNe*SGKeexakMC<;0H*UD^K*#MRi*~ht>UN@CjBDg42Fhp1 zLblll;pEcdfG@+9nqtyclu+JzFbR^AxDYL?iM9pQDFSBEj>1zSFVhhZ9ShaY03@B8 z#soBJy^miv1>S7*ko*A|k1_lPKOhf~+(!EH~9tnrIbsvE!FuA zct8}Rs)Ck*7YY@`&AL~dy(sNjL52#6g=j%-w!QIVmHCiab}fb&4Fn*9NOoLMU*n(& zgpfg-O+<+Cx&(WgrL=3jt8GJvziIr!%P$;n3Sap6-fMroxZdP4J8Bp2Thg_ozo2Oh zkH(ss_Iz&pftUM~r&Ck?h5kVE;v1ea2g4hSj1q!^$mCPb*=f2hIM9a->H}wXn>pENU>Q7Px({U6kPVC1#VA6z%^Y}$B)7PS z7gQBrZLY^s~|H#;aaf zbjxdp4!w44(F;}M*Wcc}k+z=z(C8INV`Du%}*=An(4BffO> zG4;ns_rcdfIqE%9V3Z>#4Z|lFM@`Z*`bJ%K#`TnourUvq?{fPMyug%VFq#wiVnZOK z-VN7qk=1NSH1R?;ka1h2?UBf*VVNhWky{=SxX8+E@%vld@~fE5;Z&QvMDcWwN`&iJ2Le)RZJxBl;*i%!1H7+Axzz8aK|axQ9gTQHxa{ zYv1%^jaaFYD4b5y1%LtJBM=4dCOr&h1d)+woXc)a!2Ac06!pOpxG-MzjFAr_`7b!^ zCVn2mq2mdT)TbkP{P)j0Gfa`oj7gCr2`2jH+QHO2v zduDR%LGQ}1fD1djG;FeCwh-%7Vwgw<La`3)4JBkQRs|;~k=TuKKqiJ4qEQ#QR7hB=IxzD+JU4gT!)dp@}S3iRO>(Fe?y1MP`MRgv`Ba)@uyen+A5roucFN!-XD69H$eAVPSJrX!;kAu?>a!GMP3 zQs-cA>&t8Bee4R*wq#KYY9O}}-jtrGjL7$ytw7=`(n1AKz_8NV1N%L`3OGVYQSP0q zG}4;UTuPTdqZagpVZ%BWpe|{Rp_5qjC?c+u|4MP|=;E~4774hmEvRTJ-PgXct9kdbI%Uy$7x)T&Hgm(`!TJqHmrnlL7O3?8P|2z6EGlTsvjBA% z*W*)vQJmmwC(Gk&!_IUpVadsM<)!E04t5P7X(Hwl$eS(BblcEz;m@)Z%ofDFbvsS{ zk7qu)I5@1C36;{Wl`u17D#C(GSwoBEXBFOWeEfg=>+(wQr6!^)o5-qNr)=gn$fY2 zdK_5K$o&SRMIkmgTkqLAa&$v&^EvlyTKB1{1XGYNUVdd=`MJGEj|bYv)E6f2 zo1FUrj5j}NQ7lZ?hp6K0Z=H7aV(-*ev^RdN zGQvM3{f0ru3?rRr-bje$8NQxaU`%--+TECo*JVmeO%2p8sPEgmAiro}XJ^}ReXiA& zRN4OWuC@0Z=xV*-v3=X_ZI#=Sk~2IRH5-nOth!;m3Mtf>zQu2`6|t=%PDb$Y8Naf$ zmSR7cQ~!`sl!}`i&z?f0X-Qe-GfKk9$HEUyC=;WQD2!ukl+!t-Z0>RZX5cizESgtJ zePF~ajUQS9{37FhoD_R-`js={N3f<;Fnxh%G1K>!93(a6y%i#OS9Z|k!=64KWr_H1=uwc!fTUe?))@s}i(zG=g_x zYRm=U<%8Ig0xNId(~3m-HB$NT{@#x9?lOxrxze|4>z=x;k6zx}c5q_v<;Sd2zQ28~ zqR!j*;EtlKv7>9ta&o~y1x-O)&!=9wa@$kaEV%O1hgvrG7ZM+FtU+MXG4&DV;dvt8 zz{4=NlIeC>DV`uAd6gKCVwfnfjzGwm>>z`Q>;MsLLM3pvu}+e}gC;Euc>v=1&(uyI@sAt_S0a5_qaACgUhbQ8f*YCyGje>FGl8OY%rs(aR|k z*f3oR9Vb6ztWra;=9xW?%u^LBFB|M^ zRJb=gC)8h?&GRC^kXNUu4*UFd%dc5oZXdOq(rZWBR$qSl6s*z8$Sv~gih(s?$Klm{ zES$AyA!o~%E?m86bzg6|g`(YQX0)e)HzbiaKr5`fOx$Ryv|#CITalz}0L}!eI zFjR>oMnSNgBP-ivB6dM)A+bv=4Z*4HWiTI=_0Fyg@F-)doV(Hwt&hh2jK+O99l1rDCJhpYmqE9u#=zF+pN!`Yy%O)?BuG)9$K-;8~-hTz&a+&%# z*viFTqzHiBnrOl=^j$>(t%C1_DM1r!#1nA~+8+9A>C__{nII*au7iA!bY9R0*BLVhLfX0Rc8W78_kD z!ABnZsUv_5&`JY#d!Q5>p#>cBd#97+_jpU}UKu?rLsd+g`c~waz=@p|a849OYatM+ zvRgn?f}#j3*zOBrp6o5nU_|Z{rU)g-B(#kB%HaM8+lR!^8PFi9xuFT6foRmjZnniPExok>Mkp7{>Srx4p_h$Yn8tP7Q* z=+KOj5S!4<%!xrtK?pjUf|&gwyE~1CQ#~1XN3JzzTCCYA{JK-l9CPIHRF9|farK4M zcP3f*a;!z!XK^Pc=h!337Aya(BPEgrl;a;~_ug+P)H93vea z7|#J3%^c8N6b%?t6jU>jLP!UOEeL{RfwL6?YK5#1Qvo9dLR6!SS5wYe6#@W8DvSea z9cmsHC9=%P86`bLn|Z=+pmS_1EJOt0i&9Jg6B^nsno%u)6y@j@>4R;-#FYALS8cvD z%h9!LymIj3<)O#6tS?#A9C&Qqn)Y+besu&mTDd zg~NTP4}ANHFTGN|?uHdBj*e3noy2aAJgB51K1^}Mb7#d7Mf54U0)w<~DATQCdA4!5W}4AA&ZYkB1T9;BrmQG(s$v886~1(D83|uk}`!8i5XA< zrH}||M6;yA`?JMliMB?U=3Fc@ql+X*Qrqs|DWWBN?%A~Fsw!>~!IIwVDY}S#u?O-F zEE?;$k^&~zFK%gwgq82kiZ6l(A`i;nh>rDnv&MRM%y?#eD=tW^1-Epjh|6sfV?85w zbhc91Of!}dCB_=1WIdKf!CMF>JrXO;c%NP}HrDYaKdcO-5n*07Ym*hkp%fX5y%n4Q zK}jwyjSmeF%ZsBOux&Il7ApZb+D!xEBvup!KvHB=Q!P{n$cs+Xp=7cdW`@SF+>Or+ zjeX;>@I71gz}UJ^)g~tfBllA*`8+K&CcpRo6a0VrR_Nie?(m|#)7MjUEL<0jjtPAs zy)VZ47eZe+8MrykOctGxbu?POWN2)M0e+7}X{;o?b)^C3#!g1Mz@w#CIv~iI*8WtY zTeI|sR)*M~&^u?DcvYeRJ@Bd^eF(QTbG~9)J;W4Bv{=j;)8g|q52mSOvDKjFjcv+y zD#_I+HWzhfyNv1P#_H7<7s>BAGf!?i-)6Zg!?t7dB)ATH4GE zlOc*J@(rq*Iajlhm>VB=hsKJ}lY)GSr8~vvNu9mubnrY@Fq$XzvC4c%o|M?z^<$<< zNk2}`NDbBvRG0QvWtR4>S-+;Qv~u0i)!QC!E;2c-)`Et`^QsqCXO#A>UB9-kl=jx# z@YzOrq0^a(?Ye7n@~eZ{zJliE^SaMpUfEUKnPSfJXJv+({Y7>8+1|pIm2HjN7nirz zfnb2^608|`Mr~m}zKGVpWM^WIgSOd9!OW+R`$T-5qJvdfUMlAxkBp*&GO|m^-p2}B za2GKs`Ncv?z{3}TTWmU}3x$fa6h#n@bBrq36QUxnpiZ)%tRPk%P(iXo8$Zq)k!(cL zBKBr#fe%5cF!uAF(Nj**D{R$Dt8}nV4{44dG;&bj?aWbyzCEjo-JrE8^*XWhvsgoA z7pohzi4*>f1D796bKX}dIV~$_PwtkAtU`~&WKOCMU6FS6CDIO?y~n{DQf-lYE}uLV zZb`MKT9y`9h;cgz9{C2o!Qf*5)a_4e8s&Ve^0fVF#`*`i=a8h)cm+9B(X1L>miT4? z!Eq#YKmr1=ZDjpj5S6Ku`*V8(f!Bwz^9D)mqDKd|ofOX1{DiQk)(Ju~Ml-xZg0 zMv;M;IcM>YXXc#I`gX@0kCDEijdF(m5Y50Qq|hZ=&RQ{&2YvJmqfSfykZuH>j5Lqg zNof?U5?N_BE$c|I2|T#?pB%}!lnR3NFEUn8n6GnYsV|z$s>z=8V>QFJ!0uLmkYq8b zX$dc@S+=VqPhIa$eAASus)?qzk~~*Oan|AYcjQVprrPbPlY0W4K3{K+hC#pdMOT^2 zRqmP`@(X%E-l+U4=pmCmG)I1#%Wg(68%!lK)XYetoIw>CGal>A7MG70hzB@pmRga3 z`owu^Hf%jlaS<&~4Prnf&+tnlpZ~nmZu)0}<)?}E)O)c$b^Yg&r8Z?W{~^(3|15Gh z{%B5#9Lmb#VY4NYHTfrOLwS9+D{{ZcQ8U9veHZv}vJ1l|RD&cnkqtw3qTP)ArD%#8 z7)02RL>#1{^=G7GkT3&c=CQ0y>vTCm9E>u8oOJW7`Dru-V>=^5jX#@^nRV#t$eP<- zZUawENKq+c(P+rF9F6?Qp3ZNUpK+NduW**QTqQ2);xq@^i1u`2jF+NMskEY)R{m3t zS}X^VRuoTbG=hgDoUz6z9h8oc7+h&`BBIZ=3^iZ;BWN~?hv^^$sVAt>zEdJW4Y`HB z8lSw>oHY4!sc=$FNtW^_-;mywAG8I`lfi5IQUYnx8`p_SN+NH-ww+{Q)+6@kFHc8| zpVn$Y;)g48!D$pVhg^l&MAPs(__cJU%(c;nfw&K@YYlm@+SG6pCP8SKl9>6R$rGbT z>_(669hxw!k_~3m0Ke4T(b1h|ODkM*;ZRLhvVFm**=lwc*7wuV06Tza4py??HcM)*QEXk|+;SkGehQGxmQVJZ59A5O~B81G55q(DKNG(J+d)ATUK}g)c!TAK{U9 zN+W!UJ&b{>7)I-~t)CGh09vu;R^Rvu7_D+3%l01Nr)cQIkvLQYAVN5Q5NKLYI4m2q zTQ@8hILr%I6Ar7|f&z!jHd^hALWIK&>(*6<2e&WQ`n;c?RIDKDOwbPYCrEc%k$RhG zLYOX-XJQUGT*_e3A!%4rY7laZMvmZ7Ve%1O$1N}?`b<0;?K4zwRdkwx?E64;szLfk z+kAdwUe~5@^`^DUaUX^9T7r0nu5Z+x8!%}l4 zs!3rgfiNp6u%XB>MrjQftqOrBuB8CtO?HDw-b?zoE5p}1W>-cs{eP`xSbp4|{oCZ$ik74#OM1F-(xBw{vl5K0y?w?n;+q@4zWaHX z^iM;>`om~0<(e{OrTPGC;bmca%e>lZvDXyl1MJqM1VxJNHb_Yja$T{6~yM2EYge=4}9Q-@F2dBr6-xy%~1i~AB`l>s47+*-^J2hu<$1+ZZu*TXf9uC1)azd z>;2FwfDMyMDfCcp7*I_>Bb(*Ss>mS|x{h+3qe4pC!zA_z1d+WRK+=E#JIz<&jJyFK z?Q&}gRC}|puHAL-u7ww@=}PZSbR?QHlI(?5?WL__VK0B$e#2liS!M$EH`Adz9yhvtml`R&yh;Y4zVQz1i9&cZVjjVY5hN?IAx@}Xf3oAvXnECTSIcJ7>V65mC#q(%9#Wz zCXiJm9Ajo1^n~uxvRT0my7LErux}OQ7Gyv68-f*7Sz?s* zeP^1^us-QO#6Mww*7$Dbm60u>$d#A3HuTk&E7v5K}+rsAV z&eGz7pf6`eXmI^wI?4#ikEsV6ECw~22+wP0&jk*p+FM1zFo z3u>||7H!(PX;H<(;fj{Z@f%hlP*`YkS*!((OIs@!)n-)=ZP~SDsB+or%GPMGaPrID zI}f$gmV2tZ7Y!G**D8Oe;9*8leNM2UtTMe9R3v#U1oC2q-&}-$JX|p<4p~q^a?;hf#6>0*$eu!TME>{u3 z717ra<9|b9vd*c$sQ-dK4q^BBb$mtGxpwuE#a$hBHMHMzmfL|99f~BrU`e)JkBeik zZH_r8I2cG^5}!)bw*P`*hcG_%24rN?$VmU}lL0y!AD<*@1Z!$vu_QtEzfqlI`lFa# zXKx)oj42tAJR_#!&uC|?ZKw<%#$5Ps*MpB^65HtYQJ3lCn8f$mbi(X}bL3`{PZ|xa zYoEQE-l7m&l!X-NBWzhH^pV)IOfi^}4A|ajUc-I+*WI&h>vkM(2&rkw=A6ob zCTvSxjBRpT@M+k*(?iv3ufF@4jT@i6`|7pTbp7ncjnB~ahLWMZ*WEpG=r^BVUpln! zx_d?rz5UQS{yo)bFofIZcOHCT!^Q_M=;*9#GbDqxO0mu5f(wRJUUr(TEM@>M= zYi+h-0yeRzBIIu#u8RCP7}zRVGGV|WNC-cUU5-4nyO9l7$P&T^SD|E=u;*=!P5ZzT zB5xvwNhzpv-aPWJMzcBbvu1N@%4bzItFdg>Z^_`|S7jNUDVDUz2k9whXXFEu)s&Tz z#jiTc1ELe`!^@lGccr%=K!#@Q;X{%q8(LT5NC-#NkrXTS1L8!>xxt;h%$>YDwZeZNPE$T3FCVD<@K_Yl&_gmhtr#0D*o14_sOhVaxaS$$m_5&Hi@ zEtr1RSI0HaZVQwG=v$NHbF?bf64XJi7U{dLPg=)Z_BrHkzg7>@rxa|Fh!_E3ryLlV zyF~^KPcTrSL}yw1By=@{KepfNoWfKk`;oq9N_LD3pFE{ty}ols2=TDaPbNU$zJq%o zzHj?BOGeVKj``BQosi)k++Vk#%wa3;u0AAv=M%`zHzOzIi!MI6=1@kW#~yhsgNIVg zdmROh!91);0#dM{g7Q6SNbQ6c|M=gYvP&(KFRGpA6906|`O>S9%d{WSl3Df*QJ4!b z!g(SIsS{(&)csIzOEYz&&Z?Hi9+GBzR^62&=XZ6TKT@fmFZI;UFDmM-^>}J~i;Cvg zdXz04=Pj?STz+0h`?<@js+OPIhPydA1l3oUlT$|YGAsn}l#S%wr7 zpSdfgh$|4ShG3$=D$^`@L=z}B1xbRXGjP30u)vEa!2*wkF`C}1g?|;dQ`W~UXb>u2 zOqmJ?#X`~YxNo3Ew##2V-L5_1NpEF=KWs%vU8tLn;&%xRdW*tSj3_ON`BGz2`% zV~^1{jcTjQLq&xJVprNUGn>cfi4pAwHrg8KW6W@b?Z};m#em6>_-`7`{UIVwK2t8p z8q+%DvHm-CfQ(QH;&Ei|Bg{Z2MB!qXi+*~7>^t%8mYH85f+sWsi85bTHPqxizrCxd zYh`)E@Vw&Gx>R#^lELaJ_U4p%(=7RIWy^aS%gY;*Y4Li3+F>kd8#ZjruIenftkkx! zrEa((JENkvEZyKr!A`XHoC1fZILo}8H&<6ymldR8Q~u#LFM{1BH8lCpC@aQ^m_$HL$r>*AaVrq{3J!$E0&6$pE$IL#j`d}oIn(`Nyg9;y{ z+%U{hW%E&y1D?&qw|cZ0ei17sZ#pO@+U=k@$pb!|Je0f=_)>V27KkEXIOC+Af}$X5!#Xdjlq5?%6(Xvo&O;I*lmlvtl?D>^vIwzgMd=iu z{B=eGK`>uz&_}5oyky5#J&&N{`sICl@{NYkU?Fk|cI`Z%=MwaGR)va|2P3~N$i>_7 z%A%<{)rmNijomHA&Bm;=z8OiF&4y5<%(P0-JZJ#OCqtYP>){5|dMm zPipTA zk>B6B<-T)UThG03i+bY3`*rHK->;Kb&)a%*@v`eT)}!4Q@vrdvrFYOr=*{Ri7o#(9 z#LqwjjS~nS$QIvhoTbMuauwEka_S4x(+lczJhg=`X>t57JVhNSe<*Sn{}Uo!+3Y3S z|LFf^?#<()I9KRVmuis3P$z<}zyMN=@&g&T`AbrpC-0oIO z2%9AH$CqFH=u&-eojRvZovJ!@stRYq;eJQ7h>Xy#oU8;lRDZlw03DfOn~M20HPuGj z1h*1p$s^$=4u8>BILdo$P`EkX%8>Ww;fY5d(dll&ItBBDz-L|UHQ6$D2G;BRBYlHW zOOM=tGp#&l#`dur*G%-T&YQL@)8qUvTwR|vE@@n1 ztmCVzlNZmMSTH%s6IX1FU+zO+x5#-bdhG*&6YO#72eg7#i1(FbMe86}E(!;4JVZ-} zXwmEuEoe1#YTAq|U&I@F6)qTfRt@kDcZC6F##iNC`8GY0pLFLT*oWV)n6ZGk*A>zF zDOsn#5%GoCxYX#}-_$n`eBS=AX8(+vqvJ|`aQRC&q8^QEd%5k~u&+rti+*z`K0Gre zGb}!wEh!D_LBj`Gs4>H%QP#DEb%**J?iI9_w}V05SO*_t-oNCo)iY9$e}M%&J@c_ z&b8p7Tk>>g1|?fHE;$KP*~z$B0&M|90t^iDIpT|k*BQQNIH_U1AbeQoSZqsz%iIc^ z#K?-9kAe$H^TYGOi_S;{4?3KMSIH_Y6Lb*FWF-o-@1BE>pmt#W;0mT1UQCLz{q{=6)# zJwB5(Gj-rQuV#*M)MiXXQ>Q-N0)3i=(dAO}^{NS`v2^jms`=$*rQVXFf;qFpN8KTP zT3$RikFkk?u{SSav2+T(76K|wOSkOOtyr|-z;HaqQY~m2Iu)E6MAZsTzN<%OiI;=w z^~t$H&cXbkWz3ISw&rihPqPM11FUi~|E%bs!riExaap%D@!&8!21*A>(wDLBgq7Y{iRl!24BVq#tS zMr3qUG&by`IY&pjELRkqtWj8v&T)qfC1e~E!;xNmf(=8xpuvo@wAuwNq~ZPS{{Wfz zc;s%;O5mt+1gRL1Vi3lbQAou*VjS@?`6D?)HbzXW0|6H~pUR|VBFPpS7ullC-S)TA zionhYj_{*K6>Ny6%yP{5D*v_9Gf-4B&Xzwqk5|w|ppxBm2W@uTC^p-DHJfeu1VV$q zYn<7RH0%k(4f~~qf6dI--Yol{Jk+?t?Z55$zj$7JsdiXDVKZh9?88!#177m^#&cD1 zrD$E;%MrR4jRWoi%-=Y~#+DZZpkY0N3$chfgWobZX^TL>7h`2H2Gw?QjtSUK@~-|V zrvmt3N?0D&wP;uW1VJQ$C_jEoGZ>`FoB|UjN9g3Sh)S~{6^=RFgk`PRYK?ZpM8|H+ zTz>P`t6z+kgHs_R2kshqHQLX4Guq6xJD0DxbH%*8xmgb%jh$JMKc{?k+04bd87(#@ zB4Om!XoI*r9QN&c=SQ$IlvE@FfxloFqol_UOaFD~eYd$Y?ERNR>50SAKM19}!qX#X zh0;Cd-Jow9d=v3izr5_HXvfmy^nE zb1wgWzU?!YF3r9C^QU5_jO#RiY5q%HY(`w@A|7-1z~SUHtVF#(Z7~BRA&HFxkLymV z!TBX0?FUoc(tRO^S zsOGdIC>p;TjzLcG@JAP;y-~6Pz$J{la+3qYJ?s9=G zeFEN)EZNwpXk)ao*hn`@dhD=t+F0v-x4AIvecDnh-DRZ@zKDkVJ>`#xHmtcv|2O_1 ze_WMd`*K)%td&0a9@2L?nZNZu8ZX};`~d0qIhnte?m`nq5_eZQ{slHU!N@ZHqbhNN z6(pCEfPhu1w)XqcBI9-(P`5{7x`!Huua{~ch>Hs}fv^Kc=}})}?JJ$u`~K zmOX_*iMYKDfp5IQE&n-NsxIfyg&mjQdM@G@xWnxp?2&02Xfbc(Egkk)+gEjko33-S zJ)F<0+y)YS19si!7N~niiIe>$_vS@nk@=UZGu>CBI%C&BUHQMGrpFFTXI)zFyUqU$ zd!PAR>50SAS;tnoi|LT={l>3w_V>+L!HcZIItT8zjkZNbgj*cAQuH4cxi%OK8h1qXe;) zaYY5wr%p&uO>xHrZnx!07sYAtr{>SinUaaFGA;^kdCWx7qw}r~9F;QMYT^fW=V3cU zNBtbWOZZ)x$0vQxSxnJr)Q3KY3B(x}G*sN{DcagAT2*n)-=Wb^HG|(X8;%IIRwdP9 z@T>MH@ru-ddBgHfnHf1I(SbN|oKM3TB}XBSs?iouhjm9x{r6UF8B?0E@`u}Z>86;w zU#MA|JaOWdQ+I6t^Md7zZQm&GyoqGqh? zc@5)J-??qz?UNm^TyJlgK7+T&-2YG2ms*$b9vRpW-6tS@ED7l2qtdUD>9J;bI`z?d z-)$ZXd!Kq|rMm*@QLv4_SN`S7Ki2f(@6i1<3D|wIuPPCnP|}h-us}E!ms@PKnnjzF zg?9tH{=@GRk<|&EwZ#g@*nIRCL5`}WBekk#2F8P*@-~N;VHeu)D4D>)55ums`O)iF zTxnw_4E(|I&4K^E@=_bqxH$NSh@Fln5R3Xg_uE{zaDLg8Y>vB(YO`7#v)xP|Z({lb z|2*2O4Kp9>2oE?77_?%oiy{(`Q7as=Qbx1KW0rKaFEA_)eg<2OuYyD5nZv�r(aJ zZ33HkgG;a`qEg`DFB$$iS~G&mOkPzQ`iwI*Hi_VuTD%Q52}^*S8tJ0oD`Q)6ne@hV&no+d+meobxEgh>q^H?C1wRm~aOxy}xvhKEZC9|$udEKnE zk`0xM8dlACYViYS9Z!_s^2LJk^$YX!3MS?j&YH92_LVEYbmOd{&F@uHN|qE%FRfWv zw5oDm`O>_J3ktKQue*QUr5yWjx1RVCx@5Kwoz3ky4!vH4gh=B$Dyy?G4Kp zFRGkhGOu9nY}`_xF+Om<>UHLI3G`M)LsP03l-Z&pGgA>ljk$Fc9HUVf$-`@bW&V7( z>2yK$blz%wtSyoUE=`WcWfeGNhyHu0h7N;Bv<{I>|DVbar>WA}%GKy~e{K0NoCp>V zyPjfVLjQ=6uZgYXGuNEA8H;-uL#$))5&o~M6N&{Bv_u;|iBP;58)?9moh`veMqvm* zZ{U#RKZTQrK;V|Ykw6Sbb=gJ??pf8}ptSfmi!&8&^WHK#5tj{DqUVpw1$@QSoosM} zd(*)YdRN;g(xS_eKK9!`i56CQgXD6sLJ|p|Dsvu%SWE<6ku>eW&fW5M8t`6%Gx-1R z7(vJ#8RdrlTTESr5YG2^xxp90nL=!R8YQ~=_`lFPq7$3?uv4r8(a78_hC_aFu}bKu z-{Qb=Q3`3bHqsyfC=UB(y7|5Nn-@=uG%sbA z-xT4f`qH(U7#@Z)dKer_FrmI;qKyGQydq(DVJByr7)_$#!1)&$nZOCFwU1=Q6}eqG zZ4cyz*{F%h$*^3}Jr3nbhXt+1^?ya4@(j?^7#gG|)5KNP{1thH&DA3#*}6idWMPAW z@WZFmh$WMv1uo?t771_ZA9gE-&!x?O2%Ae!srl;drGYcq=Zt!EdyL1KUv}a%p3&#g zjWO88c$al%d)3Gz-J_!xR4{!Zh%SMUdPdoU248kWA(N*{a~>GK@S-+KR7NWlAp|AF*r z4(4yA-^ur3ZB`6^h~4z<2nng?Ugdd3RTV|m^QvdhoIFW!7wi%}@uA=EU%znIliTZ#-oI@9O}l?k)p6-7^R^vsn6ajEO8!mv zE?V<<>u0H6_F|y(Zw`)?xKTaQ_#J$>tS_ApsQOx~^y`d2kD9)7SUT&`djD6$(wV=N z{<~r6tY0hrPNrkbwZ-^8VqqV^Q>rn;SYX}zpp#co4?G`W29&@a+)6IPA_s{UD}pX! z`gT!G4u-wJ)nJZT76@)a4aW6uVJxe8TT)i|uJWv;k^i>+-wyN02)F;`nh^=)p=$7K z#H@(xjVy3bWX`BcoHcW1(X1lwg&Q|E0cTW(_L`Tc!zLFNOyMp!4iGSHM_7rO0d2iv z@|~>H-vhdf$vZ7Et>#~y2lStLu*H;qdO1QJz2e_OEeKxtMSt1H)?9ul7ft4aZulWf zsp)*+gm5+?&F0PIR1;CBaX4d`8;UTOxBtWZg*@+ZMa#V6F=ZLoeSP5)9{aeeqht~0 z@f$DwQ<-`8`i2$vteR>TFTZ=$)WU&POYHY7`r%HV1378pvW&E67eDRiVURi5o5rVJ z{`UUQ*jARz+w%2+$wgZp+Ss%C@`XIM2c7q%_CUW3=LG*x?O|m4&SB|n57zs?8kSDI zx6f`X4!T5qhkvy zCVj#!1vh_gRe9RPsP@ZE?YQx>+cy6>+x#iX(&ms$2b3UM@(k!oN+lb5EWy4!?twZnrVx12?^~` z@RwoZR|G^t-GWd#M@YsN_9&dHiGSeux=aXHf$p$62{tWFQqOMu#9Yxf@%^>rPL@bX znFrVX*8YW=Q!L1ZYB?$ob`_gCy84=O#zcx$c1SwI_ zImn#D((I5l$d0uDh!Id$NXr8A5vd}^qSvscGyEdAA?6ys|>)Qy~6UHZ;e~32DApM-$;>bjC?KtyMU58dPh9b77SX&$!AK z#x$CXdzLYwF%3?UtB^soiHlYEo%CZct$G`?%esL+_X)Sld<7eHn70RMaGmNBOBoi>FuiW%Ny-?UtVpSb@>(B znN35g9cE5LksU({i^42}{p1~6<;G(3dsP!E=9`$L%wJrw*jtQ9IjQ=2Aa+lfy{U(Wgs(((CVr` zJ=bCVcFhB^ZxLb_oV}32`zOMTo?0O(?l8eGXnR z61?~Ptg}5E(S3W>`$S7C5CYese!{)Jm`c^V$7SZl-T4Y^WU zfR$40qOdDYlJ-D@&-88os za2v~rY}lR7L^g;$yLt((mJPKYN4G0as44v{DGn`DK9u&Nvy90c=X>8vCAEG1Rns(!XeN5GhjyRep1itK@t$AY1`QMtjM_R^ts z1CM|0?PImI$KL+h;{)qbtL{C%b?fo_7A&}rfA6gdb-I7Jul)-@GTo0Ww4$T&50?vC zU+G-6s`HiB)>pooMNJrEEzSlOWf8z@+OaH)MZ##CbqSv{26~>H8H=GxXwegE zvK$iew3ojjm%xpf)SBg=ToyAL<1*|{wTc4u4Exuxf+0(e5~Mk!Wa&0>LK&-9IYqg2 zz26YeBeNopTrgbu*JY*knC$RODL{<>0$ae={pHzWl%v&DY+}Q4!C-{j-U0@Pf3e-C z>c&yBg=00yI~NwCTxv%{oQLHL&oQ@fVlh?Kjc^O)tI52KvqCF|j}YL}=j1)y-;WhV z>kL}U+dpP#QSpz%78U1jsG60S5?i1(#e08PJnu()wjA0~Rdw&t+gpB6l>gn!NB@5J zq(xg7FWtI$(jNQgu!uPQ%0$6WdY`dK*86d0LfHHCb6W5JnkzlX zCkkVR-z)ynibZmni!=?G*`e=jet=I)i)lo@wUe|q`miQ`K&dSGov;^O;u6Y zg@74xXylcI7Kh;@__E=IEes-Up`*$@)=&5WTgH(KPbyDANR~#Mp-t6Dw@#fyBb(g}?)~>8j&HggP0=ogE27C6J@DVu?ZCM>P_nzEqZ1>(Vp{~+r5InTLg0i4_e|i_ z$rLk1E1uM}L`1MrdT<5sM1vSJbe11Z*|ds;K_8XJTKx>XoQ0A1B=mVGvKE}s*NyU$ z!|L(5H@hHswkQvtHuG=Tx*+}jxJlj_GrW`H?oVIv`G~K~xc;`{EH94io9fLfzU}%M zl*-wN@0;ItT*O}T^r7<#;>a3XfQHC6PCG^%5omtfx-ru_=b1NVI!c45K938#E7Q0$ z;tS@V9lz0Db({mld*XR2g3fJaA0AU#-aO5Stx^kkS4g<_v#o{nMaOCBP^}}Kv zTVb7la_7Y2>Z#MNFPS*8PTTamq^a?o86%QW<_*lnaPywgQkCe!yxx`M!j0`n3En58Ru1aY z132!`tUbn1D_4qs%(i}nv@rbyqQFq}T!xD(@{k0JpcfD$1d0c0Jv`|A6P#a%PRFr! zLa{S2Pd^`b3n2^OIa}r{4WR6bG88e3bm`2{(AjT-_0?X{FVtPDNEs#(7D+cm_5}(@6AIPB<^D%?`9<@F4K)9P&PO^mp+N zKM3^0aH+HJ5_@rQTW@zvx2enlqE5+Jv;(CAcud26xhq`(1)bP zezzjFq{N*I^C(EI&p&p40$|5c|>zVtP_?{f3KdtyDyqY-#lvC!tP ziW!^4OEOJkpUrLmp6wwF2(JBnwSD%9mwsz|s5$Vx|wk%Hc|wFg7kJHFCWDk9nWT+jw~KBuA_> z&XqiK?z{;T7v;pnjz!bJzB>EAn@b$OxAKMNU|T=q2Aq+K#DV-^nsuIs8J{t3!>aI% z9ly`poVO{Manh_n#xY}gm(Rw5cg-cn`(gP`xz>E&ziPJ70?5I3ljJa$=a6Kk!CQ7! zSs+&Ennd)>waaYgRfTDzENwd_OO-7RhtZ>KSCQv6i^F{M+66!J>Y{_}P$#yXs*~{Y zU8NvbNxo7It}NeGEAW$w2c6kD@Nh(;<7p$){9;vH=7jNSV{j)-tSf?d!Yn^CAC_na zoC$`BO*wWWeJnN_aAywgFNQ(3<9ixuUK|(^F~*t)uxFok#V2?RA4H%j!=CVS>jQRr z{!wWR`yjM^%pIZ81E=+cSI|Id&>he%IgA!;A6!(7k-%=Sz~sFw^sz0(ll3voAlbq| zljX&;${Usk3}<=pYsZyeBLoWlH9o?qY}C&+6~|~Lsc;_M^{ICJNwrs)#k?OU%aa5f znw#Xw+Bt2;q!p`I=Z>9PRGgE#^6|wprw-hgnp0dfb?m^s_U_EQXjiP=d=qE(jEx*; z=4F--Y`*kgsj2p8bH8k7uwLhwzpolIXZEa_({i)3a62FDl~uorwP5{*xPh6?v^gRs zPtN6z7?vrb z%x(;37tQPa}e?Gunt+p=>mZ(DuxwSoiKaht7sE$qHty-c+=7< ztOfB7A$UDU)h=`Q)R~JPUuh}X$^(mMOf&b4u4|W%m1pLeX^{hIsj220k!jRF8{@%D z<7dWi?HBAXU?f-`nky|olZx8WITw^O?1hPuAEq@N46?210hP&rXIXbHjhM3htZYli ziW_!+uB_~HyKh+0v8Bvb6a3c=_!oYKX}NjueaCv^UC_=o%8W;O#}(sh8M7GJYp78u zf@>^-I3+^6oPrBYiNk-vUMBv+rQ;0#Vik7SJ63_mBdC)jYqElh!r|1WRgFAG4^P9` z!)%llRy=~iDWCH1n@1k<5aAe^f_?s3v&SKxGbw2j|7In9aYS%u@H!z~I;2a8W^-~n zJNR!bVpI>l7xf*-QOR(wvDnyPY%?A-e^oW%e*ZnbJGXAG!du8o!&^cRu0xZnQ&!lslesL88$eEA-K#^at+^N`6E^tux+_8 z+)i}Lm(6-DzsmR6xe|7Ov-aIzkw-9&bUr!(8$w$1!2#EZSoYC5aya6L6(q$f2$f}7 zC=*0?L_4r)>QgdxREAG=|!6Z^qgG;I+UKQ;_y=61OqI4Nk9%;4dPjf%lE9Bal# zQ0CEY<%v1E%jwnzo8WZ-$~zR`HPUSnIb!ugXMxEj^=WTT8Q}mKnUn3A!kg}?Ty*#P zyu9^yFS>5WjdTA#eeQxOQ*g%m_&oldn{I21P9OWgpWkw&C$&0?3U9i5==FQn=Y4tP z>-Mdmnqx%ey0%Sud7IkSt#7Z*;{_HAYsP|4%u50Cs zt?Slz@Wqbx3vVeM2M^%F1snO|#s#19yX+s%b~pc3XS-w0U`ytlVYGAIM;_sR)g#+s zJ9rMD`I^oFM4pK_2o9&XU2))_`P#4}{%p8`akSI?kl!FY+4gMsq|mT62Hd_Temd$QF0 zYSo0LOR8{Pp0_wZZ^ks7AGu-j)awWP#%Sp?wo+sD|cx0}cdnm^gmx80% z$ZP(#99=HhMI1#HC@cSP_2;wKk}Imh&CBl4+J}Y(IBz>LHil_VoF!&SC2BM(F;@SR zRG{0)hPM4UBQ;paiZfHv%~b1o0`8OH`R%&2Oy?+P7Zv0ba(czLGw6;Lh}a+&gb=`HYEau~D&6%a{D@p?fawzA52r z?fAXJ-g5s>9$K;G=0(x&oY^@q{9|!qM)K5@gbDE_o{X1XN|`uiVoGG>lH2cE^^I3r zZjYakkUT9JgX${#^^R%K-3j3IjjFMknVC76Ia4NM(F5zGX=9T;^v!E*OI<2T9TOjC zcVH|JU2@1rxK13$OfG?;r<6=s?ug7nuJ{W+qT1 z&M>N0gnbqng_um-zvqA#hsWUH@Ch8R3zLqQadT4?0)246o+>izjB~E3TiGGl2TcsK zS$N$DsVOt&LPWk*mn)wD!9yPfV=D6Q+ z9Jh%5j=Syg7ju-UIqA6DJJuz?CuN&6HzNgIB^MfCPuS$Rkc9qIeZ9_G4*0+5&zd~+ zHpH$umi98S-RfP%(O9Fc*`vP;PaoE|!U>R)j`$em1Fk6WefZ9>BPB2-Q_;A_f$sut z&@2!AEkjqpqcAXU>>cIHO`_ z#nc=`dukjTI$;GTDcg;_bm$fg<i}VciiW>rgccIB zte?@gARsg|?T12Md>{WdxHN|dcsQ?d|0vo!UCS6y4;?FxrC!4}%CX`yc%gH}vx^*Q z-|ZiW>HjW{694$P^CtfHP4Ku5JleryqVcsVg?rHgYxRk|VOJqf27ze;6Evqf{f(O{ zWTtSichE1N8F~{A8~#2e>=Uk4RZR=M0okIqX|8RfT`y;?Git+L3eRI>HyMp;D_R%v ztxKP?&AhuID3*J(OF3@)Yo)3YzF&6Yw4LS-Le(2b~)B)7q0qF zJm0Cx4bK9@Gaj!*k!2HParlSUl|2_01Yk?iNd@j?wn&ur7Kk&JUizbaP$#5)9Ncng*T3@L#;FxINubKTS<8al4`Q_85 z@=Ut&Rr6OB%$-^`tt>Nxx216(k)r<8g)g6#hO4>J{X_R)hM;ud*X4|cm18fQt;YzK zoBPE1!2V=m=rd4`bl5e&E>28}F(pu3fPpBYnXQn@TFS zug}k4zy0#6$rZ)_+No6ahPhU|s zDQ|;+#R~t;bA$h$do%yNA#d-5qQ$wniwiTy&Z*AJ!vz+>znO(hFG4FC>>fB^uf>=k z+vu!vWu}iwcH^{$PX-V$taSz+&TBP`xfo0IMs9<{j{ zVede@ptDj_?uteUf;Tzy)1ZyS5+Ae-vCh0o+HM`1pp_`B1e-fk&hE`wJTb}^l{jJS zmWKFd_kzzpxIBB=1eZNJd16}WP4lNjMO^npe_X=)=s1^S+s;4#>Gr+1&T=QLh;=*7 z@nyFxR9|q$yx;x{`*S#jsMt)Z8kdodfQfuY&8HV<6zdk|DBgx0IumhaGTNR!$%)pM zmjz+XnS{=oXBMFSvFwUJMI1OyaNwF`xW{^CGPsP1lW{D>RQ$ zl@e5V7S`8O(6I!@XtaQt?5wF-?v%9HZ3T0)rezI0;YR9R zd9(2x7f79&h1S?@eAoVd#QpGT{Y%xDBpz0e`-#H3L_;;k>#pftG0dr`0f%!MYAE2n zwxOo5Yaccv8xK5pb25zy{$d@~8nfcI3{H!2Fn!TAepgjF^a<2!g!dPLUJ=*=35p0s zqZe4S1d(Qqf--!+urWzlxC;W;Az=2F6`5U(n^=ppy3MzI5BlC8_}Q)ILj(EuK6vlI zAI;^r4y?C-_5JrdUg)@Vse@+{*o;nNwf*6Ue?VM(iZQDSmlY%>!V^%H=}CYxIS|@G zZDI-Vz>brK-N=d{Rg=q=*d~UViDQD90lyyTciNqa;|7+_E*O`eVtywr>C&I29}OXR1uu^)MW#0EXBVh#b8DDf5oIH zeCf~s7%0O7gL@$B55RJ=kynLghz1KeO!CCJoOW7zPI0a-ih^h}8>cmBjuvfdALIjO zyWead_>%tvGdU{W;fRYi#}2%i=yJqI*}iWty7ZGvFWL()e>XKJF)=6Aw%E30Ms{Kj zq7Tf$fq~~*OBiC7;1Ww|h@^rxj=1g3( z!^|0V06T&eKiuMoz;r80omDi;({OV&$+lgW&Hlqdrse- zvns=BOHPUz8~^RcZCjokSZBY*?MO+!zT}oiwpX}Zx40wCZ*&%1%Cv93v>#OwsM8M| zXR&^JfH$w5 zMxZR*A$&Cb%8zhb8EQ#G_@VDD)zMfm$PQ-)G$F3N$8?*st9{;s)Bw|XaiGim^57X5fa|K@M2vO8 zL+Vy!Ds2X~PT?g~H(-oO6M?N$On?A}eqw^P?1oKcJXAzyS0tHRQ*n}iT9PXxtzz!# zlvvk<{OZCnakwQOcIxLiv+G&sNAMwMkS#0T`wz}Bww=xowBEFS#2tvNwZHW)XBJ_^vc$-%oL}UH z%_+IOnmIRx7dV?IaB1@xT-NOI;PU1%xU|{XJSLa_%EeXB)&gRRwn@&f z!**YLywW1`Hv{9XyGOk*fhmFPWOUqlKee+ung+dd8)E z`4yKZag4|L(Jx}7e&UM7wtkjp@LlA0pYzuU>8`B8;Y@L{Fk!R?lq&*(F$#rw4-ZVn zhQm<;lOaOZ;2d;q*w#gNe{q5BzK+=R=;o-1sEFq1^w^I7JmYjlI&Y1@T?e;1BVQg) zKaunk6VR=O(TCDl8`T1gF)$iwq>n-%2HDzWhd^Y}$61DHB8*u^oRCmp zMb;K1JI#VUU%Pwd`t>XCe#r4(cl*lb&oBGDALZ$HW}2rWlc4X=k)gZKtY$i54$ZsI zMy|P;r;;blN*gK4wva=WeN>1j#W^y%mCWLP@b~=7)z8^UYbTW;CVKK#3 zS$KiH8B8C<&2Erk)zC0l3I4H0cq7)M!()bbW)>{U;k=OZ#+*e3nHz#J!_Hl~3+Id* zH)mmPP8FA+t8!*|y)%L_!{eM$w)M`JF@HM4cv{{Y6^N(BtVw>UO{kCm|3%BP8iobS zI)|cVPi9XsZyPhcVrq6(S>f18Q_L-?Gb(elt4a%ZK)jOwC{ahc<0OrCLl;RHOe zUD%A3XqSI-z60BtWNf`kysR|ye=I7N9LT6M6gDgLWFC8-k+5G&$jLIF|Im|>viYf` zsS};={5Z~iE_v*a-ElzZ?8^~;^MK=-QTmuKqQ2s-{zQRb?rZ2{%wc`ZgJWVM6DOvz zkMTO5K_`<{ws9dknWc~v8b$qY4Kp!&GZrLcUq=5LJ-7@QKbQ_o7+eYT=s8j8**J~O zVNBL@j-ICr^M!>%FHQ$^z?(!Y$10M;sMPbK!GFZ_lEFj3rNV0ATH!k3Hc@O4HVT`B z&7#;MY!$W%+l3v%-NHR8L#MDy*e&c4_6i>s_Ni>%zBG7w-z+ zQ_2Uz4}~8iXWVWiWDUAhgD%ye%U}(<4A!7aHRv)}gD!(L=rUM?E`v4bGFXEy)u2l? z=u!>3a1;1HBAqqpQVqHg%fe^Ypvzzlx(wE!%U}(<4A!8_U=6wq)}YH^4Y~~0pvzzl zx(wE!%U}(<4A!8_U=6wq)}YH^4Y~~0pvzzlx(wE!%U}(<4A!8_U=6wq)}YH^4Y~~0 zpvzzlx(wE!%U}(<4A!8_U=6wq)}YH^4Y~~0pvzzlx(wE!%U}(<4A!8_U=6wq)}RY# zMiW_sE`v4bGFXEygEiO4%^z$MeR)r-8M4u2;_6lyig7r<6uL`}N$U=RL~5 zQ`jZ!7WN2xg%1n+MDbZY|5W&jQeIO&uM6K$&Tk6e7QQ2VPrrU3{80E2(i0$!mB47+ z0+Ilk@YyYl$2$qoZDOK+oh+mr5+H|v0G6UfBp7AjIswwy44e;Jfw_ZztyexipfNJy_ZX~q z585enX1#k1*1HF-mCvkq585oBS??aSL?Y|mgO*5Sy?f9SiL7^z!Fu2ZRzPIECt}Q!2aHBaBJ4Du-NN|6Dm*8k z1`|>Hd`{Fm8H300JV7`~Z)QWPiLiCdAxF>Cg|kq$M97f8777;)eg)4N3;1XAi%!foQB zLFiM;J+Qlp#tz}V%Arxe?ox_h?=&f;S*2Zs8tL?-X_kyM;Z%Ug5*S z1LEbN@R0DZ@QCoJ@R;zp@PzQB@Rabh@JZoQD*stMpA()JUJ&*RFABe_H@_$RzVHXa zr&a!E^v<&?;d6R^UihNk`Ki)hQp#(R%LI%tou^b1eGVY_v^2$3xGvp@GCiy)#)@Jop$=yeL&REYI(Nt9eFKkvmEy7k|o3LHjA>1wOQ_fH8`4v6?TvT2a{zCYM@_bYH zmP-4!p5GC^tCWxQ{4w%@qZi|c$>5jh7ABy~lM(g!0x(=QmJd`#G%#Yh9|%7L=1S{wrFFT|x?E{puCy*!T9+%W%azvU z!oIzVuc&po(mL!DfY#+o>vE-axzf5^oPqocq*Lp1A@i4k)Vf^Qd?K|j7b7$xwJsMU zG$OSw7b7$xwJsOd{tS>>mkT@3XKG!pL9NR*sCBup_RN!7my0pa3qWdJE^I!LT9*qu z&u41gH1O*O#-lHr2JVQ7O34^}7S9uelQ6cQ27dYGtie*?64084u_&=xxLR+n5w2BA zjh@%(`9?k8EWB6PtlV0Jt->~8yRbvJTXo6?i6+jyM;Z%Ug5*SdoSvT-{!}S1>G?I4>UH6J!ViQW0_PZxf!_dKLbov9n1_@E zXz3h`X!tw{Qk?@yo&n|vrwj9ig~H;&b@DjMeo0PIg`E&}qgx$g(VXyFE zVV_FKT9|{m6_K?t2XiYTYhe!NRz%jq9L%kVtc5w4TM=0cb1=6eKC3)g3v)1^BK}k< ztc5wSHk8I|D&gzGH&o^~g>OmDZ|nIT;k!zCPj7x8{80E2e$AJqMI1itPrfWI?stZ5 z%$KFjm!-{@rOlV6MK7l}X=(FiY4c@i^JQuCWoh$eY4c@i^JQuCWoh$eY4c@i^JQuC zWoh$eY4c@i^JQuCWoh$eY4c@i^JQuCWoh$eY4c@i^JQuCWoh$eY4c@i^JQuCWoh$e zY4c@i^JQrZ!0%3@0Nh0ZJ;Fq#Ocu_9rWIhO{}ONs^uGZ5MywXD6|NID>-`pCtFTSj zF6T?UF35C*xLTN&w zG@($MP$*3(lqM8P6AGmXh0=sVX+ohip-`GoC`~AoCKO5&3Z)5!(u6{3LZLLFP?}IE zO(>Km6iO2cr3r=7ghFXTp){dTnouZBD3m4?!4|!Yvwi53ERq+fNM4{Kd4Y<+-HS*s zfzB7nCsQP!Op$ytMe@lM$tP1JpG=W_GDXHCdVinrQQ>1kdhLqj8!3jI{fNJ3UtbIh zNo0>-tRBDE$iQs67(G5Q8*QyvJ$^CD$>-_9S%W2b&ewCHaM7R>DN6=t1D6V`h0Cxr zsMuJo+|~%!D!oR}>-2o1p4Si7;mw=%yg}vJICu|IHVtkE)+*(e!QFV?rsoFXy?Vb< z&rL#(D2h?1M2;wmQKv+XD2h?1M2;wmAysnJDeMw<3wwmU!iR+i#N9#RA>m=+5#dqc zG2wA>bV7JicuII$_@wYDmHDim&k4^9F9`dE7lq%|o8J?DU-$zdM=8bdfKleps)Wz! z{pW=*>Ybk|{UxQmCds@mQpoFp;C060{d0M>Qp&NaU!-E8l__RPMtweG6Xs7QCQXg=hK}yr9cx z`WC#<$zwqJ7Q6<13tnjEi$MAoywFTO)3@NoxO6L!z6Gy*3trgLui%-!1ury{NZ*3j zpl`t|-+~wV$(-q1@S;!Wuk09v1 zx8Q}Ak_-A4yas&>UW2{`uY3z$gT4hXd_Me@z6GyA-+~vOAEwZ^;Dv;V^euQHVIqAC zUPzco-+~u9OzQM4cwrfc^euQ{8Hn^Pcwrfc^euSdrzO(2;Dw)-NZ*1Nep(`Z3tsqX ziS#XaF_s|Gx8TKCf=J(j*Pw5~ixCB%>09t(L_wr)!HW?Ek-i15LEnPcpl`uz(6`_< z=v(kYH&}l97QE2m7lHIGcrofA(zoD+y<$3j3to&mC>i<|yas&>UW2{`FSLt#Lf?Yd zpl`toO=Aju3tsrOi1aOZ4f+%p@9d0)WA|{U@0`P9nT5yTb4ot`JAYC zCPD8?p>KSD*5JdyMJQn@^onnCZK4!2WHBRxqVONUbP^ zRuFdx8yv6s5Pd%r#C+kekf$Em7>-TVE;X5LuF|DzXNhMRHoTb8QMFaIU6cN zjr1Al?FXEYF^)ijs%g~CSz%yqUq6#xLMB|2KV9pjaW%6hh6mpYn4*3@^8~u4MLw% z?!io;9BqequX1SAue+4u*E>y0X%;Un!d79MuwB?8+%4qHs~mMrD79J5E6&@2FR~b$SPYO>7PYa(EKBe-X)$=*wdEo_Nzwn~)yL$6` z!tV=zAbeWoe?}BJk1L1%u&$pMzNmLNn=6MFG5s~+>%uoAt2c#jNjKis^E<+KmGYk6 z{6P4j@FV^DG3d^RUR?xIf96AfehkbJP8a423x!Jte~Dk03af={h3kat2Y-)WH((|> zAGJ^1rkopujlw439_7|4>=JehdxX8hhlR(L^9kWe;VI#1;giC%!gIp&!VAKF;YH!I z%I!HlKQH{LQeM*YYbw?2!uNz92tNc?KqkKca*ewJt%=Ar?h3RcBKwgF^&=JPM=I2V zRHz53fc@b+T;r~QP7=AsT>+gWa*ewJI!UBeuaH%*kX5gcRj-g$uaH%*kX5gcRj-g$ zuaH%*kX5gcRj+{kVQ#eN6|(0Qus=+pRj-tfx>7#sO8KZOQTs03~KI%&Os4HQynNA;dCFXbhl|Jf9NRJfhqppPXi1blcLV85{s4F2oB7M}A27T0( z27T0(27T0(nEkO-^ifwr4n+E>E75|OKYi4dnEjC=ebkkh_Yvu%u7rK&uk=w@!aft} zqh16V_5)o)w{Qbwy9n0r55QVI*DKv8yhpf0xJ&34z9D>5__pvJ;YYy5pmGT462>CW z#i%c)crm7044E^fQqNU--Z1z&QZ~Woxfo^O^Jb;j>noqoFMLDzrtodyJHn5E)uLN1 zy49G={}w5vTP?cPqFXJx)tI64SJJH(-D=UT7Ts#pJHH~`YSbx_bgLm}BI#B`&P39^ z9(~^;AR>2wh?oGz58e;-2uPZwTKMzNN3;*7G~Uca`!Ho|mfz zm#YSsgS&pDum+c_2A8V_m!telXALfgt`b>;%b}%2*5Gn*L}U#v2S-HK;Bs)(Z>)r6 zcow)+SS?&DTqis(JRv+OJS99Wd{TH;cusg;ctO}NyeNE5_`L8X;A(NVTHLJ`cdNzS zYH_z(+^rUOtHs@FakpCBtrmBy#ocOgw_4n-7I&+~-D+{SMpV{_${JBwBPwe|1viXC zo@+#9ji{^=l<3{K_aS{5a8!=WP z9uyuD9u^)E9u*!FJ|lcf-@XgnfRW@AK<2qYd2Ya*h$)kWOVDyRKtGAq!nMM6!e+hG zB5W153EPDo!rj8-djEv*r0|sRwD3vcS>ZY1dEo_Nzwn~)Y325uo}U-KBqT>0Fv}o* zjCVGIqo;u$;akFYft%FgHmSvJ0!Pmxg)MFq`eGtm+$Qv}M7Fq1=wXR$ahuS?64~N5 zp@${1#ce_lOJs}NgdUd27Pkp~E0Ha(R&uVDoNFcLTFDt}wkT~aO7%LBa;}w}Yf&mb zQ_i)RA@Uu{xfUJ+BIR5Qj{%W#u7$^dNIBP{{6xyR7Ud^W&b25%k#ep@`H7TsEy_=% zoNG~jBIR5QF8EA2*MbWo|T$nokl)&8u`>|T$nokl+OsH0_=$urip9%G)BKt>DKqo$Zn zk8VBci_i4y)`MRnV@>P9FOjjP^_bBT87*9o5dohWYg!L!90D#CGS;*n(jYR{v>xLh zQe>=YJw`i3#+ufn_DPYkruC?OB4bVKQTs&3n%1NCiHtR^hdhalHLZs{iHtR^hdhal zHLX{4U%jIH>J{BrujsydMfcS!y02c*ef5g&tB3qqLdKfbL;gg@n$|=9M8=xdL;gg@ zn$|=9M8=xdL;gg@n$|8)}t<162_X=qb`VyHLXWo@R_lu^%#Ru0*p1Shwia1 z7;9ROaTik*|xz-GatsYZG)92GM;T4>V?R7wr!{vV!M#>Y}-&T zM8>mi1MhrhJli&`FEHmpXHrRhYGoGzMoHmHl z265UTP8-B&gE(yvrw!t?L7X;-(*|+cAWj>^X@fXz5T^~|v_YIUh|>mf+8|CF#A$;# zZ4jpo&_I@loHmHl265UTP8-B&gE(!#O3KT4hnzNu(*|+cAWj>^X@fXz5T^~|bUQeG z+1L(FUj;H!XuH;rwu4_jGg4?f_$4w@Xgl~NawTy)_5SRf zj$W9^n2qh=n#h=q?ckdEFlJ*rxF#}YV>`GeGG=2txF#}YV>`I!Gh;TkYyD`u){nMp z{b)P5W}b}M*bc5)TE=W_2iHW#Y-|VDd}hpsPqxS>TjY~1^2rwYWQ%;VMLyXgpKOs& zw#X-2 zTjY~1^2rwYWQ%;VMLyXgpKOs&w#X-2`j4$R}ImlP&Ve z7Wrh0e6mG8*&?58kx#bBCtKu`E%M10`DBZHvPC}GBA;xLPqxS>TjY~1^2rwYWQ%;V zMLyXgpKOs&w#X-2`j4$R}ImlP$UjHCPS*Z=!Ir(2LsO zIsviVm~yY^DBD(7|%OIYlmp53~B&{8y zwL`Rapa%I4Y3)D_5=mPopePqbyIOEKj2>PopePBTCC0Xk!~?c^YMT8fAGJ zWqBH9c^YMT8fAGJWqBH9c^YMT8fAGJWqBH9c^YMT8fAGJWqBH9c^YMT8fAHQNvgXf z)m@V6E=iRuI;B|Gp;UKCs=FlBU6Sf9Np+W`x=T{sC8_R`RCh_LyCl_JlIku=)el_Hz4pBJIM`_1E_p818)!zN!i_|&x@T1E_p818)!zMT?|!v+zuLQB?cJ~T?pJ&FtG)Zx-u-ItezkYM z+Ph!v-LLlUS9@<#yJ%9oXi~dqQoCqUyJ%9oXi~dqQoCqUyJ%9oXi~dqQoCqUyJ%9o zXi~dqQoCqUyJ%9oXi~dqQoCqUyJ%9oXi~dqQoCqUyJ%9oXi~dqQoCqUyJ%9oXi~dq zQoCqUyJ%9oXi~dqQoCqUyJ%9oXi~dq2B*u6X7EU46l=3Qgw660HbYlmMG8HH&CpUJ zJ%r8BRX)>0*bLsGTk;S#Ljw2VnI6Js@Q&FIxMm7Hgw2>K6B)(YEDvF`JcP}V22c?g>!CH_heVKX$76zL&shGr7!A#8?b66qmqhGr7!A#9e1uvs3$W_bvk zAw!mm9>Qkm36UPcW_bvk6W7Rj(h zGHj6yTO`94$*@H-Y>^CGB*PZTuthR#kqlcT!xqV~MKWxW3|l0_7Rj(hGHj6yTO`94 z$*@H-Y>^CGB*PZTuthR#kqlcT!xqV~MKWxW3|l0_7Rj(hGHj6yTO`94$*@H-Y>^CG zB*PZTuthR#kqlcT!xqV~MKWxW3|l0_7Rj(hGHj6yTO`94$*@&2Y?TaKCBs(9uvIc_ zl?+=Y!&b?#RWfXq3|l3`R>`ncGHjI$TP4F*$*@&2Y?TaKCBs(9uvIc_l?+=Y!&b?# zRWfXq3|l3`R>`ncGHjI$TP4F*$*@&2Y?TaKCBs(9uvIc_l?+=Y!&b?#RWfXq3|l3` zR>`ncGHjI$TP4F*$*@&2Y?TaKCBs(9uvIc_l?>Y?!#2sVO)_kg4BI5bHp#F}GHjC! z+a$v_$*@f_Y?BPzB*QkzuuU>-lMLG=!#2sVO)_kg4BI5bHp#F}GHjC!+a$v_$*@f_ zY?BPzB*QkzuuU>-lMLG=!#2sVO)_kg4BI5bHp#F}GHjC!+a$v_$*@f_Y?BPzB*Qkz zuuU>-lMLG=!#2sVO)_kg4BI5bHp#GEGHjO&+a<$x$*^5AY?ln%CBt^fuw622mkiq_ z!*cSh_%4n*#Z*n=GIH1Sy_#k3 zh0K{7XW4rpPa*Kv+TW)8rQdqDXu%kb*H%Q6xW^N zx>HUUxb76!o#MJvTz87=PI28S zt~rQdqDXu%kb*H%Q6xUtix=UPliR&(L-6gKO#C4ar?h@Bs z;<`&*cZusRaor`ZyTo;uxb70yUE;b+Tz84c{*InYeOI&w}>n?HK zC9b=~b(gsA64zbgx=UPliR&(L-6gKO#C4ar?h@Bs;<{U0cZ=(8aosJhyTx_4xb7C$ z*kuUa=oZ)A;u^7m(By7$-7T)W#dWv1?iSbG;<{U0cZ=(8aosJhyTx_4xb7C$-Qv1i zTz8A>ZgJf$uDiu`x47;W*WKc}TU>XG>uzz~Ev~!8b+@?g7T4Y4x<_31i0dA4-6O7h z#C4Cj?h)5L;<`s%_lWBraor=Xd&G5*xb6|xJ>t4YT=$6U9&z0xu6x9FkGSp;*FEC8 zM_l)a>mG64Bd&YIb&t625!XH9x<_31i0dA4-6O7h#C4Cj?h)5L;<`s%_loOYaosDf zd&PCHxb79#z2dr8T=$CWUUA(ku6xCGuek0N*S+GpS6ugs>t1o)E3SLRb+5SY71zDu zx>sEHitAo+-7Btp#dWW^?iJU);<{H{_loOYaosDfd&PCHxb79#z2dr8T=$CWN5Jn3 z#v|bFB_Jbv9|3nvVPx+kC>xQHy^o-5L`L>Lg0c}A+4~5}Mr35~BcR9}7}@&>@_)hD zr~LOR|9#4TpYq?Q{P!vUeae5I^53WY_bLB<%735o->3ZdDgS-Sf1mPyRQW%u{2x{R zk1GF1mH(s4|54@tsPcbQ`9G@sA65R3D*s27|D($PQRV-r@_$VEKc@U2Q~r-B|HqX7 zW6J+A<^P!Se@yv5ru-jM{*NjD$CUqL%KtIt|CsXcQ*2%zsMNy8!PvY$L@5v%o7acl zc{7l)d3~VEcNm+8Q$K`^t?I)#=M0dsd3_k|@R_lBeTvQN!)S-kjLqwVSLXrX66ML* zygqn!h>XqaQ*2(JV)Odo=V3Zy^ZMZJ;WK0N`VhJL0FbeHeHa(*12Q(R4=dDuAY=3T zu&%=LGd8aeBMKs8^ZMYk#Qqt01c{8z>%&NczcMzj556M4!`Qq&NR_-WHm?s-B{DXz z4^kyEHm?s-B{DXz4`V7KWApkjrXn&nuMcA?B4hLV;5&K%cu;sqcv#5TygvAjh>Xqa zgYRfFkg<7v@Es8uo7V^55s|TZeTa5u`5Bwn2M-dFv3Y&)AQAh87ln+?>qE3Nk+FGw zh;}A2Hm}ckMid#F*9XrMzh!J*AEKT44rBBB;9p|OYr@xsjLqvq+$@o?d3}hRMr%aI=Jg@knZGhNZ@+BaerVmRc;?7$zii!p*}DDEy%&(ek=uS~9pB-| zZNF^Ye%ZSHvUU4q>-Njm?U$|FFI%@?wr;;{-G14+{jzoYQM1g4Be(siSt3Vn`%$w* zj@%C@MHX3bb&( zj*z?@5|u-ua!6FLBC2%qa!6DTiOL~SIV38FMCFjE91@j7qH;)74vWfRQ8_GL4vWfR zQ8_FshehSEcsVR8hehSEs2moR!=iFnR1S;EVNp3ODn~@+h^QP9l_R2ZL{yH5$`MgH zA}U8j<%p;p5tSpNazs>)h{_RBIU*`YMCGWc92J$LqH%t16?BH+>U`Rk#TM(ME8W~o)Fy=qI*JgPl)abw9v2M zP0~Ffx+g^Ugy^0S-4mjFLUd1v?g`O7A-X3-_k`%45Z#lads1{yitb6#Jt?{;MfarW zo)q1aqI*(wPm1nI(LE`;Cq?(9=$;halcIZ4bWe)zNzpwex~D|DqI+6&PmAtp(LF7?r$zU) z=$;nc)1rG?bWe-!Y0*6`x~E0=wCJ7|-P59bT69l~?rG6|3UvF8r$Cp;_Wl%d{w#VptEAGyUyR+i%thhTX z?#_z4v*PZoxH~KE&WgLU;_j@tJ1g$aio3Jo?yR^wEAGyUyR+i%oamkt-E*RQPIS+S z?m5vtC%WfE_nhdS6Ww#7droxEiS9YkJtw;7ME9KNo)g`3qI*ts&x`JP(LFD^=SBCt z=$;qd^P+oRbkB?KdC@&Dy5~jryy%`6-SeV*UUbik?s?HYFS_SN_k!qN5Zw!+dqH$B zi0%c^y&$?5ME8Q|UJ%_2qI*GfFNp31(Y+wL7ex1h=w1-r3!-~Lbo)iOUv&FLw_kMo zMYmsc`$e~3bo)iOUv&FLw_kMoMYmsc`$e~3bo)iOUv&FLw_kKGita_xy(qdDMfalU zUKHJnqI*$vFN*F((Y+|T7e)7?=w1}v|F6BXfs*UI&-xu%UzTn8BTA$AD-$_&>{wdK zj^o%$abjC>Y_ZrOcI^lasR>36 zL5zi0ZkGjemthd52$P+ey)$IP4BW$V4h_%mxigkz$7$7WdnB{cnRo8qx%a;J|MC9s zec$*0KF?9td(`zFb-hPj?@`x#)b$E&QL#}NbuNj<$6W6**L%$M9&^3NT<nFFE49BpKO5#Cu8gQWEiAQoWQ! zyyG7KJnr$&;~xJ!?(xs#9{)V<@z3KP|2*#T&*L8dJnr$&DSOwHy=%%|J!S8jvUg3{ zyQb`2Q}(VYd)Jh`Ys%g=W$&7@cTL%=r|ex*_Ub8n*Oa|$%HB0)?|Mb`mV;MRFXd$} zuTVeY71jHMN-)P>k)MpJ{HXW*IlT$Lq8cglK7P!{7hD#-r!0SaMcSi0=>0$C?Wg_g zU-BMM#a@wRDd)VW?y})ynl2-kEtd=awd1nuGS>cSTXx!(owjACrI}OO&$DdWmYud` zr)}A3TXx!(owjACZP{sCcG{Mmwq>Vn*=bvL#@3m!b!Kdx8Cz$@)|s(&W^A1qTW7}B znXz?dY@HcfXU5i-2`PkQvBvOy^6(TDEQhwjmb?$L+t(TDEQhwjmb?$L+t z(TDEQhwjmb?$L+t(TDEQhsp_gQrDzMAG${$x-J=iP zqYvGq58a~=-J=f`TR4Uuedr#2=pKFO9)0K@edr#2=pKFO9)0K@edr#2=pOy7{OV{h zYyX**|GcbiR@=?Wb0}GDH!Gi^WVPL_yoHk0cC+#gN>!)h{RIQ(? z^;5Nes@6}{`l(t!RqLl}{nV_Vn)M?@J>6l=`l(qz!r<{9^i#8bYSvH9`l(qzHS4El z{nV_Vn)Oq&erncF&HAZXKQ-&8X8qLcKQ-&8X8);KKQ-&8X8qKxpPKbkvwmvUPtE$N zSwA)Fr)K@ste=|oQ?q_*)=$m)saZcY>!)V@)U2PH^;5HcYSvH9`kB+yKR=TA1AKiP2pq*e?nf3l&LqVYAg6iV`?8)_+(tlem+T~H%yHyUael&sxoNGH@t z{$xWsp=9kwLpq^k?M6d7p=9kwLoJAswHpn!AWGJ5G}MA9S-a8DxbO8U!3l5ZiAnjK z%U^Z*yi0Jx8_u6>sKs%Itlem+#Zj_$qoEc@`3;w>-Ds%AQL=WUp%zEU+Kq-<93^Wv z8hR#jW!7#q)cV-Z+Kq-!n7HryrO!n7HryrOZ8`(CX$v-O!KN+Pv;~{CVAB?C+Ja5ROpW~7f=yenX$v-O z!KN+Pv;~{CVAB?C+Ja46uxSf6ZNa83*t7+kwqVm1Y}$fNTd-*hHf_PCEjX`eb8RrM zI711>^1SSLKqc7P^RgNx7|Zjr8YLLZ^Nu<5iaCSYroS`q{?5GO412&>p4WS9MJ3qU z^NKuN8I0w5*^3g4<#}0+Z7`PSWjnUN;Om32JTHq-g0Va=i%^2GJTHq-(i@tWPS^%x zdEPyvd1-*_fU!KUh{Tn_Se{obq6A}kUfSSSFqY?~4N5SUBl~k?e~#?Wk^MQcKS%cG z$o?GJpCkKoWPgtA&yoE(vOh=m=g9u770dGH$o?GJpCkKoWPgtA&yoE(vOh=m=g9sX z*`Fi(b7X&x?9Y+?IkG=T_UFj{9NC{E`*UP}j_l8o{W-EfNA~B){v6q#Bl~k?e~#?W zk^MQcKS%cG$o?GJpCkKoWPgtA&yoE(vOh=m=g9sX*`Fi(b7X&x?9Y+?IkG=T_UFj{ z9NC{E`*UP}j_l8o{W-EfNA~B){v6q#Bm1-XRuqw1wqVN^Y}tY>Td-vdwrs(cE!eUJ zTee`!7HrvqEnBc<3$|=Qtu~hhTee`!7HrvqEnBc<3$|>*mMz$_1zWaY%NA_ef-PIH zWec`!!Imx9vISeVV9OS4*@7)wuw@IjY{8Z-*s=v%wqVN^Y}tY>Td-vdwrs(cE!eUJ zTee`!7HrvqEnBc<3$|>*mMz$_1zWaY%NA_ef-PIHWec`!!Imx9vISeVV9OS4*@7)w zuw@IjY{8Z-*s=v%wqVN^Y}tZsN2InRQri)!?TFNNL~1)CwH=Y#j!11sq_!hc+Yzbl zh}3pOYC9se9g*6ONNq=?wj)y85vlEn)OJK_J0i6mk=l+(ZAYZGEOH`fJ0i6mk=l+( zZAYZGBU0NDsqKi=c0_7BBDEcn+KxzVN2InRQri)!?TFNNL~1)CwH=Y#jz|lB8(ffA zPX`Nr8(i?);DS8-fcEg-yCC1@SKfOUtcL}^4KDa?aKUeb3w|41@Y~>m-v$@_Hn`xo z!3Dn!F33x{0`I*G@={9Pdl%%Tl)U#Y$V(}C?_H25u+4k#g5L%g{5H7Yx4{L!4KDa? za6xwGK6&q5@Y~>me1JW?_b$lp(?Q3Qb}VVfl6EX<$C7p|X~&XwENRD*b}VVfl6EX< z$C7p|X~&XwENRD*b}VVfl6EX<$C7p|X~&XwENRD*b}VVfl6EX<$C7p|X~&XwENRD* zb}VVfl6EX<$C7p|X~&XwEos-1b}ebwl6Ea=*OGQEY1fi=Eos-1b}ebwl6Ea=*OGQE zY1fi=Eos-1b}ebwl6Ea=*OGQEY1fi=Eos-1b}ebwl6Ea=*OGQEY1fi=Eos-1b}ebw zl6Ea=*OGQEsh9&5jblgS*wHw4G>#pOV@KoI(KvQAjvb9-N8{MhICeCS9gSm0S9XdF8l$BxFaqjBtL96K7vj>fU0aqMUuI~vE1#<8Pu>}VW28pn>tv7>S9 zXdF8l$BxFaqjBtL96K7vj>fU0aqMUuI~vE1#<8Pu>}VW28pn>tv7>S9XdF8l$BxFa zqjBtL96K7vj>fU0aqMUuI~vE1#<8Pu>}VW28pn>tv7>S9XdF8l$BxFaqjBtL96K7v zj>fU0aqMUuI~p&_S9b=B@={7>QWj;$X_X)gEy{vbm8=_Dl4H?$}Vvdy}oMR~7Q zTX`mBQ9gV?+svda%6o-JAire~GbxLT%#_TeEXsD&!c5Ad{Fyz>q%3+SWl`2-KQk$d z@^gM=CS_6fqDIyYEy`Y$tQ%UCy(n2Xv?zN~vTkV6GbxLnNm=wv%A#5Ucg0M~qO?cJ zOvU?i|MX-K#xwm~$@aXE#_qJCC8&_9*+pB_4uKr$cdv&mJP5+u}f+yEJ*4w`} z*tX`Iz3q#G>(|tK+v`@nxOQc4`;uVWW#8&;Um6Tw*6wXzmipQCpX_a~4{pDF_P)Zz z!D4P?w4Ad z^ry0=Y;j+9IDLO%yqtb0GnP$n8qAann+DQ@xuNWMNk2`F4`++%@@O{w$b*CFhbOY* z$30XTL(D#Q`wQpe5Tm1IjOi`@Afo@sA3rTG@34`_EKT8IF#j_ExoJw{9GxWNtcV6;p|wZxHnzc{g$E+^zZDA zI(dVNPG7c^ktT{cE;*6iof*oecW1_O`Ge`YE4B50)ibE?Y`VbwinAcK2jnweQNv zvbvd4L3W!cl(XaIT!tTp3gf%;xuJ4yd?YLNF%D$7_uj=1b7?uZR50ulpCd=vlK65x%n#gAkCY9>SBf0TR z9>wR%rL)hL4~$3|rQB25(m?uAInYo(Q!3?#bo@lIFi|L$lXO!rt^)X0P;{-Ip7d9(RuD+N{P7k!AyF0Hk-$o^6LGPvpl+4s?JGE7Oq?@=(ke2I5||FEXoy%1;mh? z<;<>JK37h(f(sWWOXJy6X<)Qmp4h&1>;C=w)fy%oAqIvDV_V;9f8TjaTa!le*?xQ8 z`iF@>!*WHX@5zdVzAFgq=Wl)rE%B%kghPMy=l#u3~IZqUp9$J zgX?phtd8ScYMgYL$|KP;Iz_RMRaeTB{X?J*rw)b(<%KP~wN{OQ-s zosOs;q%5kAvt>S0;y22>U03g4C6V~_b@;8X&$l|}hu_&YA^3kpXFsm{D(QZ>`|;qG zo+WbHhkmhVqNjrHy=blV>)B%MpT3v={tA)eK51AWhb+&ZDw{c0Dx^xgNzv#-m!KUx~v*_mFRcAbed`2QoaUjIHe>1xSc zCao^9_04V>4@%34)o5{8kyewI>{t&y;K7OP+;3i=@t$T%Ix=Z*6WYR~Xooo;m7Fo8 z{o}euUVDf9+qg8BmXD!tVH2t33~I)+`75pMQT;}}v{W>NH>HEmX&*-AJ(c7?ceTxVBw7idy%dQRlFZ=ekHs#5yf$a?c~a9@^-8 zJokn6-nwqCRh0CJXW&CmX}e@AJlcyuL$0x;z33~sKDwe+QZu?jqosfdl*rA#A#024 zCwkwfeOzOg{zhA8`{<<3#K&pfi3f5uWFn>_Q4$Y1x2*phx!d)R>8fY82yBh7j{1Ad z_lCauaXst$NBlRfiCBD(u6Vi*+Ct(($iWu((${9m=Vu*7-rQF6s;}VRh&6k4E_aue z6gfwrj*J3Q?<{g%w#QA6^4;M#a9&%VC*4r@TP}`FJhyKR z?t-H-@=C6SjnDKIBu%0Mt(NFYI~Y*S_~3-%!&d#@@BhiOfi{uEBXmZr8PgHxdi>cI z=ZU`ctl0b6H@%N+{S$ldx#^sx;mzy9d0XNscDB7rvLjwFA)8};qF7$vM86SP=3%|> z!F%^czxacl7X&Ljk`XB5@j$Y5cA0voMmARHsEafXvnp7v5ty~X#mX4GM57{?X$0hQ z@#0=7?$LJy8-jNRKNh?z*ciM!xH`BdxHh;>v*quR{@<&o&<)~b{Bf}xzF!jFtg)M0 z)Q-03uDAMK_%?Ax-7cn|JH+mCr$#fk>&@&ZgrR=7#xXyp2zjqOY==;t?+-p9%;X1y zox&L&4E~G|h9B1Z+Mm^X*dxKCLW+G%Z*!j(QtD@fPWl&uzbI_Z&jwEhnbbvE@$|F7 zUkU!X);ep3Tcb!nAN-x**MjF#8eK}Q5^Bxg(%5=8_=P}gcT=l_-wpmp@T}IK{IB4D zYW(zY@DG(sIu-neTIx{nj3UnOs5PDlemnR#$^`w_!Hi}`cWdPE-v<9K_(!tJ_k+Ko z+^N~%-^-S*;J*urV2`Y}SFJIxcKj={-RB$&N{S3+#m@bj^E{xZ-$CUh3I{28G5EW| z&jddm918xjW>dZw98IlBtquNf@O!C?Q|p5N5WE)rx6~!6OM|Zm|2TD7YJKosWySnf z>hjbTsVh@gDL1AOJg*F>|C)M7@SlQLgZ~_y3jSm8U$oZs8(Kl}&ETIZpZJB~p9KF( z7(SKYuLi#!yc~R6<7eMWZ3w=k5!zpt&A$@-ZOu6Rs?Y?!8vOm>uM1D$mx6zm`Z48_ z|I5_7QX5n6PFQnHNQ{K9hVs z<*#+087`DFLtJ>>Q?GBj_S^2eYvso$i-lD?viWj`UANtF$6Z%=d`f-Su}tr@kz!_F zc7QR1%Z78hyHc*?zb;8`-P`M2nKv&V$`ywu$9Ctl2a=yOz)~1bHg^@(zxU?)*YCxD zUR+dnJUOPE%MT~VTsb;9K9VU;j^#6x<>bfYTBS_Btag}EySpk_^MfC#m8JAIj4wNb z6+7-9d^A{}&y>g2&Q{W1bp*ek-qx9WH4GN4cez2o@q1D-qDrgRC}oh^IqtLe1@Vga zUG%AoUR||r)v?u2tl6-(a`EW8d)MVJx$2VdUV7uD?e$l!fAR9-6&tVEb7k$StKV^A z!}s3#!n;1R@!E~gzx&X;U%qbj_V$~?#T7q zuRs2tPWqYm4!n2vh7~sq-tgu3-TuCx{_(Hfxbyw*d;jm;K-iecRKwZMyBm2iJe_(GPy*gQsr4@%H@f-~P}QAKLYy7w%Yn z$KV~$-tqkp-}~WT{BZrwJMaABUBh?%gS%$8-?;tA_V0b#nNZ|Gkp)E#6d6#@=|lF@^ZJnabVMJrp2&G3OE1z?A`020R&HML(bq97`}P!Hxkp2Fw`nV!(<4CkBid@L|Al1jEtS^nu+7ZX=kD z;5CBP2u>pyjo>qa_X5@nIE-MtfbU}2Zs%gREtXQ;R$; zvb4z2B14OnD`aPpn?+_8d0Av-k&{J67Wr6YW08yXe$SGV_dvEUxxQpPkncdY1Gx^# z9Y5n4adLaf>?N<4tX^_@$>=4Ym#hYI8pvoMpMh)!av8{EAdi78267l?buM|kWbKl( zOU5pF3uG;jt4qcL`3ht!T$noDtM}Y(dO{rV^Y$`r!|w;XAKZR0`@!o6s~?Nrhw-44nIQwAigRc*^KDhcG*KF#iwGB%j z9DOkK!OsT|8{B*_^A)uX+Ab)#F!I622X-smYcTP_!v_l=9DFeF!M_Ll9^89h&^6)R zgLMziJs9`k+kGc84>n_y-k{38$pm>4d z1%ekS*`RlU-34+N=nr5&fcyaN1E>#RK7jZD-UDb4U_F4*1$Q~j<)Cwc%>}*#=nkNA zf$R|L8&roooFPDd0NDZL29Oy*UI1AEV>kM3rV?qH8<-lMbk=I$bTjIQvx!sZG)Jlyaw!@~;?D?FU=Fv7zJ4;wsO@G!x{0}l&4 z9Plu}!~YKZJFKcOzr*_u>pPt9u%*J43NPvvlIVmanvp~^lIVn_5E`sLASQvA1X>bU zNgySGlLSf<7)c-`fsb^nY|MJ#*W|6Q$y;BOr@kgneNB3JReE?;dU(}*g|HRE+zwMA zJcV$!!%+xBA^e1}6T(dhGa69MF?nBH3-unJcFM*Lqr+%iyeQDuPhd~|wblB73PKP-i-gH>g;Y^1y9lmtf(&0)6 z69_~g@PI%A0t*NvAmae3u5;JI*U!+x*R2J3&tW}>^Bl%=_|9QFhwB`sb9l~SIfvsM zhI9DMFN}CPAfMhRpI$4UUMrv8C!gM@mMMlZ*%AhF_{U)%hkN`{ec&C3bsWxd7{}oo zhix3LahS&88HZ&Yj&T^q;TMNp{MU3Y%;NBh!zvD^IE>;i=mVQLT;ec^!y^uhI2__I zh{GQadpO+TFo(k%4r};@q2CQ^58qLHIJ+kdxA&cTKK!WOD@@+-c*Eiihc~@W-oyX= z>v0wC?$fdLNyXMDRU24kPpigf)dHXO8e(|5Vd;jW8-{N9xnbvqn;T|sc)4Naenj6e za>K_B8~3O64HGv!+^}%N!3_g9{M)c^!@UjjHoV(EDmKHj4a+th+c0dyuMN94+}bc} z!>bLeHk{fpYQv`un>Jk9Floc14U0A$+AwJUrs{<~8}4kFv*FE#H5<o^5&`h8LPK z!lcgvR`V&fw4YOaJgm2uO=@9>)v~^#7Ij1|>hy>N+|T_{iO1AdlfK3&wU$%8zQ#87 zHMXhMoKimn<^}p0r__25E2bV+Og*fadRQ^_uwv?A#ni)UAxG3gj;MtkQ42Yu7IH)_ z28USHwx+vGha zXY2;B7(rqLhY=J;Fc?8#1b-3qMUWb>Iqx-~F81GT;6m=d-|P_j!2LQ8Oa>4cKv;zP z80KTJ6+u=6R}oZ2Fcm>m1bqSQ1&|lOT>wWB6h$x;K~Mxg5%ff`6G2V{HxblCFcU#c z1TPV^M6eP;N(3hnl*AwPJ_ITvn268m19}432_Pqcga{5ID2QMnf`ADAA?Sx-AA)=c z?jfj$U>?4x&ryBAMgZ#&q(g8HK{*8D5Ih9X5I{Es+Yn?!a1B88G>a9 zk|8*TpcsN-*wqL8LeLAh$s$L47I<0Oe_7A9m!x#~ru%7E<%vLi@A-~@pZ1V#`DLEr;z&{aTLe9j0mAo+pg$9jIS^gz-BzYlg? zu=}3$)y0UV<3NdO=mTC~qz_nqAoVT%6|Yj%5^u0R@Y}*}3%4!Iw(#1*Y73_=jJELE z!e$GXEljrX*ur89hb;`YOQkayYT>7aD-)(ncrszhgd-D%O!zTj$AlXbW=wc7Va0?K z6GlwHrMa)AxysVpZ|SdinY;ilD0rMs>V4s)V*E+P_>+q9Cl%vQD#o8w zj6bQ^d{UkOOOcqO^p^7*ub&B{D?FpHjKVPrlPmn9u#3Vi3bQD@qOgj>DGH+~e4?<4 z!X*lmC_JLDh{7QXgDCu=u!q7O3UesDp|FO+846=4e4+ijS=9cOx|@pR&^m5?;9}jN z`&nAwI{&0Tf1VD@^IYdL&vky!7@gmDcVUd(EVqYqX%AQFdGdgIO%Lcf@_;kX;6Q`{ z5e7^6D`Av`PZBmsxFlhcghvt8^Bsw}PdUbJ%wUHOEYS| ze3c(QzqB-ZS^61-4Bw( z^-jq;r$fp+IiwtfvT_j0%0VbA2cfJyltaoxIix(4L&`@eFVWok(rae<9drWyV z>%z|_yYMAAzvo}h@4H)`={uL1zGZEli?%MzRmRIUJ{KD=YwKLJbz!!M^ZN<5e0P6% z9Ej!CdoHc_?K={Z64u!&tpT`1YXJJVap1y%3U_l44X%#__huY8@ZZ3G`_n>w>tnwC zg188l+S5W)`@FE-Kz{o^Hl ziV)uZUhtgo&YllE6;O#?|T7Oz2q*>$Jx;Y`e~>tDy|x=1KoEA&?%w@XX{!r2qb9#~|- zjV?Fmb0eAHHkWsnCMQb4-7a_Z(7a9~dr@1;b%GnlHmH4Twf=u&Z|_FeloIk@a_rqY z;@;pAQ02gr152)tA}8#)l#utp2wNf4ze|OQw;~u!tx@@~KAUyrpR%4)vgUolxBHxI d3)lz{Xfc9M412p diff --git a/FoodbLog/Pods/FlatUIKit/Resources/flat-ui-icons-regular.ttf b/FoodbLog/Pods/FlatUIKit/Resources/flat-ui-icons-regular.ttf deleted file mode 100755 index f4933ff3590f3c3644d32fe50f5d7148c2ede9b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25708 zcmchA3v?UTdFI?1%nW8Q7+^4XgLsnwA0h}6Bq3201xgkrTcTviiXW0CQ+~*{BH40m zC$`q9k>=&Z_9h#{i(Np|fdHQY9KPB%VjqjuZ+q>0jPbNX`6cJtW8 zM;z_<-@$+sCC6^vT?)Y5xv#m8|NZ}WBrrh`0zzAmg!-PV#wN^BNzf z>9>9BzX}5D!~L#XkKBC{*D&sH!_|N5@%xWH^r^4x#y#?{|JrT09J!f&=W|yI!r^r& zpS}$l>NkA_+~17*{@YI6bKmxcd{(* z{|5JkJC2;VW#fnRj36BG3xc%uzD?~}QDYJcsR{;%el9FWbB1owyR)hs z%h8s2dpzHw_S98}bYfcV@KL-o{FD$=0zmg+u;kYT}et#P23HIVU!X7JfIfiJTa-iulbk)GAA-osMoLgRNlF(wz?d(k*NC zG8r%8nM-d_VO3W&*V~0b=@Zg5!VcWzL?y&bmScG@S*nb&8Y}T^H$BHTvpJDx^CX*y zqc)qEMmA4NpOAe_kzVu3Oj3Tv)7Se9BPhKl1r5XZ8c$y@Da>QMy}6?+m)i9^U4R^GOyM_4o^(DLi(xH zRh5#-FlQ;DWVYK2lR)MtjIpm?^D?! z(I<+GiMX8UPAC`%`ovq@xkybuZ>OIx!XHbL#29||`Fx5ji>j=M-@{@Ar9-^BcoUuy zkZG)d|MMLnWd}GsgdHiFVl0{y8xwQl)MQO8TLdozC8js$$y( zqxA$&qR;0OPl>8u6b8Qi9Q_6mj`3vTqYe*6REhbAS#OA z2jG!K(X=9pk&4@jKNQdc3yr7=+;)_FV<>K1k1ugbHaZC?wU-!coo@B=if=d zO=()9Vf_*foH#&}anzH15_>lm7(#zIKw1%G%J zo=EiR@FRLUox%+=9(hC$@a&ZS$isR%!?OeW!w*Zt z7c}P`Isvzah6=0NdEEuj#j2+~yqfm9bMp|wLlC>nIUNva6XVngJGYT}TrkU4^TIVK ze(tLtP5PRLoL}>DzUm?F#ap!ee6R2qbU?I8giP0gOxF>T!Z`MYFqrcV$Z#ItC|)X) z6?$S^FCn&j$zDR@Sah!K5k;w&TASzcM995g6DoqBbwNbpqwxp|;GNS5>EyYN&kv^H zQ;2Kehd2lSky>6J`z||6>_b#g@mve_6%YRzN+_4-b!oJ~z+&2vv33eKy4W`kN>v_~ z#<3=lW5G-7GhA>PcgdT}Rb@3N(f+E5?$|<*!Y;^QuSSv~Wp@9;e7+cxtXw=8jOQ#V zT+HRKf7_fA423l>lie^@m>P&i2c`;RLtDpEsj;m?H`GI^h^9qSp?b2?XPSMLq}0}Q zZR_64g7K{NV`_WZzHPFu_^4m;yH++H+`T=sW!L`E+WuWzGTV!L58u9F{q2YM7C*8* zRIZLB66>mEb4Ro>(<+r(8yZnemjeT-4{UAzk~dy;T_InhnSu8uFtbo8 zUpRR6tZbN;-pg$Jb^m31FEiu$@Q=g!xQVo^`F+$te1&RpSakIZ6&jqt)M~R@w5m)^ z6s<%vA+`SGm(HAKozu>@zx`Qf!|5{*i0wao_nFg9>$LNy|NSZU`=37Z0P!uMfPK7y z!}AsBg(M+&_ec_gmI6r#3d@_!l+K=OsR2!vwSX#hywsb`lWvf;p!$GnPzMGQK}~i# zZ!S+D?M)CkOcHKhA>1T9ApA;qMr&m|KBKjnZ*lIITqOqeOf~$n>^D@_@=}+|6QPiL z<*e7{t>j5^Nc`b#NJsYLBVCA(LFoGAkbv`{tGagGzf|qgxPvh~fJ(bAI5Ibbn zmpasNx!2I`f?LMDikG^c>xk{;wjlTTN=4WxTq(RwID*-fxviCiTt26bjN4#WEP(@S zCvwruBuuO*7pL4d4NH3R?ZIT;T0UmwVJm~oeu4|`PjK;`3jSp6ATOG3OKdH7;Hl`a zr>Rv-5{^ak3DZpEBg@Ar)w>lRr`tA}sLTY}(h{a;vRZw=+-4o8)oD==Y}jc5jkx^Z z@d@zV3<{fseemC4^QtB+Q!937C~7^Go3q=lfw~C;mfThCNK3%-!E{mEIoF8C8*@8r z)$0};jm7J#7w0%aU}U&ZS~u*^)`zRHSarCbWsA6sJl!ce6K>f=KeXs?%n?qYBt;tv?F&%&lWD~;EO`7-rP z{Aek!Huv*KjMw|b7{=C^vI!#jV8*#B4GRPHEfus_Dr5Ssa9EY0)l0Q~o66-)`)YJ; zdkMO}*?LYPlqQT!hv*6$lqLrf5hI>2>Ru*YS^JXJ+U@pPDqdY(6#hj6`2_>!kMN#P zk6J!UWAt)*0|!ZUr{N8WEw$UM)hl1!2s-pPVb56)d(L$Nyu~o0z!q4KD$(&S5>(a7 zEUQeB7s(`Bnv^Kx8zW#}Arjb>5k@B2G8uu$l~k2`<{*!%G^A1>k+2mehSp7PDi&v_ zM#3;CDt00f2$%{yL;No~wfXYueMUU2>*2V;ZVSf4nih@+?;G6Fnu_u&sA~qC?^Wi< z`})S`D+62Tx@CZUT$PlNK~?%{Mc7GeeY`pggcV6uVu^HsTXg$pYXxeLPdTcIPBxlY6cmNRHRmMR)=G3i}d!zPfaDY0%C^bT%|L#Mn?BKY>Ut zGKl=Dvz2{a!2X=Z{w!gCqCx{tT#bF?yzrb-*qHG;Y~-#@30|_|%t$IVGE?-fm$#Ri zQ&%1u4CRwyD^m_abZB16|N?jk+2BWW+f*ka$+>0vg&4-v2h(vOk3IPrR@o}f+2>`4^ zDb^DMmhhbRg@x1rk7ES7%N_16BKs9K1@P$dbMSI(2HfnX7~+P5ajV{S>LCT%`MMC) zbGb_Id3;0)$5X+d1XD3f8h(F$GU@XrC+mns;i*R5d2s5`!r8;B-UTgr0WB**g!ppj7e=`SKM1jy+kw?2(<-X+vBZIl+6GEwy?feCV zH|uH(;-2#tb}1E-R83~=^T9%?Xt1Z4qA60wE~ZSjsVeTdR2$5rB*2<&%C*^M6Bxn^Ka< zwF&1XZ3cFPJRj0G@Z;BFv6yx^072PESb-a~SUl!$wMjE*uX&z8VCFhw);@Xl{qp7h zcp|R-5xjvt$0hdP_eUDCF(6HQ7s7M8{$tj97v<2JBS!1|H>LjrzE*erd*XBx{EOrD zs?{9l?qHy^8*T%qA0q+%0&x=oDKdPiAuBX{>%+VEJbddcu6z3Crb==U(KM{z7YGD= zyWsHgIp1}j9NF0{7MnXqhIcj#h33v-b|b~JD5a^ntk-tW!?(?bA|b4wf+o~(m#iBB zbY;6O2_bh5Q%~+(fK%{85s$tX;O)^TZypI(oq#~q)vl-lgyG3)Km=$OH@PM}dNC)t zkx@j9&4^oQq9>{&;S2kwE8;Nq736f~sD z=}k9o-*Mw?8cEzE6ZEfFaowKd^Wy&O_?Aj#%Xrqi8i9zRszxMWPHeeyowKaK`r-5I ziqyJdlR}YBs_#p_OfJPDu?RjamCGPQRU|6euzi!H==6L;VbZ!iTPIAu=K}Y&ED0Gd z%M7zZ$@P_abLZPHujW|bqS)_oscrwn`MbZgM=R+M|Mq8dxzGOghtri&`&@g4FTL|W zf1%m@!l&OQEfKy)?t191yFPfAO|$^Pe_ie)9X)l+E%)ET$I`-{;UARjY# zb=fuX8|-J66{je=&O?FL#5MPB*>dkS6Fv0okhDlrBWrV=oN+vDQyr??Ce(F!ZL#AC zm+dz2p>_WI7|&^8zwmaz(0FOGG+E}-IK`(W>J!n4@fZjpk;^UyG^gqllM|pX5JDlI z*OgMVJPsgRrBGElF!E>~f<|s9M#v<@%v3Vw2Q-)viSrZvQEwj6{)s$FO+bx5mQ10P zjcjjZ7EXQY(4kMATF5lEkDTw#-dhF9W(*!4Gr)UgEVkjYT|-;%y{6H)=H9JCyDr-h zLpk*p05kRDfma@W`-a1xKDB-OsZSr?@b<%3=AA`a7k8~zRtWp#*?isjusPv`@R0By zgfGH}aJz@C!gWw3I0A7e!?!RxHCpA+Tx7P06hVAFWR{x2HAN|>UzRva8? zim#g?wm6Vb`FX*s*^>lUEJn*huO3^e_s0ESR6}fePw}oDFY$U;@gf)?_OaadWE7E) z7a^`~Z<^kfj4-d)tCxRK1>zT;-0~{IUrFbnI88So(+zE;kWC(@NhMNsqEsoBhnZ3; z10z&m4F!7gnmihWLP;Pd^7v1Q;vr+DxDr?KRcPx`#3LhltRz=^8zrvZ5LXweB^67F z61aL}hD}d2pm;SQv`|ne4=3%8ZIS{eV-zJ-bP|XR554s%B^slTA$xs9I2N$ssf3 z+aQ~U=^F!6l!p*-F z5EBxBt46wt&qii76IM|YdPudrHwFVS416mhFdros&p8@E$|cR8Y=%lyiJ62^5O8@U)@H^l z^Y(6Nmarmliam<4%qa%b{`ul$s{Z$=_s@{>f2b@27#oTh{s zVXtr-cByPpd=EEaLL`AFu;vP)MNb@sbl~k-nJoR>A+RFj(-N#~G_~e|yVB{FoSYoH z^`oB{AD>K0EpPi=lO3rsD_jKjYuKizmfQ74%10@Yt0XjL6w$eg6`n9AG%+4hTN@H~ z0P-@3byvBCVTzwHm~++evRzD6i&9aN9$Xg2rV`K|nUrdbpJ(Az(ho&fLg&z>#4oI|3PXmGDRwZQq^`(fUF*CitMZd z0FNmeuPc(dt5&vbFoi0Sy5VxT@ODu9oD*6ynLvjcI{TCt zfyg#s0IT+ISO7fPghsCT%{P!_ZJvY8bb}s|Bd;QoMS)yQ$JJm&U(zE%3NP}K!&V^? zJO?bM8s|PwPAH!swvJo*c<`XVR7$5yCI7*dR4|T?=AEb)ea8L)@U?P&1ti;sG7pAt zN-B1waQt)k?J$fT_kHg8N{V&XWbh*1k0-kzY?sLaCfkyn0T&UR_v$}&-u>5q&EES{ zoxPiN+BnlQeuB-i*%NHsfm%SeiLTBR6-I>#g7X1Sn)Sp{do3W5Y%37~A|Q)NScGnX zdH4FHyCSqU5^O0Xi{`BnaxT*M>{|aB32{AF9#Z1Rsm(GN#(4o_#wcm6_6t$zDd{+_ zkj^MtcLhW@GXh~RMi;@koOAFH?+X|OMfH+c=N`Z5#`=;(MZvyL4Zr=4V`vQ97geKit^AZS@tf0K^K)c8@F&!zE~n!jv5b(Z>&j?=Hx z;(bx_kYa@O8ui5cVVz#`2fQol^7CXrM1Sb?N!}Ipc@|x~eVA~3KXl5cpi^EgJWZ=0 zk#eCTY+VJ|xDq27{Afn5%!)8&36di*1-Mm67zKzy1dXeRUnVDt+XXFB_ly#Hfn)AXbQOSlHx?jZHSQ+4YUFSOQWi9`6%J`4%J-Gn+Oh*rpw`uu~|C zVHteW^l+hAiogV+NQ-<|{`Oze?AS;&AHUQXI2{)X(odu%A;)bP5_af9^lRE2UN1WT zApPW@U@i{%m+$h>QT&KM1pDzn$%-O7fA4W;@5=s)EvdTdBd+XP|9rS*OMW|I``@?P z>qjjJ2Ytd4;O{ixFDZ-(3&J75;DuvzBao5lNiG09E@Fa&tj%%_v0QBPYDqhn-|o5K z#b5CVhw~>Z7J(J_1tb-3o@>>5E@yPSQmGTP+?r0QLA%Y`D~i82S?uqMyptrYLFRkL zMaUJwoNN?X2H&}be^Xp+2TLU%gmn5`$1bPC;dI%SW@42LPd!tcAC9(KkW{2V)LNu5 zws?(}SNGhDR99+cYqR+S#Gu;kg-|S{o`PlB#fK&C_nH-2fH$xn6~?HlQh^^C{?M2y zMq_*X(h0P;;o{6K!XnxvC7*cS+H5=&O6^O=c>u~Y&ARH`^R6o*1fh4_gNO%{1}YHVU6 z<6OsH_`&xvXsj)e2R=0NW|9-P3jaeM%D`QzBUmeX@PWJG&$UZa6N^(>Q49~vRB$%9Z`0v9SZ_rmQH-0V%1AO(Nd=?TO@sR2?4J6_{7_gn zlKn|DUo2WJ!w#yk;kluqJ-ZjHgPVtArOR&Hw)LI2T~}%BnoRTgx;Sz@=8O4&Rp1wt zj3f%aS(vWL4T%YwJZ)Wf9WY-L?nQUno5;iA6U=O`U|HEjST+mAemhhi9F7lNvA%@e zn1A5TBUM#bL^D;68_8tSNUht{uR_IFal#6xtOh1q{h8S<+pCTK#VhxZeDr(2y4%Y4 zC3FNw>Z&5@$-a`Ug$!Lbla^N6usEUybzK&V>-W@+R4N@xPpqqiWH^B;+olIpoHZpV zkn+=m@pv&oD`K2@@{ey#8|iG`qHUIYcBCAr!=1tt!f!##?d~Ull0>JjT$LDrJqf$c znK;>wsvsg>)tsba%|<*PPcSmZ4>WhXiVbuVuF3X-iX_!G8Hon&GEyATGuhqO-?o0@ zhHG}^i_J>RJHeV7+cG3Bak$Ae*Kf$?XJ?uj5yCV8-lvM$*}3^raemWGTGkX%8in)6 zFDv=23)}nq7q-sl6*xL&5hb!%+OcyF0Aknn((9caRn0O~39!bNN^{erR(y1?6B= z#18vmTnms7ooKD1DA@g=Dr*`#qzAbV58>ErFd7SKN>C+3qo}Y9Mx^_cfE5V_Qi)U` zXxlh63Bd@kLCU#L3;5aHAgQ)~%KuihzT$&6kAWqx>Rso$b1L~?8GO=`I9Q5m`iIbbM z&_`R>PPtJtu^33gnv3a zByByB=?iI=Wr30cnEXMUDueDx0Bq*-`4F&LQW@;vp-ehsigGY+kE|PwkIa;G`LYk4 zx+xnAnuGbxPyNpG`=rP0=8o&8@~zffpC4MR-{vr+wWx!S(?j_tKIPj~FI2GyAyVQtj4s?JxeWsrf=kM-9!PVrCEA@RLyDEVELokx9cP^`XN5^<>e4dp^3iZM z8qgqmS?P!-saD!reC#nXOINDb!tmdLhNMUy1BygzH$qJk+G@un{({e{m0WI z*$87+rV@*1!XUWOd?8q#K!6?oV9;v}%#EcPdmbvzH}EDHybb2uv-1Hf3^y)L(JRHi z>Do}3MThI-eP8B=QN~`7Q_ zQybYcTV{=``ZtedGNYS{q;zc8hMV)HzNxW6%St5@AtRs9sL6@u=BkQ74K*{ixnHz9 z9hm(cL60Rfrf!8os%YTd3eKy<8cszyxo*YFg`y2!$A#uTIJpZPi3GJrN29{9uo+SC zcjD~CudmS59^HhT8|yM{T6zkDCmu~3Ax<Ia}&8qmcZp0azvGXw_J~BKQ1qJL2rMTSXyx6~W^M*`xbfTHHE9IP_MWb=!86!V1 zlB`{K)#cfWF*v=Y`ie{pCBOI3?M;#ceU+^|>;mB!|jb zW9YKxx-iH?)u>D_jD##*8ridT+IF6RPUeGd$!U&}D_3m0zmPT3v-8{fox2IQ^i&R} z%5o`ZJw6I$^3fcV|*flb8(oTW! zk|!73twin@T4gu4i&+DFhg=~aNHfA>3D6cdDNQLLBf@D`h%Js zv3l|f_9JfG{Ue`lLiw>G`lBeeOc^4vBHn{Fb)F%KSPfyN^#}^MzH~}8EG^VOGLelB z4^=q*Q^QFsJTO#Co7uj!VZ@?gh=dr}JtSCh;mL@GLtsM?bG{{hrqyy@<5*>8Qb}Wy zb0$1ZY-^EBSdS;uW+fjDO@zH0ESj2?DzjJXO}=anniaCxyW1A8qEdQ?((>N`g&;y~$=I4p9r5W6+4B zQ(8EY3usmpQW4~SVIyE-8%{jadu$R-l3S`!Udd4aEZoGZ6cEz{2j=d!1ekf2$pkD_ zaOq7rHSU!oElw}o-aog0Y;6Brzh*`Q0la$Sx7KE`j9V1)-@f3L{gzlRl{VG)Z7wrb z-n_5wJa52%jyHXTBgO~VL$&>z1{fRIw7gW^lx*63sKk(4X&BNvL!zF+&ni#(U9XUeMfl74Z&=T7|qZPI*o6&+#hReZXeM@d_0d zPk@At)0<=9g*923zg7i8;<%0It0uuPuMb=av3itj$q;?U$=T3MfN@bDgcNyJ&#~#| z#2l-jdHPrA&<8Z{gUvj!c*8q8=Qj^6nnswR5+KaO)&lfK4JY zLmMMuI~o(<@nv`wsC~HvDYH?UAoqYuTnHyHScNuygfS8^R2$9tOP#9p!W}Yyq8X{U z`~jkJHw))rG$PSBa3A|OEYnz6caIYELlg)^5H5kxcSQ{q@_O7ms z`#tF)={LZeG{F>XSe`BKpClv6@7NRUADsw&_c&k13wH3GW7jZe`w>Yy=wOG5b%~C8<4=?*aoQrG;Mr}Z>Rg#BvL}S!r^Hec+DHC zL$(BytCm~p#KDISoB3RyF?!tpYd*sZiO^@pcAIj$A+xJ~t zsSZW3CZT~XQ@*iH)8fL?ro8+N&H;S?+~3UL9Y%&;x$)+Mc|<8G?ezyvHmg=BuN#B) zMl6~!6tn;Ek?V`0glZ;}m+!tJlV04vFE3xdZ?nAhcfR%?`!TN${1q+8$~!Sh*YHTQ za~Ut9NH`~Vxh_qBG_JDy;wO@+5TG3^iY<)KwH1+t)h^_VHW@68P#-i%E1O9gp=8|F zH7lr#WFCBs&tJDAV1ovxaGJcBqVQ_0zt5Jr!q2%AY>rQ;h7KMF)f_ooTlJHvL5pYd zQMU9Lu{=$W#!{w{E%e*xg$}mLwL{^}e;s&gw*dy=YiJ_m0I~=O>j;BD->^xppkT1B zMkrN*`9Mp;Z6e#K)et|>0Uu63@gnOqZn->fo7-+Wwe`8yy5I*|Kgu>IYIecSr@=^} zLWZ~q&_7#+V!Q3eQxso7hA5F*hN3gvcW07q{IpLIe<&QoY_Jy;Tu0=^i!uc( zaw(B#O`w1vnj!IFs_f+_z>K|yREPVWq~PMQ9qU3BJyo5qrl*F}v4P2aY5h=QU2=Tq z#N5(+vAE@?*35y+#;uB;8{1OLj^@K^Bo|xkZxloQ8+Q$j?wHK`?iO(@z>enP0J@aD zSeop&%bO20Pb0p2EFcUe6hPsfiU7Px=gty_1TTpUbH?A>sR?5!juaVgB! z`>OS9eam3P8kiXhlAVLr%ZyuwZ0ni9>Hg7HHPY2-`970QyO&mnliStt9HhcB>^z?- zmX5CkKVt2AZW`npfo$TfR<&V~(8Ax5=^e=+VP%b$+n+MUV5)38OG7)R^ZDr=L*5mq zK|y4fcd6iS2P9FfU3tg+{2f=;NCty1(NyoDl3qgUkf+D>@2vQIoEKMjNnJ0W^_sCK zxE*fpys)sydJ|{I}kdSzc z4SJnSAL((9EhmNNQhAk_f%Z5y{`*4Yz+X`KCB%*ilK2S-ACmptbFPZU} z2U0j0Oi5@b;UCTi81{Kh(sXpLS#ovffM!Qwbd8c3mV7?ku!O@0P#8c~1+w^imVX@N z3pj1grIGSV*fUnKkjE^^g~qibG7NL&gN97BALd$Dk?_I0u69)|SOr4)Lea|4OgEA# zt{Ar#X@(>(Hn{YFA3h5{oZuoB0G3nPK(w+I9 zY~a4EUOlP=D>#jfEXQ~v98^%R==D~7d_m8*`g&L5BZc!nlwOfe!;5_lz1@sVwiHS1 zy>JtzM6i44yF411TN#@qv*T=$3nFzFTNRAhK;IO5zB z2{U{?Xphy_g}>zd{FY!gpV9XP11uPLRfE8!$*KxL>ycHWA+W@GO!af#>jn;=Fk0^K)oE6Hma?lF-C*V9#e5cSkojAdxBBtUTA=)BCu09LB z?{rVz!n>+jQ&tCdf+}bLM5%IOEU_ zvQU1&LE^v}@zrNu{Oohi>6e~7>K0{OS@`X!`0DCI31?byPKz19Yw~3Qt z){SB&)4wZIPm?oX$`!zg18{c%KhaF8oAiV+xNguehDV2uP;GqF2oDWp<)u^MJ3f@G zSCe*MDsA;&bM@|YbG_J_e;HxFd#7Y`Z2$b3nY|kaLRvuaYtWPecweL}ZT-`|=2Li2-9mo3W%Ug;L(lEk`ThX;^ey0f zJH8BGs{f0=AMch^o7MGJ-?!G3t*+;#zll0K@jZQU-Sg+yL05bvkS6QJ#Qrp?h7zoAnovMQ^%~A_A?3)5g1n z!@?b~D?BcIUidLP%D%>aCSEDtC;pwZAf5Id@O@LBmLHd2QIg6hlvk8<>W%(kZHM+9 z{X2ncaj@hb<6Q6#^MOz_v@7&@xDdWR{0COfy2tv8yek=BeiS>#1 zCH={dC0|L^Q_rRKbS=FreL7R>i}u~v_gC3{*?*sPa_`LjIDfXduXwKXg>rxSr~Tg< z_-^Hj>bk+g;O@cahWdvd8BPv=e)!MU?O69`qsf|BJIo>O7M6j|On)9^@|*5Yl2y8J z$%GQ}2->Np$-dD|OF{|%(}A1sL;6fN4XKkI=%y9HVjt_KH6e{iAGf|P46>he(*eB8 zveZo*@C3Vbn{KT>+@$YLBlPL92$?CcE{tU-SN0-cRX&|9gmwcOLcsELKMcE0|xEbFXuX_TeUT;^S);mz=7U6!OAY6q$PN2=r=;zJ%HqW2? z4z#-wW4i}e8qX-8mabdzdjkLHIX9u~2fn7v70+77%G!!#Uvs-d1!6=5Qx! z--Gg-*No#P - -/** - UIView.subviews sorting category. - */ -@interface NSArray (IQ_NSArray_Sort) - -///-------------- -/// @name Sorting -///-------------- - -/** - Returns the array by sorting the UIView's by their tag property. - */ -@property (nonatomic, readonly, copy) NSArray * _Nonnull sortedArrayByTag; - -/** - Returns the array by sorting the UIView's by their tag property. - */ -@property (nonatomic, readonly, copy) NSArray * _Nonnull sortedArrayByPosition; - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQNSArray+Sort.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQNSArray+Sort.m deleted file mode 100644 index 39153d0..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQNSArray+Sort.m +++ /dev/null @@ -1,71 +0,0 @@ -// -// IQNSArray+Sort.m -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "IQNSArray+Sort.h" -#import "IQUIView+Hierarchy.h" - -#import - -@implementation NSArray (IQ_NSArray_Sort) - -- (NSArray*)sortedArrayByTag -{ - return [self sortedArrayUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) { - - if ([view1 respondsToSelector:@selector(tag)] && [view2 respondsToSelector:@selector(tag)]) - { - if ([view1 tag] < [view2 tag]) return NSOrderedAscending; - - else if ([view1 tag] > [view2 tag]) return NSOrderedDescending; - - else return NSOrderedSame; - } - else - return NSOrderedSame; - }]; -} - -- (NSArray*)sortedArrayByPosition -{ - return [self sortedArrayUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) { - - CGFloat x1 = CGRectGetMinX(view1.frame); - CGFloat y1 = CGRectGetMinY(view1.frame); - CGFloat x2 = CGRectGetMinX(view2.frame); - CGFloat y2 = CGRectGetMinY(view2.frame); - - if (y1 < y2) return NSOrderedAscending; - - else if (y1 > y2) return NSOrderedDescending; - - //Else both y are same so checking for x positions - else if (x1 < x2) return NSOrderedAscending; - - else if (x1 > x2) return NSOrderedDescending; - - else return NSOrderedSame; - }]; -} - - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUITextFieldView+Additions.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUITextFieldView+Additions.h deleted file mode 100644 index c5b78e0..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUITextFieldView+Additions.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// IQUITextFieldView+Additions.h -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -/** - UIView category for managing UITextField/UITextView - */ - -@interface UIView (Additions) - -/** - To set customized distance from keyboard for textField/textView. Can't be less than zero - */ -@property(nonatomic, assign) CGFloat keyboardDistanceFromTextField; - -@end - -///------------------------------------------- -/// @name Custom KeyboardDistanceFromTextField -///------------------------------------------- - -/** - Uses default keyboard distance for textField. - */ -extern CGFloat const kIQUseDefaultKeyboardDistance; diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUITextFieldView+Additions.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUITextFieldView+Additions.m deleted file mode 100644 index c7a3495..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUITextFieldView+Additions.m +++ /dev/null @@ -1,54 +0,0 @@ -// -// IQUITextFieldView+Additions.m -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "IQUITextFieldView+Additions.h" -#import - -@implementation UIView (Additions) - --(void)setKeyboardDistanceFromTextField:(CGFloat)keyboardDistanceFromTextField -{ - //Can't be less than zero. Minimum is zero. - keyboardDistanceFromTextField = MAX(keyboardDistanceFromTextField, 0); - - objc_setAssociatedObject(self, @selector(keyboardDistanceFromTextField), [NSNumber numberWithFloat:keyboardDistanceFromTextField], OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - --(CGFloat)keyboardDistanceFromTextField -{ - NSNumber *keyboardDistanceFromTextField = objc_getAssociatedObject(self, @selector(keyboardDistanceFromTextField)); - - return (keyboardDistanceFromTextField)?[keyboardDistanceFromTextField floatValue]:kIQUseDefaultKeyboardDistance; -} - -@end - -///------------------------------------ -/// @name keyboardDistanceFromTextField -///------------------------------------ - -/** - Uses default keyboard distance for textField. - */ -CGFloat const kIQUseDefaultKeyboardDistance = CGFLOAT_MAX; - diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIView+Hierarchy.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIView+Hierarchy.h deleted file mode 100644 index 9ff9134..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIView+Hierarchy.h +++ /dev/null @@ -1,122 +0,0 @@ -// -// IQUIView+Hierarchy.h -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import -#import "IQKeyboardManagerConstants.h" - -@class UICollectionView, UIScrollView, UITableView, NSArray; - -/** - UIView hierarchy category. - */ -@interface UIView (IQ_UIView_Hierarchy) - -///---------------------- -/// @name viewControllers -///---------------------- - -/** - Returns the UIViewController object that manages the receiver. - */ -@property (nullable, nonatomic, readonly, strong) UIViewController *viewController; - -/** - Returns the topMost UIViewController object in hierarchy. - */ -@property (nullable, nonatomic, readonly, strong) UIViewController *topMostController; - -///----------------------------------- -/// @name Superviews/Subviews/Siglings -///----------------------------------- - -/** - Returns the superView of provided class type. - */ --(nullable UIView*)superviewOfClassType:(nonnull Class)classType; - -/** - Returns all siblings of the receiver which canBecomeFirstResponder. - */ -@property (nonnull, nonatomic, readonly, copy) NSArray *responderSiblings; - -/** - Returns all deep subViews of the receiver which canBecomeFirstResponder. - */ -@property (nonnull, nonatomic, readonly, copy) NSArray *deepResponderViews; - -///------------------------- -/// @name Special TextFields -///------------------------- - -/** - Returns YES if the receiver object is UISearchBarTextField, otherwise return NO. - */ -@property (nonatomic, getter=isSearchBarTextField, readonly) BOOL searchBarTextField; - -/** - Returns YES if the receiver object is UIAlertSheetTextField, otherwise return NO. - */ -@property (nonatomic, getter=isAlertViewTextField, readonly) BOOL alertViewTextField; - -///---------------- -/// @name Transform -///---------------- - -/** - Returns current view transform with respect to the 'toView'. - */ --(CGAffineTransform)convertTransformToView:(nullable UIView*)toView; - -///----------------- -/// @name Hierarchy -///----------------- - -/** - Returns a string that represent the information about it's subview's hierarchy. You can use this method to debug the subview's positions. - */ -@property (nonnull, nonatomic, readonly, copy) NSString *subHierarchy; - -/** - Returns an string that represent the information about it's upper hierarchy. You can use this method to debug the superview's positions. - */ -@property (nonnull, nonatomic, readonly, copy) NSString *superHierarchy; - -/** - Returns an string that represent the information about it's frame positions. You can use this method to debug self positions. - */ -@property (nonnull, nonatomic, readonly, copy) NSString *debugHierarchy; - -@end - - -/** - NSObject category to used for logging purposes - */ -@interface NSObject (IQ_Logging) - -/** - Short description for logging purpose. - */ -@property (nonnull, nonatomic, readonly, copy) NSString *_IQDescription; - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIView+Hierarchy.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIView+Hierarchy.m deleted file mode 100644 index 05b541b..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIView+Hierarchy.m +++ /dev/null @@ -1,360 +0,0 @@ -// -// IQUIView+Hierarchy.m -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "IQUIView+Hierarchy.h" - -#import -#import -#import -#import -#import -#import -#import -#import - -#import - -#import "IQNSArray+Sort.h" - -@implementation UIView (IQ_UIView_Hierarchy) - --(UIViewController*)viewController -{ - UIResponder *nextResponder = self; - - do - { - nextResponder = [nextResponder nextResponder]; - - if ([nextResponder isKindOfClass:[UIViewController class]]) - return (UIViewController*)nextResponder; - - } while (nextResponder != nil); - - return nil; -} - --(UIViewController *)topMostController -{ - NSMutableArray *controllersHierarchy = [[NSMutableArray alloc] init]; - - UIViewController *topController = self.window.rootViewController; - - if (topController) - { - [controllersHierarchy addObject:topController]; - } - - while ([topController presentedViewController]) { - - topController = [topController presentedViewController]; - [controllersHierarchy addObject:topController]; - } - - UIResponder *matchController = [self viewController]; - - while (matchController != nil && [controllersHierarchy containsObject:matchController] == NO) - { - do - { - matchController = [matchController nextResponder]; - - } while (matchController != nil && [matchController isKindOfClass:[UIViewController class]] == NO); - } - - return (UIViewController*)matchController; -} - --(UIView*)superviewOfClassType:(Class)classType -{ - UIView *superview = self.superview; - - while (superview) - { - if ([superview isKindOfClass:classType]) - { - //If it's UIScrollView, then validating for special cases - if ([superview isKindOfClass:[UIScrollView class]]) - { - NSString *classNameString = NSStringFromClass([superview class]); - - // If it's not UITableViewWrapperView class, this is internal class which is actually manage in UITableview. The speciality of this class is that it's superview is UITableView. - // If it's not UITableViewCellScrollView class, this is internal class which is actually manage in UITableviewCell. The speciality of this class is that it's superview is UITableViewCell. - //If it's not _UIQueuingScrollView class, actually we validate for _ prefix which usually used by Apple internal classes - if ([superview.superview isKindOfClass:[UITableView class]] == NO && - [superview.superview isKindOfClass:[UITableViewCell class]] == NO && - [classNameString hasPrefix:@"_"] == NO) - { - return superview; - } - } - else - { - return superview; - } - } - - superview = superview.superview; - } - - return nil; -} - --(BOOL)_IQcanBecomeFirstResponder -{ - BOOL _IQcanBecomeFirstResponder = NO; - - if ([self isKindOfClass:[UITextField class]]) - { - _IQcanBecomeFirstResponder = [(UITextField*)self isEnabled]; - } - else if ([self isKindOfClass:[UITextView class]]) - { - _IQcanBecomeFirstResponder = [(UITextView*)self isEditable]; - } - - if (_IQcanBecomeFirstResponder == YES) - { - _IQcanBecomeFirstResponder = ([self isUserInteractionEnabled] && ![self isHidden] && [self alpha]!=0.0 && ![self isAlertViewTextField] && ![self isSearchBarTextField]); - } - - return _IQcanBecomeFirstResponder; -} - -- (NSArray*)responderSiblings -{ - // Getting all siblings - NSArray *siblings = self.superview.subviews; - - //Array of (UITextField/UITextView's). - NSMutableArray *tempTextFields = [[NSMutableArray alloc] init]; - - for (UIView *textField in siblings) - if ([textField _IQcanBecomeFirstResponder]) - [tempTextFields addObject:textField]; - - return tempTextFields; -} - -- (NSArray*)deepResponderViews -{ - NSMutableArray *textFields = [[NSMutableArray alloc] init]; - - for (UIView *textField in self.subviews) - { - if ([textField _IQcanBecomeFirstResponder]) - { - [textFields addObject:textField]; - } - - //Sometimes there are hidden or disabled views and textField inside them still recorded, so we added some more validations here (Bug ID: #458) - //Uncommented else (Bug ID: #625) - if (textField.subviews.count && [textField isUserInteractionEnabled] && ![textField isHidden] && [textField alpha]!=0.0) - { - [textFields addObjectsFromArray:[textField deepResponderViews]]; - } - } - - //subviews are returning in incorrect order. Sorting according the frames 'y'. - return [textFields sortedArrayUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) { - - CGRect frame1 = [view1 convertRect:view1.bounds toView:self]; - CGRect frame2 = [view2 convertRect:view2.bounds toView:self]; - - CGFloat x1 = CGRectGetMinX(frame1); - CGFloat y1 = CGRectGetMinY(frame1); - CGFloat x2 = CGRectGetMinX(frame2); - CGFloat y2 = CGRectGetMinY(frame2); - - if (y1 < y2) return NSOrderedAscending; - - else if (y1 > y2) return NSOrderedDescending; - - //Else both y are same so checking for x positions - else if (x1 < x2) return NSOrderedAscending; - - else if (x1 > x2) return NSOrderedDescending; - - else return NSOrderedSame; - }]; - - return textFields; -} - --(CGAffineTransform)convertTransformToView:(UIView*)toView -{ - if (toView == nil) - { - toView = self.window; - } - - CGAffineTransform myTransform = CGAffineTransformIdentity; - - //My Transform - { - UIView *superView = [self superview]; - - if (superView) myTransform = CGAffineTransformConcat(self.transform, [superView convertTransformToView:nil]); - else myTransform = self.transform; - } - - CGAffineTransform viewTransform = CGAffineTransformIdentity; - - //view Transform - { - UIView *superView = [toView superview]; - - if (superView) viewTransform = CGAffineTransformConcat(toView.transform, [superView convertTransformToView:nil]); - else if (toView) viewTransform = toView.transform; - } - - return CGAffineTransformConcat(myTransform, CGAffineTransformInvert(viewTransform)); -} - - -- (NSInteger)depth -{ - NSInteger depth = 0; - - if ([self superview]) - { - depth = [[self superview] depth] + 1; - } - - return depth; -} - -- (NSString *)subHierarchy -{ - NSMutableString *debugInfo = [[NSMutableString alloc] initWithString:@"\n"]; - NSInteger depth = [self depth]; - - for (int counter = 0; counter < depth; counter ++) [debugInfo appendString:@"| "]; - - [debugInfo appendString:[self debugHierarchy]]; - - for (UIView *subview in self.subviews) - { - [debugInfo appendString:[subview subHierarchy]]; - } - - return debugInfo; -} - -- (NSString *)superHierarchy -{ - NSMutableString *debugInfo = [[NSMutableString alloc] init]; - - if (self.superview) - { - [debugInfo appendString:[self.superview superHierarchy]]; - } - else - { - [debugInfo appendString:@"\n"]; - } - - NSInteger depth = [self depth]; - - for (int counter = 0; counter < depth; counter ++) [debugInfo appendString:@"| "]; - - [debugInfo appendString:[self debugHierarchy]]; - - [debugInfo appendString:@"\n"]; - - return debugInfo; -} - --(NSString *)debugHierarchy -{ - NSMutableString *debugInfo = [[NSMutableString alloc] init]; - - [debugInfo appendFormat:@"%@: ( %.0f, %.0f, %.0f, %.0f )",NSStringFromClass([self class]), CGRectGetMinX(self.frame), CGRectGetMinY(self.frame), CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)]; - - if ([self isKindOfClass:[UIScrollView class]]) - { - UIScrollView *scrollView = (UIScrollView*)self; - [debugInfo appendFormat:@"%@: ( %.0f, %.0f )",NSStringFromSelector(@selector(contentSize)),scrollView.contentSize.width,scrollView.contentSize.height]; - } - - if (CGAffineTransformEqualToTransform(self.transform, CGAffineTransformIdentity) == false) - { - [debugInfo appendFormat:@"%@: %@",NSStringFromSelector(@selector(transform)),NSStringFromCGAffineTransform(self.transform)]; - } - - return debugInfo; -} - --(BOOL)isSearchBarTextField -{ - UIResponder *searchBar = [self nextResponder]; - - BOOL isSearchBarTextField = NO; - while (searchBar && isSearchBarTextField == NO) - { - if ([searchBar isKindOfClass:[UISearchBar class]]) - { - isSearchBarTextField = YES; - break; - } - else if ([searchBar isKindOfClass:[UIViewController class]]) //If found viewcontroller but still not found UISearchBar then it's not the search bar textfield - { - break; - } - - searchBar = [searchBar nextResponder]; - } - - return isSearchBarTextField; -} - --(BOOL)isAlertViewTextField -{ - UIResponder *alertViewController = [self viewController]; - - BOOL isAlertViewTextField = NO; - while (alertViewController && isAlertViewTextField == NO) - { - if ([alertViewController isKindOfClass:[UIAlertController class]]) - { - isAlertViewTextField = YES; - break; - } - - alertViewController = [alertViewController nextResponder]; - } - - return isAlertViewTextField; -} - -@end - - -@implementation NSObject (IQ_Logging) - --(NSString *)_IQDescription -{ - return [NSString stringWithFormat:@"<%@ %p>",NSStringFromClass([self class]),self]; -} - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIViewController+Additions.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIViewController+Additions.h deleted file mode 100644 index 916d81d..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIViewController+Additions.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// IQUIViewController+Additions.h -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -@interface UIViewController (Additions) - -/** - Top/Bottom Layout constraint which help library to manage keyboardTextField distance - */ -@property(nullable, nonatomic, strong) IBOutlet NSLayoutConstraint *IQLayoutGuideConstraint; - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIViewController+Additions.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIViewController+Additions.m deleted file mode 100644 index 67da273..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIViewController+Additions.m +++ /dev/null @@ -1,39 +0,0 @@ -// -// IQUIViewController+Additions.m -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "IQUIViewController+Additions.h" -#import - -@implementation UIViewController (Additions) - --(void)setIQLayoutGuideConstraint:(NSLayoutConstraint *)IQLayoutGuideConstraint -{ - objc_setAssociatedObject(self, @selector(IQLayoutGuideConstraint), IQLayoutGuideConstraint, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - --(NSLayoutConstraint *)IQLayoutGuideConstraint -{ - return objc_getAssociatedObject(self, @selector(IQLayoutGuideConstraint)); -} - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.h deleted file mode 100644 index b759ab0..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// IQUIWindow+Hierarchy.h -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -@class UIViewController; - -/** - UIWindow hierarchy category. - */ -@interface UIWindow (IQ_UIWindow_Hierarchy) - -///---------------------- -/// @name viewControllers -///---------------------- - -/** - Returns the current Top Most ViewController in hierarchy. - */ -@property (nullable, nonatomic, readonly, strong) UIViewController *topMostController; - -/** - Returns the topViewController in stack of topMostController. - */ -@property (nullable, nonatomic, readonly, strong) UIViewController *currentViewController; - - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.m deleted file mode 100644 index 266ae5e..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.m +++ /dev/null @@ -1,51 +0,0 @@ -// -// IQUIWindow+Hierarchy.m -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "IQUIWindow+Hierarchy.h" -#import - -@implementation UIWindow (IQ_UIWindow_Hierarchy) - -- (UIViewController*)topMostController -{ - UIViewController *topController = [self rootViewController]; - - // Getting topMost ViewController - while ([topController presentedViewController]) topController = [topController presentedViewController]; - - // Returning topMost ViewController - return topController; -} - -- (UIViewController*)currentViewController; -{ - UIViewController *currentViewController = [self topMostController]; - - while ([currentViewController isKindOfClass:[UINavigationController class]] && [(UINavigationController*)currentViewController topViewController]) - currentViewController = [(UINavigationController*)currentViewController topViewController]; - - return currentViewController; -} - - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Constants/IQKeyboardManagerConstants.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Constants/IQKeyboardManagerConstants.h deleted file mode 100644 index 7123a2a..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Constants/IQKeyboardManagerConstants.h +++ /dev/null @@ -1,146 +0,0 @@ -// -// IQKeyboardManagerConstants.h -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#ifndef IQKeyboardManagerConstants_h -#define IQKeyboardManagerConstants_h - -#import - -///----------------------------------- -/// @name IQAutoToolbarManageBehaviour -///----------------------------------- - -/** - `IQAutoToolbarBySubviews` - Creates Toolbar according to subview's hirarchy of Textfield's in view. - - `IQAutoToolbarByTag` - Creates Toolbar according to tag property of TextField's. - - `IQAutoToolbarByPosition` - Creates Toolbar according to the y,x position of textField in it's superview coordinate. - */ -typedef NS_ENUM(NSInteger, IQAutoToolbarManageBehaviour) { - IQAutoToolbarBySubviews, - IQAutoToolbarByTag, - IQAutoToolbarByPosition, -}; - -/** - `IQPreviousNextDisplayModeDefault` - Show NextPrevious when there are more than 1 textField otherwise hide. - - `IQPreviousNextDisplayModeAlwaysHide` - Do not show NextPrevious buttons in any case. - - `IQPreviousNextDisplayModeAlwaysShow` - Always show nextPrevious buttons, if there are more than 1 textField then both buttons will be visible but will be shown as disabled. - */ -typedef NS_ENUM(NSUInteger, IQPreviousNextDisplayMode) { - IQPreviousNextDisplayModeDefault, - IQPreviousNextDisplayModeAlwaysHide, - IQPreviousNextDisplayModeAlwaysShow, -}; - -///------------------- -/// @name Localization -///------------------- - -#define IQLocalizedString(key, comment) [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"IQKeyboardManager" ofType:@"bundle"]] localizedStringForKey:(key) value:@"" table:@"IQKeyboardManager"] - -#endif - -/* - - /---------------------------------------------------------------------------------------------------\ - \---------------------------------------------------------------------------------------------------/ - | iOS NSNotification Mechanism | - /---------------------------------------------------------------------------------------------------\ - \---------------------------------------------------------------------------------------------------/ - - - ------------------------------------------------------------ - When UITextField become first responder - ------------------------------------------------------------ - - UITextFieldTextDidBeginEditingNotification (UITextField) - - UIKeyboardWillShowNotification - - UIKeyboardDidShowNotification - - ------------------------------------------------------------ - When UITextView become first responder - ------------------------------------------------------------ - - UIKeyboardWillShowNotification - - UITextViewTextDidBeginEditingNotification (UITextView) - - UIKeyboardDidShowNotification - - ------------------------------------------------------------ - When switching focus from UITextField to another UITextField - ------------------------------------------------------------ - - UITextFieldTextDidEndEditingNotification (UITextField1) - - UITextFieldTextDidBeginEditingNotification (UITextField2) - - UIKeyboardWillShowNotification - - UIKeyboardDidShowNotification - - ------------------------------------------------------------ - When switching focus from UITextView to another UITextView - ------------------------------------------------------------ - - UITextViewTextDidEndEditingNotification : (UITextView1) - - UIKeyboardWillShowNotification - - UITextViewTextDidBeginEditingNotification : (UITextView2) - - UIKeyboardDidShowNotification - - ------------------------------------------------------------ - When switching focus from UITextField to UITextView - ------------------------------------------------------------ - - UITextFieldTextDidEndEditingNotification (UITextField) - - UIKeyboardWillShowNotification - - UITextViewTextDidBeginEditingNotification (UITextView) - - UIKeyboardDidShowNotification - - ------------------------------------------------------------ - When switching focus from UITextView to UITextField - ------------------------------------------------------------ - - UITextViewTextDidEndEditingNotification (UITextView) - - UITextFieldTextDidBeginEditingNotification (UITextField) - - UIKeyboardWillShowNotification - - UIKeyboardDidShowNotification - - ------------------------------------------------------------ - When opening/closing UIKeyboard Predictive bar - ------------------------------------------------------------ - - UIKeyboardWillShowNotification - - UIKeyboardDidShowNotification - - ------------------------------------------------------------ - On orientation change - ------------------------------------------------------------ - - UIApplicationWillChangeStatusBarOrientationNotification - - UIKeyboardWillHideNotification - - UIKeyboardDidHideNotification - - UIApplicationDidChangeStatusBarOrientationNotification - - UIKeyboardWillShowNotification - - UIKeyboardDidShowNotification - - UIKeyboardWillShowNotification - - UIKeyboardDidShowNotification - - */ diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Constants/IQKeyboardManagerConstantsInternal.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Constants/IQKeyboardManagerConstantsInternal.h deleted file mode 100644 index 0e428bf..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Constants/IQKeyboardManagerConstantsInternal.h +++ /dev/null @@ -1,56 +0,0 @@ -// -// IQKeyboardManagerConstantsInternal.h -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#ifndef IQKeyboardManagerConstantsInternal_h -#define IQKeyboardManagerConstantsInternal_h - - -///----------------------------------- -/// @name IQLayoutGuidePosition -///----------------------------------- - -/** - `IQLayoutGuidePositionNone` - If there are no IQLayoutGuideConstraint associated with viewController - - `IQLayoutGuidePositionTop` - If provided IQLayoutGuideConstraint is associated with with viewController topLayoutGuide - - `IQLayoutGuidePositionBottom` - If provided IQLayoutGuideConstraint is associated with with viewController bottomLayoutGuide - */ -typedef NS_ENUM(NSInteger, IQLayoutGuidePosition) { - IQLayoutGuidePositionNone, - IQLayoutGuidePositionTop, - IQLayoutGuidePositionBottom, -}; - -//Xcode 8 compatibility check -#ifdef NSFoundationVersionNumber_iOS_9_x_Max - #define IQ_IS_IOS10_OR_GREATER (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_9_x_Max) -#else - #define IQ_IS_IOS10_OR_GREATER NO -#endif - - -#endif diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardManager.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardManager.h deleted file mode 100755 index 26912af..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardManager.h +++ /dev/null @@ -1,319 +0,0 @@ -// -// IQKeyboardManager.h -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "IQKeyboardManagerConstants.h" - -#import - -#import -#import - -#import -#import - -@class UIFont; - -///--------------------- -/// @name IQToolbar tags -///--------------------- - -/** - Default tag for toolbar with Done button -1002. - */ -extern NSInteger const kIQDoneButtonToolbarTag; - -/** - Default tag for toolbar with Previous/Next buttons -1005. - */ -extern NSInteger const kIQPreviousNextButtonToolbarTag; - - - -/** - Codeless drop-in universal library allows to prevent issues of keyboard sliding up and cover UITextField/UITextView. Neither need to write any code nor any setup required and much more. A generic version of KeyboardManagement. https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html - */ -@interface IQKeyboardManager : NSObject - -///-------------------------- -/// @name UIKeyboard handling -///-------------------------- - -/** - Returns the default singleton instance. - */ -+ (nonnull instancetype)sharedManager; - -/** - Enable/disable managing distance between keyboard and textField. Default is YES(Enabled when class loads in `+(void)load` method). - */ -@property(nonatomic, assign, getter = isEnabled) BOOL enable; - -/** - To set keyboard distance from textField. can't be less than zero. Default is 10.0. - */ -@property(nonatomic, assign) CGFloat keyboardDistanceFromTextField; - -/** - Prevent keyboard manager to slide up the rootView to more than keyboard height. Default is YES. - */ -@property(nonatomic, assign) BOOL preventShowingBottomBlankSpace; - -/** - Refreshes textField/textView position if any external changes is explicitly made by user. - */ -- (void)reloadLayoutIfNeeded; - -/** - Boolean to know if keyboard is showing. - */ -@property(nonatomic, assign, readonly, getter = isKeyboardShowing) BOOL keyboardShowing; - -/** - moved distance to the top used to maintain distance between keyboard and textField. Most of the time this will be a positive value. - */ -@property(nonatomic, assign, readonly) CGFloat movedDistance; - - -///------------------------- -/// @name IQToolbar handling -///------------------------- - -/** - Automatic add IQToolbar functionality. Default is YES. - */ -@property(nonatomic, assign, getter = isEnableAutoToolbar) BOOL enableAutoToolbar; - -/** - IQAutoToolbarBySubviews: Creates Toolbar according to subview's hirarchy of Textfield's in view. - IQAutoToolbarByTag: Creates Toolbar according to tag property of TextField's. - IQAutoToolbarByPosition: Creates Toolbar according to the y,x position of textField in it's superview coordinate. - - Default is IQAutoToolbarBySubviews. -*/ -@property(nonatomic, assign) IQAutoToolbarManageBehaviour toolbarManageBehaviour; - -/** - If YES, then uses textField's tintColor property for IQToolbar, otherwise tint color is black. Default is NO. - */ -@property(nonatomic, assign) BOOL shouldToolbarUsesTextFieldTintColor; - -/** - This is used for toolbar.tintColor when textfield.keyboardAppearance is UIKeyboardAppearanceDefault. If shouldToolbarUsesTextFieldTintColor is YES then this property is ignored. Default is nil and uses black color. - */ -@property(nullable, nonatomic, strong) UIColor *toolbarTintColor; - -/** - IQPreviousNextDisplayModeDefault: Show NextPrevious when there are more than 1 textField otherwise hide. - IQPreviousNextDisplayModeAlwaysHide: Do not show NextPrevious buttons in any case. - IQPreviousNextDisplayModeAlwaysShow: Always show nextPrevious buttons, if there are more than 1 textField then both buttons will be visible but will be shown as disabled. - */ -@property(nonatomic, assign) IQPreviousNextDisplayMode previousNextDisplayMode; - -/** - Toolbar done button icon, If nothing is provided then check toolbarDoneBarButtonItemText to draw done button. - */ -@property(nullable, nonatomic, strong) UIImage *toolbarDoneBarButtonItemImage; - -/** - Toolbar done button text, If nothing is provided then system default 'UIBarButtonSystemItemDone' will be used. - */ -@property(nullable, nonatomic, strong) NSString *toolbarDoneBarButtonItemText; - -/** - If YES, then it add the textField's placeholder text on IQToolbar. Default is YES. - */ -@property(nonatomic, assign) BOOL shouldShowTextFieldPlaceholder; - -/** - Placeholder Font. Default is nil. - */ -@property(nullable, nonatomic, strong) UIFont *placeholderFont; - -/** - Reload all toolbar buttons on the fly. - */ -- (void)reloadInputViews; - -///--------------------------------------- -/// @name UIKeyboard appearance overriding -///--------------------------------------- - -/** - Override the keyboardAppearance for all textField/textView. Default is NO. - */ -@property(nonatomic, assign) BOOL overrideKeyboardAppearance; - -/** - If overrideKeyboardAppearance is YES, then all the textField keyboardAppearance is set using this property. - */ -@property(nonatomic, assign) UIKeyboardAppearance keyboardAppearance; - -///----------------------------------------------------------- -/// @name UITextField/UITextView Next/Previous/Resign handling -///----------------------------------------------------------- - -/** - Resigns Keyboard on touching outside of UITextField/View. Default is NO. - */ -@property(nonatomic, assign) BOOL shouldResignOnTouchOutside; - -/** - Resigns currently first responder field. - */ -- (BOOL)resignFirstResponder; - -/** - Returns YES if can navigate to previous responder textField/textView, otherwise NO. - */ -@property (nonatomic, readonly) BOOL canGoPrevious; - -/** - Returns YES if can navigate to next responder textField/textView, otherwise NO. - */ -@property (nonatomic, readonly) BOOL canGoNext; - -/** - Navigate to previous responder textField/textView. - */ -- (BOOL)goPrevious; - -/** - Navigate to next responder textField/textView. - */ -- (BOOL)goNext; - -///----------------------- -/// @name UISound handling -///----------------------- - -/** - If YES, then it plays inputClick sound on next/previous/done click. Default is YES. - */ -@property(nonatomic, assign) BOOL shouldPlayInputClicks; - -///--------------------------- -/// @name UIAnimation handling -///--------------------------- - -/** - If YES, then calls 'setNeedsLayout' and 'layoutIfNeeded' on any frame update of to viewController's view. - */ -@property(nonatomic, assign) BOOL layoutIfNeededOnUpdate; - -///----------------------------------------------- -/// @name InteractivePopGestureRecognizer handling -///----------------------------------------------- - -/** - If YES, then always consider UINavigationController.view begin point as {0,0}, this is a workaround to fix a bug #464 because there are no notification mechanism exist when UINavigationController.view.frame gets changed internally. - */ -@property(nonatomic, assign) BOOL shouldFixInteractivePopGestureRecognizer; - -///--------------------------------------------- -/// @name Class Level enabling/disabling methods -///--------------------------------------------- - -/** - Disable distance handling within the scope of disabled distance handling viewControllers classes. Within this scope, 'enabled' property is ignored. Class should be kind of UIViewController. Default is [UITableViewController, UIAlertController, _UIAlertControllerTextFieldViewController]. - */ -@property(nonatomic, strong, nonnull, readonly) NSMutableSet *disabledDistanceHandlingClasses; - -/** - Enable distance handling within the scope of enabled distance handling viewControllers classes. Within this scope, 'enabled' property is ignored. Class should be kind of UIViewController. Default is []. - */ -@property(nonatomic, strong, nonnull, readonly) NSMutableSet *enabledDistanceHandlingClasses; - -/** - Disable automatic toolbar creation within the scope of disabled toolbar viewControllers classes. Within this scope, 'enableAutoToolbar' property is ignored. Class should be kind of UIViewController. Default is [UIAlertController, _UIAlertControllerTextFieldViewController]. - */ -@property(nonatomic, strong, nonnull, readonly) NSMutableSet *disabledToolbarClasses; - -/** - Enable automatic toolbar creation within the scope of enabled toolbar viewControllers classes. Within this scope, 'enableAutoToolbar' property is ignored. Class should be kind of UIViewController. Default is []. - */ -@property(nonatomic, strong, nonnull, readonly) NSMutableSet *enabledToolbarClasses; - -/** - Allowed subclasses of UIView to add all inner textField, this will allow to navigate between textField contains in different superview. Class should be kind of UIView. Default is [UITableView, UICollectionView, IQPreviousNextView]. - */ -@property(nonatomic, strong, nonnull, readonly) NSMutableSet *toolbarPreviousNextAllowedClasses; - -/** - Disabled classes to ignore 'shouldResignOnTouchOutside' property, Class should be kind of UIViewController. Default is [UIAlertController, UIAlertControllerTextFieldViewController] - */ -@property(nonatomic, strong, nonnull, readonly) NSMutableSet *disabledTouchResignedClasses; - -/** - Enabled classes to forcefully enable 'shouldResignOnTouchOutsite' property. Class should be kind of UIViewController. Default is []. - */ -@property(nonatomic, strong, nonnull, readonly) NSMutableSet *enabledTouchResignedClasses; - -/** - if shouldResignOnTouchOutside is enabled then you can customise the behaviour to not recognise gesture touches on some specific view subclasses. Class should be kind of UIView. Default is [UIControl, UINavigationBar] - */ -@property(nonatomic, strong, nonnull, readonly) NSMutableSet *touchResignedGestureIgnoreClasses; - -///------------------------------------------- -/// @name Third Party Library support -/// Add TextField/TextView Notifications customised NSNotifications. For example while using YYTextView https://github.com/ibireme/YYText -///------------------------------------------- - -/** - Add/Remove customised Notification for third party customised TextField/TextView. Please be aware that the NSNotification object must be idential to UITextField/UITextView NSNotification objects and customised TextField/TextView support must be idential to UITextField/UITextView. - @param didBeginEditingNotificationName This should be identical to UITextViewTextDidBeginEditingNotification - @param didEndEditingNotificationName This should be identical to UITextViewTextDidEndEditingNotification - */ --(void)registerTextFieldViewClass:(nonnull Class)aClass - didBeginEditingNotificationName:(nonnull NSString *)didBeginEditingNotificationName - didEndEditingNotificationName:(nonnull NSString *)didEndEditingNotificationName; --(void)unregisterTextFieldViewClass:(nonnull Class)aClass - didBeginEditingNotificationName:(nonnull NSString *)didBeginEditingNotificationName - didEndEditingNotificationName:(nonnull NSString *)didEndEditingNotificationName; - -///---------------------------------------- -/// @name Debugging & Developer options -///---------------------------------------- - -@property(nonatomic, assign) BOOL enableDebugging; - -/** - @warning Use below methods to completely enable/disable notifications registered by library internally. Please keep in mind that library is totally dependent on NSNotification of UITextField, UITextField, Keyboard etc. If you do unregisterAllNotifications then library will not work at all. You should only use below methods if you want to completedly disable all library functions. You should use below methods at your own risk. - */ --(void)registerAllNotifications; --(void)unregisterAllNotifications; - -///---------------------------------------- -/// @name Must not be used for subclassing. -///---------------------------------------- - -/** - Unavailable. Please use sharedManager method - */ --(nonnull instancetype)init NS_UNAVAILABLE; - -/** - Unavailable. Please use sharedManager method - */ -+ (nonnull instancetype)new NS_UNAVAILABLE; - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardManager.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardManager.m deleted file mode 100644 index a28005c..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardManager.m +++ /dev/null @@ -1,2255 +0,0 @@ -// -// IQKeyboardManager.m -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "IQKeyboardManager.h" -#import "IQUIView+Hierarchy.h" -#import "IQUIView+IQKeyboardToolbar.h" -#import "IQUIWindow+Hierarchy.h" -#import "IQNSArray+Sort.h" -#import "IQToolbar.h" -#import "IQBarButtonItem.h" -#import "IQKeyboardManagerConstantsInternal.h" -#import "IQUIScrollView+Additions.h" -#import "IQUITextFieldView+Additions.h" -#import "IQUIViewController+Additions.h" -#import "IQPreviousNextView.h" - -#import -#import -#import -#import -#import -#import -#import -#import - -#import - -#import -#import - -#import - -NSInteger const kIQDoneButtonToolbarTag = -1002; -NSInteger const kIQPreviousNextButtonToolbarTag = -1005; - -@interface IQKeyboardManager() - -/*******************************************/ - -/** used to adjust contentInset of UITextView. */ -@property(nonatomic, assign) UIEdgeInsets startingTextViewContentInsets; - -/** used to adjust scrollIndicatorInsets of UITextView. */ -@property(nonatomic, assign) UIEdgeInsets startingTextViewScrollIndicatorInsets; - -/** used with textView to detect a textFieldView contentInset is changed or not. (Bug ID: #92)*/ -@property(nonatomic, assign) BOOL isTextViewContentInsetChanged; - -/*******************************************/ - -/** To save UITextField/UITextView object voa textField/textView notifications. */ -@property(nonatomic, weak) UIView *textFieldView; - -/** To save rootViewController.view.frame. */ -@property(nonatomic, assign) CGRect topViewBeginRect; - -/** To save rootViewController */ -@property(nonatomic, weak) UIViewController *rootViewController; - -/** To save topBottomLayoutConstraint original constant */ -@property(nonatomic, assign) CGFloat layoutGuideConstraintInitialConstant; - -/** To save topBottomLayoutConstraint original constraint reference */ -@property(nonatomic, weak) NSLayoutConstraint *layoutGuideConstraint; - - -/*******************************************/ - -/** TapGesture to resign keyboard on view's touch. */ -@property(nonatomic, strong) UITapGestureRecognizer *tapGesture; - -/*******************************************/ - -/** Variable to save lastScrollView that was scrolled. */ -@property(nonatomic, weak) UIScrollView *lastScrollView; - -/** LastScrollView's initial contentInsets. */ -@property(nonatomic, assign) UIEdgeInsets startingContentInsets; - -/** LastScrollView's initial scrollIndicatorInsets. */ -@property(nonatomic, assign) UIEdgeInsets startingScrollIndicatorInsets; - -/** LastScrollView's initial contentOffset. */ -@property(nonatomic, assign) CGPoint startingContentOffset; - -/*******************************************/ - -/** To save keyboard animation duration. */ -@property(nonatomic, assign) CGFloat animationDuration; - -/** To mimic the keyboard animation */ -@property(nonatomic, assign) NSInteger animationCurve; - -/*******************************************/ - -@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *registeredClasses; - -@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *disabledDistanceHandlingClasses; -@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *enabledDistanceHandlingClasses; - -@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *disabledToolbarClasses; -@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *enabledToolbarClasses; - -@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *toolbarPreviousNextAllowedClasses; - -@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *disabledTouchResignedClasses; -@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *enabledTouchResignedClasses; -@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *touchResignedGestureIgnoreClasses; - -/*******************************************/ - -@end - -@implementation IQKeyboardManager -{ - @package - - /*******************************************/ - - /** To save keyboardWillShowNotification. Needed for enable keyboard functionality. */ - NSNotification *_kbShowNotification; - - /** To save keyboard size. */ - CGSize _kbSize; - - /** To save Status Bar size. */ - CGRect _statusBarFrame; - - /*******************************************/ -} - -//UIKeyboard handling -@synthesize enable = _enable; -@synthesize keyboardDistanceFromTextField = _keyboardDistanceFromTextField; -@synthesize preventShowingBottomBlankSpace = _preventShowingBottomBlankSpace; - -//Keyboard Appearance handling -@synthesize overrideKeyboardAppearance = _overrideKeyboardAppearance; -@synthesize keyboardAppearance = _keyboardAppearance; - -//IQToolbar handling -@synthesize enableAutoToolbar = _enableAutoToolbar; -@synthesize toolbarManageBehaviour = _toolbarManageBehaviour; - -@synthesize shouldToolbarUsesTextFieldTintColor = _shouldToolbarUsesTextFieldTintColor; -@synthesize toolbarTintColor = _toolbarTintColor; - -@synthesize shouldShowTextFieldPlaceholder = _shouldShowTextFieldPlaceholder; -@synthesize placeholderFont = _placeholderFont; - -//Resign handling -@synthesize shouldResignOnTouchOutside = _shouldResignOnTouchOutside; - -//Sound handling -@synthesize shouldPlayInputClicks = _shouldPlayInputClicks; - -//Animation handling -@synthesize layoutIfNeededOnUpdate = _layoutIfNeededOnUpdate; - -#pragma mark - Initializing functions - -/** Override +load method to enable KeyboardManager when class loader load IQKeyboardManager. Enabling when app starts (No need to write any code) */ -+(void)load -{ - //Enabling IQKeyboardManager. Loading asynchronous on main thread - [self performSelectorOnMainThread:@selector(sharedManager) withObject:nil waitUntilDone:NO]; -} - -/* Singleton Object Initialization. */ --(instancetype)init -{ - if (self = [super init]) - { - __weak typeof(self) weakSelf = self; - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - - __strong typeof(self) strongSelf = weakSelf; - - strongSelf.registeredClasses = [[NSMutableSet alloc] init]; - - [strongSelf registerAllNotifications]; - - //Creating gesture for @shouldResignOnTouchOutside. (Enhancement ID: #14) - strongSelf.tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)]; - strongSelf.tapGesture.cancelsTouchesInView = NO; - [strongSelf.tapGesture setDelegate:self]; - strongSelf.tapGesture.enabled = strongSelf.shouldResignOnTouchOutside; - - //Setting it's initial values - strongSelf.animationDuration = 0.25; - strongSelf.animationCurve = UIViewAnimationCurveEaseInOut; - [self setEnable:YES]; - [self setKeyboardDistanceFromTextField:10.0]; - [self setShouldPlayInputClicks:YES]; - [self setShouldResignOnTouchOutside:NO]; - [self setOverrideKeyboardAppearance:NO]; - [self setKeyboardAppearance:UIKeyboardAppearanceDefault]; - [self setEnableAutoToolbar:YES]; - [self setPreventShowingBottomBlankSpace:YES]; - [self setShouldShowTextFieldPlaceholder:YES]; - [self setToolbarManageBehaviour:IQAutoToolbarBySubviews]; - [self setLayoutIfNeededOnUpdate:NO]; - [self setShouldFixInteractivePopGestureRecognizer:YES]; - - //Loading IQToolbar, IQTitleBarButtonItem, IQBarButtonItem to fix first time keyboard appearance delay (Bug ID: #550) - { - UITextField *view = [[UITextField alloc] init]; - [view addDoneOnKeyboardWithTarget:nil action:nil]; - [view addPreviousNextDoneOnKeyboardWithTarget:nil previousAction:nil nextAction:nil doneAction:nil]; - } - - //Initializing disabled classes Set. - strongSelf.disabledDistanceHandlingClasses = [[NSMutableSet alloc] initWithObjects:[UITableViewController class],[UIAlertController class], nil]; - strongSelf.enabledDistanceHandlingClasses = [[NSMutableSet alloc] init]; - - strongSelf.disabledToolbarClasses = [[NSMutableSet alloc] initWithObjects:[UIAlertController class], nil]; - strongSelf.enabledToolbarClasses = [[NSMutableSet alloc] init]; - - strongSelf.toolbarPreviousNextAllowedClasses = [[NSMutableSet alloc] initWithObjects:[UITableView class],[UICollectionView class],[IQPreviousNextView class], nil]; - - strongSelf.disabledTouchResignedClasses = [[NSMutableSet alloc] initWithObjects:[UIAlertController class], nil]; - strongSelf.enabledTouchResignedClasses = [[NSMutableSet alloc] init]; - strongSelf.touchResignedGestureIgnoreClasses = [[NSMutableSet alloc] initWithObjects:[UIControl class],[UINavigationBar class], nil]; - - [self setShouldToolbarUsesTextFieldTintColor:NO]; - }); - } - return self; -} - -/* Automatically called from the `+(void)load` method. */ -+ (IQKeyboardManager*)sharedManager -{ - //Singleton instance - static IQKeyboardManager *kbManager; - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - - kbManager = [[self alloc] init]; - }); - - return kbManager; -} - -#pragma mark - Dealloc --(void)dealloc -{ - // Disable the keyboard manager. - [self setEnable:NO]; - - //Removing notification observers on dealloc. - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -#pragma mark - Property functions --(void)setEnable:(BOOL)enable -{ - // If not enabled, enable it. - if (enable == YES && - _enable == NO) - { - //Setting NO to _enable. - _enable = enable; - - //If keyboard is currently showing. Sending a fake notification for keyboardWillShow to adjust view according to keyboard. - if (_kbShowNotification) [self keyboardWillShow:_kbShowNotification]; - - [self showLog:IQLocalizedString(@"enabled", nil)]; - } - //If not disable, desable it. - else if (enable == NO && - _enable == YES) - { - //Sending a fake notification for keyboardWillHide to retain view's original frame. - [self keyboardWillHide:nil]; - - //Setting NO to _enable. - _enable = enable; - - [self showLog:IQLocalizedString(@"disabled", nil)]; - } - //If already disabled. - else if (enable == NO && - _enable == NO) - { - [self showLog:IQLocalizedString(@"already disabled", nil)]; - } - //If already enabled. - else if (enable == YES && - _enable == YES) - { - [self showLog:IQLocalizedString(@"already enabled", nil)]; - } -} - --(BOOL)privateIsEnabled -{ - BOOL enable = _enable; - - UIViewController *textFieldViewController = [_textFieldView viewController]; - - if (textFieldViewController) - { - if (enable == NO) - { - //If viewController is kind of enable viewController class, then assuming it's enabled. - for (Class enabledClass in _enabledDistanceHandlingClasses) - { - if ([textFieldViewController isKindOfClass:enabledClass]) - { - enable = YES; - break; - } - } - } - - if (enable) - { - //If viewController is kind of disable viewController class, then assuming it's disable. - for (Class disabledClass in _disabledDistanceHandlingClasses) - { - if ([textFieldViewController isKindOfClass:disabledClass]) - { - enable = NO; - break; - } - } - - //Special Controllers - if (enable == YES) - { - NSString *classNameString = NSStringFromClass([textFieldViewController class]); - - //_UIAlertControllerTextFieldViewController - if ([classNameString containsString:@"UIAlertController"] && [classNameString hasSuffix:@"TextFieldViewController"]) - { - enable = NO; - } - } - } - } - - return enable; -} - -// Setting keyboard distance from text field. --(void)setKeyboardDistanceFromTextField:(CGFloat)keyboardDistanceFromTextField -{ - //Can't be less than zero. Minimum is zero. - _keyboardDistanceFromTextField = MAX(keyboardDistanceFromTextField, 0); - - [self showLog:[NSString stringWithFormat:@"keyboardDistanceFromTextField: %.2f",_keyboardDistanceFromTextField]]; -} - -/** Enabling/disable gesture on touching. */ --(void)setShouldResignOnTouchOutside:(BOOL)shouldResignOnTouchOutside -{ - [self showLog:[NSString stringWithFormat:@"shouldResignOnTouchOutside: %@",shouldResignOnTouchOutside?@"Yes":@"No"]]; - - _shouldResignOnTouchOutside = shouldResignOnTouchOutside; - - //Enable/Disable gesture recognizer (Enhancement ID: #14) - [_tapGesture setEnabled:[self privateShouldResignOnTouchOutside]]; -} - --(BOOL)privateShouldResignOnTouchOutside -{ - BOOL shouldResignOnTouchOutside = _shouldResignOnTouchOutside; - - UIViewController *textFieldViewController = [_textFieldView viewController]; - - if (textFieldViewController) - { - if (shouldResignOnTouchOutside == NO) - { - //If viewController is kind of enable viewController class, then assuming shouldResignOnTouchOutside is enabled. - for (Class enabledClass in _enabledTouchResignedClasses) - { - if ([textFieldViewController isKindOfClass:enabledClass]) - { - shouldResignOnTouchOutside = YES; - break; - } - } - } - - if (shouldResignOnTouchOutside) - { - //If viewController is kind of disable viewController class, then assuming shouldResignOnTouchOutside is disable. - for (Class disabledClass in _disabledTouchResignedClasses) - { - if ([textFieldViewController isKindOfClass:disabledClass]) - { - shouldResignOnTouchOutside = NO; - break; - } - } - - //Special Controllers - if (shouldResignOnTouchOutside == YES) - { - NSString *classNameString = NSStringFromClass([textFieldViewController class]); - - //_UIAlertControllerTextFieldViewController - if ([classNameString containsString:@"UIAlertController"] && [classNameString hasSuffix:@"TextFieldViewController"]) - { - shouldResignOnTouchOutside = NO; - } - } - } - } - - return shouldResignOnTouchOutside; -} - -/** Enable/disable autotoolbar. Adding and removing toolbar if required. */ --(void)setEnableAutoToolbar:(BOOL)enableAutoToolbar -{ - _enableAutoToolbar = enableAutoToolbar; - - [self showLog:[NSString stringWithFormat:@"enableAutoToolbar: %@",enableAutoToolbar?@"Yes":@"No"]]; - - //If enabled then adding toolbar. - if ([self privateIsEnableAutoToolbar] == YES) - { - [self addToolbarIfRequired]; - } - //Else removing toolbar. - else - { - [self removeToolbarIfRequired]; - } -} - --(BOOL)privateIsEnableAutoToolbar -{ - BOOL enableAutoToolbar = _enableAutoToolbar; - - UIViewController *textFieldViewController = [_textFieldView viewController]; - - if (textFieldViewController) - { - if (enableAutoToolbar == NO) - { - //If found any toolbar enabled classes then return. - for (Class enabledToolbarClass in _enabledToolbarClasses) - { - if ([textFieldViewController isKindOfClass:enabledToolbarClass]) - { - enableAutoToolbar = YES; - break; - } - } - } - - if (enableAutoToolbar) - { - //If found any toolbar disabled classes then return. - for (Class disabledToolbarClass in _disabledToolbarClasses) - { - if ([textFieldViewController isKindOfClass:disabledToolbarClass]) - { - enableAutoToolbar = NO; - break; - } - } - - - //Special Controllers - if (enableAutoToolbar == YES) - { - NSString *classNameString = NSStringFromClass([textFieldViewController class]); - - //_UIAlertControllerTextFieldViewController - if ([classNameString containsString:@"UIAlertController"] && [classNameString hasSuffix:@"TextFieldViewController"]) - { - enableAutoToolbar = NO; - } - } - } - } - - return enableAutoToolbar; -} - -#pragma mark - Private Methods - -/** Getting keyWindow. */ --(UIWindow *)keyWindow -{ - if (_textFieldView.window) - { - return _textFieldView.window; - } - else - { - static UIWindow *_keyWindow = nil; - - /* (Bug ID: #23, #25, #73) */ - UIWindow *originalKeyWindow = [[UIApplication sharedApplication] keyWindow]; - - //If original key window is not nil and the cached keywindow is also not original keywindow then changing keywindow. - if (originalKeyWindow != nil && - _keyWindow != originalKeyWindow) - { - _keyWindow = originalKeyWindow; - } - - return _keyWindow; - } -} - -/* Helper function to manipulate RootViewController's frame with animation. */ --(void)setRootViewFrame:(CGRect)frame -{ - // Getting topMost ViewController. - UIViewController *controller = [_textFieldView topMostController]; - if (controller == nil) controller = [[self keyWindow] topMostController]; - - //frame size needs to be adjusted on iOS8 due to orientation API changes. - frame.size = controller.view.frame.size; - - // If can't get rootViewController then printing warning to user. - if (controller == nil) - [self showLog:(IQLocalizedString(@"You must set UIWindow.rootViewController in your AppDelegate to work with IQKeyboardManager", nil))]; - - __weak typeof(self) weakSelf = self; - - //Used UIViewAnimationOptionBeginFromCurrentState to minimize strange animations. - [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - - __strong typeof(self) strongSelf = weakSelf; - - // Setting it's new frame - [controller.view setFrame:frame]; - - //Animating content if needed (Bug ID: #204) - if (strongSelf.layoutIfNeededOnUpdate) - { - //Animating content (Bug ID: #160) - [controller.view setNeedsLayout]; - [controller.view layoutIfNeeded]; - } - - [self showLog:[NSString stringWithFormat:@"Set %@ frame to : %@",[controller _IQDescription],NSStringFromCGRect(frame)]]; - } completion:NULL]; -} - -/* Adjusting RootViewController's frame according to interface orientation. */ --(void)adjustFrame -{ - // We are unable to get textField object while keyboard showing on UIWebView's textField. (Bug ID: #11) - if (_textFieldView == nil) return; - - CFTimeInterval startTime = CACurrentMediaTime(); - [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; - - // Getting KeyWindow object. - UIWindow *keyWindow = [self keyWindow]; - - // Getting RootViewController. (Bug ID: #1, #4) - UIViewController *rootController = [_textFieldView topMostController]; - if (rootController == nil) rootController = [keyWindow topMostController]; - - // Converting Rectangle according to window bounds. - CGRect textFieldViewRect = [[_textFieldView superview] convertRect:_textFieldView.frame toView:keyWindow]; - // Getting RootViewRect. - CGRect rootViewRect = [[rootController view] frame]; - //Getting statusBarFrame - - //Maintain keyboardDistanceFromTextField - CGFloat specialKeyboardDistanceFromTextField = _textFieldView.keyboardDistanceFromTextField; - - if (_textFieldView.isSearchBarTextField) - { - UISearchBar *searchBar = (UISearchBar*)[_textFieldView superviewOfClassType:[UISearchBar class]]; - specialKeyboardDistanceFromTextField = searchBar.keyboardDistanceFromTextField; - } - - CGFloat keyboardDistanceFromTextField = (specialKeyboardDistanceFromTextField == kIQUseDefaultKeyboardDistance)?_keyboardDistanceFromTextField:specialKeyboardDistanceFromTextField; - CGSize kbSize = _kbSize; - kbSize.height += keyboardDistanceFromTextField; - - CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame]; - - // (Bug ID: #250) - IQLayoutGuidePosition layoutGuidePosition = IQLayoutGuidePositionNone; - - //If topLayoutGuide constraint - if (_layoutGuideConstraint && (_layoutGuideConstraint.firstItem == [[_textFieldView viewController] topLayoutGuide] || - _layoutGuideConstraint.secondItem == [[_textFieldView viewController] topLayoutGuide])) - { - layoutGuidePosition = IQLayoutGuidePositionTop; - } - //If bottomLayoutGuice constraint - else if (_layoutGuideConstraint && (_layoutGuideConstraint.firstItem == [[_textFieldView viewController] bottomLayoutGuide] || - _layoutGuideConstraint.secondItem == [[_textFieldView viewController] bottomLayoutGuide])) - { - layoutGuidePosition = IQLayoutGuidePositionBottom; - } - - CGFloat topLayoutGuide = CGRectGetHeight(statusBarFrame); - - CGFloat move = 0; - // +Move positive = textField is hidden. - // -Move negative = textField is showing. - - // Checking if there is bottomLayoutGuide attached (Bug ID: #250) - if (layoutGuidePosition == IQLayoutGuidePositionBottom) - { - // Calculating move position. - move = CGRectGetMaxY(textFieldViewRect)-(CGRectGetHeight(keyWindow.frame)-kbSize.height); - } - else - { - // Calculating move position. Common for both normal and special cases. - move = MIN(CGRectGetMinY(textFieldViewRect)-(topLayoutGuide+5), CGRectGetMaxY(textFieldViewRect)-(CGRectGetHeight(keyWindow.frame)-kbSize.height)); - } - - [self showLog:[NSString stringWithFormat:@"Need to move: %.2f",move]]; - - UIScrollView *superScrollView = nil; - UIScrollView *superView = (UIScrollView*)[_textFieldView superviewOfClassType:[UIScrollView class]]; - - //Getting UIScrollView whose scrolling is enabled. // (Bug ID: #285) - while (superView) - { - if (superView.isScrollEnabled) - { - superScrollView = superView; - break; - } - else - { - // Getting it's superScrollView. // (Enhancement ID: #21, #24) - superView = (UIScrollView*)[superView superviewOfClassType:[UIScrollView class]]; - } - } - - //If there was a lastScrollView. // (Bug ID: #34) - if (_lastScrollView) - { - //If we can't find current superScrollView, then setting lastScrollView to it's original form. - if (superScrollView == nil) - { - [self showLog:[NSString stringWithFormat:@"Restoring %@ contentInset to : %@ and contentOffset to : %@",[_lastScrollView _IQDescription],NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]]; - - __weak typeof(self) weakSelf = self; - - [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - - __strong typeof(self) strongSelf = weakSelf; - - [strongSelf.lastScrollView setContentInset:strongSelf.startingContentInsets]; - strongSelf.lastScrollView.scrollIndicatorInsets = strongSelf.startingScrollIndicatorInsets; - } completion:NULL]; - - if (_lastScrollView.shouldRestoreScrollViewContentOffset) - { - [_lastScrollView setContentOffset:_startingContentOffset animated:YES]; - } - - _startingContentInsets = UIEdgeInsetsZero; - _startingScrollIndicatorInsets = UIEdgeInsetsZero; - _startingContentOffset = CGPointZero; - _lastScrollView = nil; - } - //If both scrollView's are different, then reset lastScrollView to it's original frame and setting current scrollView as last scrollView. - else if (superScrollView != _lastScrollView) - { - [self showLog:[NSString stringWithFormat:@"Restoring %@ contentInset to : %@ and contentOffset to : %@",[_lastScrollView _IQDescription],NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]]; - - __weak typeof(self) weakSelf = self; - - [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - - __strong typeof(self) strongSelf = weakSelf; - - [strongSelf.lastScrollView setContentInset:strongSelf.startingContentInsets]; - strongSelf.lastScrollView.scrollIndicatorInsets = strongSelf.startingScrollIndicatorInsets; - } completion:NULL]; - - if (_lastScrollView.shouldRestoreScrollViewContentOffset) - { - [_lastScrollView setContentOffset:_startingContentOffset animated:YES]; - } - - _lastScrollView = superScrollView; - _startingContentInsets = superScrollView.contentInset; - _startingScrollIndicatorInsets = superScrollView.scrollIndicatorInsets; - _startingContentOffset = superScrollView.contentOffset; - - [self showLog:[NSString stringWithFormat:@"Saving New %@ contentInset: %@ and contentOffset : %@",[_lastScrollView _IQDescription],NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]]; - } - //Else the case where superScrollView == lastScrollView means we are on same scrollView after switching to different textField. So doing nothing - } - //If there was no lastScrollView and we found a current scrollView. then setting it as lastScrollView. - else if(superScrollView) - { - _lastScrollView = superScrollView; - _startingContentInsets = superScrollView.contentInset; - _startingContentOffset = superScrollView.contentOffset; - _startingScrollIndicatorInsets = superScrollView.scrollIndicatorInsets; - - [self showLog:[NSString stringWithFormat:@"Saving %@ contentInset: %@ and contentOffset : %@",[_lastScrollView _IQDescription],NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]]; - } - - // Special case for ScrollView. - { - // If we found lastScrollView then setting it's contentOffset to show textField. - if (_lastScrollView) - { - //Saving - UIView *lastView = _textFieldView; - UIScrollView *superScrollView = _lastScrollView; - - //Looping in upper hierarchy until we don't found any scrollView in it's upper hirarchy till UIWindow object. - while (superScrollView && - (move>0?(move > (-superScrollView.contentOffset.y-superScrollView.contentInset.top)):superScrollView.contentOffset.y>0) ) - { - UIScrollView *nextScrollView = nil; - UIScrollView *tempScrollView = (UIScrollView*)[superScrollView superviewOfClassType:[UIScrollView class]]; - - //Getting UIScrollView whose scrolling is enabled. // (Bug ID: #285) - while (tempScrollView) - { - if (tempScrollView.isScrollEnabled) - { - nextScrollView = tempScrollView; - break; - } - else - { - // Getting it's superScrollView. // (Enhancement ID: #21, #24) - tempScrollView = (UIScrollView*)[tempScrollView superviewOfClassType:[UIScrollView class]]; - } - } - - //Getting lastViewRect. - CGRect lastViewRect = [[lastView superview] convertRect:lastView.frame toView:superScrollView]; - - //Calculating the expected Y offset from move and scrollView's contentOffset. - CGFloat shouldOffsetY = superScrollView.contentOffset.y - MIN(superScrollView.contentOffset.y,-move); - - //Rearranging the expected Y offset according to the view. - shouldOffsetY = MIN(shouldOffsetY, lastViewRect.origin.y/*-5*/); //-5 is for good UI.//Commenting -5 (Bug ID: #69) - - //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type - //[superScrollView superviewOfClassType:[UIScrollView class]] == nil If processing scrollView is last scrollView in upper hierarchy (there is no other scrollView upper hierrchy.) - //shouldOffsetY >= 0 shouldOffsetY must be greater than in order to keep distance from navigationBar (Bug ID: #92) - if ([_textFieldView isKindOfClass:[UITextView class]] && - nextScrollView == nil && - (shouldOffsetY >= 0)) - { - CGFloat maintainTopLayout = 0; - - //When uncommenting this, each calculation goes to well, but don't know why scrollView doesn't adjusting it's contentOffset at bottom -// if ([_textFieldView.viewController respondsToSelector:@selector(topLayoutGuide)]) -// maintainTopLayout = [_textFieldView.viewController.topLayoutGuide length]; -// else - maintainTopLayout = CGRectGetMaxY(_textFieldView.viewController.navigationController.navigationBar.frame); - - maintainTopLayout+= 10; //For good UI - - // Converting Rectangle according to window bounds. - CGRect currentTextFieldViewRect = [[_textFieldView superview] convertRect:_textFieldView.frame toView:keyWindow]; - - //Calculating expected fix distance which needs to be managed from navigation bar - CGFloat expectedFixDistance = CGRectGetMinY(currentTextFieldViewRect) - maintainTopLayout; - - //Now if expectedOffsetY (superScrollView.contentOffset.y + expectedFixDistance) is lower than current shouldOffsetY, which means we're in a position where navigationBar up and hide, then reducing shouldOffsetY with expectedOffsetY (superScrollView.contentOffset.y + expectedFixDistance) - shouldOffsetY = MIN(shouldOffsetY, superScrollView.contentOffset.y + expectedFixDistance); - - //Setting move to 0 because now we don't want to move any view anymore (All will be managed by our contentInset logic. - move = 0; - } - else - { - //Subtracting the Y offset from the move variable, because we are going to change scrollView's contentOffset.y to shouldOffsetY. - move -= (shouldOffsetY-superScrollView.contentOffset.y); - } - - - //Getting problem while using `setContentOffset:animated:`, So I used animation API. - [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - - [self showLog:[NSString stringWithFormat:@"Adjusting %.2f to %@ ContentOffset",(superScrollView.contentOffset.y-shouldOffsetY),[superScrollView _IQDescription]]]; - [self showLog:[NSString stringWithFormat:@"Remaining Move: %.2f",move]]; - - superScrollView.contentOffset = CGPointMake(superScrollView.contentOffset.x, shouldOffsetY); - - } completion:NULL]; - - // Getting next lastView & superScrollView. - lastView = superScrollView; - superScrollView = nextScrollView; - } - - //Updating contentInset - { - CGRect lastScrollViewRect = [[_lastScrollView superview] convertRect:_lastScrollView.frame toView:keyWindow]; - - CGFloat bottom = kbSize.height-keyboardDistanceFromTextField-(CGRectGetHeight(keyWindow.frame)-CGRectGetMaxY(lastScrollViewRect)); - - // Update the insets so that the scroll vew doesn't shift incorrectly when the offset is near the bottom of the scroll view. - UIEdgeInsets movedInsets = _lastScrollView.contentInset; - - movedInsets.bottom = MAX(_startingContentInsets.bottom, bottom); - - [self showLog:[NSString stringWithFormat:@"%@ old ContentInset : %@",[_lastScrollView _IQDescription], NSStringFromUIEdgeInsets(_lastScrollView.contentInset)]]; - - __weak typeof(self) weakSelf = self; - - [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - - __strong typeof(self) strongSelf = weakSelf; - - strongSelf.lastScrollView.contentInset = movedInsets; - - UIEdgeInsets newInset = strongSelf.lastScrollView.scrollIndicatorInsets; - newInset.bottom = movedInsets.bottom; - strongSelf.lastScrollView.scrollIndicatorInsets = newInset; - - } completion:NULL]; - - [self showLog:[NSString stringWithFormat:@"%@ new ContentInset : %@",[_lastScrollView _IQDescription], NSStringFromUIEdgeInsets(_lastScrollView.contentInset)]]; - } - } - //Going ahead. No else if. - } - - if (layoutGuidePosition == IQLayoutGuidePositionTop) - { - CGFloat constant = MIN(_layoutGuideConstraintInitialConstant, _layoutGuideConstraint.constant-move); - - __weak typeof(self) weakSelf = self; - - [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - - __strong typeof(self) strongSelf = weakSelf; - - weakSelf.layoutGuideConstraint.constant = constant; - [strongSelf.rootViewController.view setNeedsLayout]; - [strongSelf.rootViewController.view layoutIfNeeded]; - } completion:NULL]; - } - //If bottomLayoutGuice constraint - else if (layoutGuidePosition == IQLayoutGuidePositionBottom) - { - CGFloat constant = MAX(_layoutGuideConstraintInitialConstant, _layoutGuideConstraint.constant+move); - - __weak typeof(self) weakSelf = self; - - [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - - __strong typeof(self) strongSelf = weakSelf; - - weakSelf.layoutGuideConstraint.constant = constant; - [strongSelf.rootViewController.view setNeedsLayout]; - [strongSelf.rootViewController.view layoutIfNeeded]; - } completion:NULL]; - } - //If not constraint - else - { - //Special case for UITextView(Readjusting textView.contentInset when textView hight is too big to fit on screen) - //_lastScrollView If not having inside any scrollView, (now contentInset manages the full screen textView. - //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type - if ([_textFieldView isKindOfClass:[UITextView class]]) - { - UITextView *textView = (UITextView*)_textFieldView; - - CGFloat textViewHeight = MIN(CGRectGetHeight(_textFieldView.frame), (CGRectGetHeight(keyWindow.frame)-kbSize.height-(topLayoutGuide))); - - if (_textFieldView.frame.size.height-textView.contentInset.bottom>textViewHeight) - { - __weak typeof(self) weakSelf = self; - - [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - - __strong typeof(self) strongSelf = weakSelf; - - [self showLog:[NSString stringWithFormat:@"%@ Old UITextView.contentInset : %@",[strongSelf.textFieldView _IQDescription], NSStringFromUIEdgeInsets(textView.contentInset)]]; - - //_isTextViewContentInsetChanged, If frame is not change by library in past, then saving user textView properties (Bug ID: #92) - if (_isTextViewContentInsetChanged == NO) - { - _startingTextViewContentInsets = textView.contentInset; - _startingTextViewScrollIndicatorInsets = textView.scrollIndicatorInsets; - } - - UIEdgeInsets newContentInset = textView.contentInset; - newContentInset.bottom = _textFieldView.frame.size.height-textViewHeight; - textView.contentInset = newContentInset; - textView.scrollIndicatorInsets = newContentInset; - strongSelf.isTextViewContentInsetChanged = YES; - - [self showLog:[NSString stringWithFormat:@"%@ New UITextView.contentInset : %@",[strongSelf.textFieldView _IQDescription], NSStringFromUIEdgeInsets(textView.contentInset)]]; - - } completion:NULL]; - } - } - - // Special case for iPad modalPresentationStyle. - if ([rootController modalPresentationStyle] == UIModalPresentationFormSheet || - [rootController modalPresentationStyle] == UIModalPresentationPageSheet) - { - [self showLog:[NSString stringWithFormat:@"Found Special case for Model Presentation Style: %ld",(long)(rootController.modalPresentationStyle)]]; - - // +Positive or zero. - if (move>=0) - { - // We should only manipulate y. - rootViewRect.origin.y -= move; - - // From now prevent keyboard manager to slide up the rootView to more than keyboard height. (Bug ID: #93) - if (_preventShowingBottomBlankSpace == YES) - { - CGFloat minimumY = (CGRectGetHeight(keyWindow.frame)-rootViewRect.size.height-topLayoutGuide)/2-(kbSize.height-keyboardDistanceFromTextField); - - rootViewRect.origin.y = MAX(rootViewRect.origin.y, minimumY); - } - - [self showLog:@"Moving Upward"]; - // Setting adjusted rootViewRect - [self setRootViewFrame:rootViewRect]; - _movedDistance = (_topViewBeginRect.origin.y-rootViewRect.origin.y); - } - // -Negative - else - { - // Calculating disturbed distance. Pull Request #3 - CGFloat disturbDistance = CGRectGetMinY(rootViewRect)-CGRectGetMinY(_topViewBeginRect); - - // disturbDistance Negative = frame disturbed. - // disturbDistance positive = frame not disturbed. - if(disturbDistance<0) - { - // We should only manipulate y. - rootViewRect.origin.y -= MAX(move, disturbDistance); - - [self showLog:@"Moving Downward"]; - // Setting adjusted rootViewRect - [self setRootViewFrame:rootViewRect]; - _movedDistance = (_topViewBeginRect.origin.y-rootViewRect.origin.y); - } - } - } - //If presentation style is neither UIModalPresentationFormSheet nor UIModalPresentationPageSheet then going ahead.(General case) - else - { - // +Positive or zero. - if (move>=0) - { - rootViewRect.origin.y -= move; - - // From now prevent keyboard manager to slide up the rootView to more than keyboard height. (Bug ID: #93) - if (_preventShowingBottomBlankSpace == YES) - { - rootViewRect.origin.y = MAX(rootViewRect.origin.y, MIN(0, -kbSize.height+keyboardDistanceFromTextField)); - } - - [self showLog:@"Moving Upward"]; - // Setting adjusted rootViewRect - [self setRootViewFrame:rootViewRect]; - _movedDistance = (_topViewBeginRect.origin.y-rootViewRect.origin.y); - } - // -Negative - else - { - CGFloat disturbDistance = CGRectGetMinY(rootViewRect)-CGRectGetMinY(_topViewBeginRect); - - // disturbDistance Negative = frame disturbed. Pull Request #3 - // disturbDistance positive = frame not disturbed. - if(disturbDistance<0) - { - rootViewRect.origin.y -= MAX(move, disturbDistance); - - [self showLog:@"Moving Downward"]; - // Setting adjusted rootViewRect - [self setRootViewFrame:rootViewRect]; - _movedDistance = (_topViewBeginRect.origin.y-rootViewRect.origin.y); - } - } - } - } - - CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; - [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime]]; -} - -#pragma mark - Public Methods - -/* Refreshes textField/textView position if any external changes is explicitly made by user. */ -- (void)reloadLayoutIfNeeded -{ - if ([self privateIsEnabled] == YES) - { - if (_textFieldView != nil && - _keyboardShowing == YES && - CGRectEqualToRect(_topViewBeginRect, CGRectZero) == false && - [_textFieldView isAlertViewTextField] == NO) - { - [self adjustFrame]; - } - } -} - -#pragma mark - UIKeyboad Notification methods -/* UIKeyboardWillShowNotification. */ --(void)keyboardWillShow:(NSNotification*)aNotification -{ - _kbShowNotification = aNotification; - - // Boolean to know keyboard is showing/hiding - _keyboardShowing = YES; - - // Getting keyboard animation. - NSInteger curve = [[aNotification userInfo][UIKeyboardAnimationCurveUserInfoKey] integerValue]; - _animationCurve = curve<<16; - - // Getting keyboard animation duration - CGFloat duration = [[aNotification userInfo][UIKeyboardAnimationDurationUserInfoKey] floatValue]; - - //Saving animation duration - if (duration != 0.0) _animationDuration = duration; - - CGSize oldKBSize = _kbSize; - - // Getting UIKeyboardSize. - CGRect kbFrame = [[aNotification userInfo][UIKeyboardFrameEndUserInfoKey] CGRectValue]; - - CGRect screenSize = [[UIScreen mainScreen] bounds]; - - //Calculating actual keyboard displayed size, keyboard frame may be different when hardware keyboard is attached (Bug ID: #469) (Bug ID: #381) - CGRect intersectRect = CGRectIntersection(kbFrame, screenSize); - - if (CGRectIsNull(intersectRect)) - { - _kbSize = CGSizeMake(screenSize.size.width, 0); - } - else - { - _kbSize = intersectRect.size; - } - - if ([self privateIsEnabled] == NO) return; - - CFTimeInterval startTime = CACurrentMediaTime(); - [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; - - if (_textFieldView != nil && CGRectEqualToRect(_topViewBeginRect, CGRectZero)) // (Bug ID: #5) - { - // keyboard is not showing(At the beginning only). We should save rootViewRect and _layoutGuideConstraintInitialConstant. - _layoutGuideConstraint = [[_textFieldView viewController] IQLayoutGuideConstraint]; - _layoutGuideConstraintInitialConstant = [_layoutGuideConstraint constant]; - - // keyboard is not showing(At the beginning only). We should save rootViewRect. - _rootViewController = [_textFieldView topMostController]; - if (_rootViewController == nil) _rootViewController = [[self keyWindow] topMostController]; - - _topViewBeginRect = _rootViewController.view.frame; - - if (_shouldFixInteractivePopGestureRecognizer && - [_rootViewController isKindOfClass:[UINavigationController class]] && - [_rootViewController modalPresentationStyle] != UIModalPresentationFormSheet && - [_rootViewController modalPresentationStyle] != UIModalPresentationPageSheet) - { - _topViewBeginRect.origin = CGPointMake(0, [self keyWindow].frame.size.height-_rootViewController.view.frame.size.height); - } - - [self showLog:[NSString stringWithFormat:@"Saving %@ beginning Frame: %@",[_rootViewController _IQDescription] ,NSStringFromCGRect(_topViewBeginRect)]]; - } - - //If last restored keyboard size is different(any orientation accure), then refresh. otherwise not. - if (!CGSizeEqualToSize(_kbSize, oldKBSize)) - { - //If _textFieldView is inside UIAlertView then do nothing. (Bug ID: #37, #74, #76) - //See notes:- https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html If it is UIAlertView textField then do not affect anything (Bug ID: #70). - if (_keyboardShowing == YES && - _textFieldView != nil && - [_textFieldView isAlertViewTextField] == NO) - { - [self adjustFrame]; - } - } - - CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; - [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime]]; -} - -/* UIKeyboardDidShowNotification. */ -- (void)keyboardDidShow:(NSNotification*)aNotification -{ - if ([self privateIsEnabled] == NO) return; - - CFTimeInterval startTime = CACurrentMediaTime(); - [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; - - // Getting topMost ViewController. - UIViewController *controller = [_textFieldView topMostController]; - if (controller == nil) controller = [[self keyWindow] topMostController]; - - //If _textFieldView viewController is presented as formSheet, then adjustFrame again because iOS internally update formSheet frame on keyboardShown. (Bug ID: #37, #74, #76) - if (_keyboardShowing == YES && - _textFieldView != nil && - (controller.modalPresentationStyle == UIModalPresentationFormSheet || controller.modalPresentationStyle == UIModalPresentationPageSheet) && - [_textFieldView isAlertViewTextField] == NO) - { - //In case of form sheet or page sheet, we'll add adjustFrame call in main queue to perform it when UI thread will do all framing updation so adjustFrame will be executed after all internal operations. - [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - [self adjustFrame]; - }]; - } - - CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; - [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime]]; -} - -/* UIKeyboardWillHideNotification. So setting rootViewController to it's default frame. */ -- (void)keyboardWillHide:(NSNotification*)aNotification -{ - //If it's not a fake notification generated by [self setEnable:NO]. - if (aNotification != nil) _kbShowNotification = nil; - - // Boolean to know keyboard is showing/hiding - _keyboardShowing = NO; - - // Getting keyboard animation duration - CGFloat aDuration = [[aNotification userInfo][UIKeyboardAnimationDurationUserInfoKey] floatValue]; - if (aDuration!= 0.0f) - { - _animationDuration = aDuration; - } - - //If not enabled then do nothing. - if ([self privateIsEnabled] == NO) return; - - CFTimeInterval startTime = CACurrentMediaTime(); - [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; - - //Commented due to #56. Added all the conditions below to handle UIWebView's textFields. (Bug ID: #56) - // We are unable to get textField object while keyboard showing on UIWebView's textField. (Bug ID: #11) -// if (_textFieldView == nil) return; - - //Restoring the contentOffset of the lastScrollView - if (_lastScrollView) - { - __weak typeof(self) weakSelf = self; - - [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - - __strong typeof(self) strongSelf = weakSelf; - - strongSelf.lastScrollView.contentInset = strongSelf.startingContentInsets; - strongSelf.lastScrollView.scrollIndicatorInsets = strongSelf.startingScrollIndicatorInsets; - - if (strongSelf.lastScrollView.shouldRestoreScrollViewContentOffset) - { - strongSelf.lastScrollView.contentOffset = strongSelf.startingContentOffset; - } - - [self showLog:[NSString stringWithFormat:@"Restoring %@ contentInset to : %@ and contentOffset to : %@",[strongSelf.lastScrollView _IQDescription],NSStringFromUIEdgeInsets(strongSelf.startingContentInsets),NSStringFromCGPoint(strongSelf.startingContentOffset)]]; - - // TODO: restore scrollView state - // This is temporary solution. Have to implement the save and restore scrollView state - UIScrollView *superscrollView = strongSelf.lastScrollView; - do - { - CGSize contentSize = CGSizeMake(MAX(superscrollView.contentSize.width, CGRectGetWidth(superscrollView.frame)), MAX(superscrollView.contentSize.height, CGRectGetHeight(superscrollView.frame))); - - CGFloat minimumY = contentSize.height-CGRectGetHeight(superscrollView.frame); - - if (minimumY 0) - { - return YES; - } - else - { - return NO; - } -} - -/** Returns YES if can navigate to next responder textField/textView, otherwise NO. */ --(BOOL)canGoNext -{ - //Getting all responder view's. - NSArray *textFields = [self responderViews]; - - //Getting index of current textField. - NSUInteger index = [textFields indexOfObject:_textFieldView]; - - //If it is not last textField. then it's next object becomeFirstResponder. - if (index != NSNotFound && - index < textFields.count-1) - { - return YES; - } - else - { - return NO; - } -} - -/** Navigate to previous responder textField/textView. */ --(BOOL)goPrevious -{ - //Getting all responder view's. - NSArray *textFields = [self responderViews]; - - //Getting index of current textField. - NSUInteger index = [textFields indexOfObject:_textFieldView]; - - //If it is not first textField. then it's previous object becomeFirstResponder. - if (index != NSNotFound && - index > 0) - { - UITextField *nextTextField = textFields[index-1]; - - // Retaining textFieldView - UIView *textFieldRetain = _textFieldView; - - BOOL isAcceptAsFirstResponder = [nextTextField becomeFirstResponder]; - - // If it refuses then becoming previous textFieldView as first responder again. (Bug ID: #96) - if (isAcceptAsFirstResponder == NO) - { - //If next field refuses to become first responder then restoring old textField as first responder. - [textFieldRetain becomeFirstResponder]; - - [self showLog:[NSString stringWithFormat:@"Refuses to become first responder: %@",[nextTextField _IQDescription]]]; - } - - return isAcceptAsFirstResponder; - } - else - { - return NO; - } -} - -/** Navigate to next responder textField/textView. */ --(BOOL)goNext -{ - //Getting all responder view's. - NSArray *textFields = [self responderViews]; - - //Getting index of current textField. - NSUInteger index = [textFields indexOfObject:_textFieldView]; - - //If it is not last textField. then it's next object becomeFirstResponder. - if (index != NSNotFound && - index < textFields.count-1) - { - UITextField *nextTextField = textFields[index+1]; - - // Retaining textFieldView - UIView *textFieldRetain = _textFieldView; - - BOOL isAcceptAsFirstResponder = [nextTextField becomeFirstResponder]; - - // If it refuses then becoming previous textFieldView as first responder again. (Bug ID: #96) - if (isAcceptAsFirstResponder == NO) - { - //If next field refuses to become first responder then restoring old textField as first responder. - [textFieldRetain becomeFirstResponder]; - - [self showLog:[NSString stringWithFormat:@"Refuses to become first responder: %@",[nextTextField _IQDescription]]]; - } - - return isAcceptAsFirstResponder; - } - else - { - return NO; - } -} - -#pragma mark AutoToolbar methods - -/** Get all UITextField/UITextView siblings of textFieldView. */ --(NSArray*)responderViews -{ - UIView *superConsideredView; - - //If find any consider responderView in it's upper hierarchy then will get deepResponderView. - for (Class consideredClass in _toolbarPreviousNextAllowedClasses) - { - superConsideredView = [_textFieldView superviewOfClassType:consideredClass]; - - if (superConsideredView != nil) - break; - } - - //If there is a superConsideredView in view's hierarchy, then fetching all it's subview that responds. No sorting for superConsideredView, it's by subView position. (Enhancement ID: #22) - if (superConsideredView) - { - return [superConsideredView deepResponderViews]; - } - //Otherwise fetching all the siblings - else - { - NSArray *textFields = [_textFieldView responderSiblings]; - - //Sorting textFields according to behaviour - switch (_toolbarManageBehaviour) - { - //If autoToolbar behaviour is bySubviews, then returning it. - case IQAutoToolbarBySubviews: - return textFields; - break; - - //If autoToolbar behaviour is by tag, then sorting it according to tag property. - case IQAutoToolbarByTag: - return [textFields sortedArrayByTag]; - break; - - //If autoToolbar behaviour is by tag, then sorting it according to tag property. - case IQAutoToolbarByPosition: - return [textFields sortedArrayByPosition]; - break; - default: - return nil; - break; - } - } -} - -/** Add toolbar if it is required to add on textFields and it's siblings. */ --(void)addToolbarIfRequired -{ - CFTimeInterval startTime = CACurrentMediaTime(); - [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; - - // Getting all the sibling textFields. - NSArray *siblings = [self responderViews]; - - [self showLog:[NSString stringWithFormat:@"Found %lu responder sibling(s)",(unsigned long)siblings.count]]; - - // If only one object is found, then adding only Done button. - if ((siblings.count==1 && self.previousNextDisplayMode == IQPreviousNextDisplayModeDefault) || self.previousNextDisplayMode == IQPreviousNextDisplayModeAlwaysHide) - { - UITextField *textField = (UITextField*)_textFieldView; - - //Either there is no inputAccessoryView or if accessoryView is not appropriate for current situation(There is Previous/Next/Done toolbar). - //setInputAccessoryView: check (Bug ID: #307) - if ([textField respondsToSelector:@selector(setInputAccessoryView:)]) - { - BOOL needReload = NO; - - if (![textField inputAccessoryView] || [[textField inputAccessoryView] tag] == kIQPreviousNextButtonToolbarTag) - { - //Supporting Custom Done button image (Enhancement ID: #366) - if (_toolbarDoneBarButtonItemImage) - { - [textField addRightButtonOnKeyboardWithImage:_toolbarDoneBarButtonItemImage target:self action:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; - needReload = YES; - } - //Supporting Custom Done button text (Enhancement ID: #209, #411, Bug ID: #376) - else if (_toolbarDoneBarButtonItemText) - { - [textField addRightButtonOnKeyboardWithText:_toolbarDoneBarButtonItemText target:self action:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; - needReload = YES; - } - else - { - //Now adding textField placeholder text as title of IQToolbar (Enhancement ID: #27) - [textField addDoneOnKeyboardWithTarget:self action:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; - needReload = YES; - } - textField.inputAccessoryView.tag = kIQDoneButtonToolbarTag; // (Bug ID: #78) - } - else if ([[textField inputAccessoryView] isKindOfClass:[IQToolbar class]] && - ([[textField inputAccessoryView] tag] == kIQDoneButtonToolbarTag)) - { - IQToolbar *toolbar = (IQToolbar*)[textField inputAccessoryView]; - - //Supporting Custom Done button image (Enhancement ID: #366) - if (_toolbarDoneBarButtonItemImage) - { - if ([toolbar.doneImage isEqual:_toolbarDoneBarButtonItemImage] == NO) - { - [textField addRightButtonOnKeyboardWithImage:_toolbarDoneBarButtonItemImage target:self action:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; - needReload = YES; - } - } - //Supporting Custom Done button text (Enhancement ID: #209, #411, Bug ID: #376) - else if (_toolbarDoneBarButtonItemText && - [toolbar.doneTitle isEqualToString:_toolbarDoneBarButtonItemText] == NO) - { - if ([toolbar.doneTitle isEqualToString:_toolbarDoneBarButtonItemText] == NO) - { - [textField addRightButtonOnKeyboardWithText:_toolbarDoneBarButtonItemText target:self action:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; - needReload = YES; - } - } - else if ((_toolbarDoneBarButtonItemText == nil && toolbar.doneTitle) || - (_toolbarDoneBarButtonItemImage == nil && toolbar.doneImage)) - { - //Now adding textField placeholder text as title of IQToolbar (Enhancement ID: #27) - [textField addDoneOnKeyboardWithTarget:self action:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; - needReload = YES; - } - textField.inputAccessoryView.tag = kIQDoneButtonToolbarTag; // (Bug ID: #78) - } - - if (needReload) - { - [textField reloadInputViews]; - } - } - - if ([textField.inputAccessoryView isKindOfClass:[IQToolbar class]] && - textField.inputAccessoryView.tag == kIQDoneButtonToolbarTag) - { - IQToolbar *toolbar = (IQToolbar*)[textField inputAccessoryView]; - - //Bar style according to keyboard appearance - if ([textField respondsToSelector:@selector(keyboardAppearance)]) - { - switch ([(UITextField*)textField keyboardAppearance]) - { - case UIKeyboardAppearanceAlert: - { - toolbar.barStyle = UIBarStyleBlack; - [toolbar setTintColor:[UIColor whiteColor]]; - } - break; - default: - { - toolbar.barStyle = UIBarStyleDefault; - - //Setting toolbar tintColor // (Enhancement ID: #30) - if (_shouldToolbarUsesTextFieldTintColor) - { - toolbar.tintColor = [textField tintColor]; - } - else if (_toolbarTintColor) - { - toolbar.tintColor = _toolbarTintColor; - } - else - { - toolbar.tintColor = [UIColor blackColor]; - } - } - break; - } - } - - //If need to show placeholder - if (_shouldShowTextFieldPlaceholder && - textField.shouldHidePlaceholderText == NO) - { - //Updating placeholder //(Bug ID: #148, #272) - if (toolbar.title == nil || - [toolbar.title isEqualToString:textField.drawingPlaceholderText] == NO) - { - [toolbar setTitle:textField.drawingPlaceholderText]; - } - - //Setting toolbar title font. // (Enhancement ID: #30) - if (_placeholderFont && - [_placeholderFont isKindOfClass:[UIFont class]]) - { - [toolbar setTitleFont:_placeholderFont]; - } - } - else - { - //Updating placeholder //(Bug ID: #272) - [toolbar setTitle:nil]; - } - } - } - else if ((siblings.count && self.previousNextDisplayMode == IQPreviousNextDisplayModeDefault) || self.previousNextDisplayMode == IQPreviousNextDisplayModeAlwaysShow) - { - // If more than 1 textField is found. then adding previous/next/done buttons on it. - for (UITextField *textField in siblings) - { - //Either there is no inputAccessoryView or if accessoryView is not appropriate for current situation(There is Done toolbar). - //setInputAccessoryView: check (Bug ID: #307) - if ([textField respondsToSelector:@selector(setInputAccessoryView:)]) - { - BOOL needReload = NO; - - if ((![textField inputAccessoryView] || - [[textField inputAccessoryView] tag] == kIQDoneButtonToolbarTag)) - { - //Supporting Custom Done button image (Enhancement ID: #366) - if (_toolbarDoneBarButtonItemImage) - { - [textField addPreviousNextRightOnKeyboardWithTarget:self rightButtonImage:_toolbarDoneBarButtonItemImage previousAction:@selector(previousAction:) nextAction:@selector(nextAction:) rightButtonAction:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; - needReload = YES; - } - //Supporting Custom Done button text (Enhancement ID: #209, #411, Bug ID: #376) - else if (_toolbarDoneBarButtonItemText) - { - [textField addPreviousNextRightOnKeyboardWithTarget:self rightButtonTitle:_toolbarDoneBarButtonItemText previousAction:@selector(previousAction:) nextAction:@selector(nextAction:) rightButtonAction:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; - needReload = YES; - } - else - { - //Now adding textField placeholder text as title of IQToolbar (Enhancement ID: #27) - [textField addPreviousNextDoneOnKeyboardWithTarget:self previousAction:@selector(previousAction:) nextAction:@selector(nextAction:) doneAction:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; - needReload = YES; - } - textField.inputAccessoryView.tag = kIQPreviousNextButtonToolbarTag; // (Bug ID: #78) - } - else if ([[textField inputAccessoryView] isKindOfClass:[IQToolbar class]] && - ([[textField inputAccessoryView] tag] == kIQPreviousNextButtonToolbarTag)) - { - IQToolbar *toolbar = (IQToolbar*)[textField inputAccessoryView]; - - //Supporting Custom Done button image (Enhancement ID: #366) - if (_toolbarDoneBarButtonItemImage) - { - if ([toolbar.doneImage isEqual:_toolbarDoneBarButtonItemImage] == NO) - { - [textField addPreviousNextRightOnKeyboardWithTarget:self rightButtonImage:_toolbarDoneBarButtonItemImage previousAction:@selector(previousAction:) nextAction:@selector(nextAction:) rightButtonAction:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; - needReload = YES; - } - } - //Supporting Custom Done button text (Enhancement ID: #209, #411, Bug ID: #376) - else if (_toolbarDoneBarButtonItemText) - { - if ([toolbar.doneTitle isEqualToString:_toolbarDoneBarButtonItemText] == NO) - { - [textField addPreviousNextRightOnKeyboardWithTarget:self rightButtonTitle:_toolbarDoneBarButtonItemText previousAction:@selector(previousAction:) nextAction:@selector(nextAction:) rightButtonAction:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; - needReload = YES; - } - } - else if ((_toolbarDoneBarButtonItemText == nil && toolbar.doneTitle) || - (_toolbarDoneBarButtonItemImage == nil && toolbar.doneImage)) - { - //Now adding textField placeholder text as title of IQToolbar (Enhancement ID: #27) - [textField addPreviousNextDoneOnKeyboardWithTarget:self previousAction:@selector(previousAction:) nextAction:@selector(nextAction:) doneAction:@selector(doneAction:) shouldShowPlaceholder:_shouldShowTextFieldPlaceholder]; - needReload = YES; - } - textField.inputAccessoryView.tag = kIQPreviousNextButtonToolbarTag; // (Bug ID: #78) - } - - if (needReload) - { - [textField reloadInputViews]; - } - } - - if ([textField.inputAccessoryView isKindOfClass:[IQToolbar class]] && - textField.inputAccessoryView.tag == kIQPreviousNextButtonToolbarTag) - { - IQToolbar *toolbar = (IQToolbar*)[textField inputAccessoryView]; - - //Bar style according to keyboard appearance - if ([textField respondsToSelector:@selector(keyboardAppearance)]) - { - switch ([(UITextField*)textField keyboardAppearance]) - { - case UIKeyboardAppearanceAlert: - { - toolbar.barStyle = UIBarStyleBlack; - [toolbar setTintColor:[UIColor whiteColor]]; - } - break; - default: - { - toolbar.barStyle = UIBarStyleDefault; - - //Setting toolbar tintColor // (Enhancement ID: #30) - if (_shouldToolbarUsesTextFieldTintColor) - { - toolbar.tintColor = [textField tintColor]; - } - else if (_toolbarTintColor) - { - toolbar.tintColor = _toolbarTintColor; - } - else - { - toolbar.tintColor = [UIColor blackColor]; - } - } - break; - } - } - - //If need to show placeholder - if (_shouldShowTextFieldPlaceholder && - textField.shouldHidePlaceholderText == NO) - { - //Updating placeholder //(Bug ID: #148, #272) - if (toolbar.title == nil || - [toolbar.title isEqualToString:textField.drawingPlaceholderText] == NO) - { - [toolbar setTitle:textField.drawingPlaceholderText]; - } - - //Setting toolbar title font. // (Enhancement ID: #30) - if (_placeholderFont && - [_placeholderFont isKindOfClass:[UIFont class]]) - { - [toolbar setTitleFont:_placeholderFont]; - } - } - else - { - //Updating placeholder //(Bug ID: #272) - [toolbar setTitle:nil]; - } - - //In case of UITableView (Special), the next/previous buttons has to be refreshed everytime. (Bug ID: #56) - // If firstTextField, then previous should not be enabled. - if (siblings[0] == textField) - { - if (siblings.count == 1) - { - [textField setEnablePrevious:NO next:NO]; - } - else - { - [textField setEnablePrevious:NO next:YES]; - } - } - // If lastTextField then next should not be enaled. - else if ([siblings lastObject] == textField) - { - [textField setEnablePrevious:YES next:NO]; - } - else - { - [textField setEnablePrevious:YES next:YES]; - } - } - } - } - - CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; - [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime]]; -} - -/** Remove any toolbar if it is IQToolbar. */ --(void)removeToolbarIfRequired // (Bug ID: #18) -{ - CFTimeInterval startTime = CACurrentMediaTime(); - [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; - - // Getting all the sibling textFields. - NSArray *siblings = [self responderViews]; - - [self showLog:[NSString stringWithFormat:@"Found %lu responder sibling(s)",(unsigned long)siblings.count]]; - - for (UITextField *textField in siblings) - { - UIView *toolbar = [textField inputAccessoryView]; - - // (Bug ID: #78) - //setInputAccessoryView: check (Bug ID: #307) - if ([textField respondsToSelector:@selector(setInputAccessoryView:)] && - ([toolbar isKindOfClass:[IQToolbar class]] && (toolbar.tag == kIQDoneButtonToolbarTag || toolbar.tag == kIQPreviousNextButtonToolbarTag))) - { - textField.inputAccessoryView = nil; - } - } - - CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; - [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime]]; -} - -/** reloadInputViews to reload toolbar buttons enable/disable state on the fly Enhancement ID #434. */ -- (void)reloadInputViews -{ - //If enabled then adding toolbar. - if ([self privateIsEnableAutoToolbar] == YES) - { - [self addToolbarIfRequired]; - } - //Else removing toolbar. - else - { - [self removeToolbarIfRequired]; - } -} - -#pragma mark previous/next/done functionality -/** previousAction. */ --(void)previousAction:(IQBarButtonItem*)barButton -{ - //If user wants to play input Click sound. Then Play Input Click Sound. - if (_shouldPlayInputClicks) - { - [[UIDevice currentDevice] playInputClick]; - } - - if ([self canGoPrevious]) - { - UIView *textFieldRetain = _textFieldView; - - BOOL isAcceptAsFirstResponder = [self goPrevious]; - - if (isAcceptAsFirstResponder == YES && - textFieldRetain.previousInvocation) - { - [textFieldRetain.previousInvocation invoke]; - } - } -} - -/** nextAction. */ --(void)nextAction:(IQBarButtonItem*)barButton -{ - //If user wants to play input Click sound. Then Play Input Click Sound. - if (_shouldPlayInputClicks) - { - [[UIDevice currentDevice] playInputClick]; - } - - if ([self canGoNext]) - { - UIView *textFieldRetain = _textFieldView; - - BOOL isAcceptAsFirstResponder = [self goNext]; - - if (isAcceptAsFirstResponder == YES && - textFieldRetain.nextInvocation) - { - [textFieldRetain.nextInvocation invoke]; - } - } -} - -/** doneAction. Resigning current textField. */ --(void)doneAction:(IQBarButtonItem*)barButton -{ - //If user wants to play input Click sound. Then Play Input Click Sound. - if (_shouldPlayInputClicks) - { - [[UIDevice currentDevice] playInputClick]; - } - - UIView *textFieldRetain = _textFieldView; - - BOOL isResignedFirstResponder = [self resignFirstResponder]; - - if (isResignedFirstResponder == YES && - textFieldRetain.doneInvocation) - { - [textFieldRetain.doneInvocation invoke]; - } -} - -#pragma mark - Customised textField/textView support. - -/** - Add customised Notification for third party customised TextField/TextView. - */ --(void)registerTextFieldViewClass:(nonnull Class)aClass - didBeginEditingNotificationName:(nonnull NSString *)didBeginEditingNotificationName - didEndEditingNotificationName:(nonnull NSString *)didEndEditingNotificationName -{ - [_registeredClasses addObject:aClass]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldViewDidBeginEditing:) name:didBeginEditingNotificationName object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldViewDidEndEditing:) name:didEndEditingNotificationName object:nil]; -} - -/** - Remove customised Notification for third party customised TextField/TextView. - */ --(void)unregisterTextFieldViewClass:(nonnull Class)aClass - didBeginEditingNotificationName:(nonnull NSString *)didBeginEditingNotificationName - didEndEditingNotificationName:(nonnull NSString *)didEndEditingNotificationName -{ - [_registeredClasses removeObject:aClass]; - - [[NSNotificationCenter defaultCenter] removeObserver:self name:didBeginEditingNotificationName object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:didEndEditingNotificationName object:nil]; -} - --(void)registerAllNotifications -{ - // Registering for keyboard notification. - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil]; - - // Registering for UITextField notification. - [self registerTextFieldViewClass:[UITextField class] - didBeginEditingNotificationName:UITextFieldTextDidBeginEditingNotification - didEndEditingNotificationName:UITextFieldTextDidEndEditingNotification]; - - // Registering for UITextView notification. - [self registerTextFieldViewClass:[UITextView class] - didBeginEditingNotificationName:UITextViewTextDidBeginEditingNotification - didEndEditingNotificationName:UITextViewTextDidEndEditingNotification]; - - // Registering for orientation changes notification - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willChangeStatusBarOrientation:) name:UIApplicationWillChangeStatusBarOrientationNotification object:[UIApplication sharedApplication]]; - - // Registering for status bar frame change notification - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didChangeStatusBarFrame:) name:UIApplicationDidChangeStatusBarFrameNotification object:[UIApplication sharedApplication]]; -} - --(void)unregisterAllNotifications -{ - // Unregistering for keyboard notification. - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil]; - - // Unregistering for UITextField notification. - [self unregisterTextFieldViewClass:[UITextField class] - didBeginEditingNotificationName:UITextFieldTextDidBeginEditingNotification - didEndEditingNotificationName:UITextFieldTextDidEndEditingNotification]; - - // Unregistering for UITextView notification. - [self unregisterTextFieldViewClass:[UITextView class] - didBeginEditingNotificationName:UITextViewTextDidBeginEditingNotification - didEndEditingNotificationName:UITextViewTextDidEndEditingNotification]; - - // Unregistering for orientation changes notification - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillChangeStatusBarOrientationNotification object:[UIApplication sharedApplication]]; - - // Unregistering for status bar frame change notification - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidChangeStatusBarFrameNotification object:[UIApplication sharedApplication]]; -} - --(void)showLog:(NSString*)logString -{ - if (_enableDebugging) - { - NSLog(@"IQKeyboardManager: %@",logString); - } -} - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardReturnKeyHandler.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardReturnKeyHandler.h deleted file mode 100644 index 64eb1aa..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardReturnKeyHandler.h +++ /dev/null @@ -1,99 +0,0 @@ -// -// IQKeyboardReturnKeyHandler.h -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "IQKeyboardManagerConstants.h" - -#import -#import - -#import -#import - -@class UITextField,UIView, UIViewController; - -/** - Manages the return key to work like next/done in a view hierarchy. - */ -@interface IQKeyboardReturnKeyHandler : NSObject - -///---------------------- -/// @name Initializations -///---------------------- - -/** - Add all the textFields available in UIViewController's view. - */ --(nonnull instancetype)initWithViewController:(nullable UIViewController*)controller NS_DESIGNATED_INITIALIZER; - -/** - Unavailable. Please use initWithViewController: or init method - */ --(nonnull instancetype)initWithCoder:(nullable NSCoder *)aDecoder NS_UNAVAILABLE; - -///--------------- -/// @name Settings -///--------------- - -/** - Delegate of textField/textView. - */ -@property(nullable, nonatomic, weak) id delegate; - -/** - Set the last textfield return key type. Default is UIReturnKeyDefault. - */ -@property(nonatomic, assign) UIReturnKeyType lastTextFieldReturnKeyType; - -///---------------------------------------------- -/// @name Registering/Unregistering textFieldView -///---------------------------------------------- - -/** - Should pass UITextField/UITextView instance. Assign textFieldView delegate to self, change it's returnKeyType. - - @param textFieldView UITextField/UITextView object to register. - */ --(void)addTextFieldView:(nonnull UIView*)textFieldView; - -/** - Should pass UITextField/UITextView instance. Restore it's textFieldView delegate and it's returnKeyType. - - @param textFieldView UITextField/UITextView object to unregister. - */ --(void)removeTextFieldView:(nonnull UIView*)textFieldView; - -/** - Add all the UITextField/UITextView responderView's. - - @param view object to register all it's responder subviews. - */ --(void)addResponderFromView:(nonnull UIView*)view; - -/** - Remove all the UITextField/UITextView responderView's. - - @param view object to unregister all it's responder subviews. - */ --(void)removeResponderFromView:(nonnull UIView*)view; - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardReturnKeyHandler.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardReturnKeyHandler.m deleted file mode 100644 index 408e01e..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQKeyboardReturnKeyHandler.m +++ /dev/null @@ -1,590 +0,0 @@ -// -// IQKeyboardReturnKeyHandler.m -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "IQKeyboardReturnKeyHandler.h" -#import "IQKeyboardManager.h" -#import "IQUIView+Hierarchy.h" -#import "IQNSArray+Sort.h" - -#import - -#import -#import -#import - -NSString *const kIQTextField = @"kIQTextField"; -NSString *const kIQTextFieldDelegate = @"kIQTextFieldDelegate"; -NSString *const kIQTextFieldReturnKeyType = @"kIQTextFieldReturnKeyType"; - - -@interface IQKeyboardReturnKeyHandler () - --(void)updateReturnKeyTypeOnTextField:(UIView*)textField; - -@end - -@implementation IQKeyboardReturnKeyHandler -{ - NSMutableSet *textFieldInfoCache; -} - -@synthesize lastTextFieldReturnKeyType = _lastTextFieldReturnKeyType; -@synthesize delegate = _delegate; - -- (instancetype)init -{ - self = [self initWithViewController:nil]; - return self; -} - --(instancetype)initWithViewController:(nullable UIViewController*)controller -{ - self = [super init]; - - if (self) - { - textFieldInfoCache = [[NSMutableSet alloc] init]; - - if (controller.view) - { - [self addResponderFromView:controller.view]; - } - } - - return self; -} - --(NSDictionary*)textFieldViewCachedInfo:(UIView*)textField -{ - for (NSDictionary *infoDict in textFieldInfoCache) - if (infoDict[kIQTextField] == textField) return infoDict; - - return nil; -} - -#pragma mark - Add/Remove TextFields --(void)addResponderFromView:(UIView*)view -{ - NSArray *textFields = [view deepResponderViews]; - - for (UIView *textField in textFields) [self addTextFieldView:textField]; -} - --(void)removeResponderFromView:(UIView*)view -{ - NSArray *textFields = [view deepResponderViews]; - - for (UIView *textField in textFields) [self removeTextFieldView:textField]; -} - --(void)removeTextFieldView:(UIView*)view -{ - NSDictionary *dict = [self textFieldViewCachedInfo:view]; - - if (dict) - { - if ([view isKindOfClass:[UITextField class]] || [view isKindOfClass:[UITextView class]]) - { - UITextField *textField = (UITextField*)view; - textField.returnKeyType = (UIReturnKeyType)[dict[kIQTextFieldReturnKeyType] integerValue]; - textField.delegate = dict[kIQTextFieldDelegate]; - } - [textFieldInfoCache removeObject:dict]; - } -} - --(void)addTextFieldView:(UIView*)view -{ - NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; - - dict[kIQTextField] = view; - - if ([view isKindOfClass:[UITextField class]] || [view isKindOfClass:[UITextView class]]) - { - UITextField *textField = (UITextField*)view; - dict[kIQTextFieldReturnKeyType] = @(textField.returnKeyType); - if (textField.delegate) dict[kIQTextFieldDelegate] = textField.delegate; - [textField setDelegate:self]; - } - - [textFieldInfoCache addObject:dict]; -} - --(void)updateReturnKeyTypeOnTextField:(UIView*)textField -{ - UIView *superConsideredView; - - //If find any consider responderView in it's upper hierarchy then will get deepResponderView. (Bug ID: #347) - for (Class consideredClass in [[IQKeyboardManager sharedManager] toolbarPreviousNextAllowedClasses]) - { - superConsideredView = [textField superviewOfClassType:consideredClass]; - - if (superConsideredView != nil) - break; - } - - NSArray *textFields = nil; - - //If there is a tableView in view's hierarchy, then fetching all it's subview that responds. No sorting for tableView, it's by subView position. - if (superConsideredView) // // (Enhancement ID: #22) - { - textFields = [superConsideredView deepResponderViews]; - } - //Otherwise fetching all the siblings - else - { - textFields = [textField responderSiblings]; - - //Sorting textFields according to behaviour - switch ([[IQKeyboardManager sharedManager] toolbarManageBehaviour]) - { - //If needs to sort it by tag - case IQAutoToolbarByTag: - textFields = [textFields sortedArrayByTag]; - break; - - //If needs to sort it by Position - case IQAutoToolbarByPosition: - textFields = [textFields sortedArrayByPosition]; - break; - - default: - break; - } - } - - //If it's the last textField in responder view, else next - [(UITextField*)textField setReturnKeyType:(([textFields lastObject] == textField) ? self.lastTextFieldReturnKeyType : UIReturnKeyNext)]; -} - -#pragma mark - Goto next or Resign. - --(BOOL)goToNextResponderOrResign:(UIView*)textField -{ - UIView *superConsideredView; - - //If find any consider responderView in it's upper hierarchy then will get deepResponderView. (Bug ID: #347) - for (Class consideredClass in [[IQKeyboardManager sharedManager] toolbarPreviousNextAllowedClasses]) - { - superConsideredView = [textField superviewOfClassType:consideredClass]; - - if (superConsideredView != nil) - break; - } - - NSArray *textFields = nil; - - //If there is a tableView in view's hierarchy, then fetching all it's subview that responds. No sorting for tableView, it's by subView position. - if (superConsideredView) // // (Enhancement ID: #22) - { - textFields = [superConsideredView deepResponderViews]; - } - //Otherwise fetching all the siblings - else - { - textFields = [textField responderSiblings]; - - //Sorting textFields according to behaviour - switch ([[IQKeyboardManager sharedManager] toolbarManageBehaviour]) - { - //If needs to sort it by tag - case IQAutoToolbarByTag: - textFields = [textFields sortedArrayByTag]; - break; - - //If needs to sort it by Position - case IQAutoToolbarByPosition: - textFields = [textFields sortedArrayByPosition]; - break; - - default: - break; - } - } - - //Getting index of current textField. - NSUInteger index = [textFields indexOfObject:textField]; - - //If it is not last textField. then it's next object becomeFirstResponder. - if (index != NSNotFound && index < textFields.count-1) - { - [textFields[index+1] becomeFirstResponder]; - return NO; - } - else - { - [textField resignFirstResponder]; - return YES; - } -} - -#pragma mark - TextField delegate -- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField -{ - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textField]; - delegate = dict[kIQTextFieldDelegate]; - } - - if ([delegate respondsToSelector:@selector(textFieldShouldBeginEditing:)]) - return [delegate textFieldShouldBeginEditing:textField]; - else - return YES; -} - -- (void)textFieldDidBeginEditing:(UITextField *)textField -{ - [self updateReturnKeyTypeOnTextField:textField]; - - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textField]; - delegate = dict[kIQTextFieldDelegate]; - } - - if ([delegate respondsToSelector:@selector(textFieldDidBeginEditing:)]) - [delegate textFieldDidBeginEditing:textField]; -} - -- (BOOL)textFieldShouldEndEditing:(UITextField *)textField -{ - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textField]; - delegate = dict[kIQTextFieldDelegate]; - } - - if ([delegate respondsToSelector:@selector(textFieldShouldEndEditing:)]) - return [delegate textFieldShouldEndEditing:textField]; - else - return YES; -} - -- (void)textFieldDidEndEditing:(UITextField *)textField -{ - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textField]; - delegate = dict[kIQTextFieldDelegate]; - } - - if ([delegate respondsToSelector:@selector(textFieldDidEndEditing:)]) - [delegate textFieldDidEndEditing:textField]; -} - -//Xcode8, compile validation -#ifdef NSFoundationVersionNumber_iOS_9_x_Max - -- (void)textFieldDidEndEditing:(UITextField *)textField reason:(UITextFieldDidEndEditingReason)reason -{ - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textField]; - delegate = dict[kIQTextFieldDelegate]; - } - - if ([delegate respondsToSelector:@selector(textFieldDidEndEditing:reason:)]) - [delegate textFieldDidEndEditing:textField reason:reason]; -} - -#endif - - -- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string -{ - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textField]; - delegate = dict[kIQTextFieldDelegate]; - } - - if ([delegate respondsToSelector:@selector(textField:shouldChangeCharactersInRange:replacementString:)]) - return [delegate textField:textField shouldChangeCharactersInRange:range replacementString:string]; - else - return YES; -} - -- (BOOL)textFieldShouldClear:(UITextField *)textField -{ - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textField]; - delegate = dict[kIQTextFieldDelegate]; - } - - if ([delegate respondsToSelector:@selector(textFieldShouldClear:)]) - return [delegate textFieldShouldClear:textField]; - else - return YES; -} - --(BOOL)textFieldShouldReturn:(UITextField *)textField -{ - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textField]; - delegate = dict[kIQTextFieldDelegate]; - } - - if ([delegate respondsToSelector:@selector(textFieldShouldReturn:)]) - { - BOOL shouldReturn = [delegate textFieldShouldReturn:textField]; - - if (shouldReturn) - { - shouldReturn = [self goToNextResponderOrResign:textField]; - } - - return shouldReturn; - } - else - { - return [self goToNextResponderOrResign:textField]; - } -} - - -#pragma mark - TextView delegate -- (BOOL)textViewShouldBeginEditing:(UITextView *)textView -{ - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textView]; - delegate = dict[kIQTextFieldDelegate]; - } - - if ([delegate respondsToSelector:@selector(textViewShouldBeginEditing:)]) - return [delegate textViewShouldBeginEditing:textView]; - else - return YES; -} - -- (BOOL)textViewShouldEndEditing:(UITextView *)textView -{ - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textView]; - delegate = dict[kIQTextFieldDelegate]; - } - - if ([delegate respondsToSelector:@selector(textViewShouldEndEditing:)]) - return [delegate textViewShouldEndEditing:textView]; - else - return YES; -} - -- (void)textViewDidBeginEditing:(UITextView *)textView -{ - [self updateReturnKeyTypeOnTextField:textView]; - - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textView]; - delegate = dict[kIQTextFieldDelegate]; - } - - if ([delegate respondsToSelector:@selector(textViewDidBeginEditing:)]) - [delegate textViewDidBeginEditing:textView]; -} - -- (void)textViewDidEndEditing:(UITextView *)textView -{ - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textView]; - delegate = dict[kIQTextFieldDelegate]; - } - - if ([delegate respondsToSelector:@selector(textViewDidEndEditing:)]) - [delegate textViewDidEndEditing:textView]; -} - -- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text -{ - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textView]; - delegate = dict[kIQTextFieldDelegate]; - } - - BOOL shouldReturn = YES; - - if ([delegate respondsToSelector:@selector(textView:shouldChangeTextInRange:replacementText:)]) - shouldReturn = [delegate textView:textView shouldChangeTextInRange:range replacementText:text]; - - if (shouldReturn && [text isEqualToString:@"\n"]) - { - shouldReturn = [self goToNextResponderOrResign:textView]; - } - - return shouldReturn; -} - -- (void)textViewDidChange:(UITextView *)textView -{ - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textView]; - delegate = dict[kIQTextFieldDelegate]; - } - - if ([delegate respondsToSelector:@selector(textViewDidChange:)]) - [delegate textViewDidChange:textView]; -} - -- (void)textViewDidChangeSelection:(UITextView *)textView -{ - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textView]; - delegate = dict[kIQTextFieldDelegate]; - } - - if ([delegate respondsToSelector:@selector(textViewDidChangeSelection:)]) - [delegate textViewDidChangeSelection:textView]; -} - -//Xcode8, compile validation -#ifdef NSFoundationVersionNumber_iOS_9_x_Max - -- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange interaction:(UITextItemInteraction)interaction -{ - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textView]; - delegate = dict[kIQTextFieldDelegate]; - } - - if ([delegate respondsToSelector:@selector(textView:shouldInteractWithURL:inRange:interaction:)]) - return [delegate textView:textView shouldInteractWithURL:URL inRange:characterRange interaction:interaction]; - else - return YES; -} - -- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange interaction:(UITextItemInteraction)interaction -{ - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textView]; - delegate = dict[kIQTextFieldDelegate]; - } - - if ([delegate respondsToSelector:@selector(textView:shouldInteractWithTextAttachment:inRange:interaction:)]) - return [delegate textView:textView shouldInteractWithTextAttachment:textAttachment inRange:characterRange interaction:interaction]; - else - return YES; -} - -#endif - -- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange -{ - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textView]; - delegate = dict[kIQTextFieldDelegate]; - } - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if ([delegate respondsToSelector:@selector(textView:shouldInteractWithURL:inRange:)]) - return [delegate textView:textView shouldInteractWithURL:URL inRange:characterRange]; -#pragma clang diagnostic pop - else - return YES; -} - -- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange -{ - id delegate = self.delegate; - - if (delegate == nil) - { - NSDictionary *dict = [self textFieldViewCachedInfo:textView]; - delegate = dict[kIQTextFieldDelegate]; - } - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if ([delegate respondsToSelector:@selector(textView:shouldInteractWithTextAttachment:inRange:)]) - return [delegate textView:textView shouldInteractWithTextAttachment:textAttachment inRange:characterRange]; -#pragma clang diagnostic pop - else - return YES; -} - --(void)dealloc -{ - for (NSDictionary *dict in textFieldInfoCache) - { - UIView *view = dict[kIQTextField]; - - if ([view isKindOfClass:[UITextField class]] || [view isKindOfClass:[UITextView class]]) - { - UITextField *textField = (UITextField*)view; - textField.returnKeyType = (UIReturnKeyType)[dict[kIQTextFieldReturnKeyType] integerValue]; - textField.delegate = dict[kIQTextFieldDelegate]; - } - } - - [textFieldInfoCache removeAllObjects]; -} - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQSegmentedNextPrevious/IQSegmentedNextPrevious.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQSegmentedNextPrevious/IQSegmentedNextPrevious.h deleted file mode 100644 index 3850bfd..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQSegmentedNextPrevious/IQSegmentedNextPrevious.h +++ /dev/null @@ -1,62 +0,0 @@ -// -// IQSegmentedNextPrevious.h -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "IQKeyboardManagerConstants.h" - -#import - -#import - -#if !(__has_feature(objc_instancetype)) - #define instancetype id -#endif - - -/** - Custom SegmentedControl for Previous/Next button. - - @deprecated Deprecated in iOS 7 - */ -@interface IQSegmentedNextPrevious : UISegmentedControl - -/** - Initialization function for IQSegmentedNextPrevious. - - @param target Target object for selector. Usually 'self'. - @param previousAction Previous button action name. Usually 'previousAction:(IQSegmentedNextPrevious*)segmentedControl'. - @param nextAction Next button action name. Usually 'nextAction:(IQSegmentedNextPrevious*)segmentedControl'. - */ -- (instancetype)initWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction NS_DESIGNATED_INITIALIZER; - -/** - initWithTarget:previousAction:nextAction should be used. - */ -- (instancetype)init __attribute__((unavailable("init is not available, should use initWithTarget:previousAction:nextAction instead"))); - -/** - initWithTarget:previousAction:nextAction should be used. - */ -+ (instancetype)new __attribute__((unavailable("new is not available, should use initWithTarget:previousAction:nextAction instead"))); - -@end - diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQSegmentedNextPrevious/IQSegmentedNextPrevious.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQSegmentedNextPrevious/IQSegmentedNextPrevious.m deleted file mode 100644 index 2b293d3..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQSegmentedNextPrevious/IQSegmentedNextPrevious.m +++ /dev/null @@ -1,102 +0,0 @@ -// -// IQSegmentedNextPrevious.m -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "IQSegmentedNextPrevious.h" -#import "IQKeyboardManagerConstantsInternal.h" -#import - -@interface IQSegmentedNextPrevious () - -// UISegmentedControl selector for value change. -- (void)segmentedControlHandler:(IQSegmentedNextPrevious*)sender; - -@end - - -@implementation IQSegmentedNextPrevious -{ - id buttonTarget; - SEL previousSelector; - SEL nextSelector; -} - -// Initialize method --(instancetype)initWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction -{ - // Creating it with two items, Previous/Next. - self = [super initWithItems:[NSArray arrayWithObjects:IQLocalizedString(@"Previous", nil),IQLocalizedString(@"Next", nil), nil]]; - - if (self) - { - if (IQ_IS_IOS7_OR_GREATER == NO) - { -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - [self setSegmentedControlStyle:UISegmentedControlStyleBar]; -#pragma GCC diagnostic pop - } - - [self setMomentary:YES]; - [self setTintColor:[UIColor blackColor]]; - // Adding self as it's valueChange selector. - [self addTarget:self action:@selector(segmentedControlHandler:) forControlEvents:UIControlEventValueChanged]; - - // Setting target and selectors. - buttonTarget = target; - previousSelector = previousAction; - nextSelector = nextAction; - } - return self; -} - -// Value has changed -- (void)segmentedControlHandler:(IQSegmentedNextPrevious*)sender -{ - // Switching to selected segmenteIndex. - switch ([sender selectedSegmentIndex]) - { - // Previous selected. - case 0: - { - // Invoking selector. - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[[buttonTarget class] instanceMethodSignatureForSelector:previousSelector]]; - invocation.target = buttonTarget; - invocation.selector = previousSelector; - [invocation invoke]; - } - break; - // Next selected. - case 1: - { - // Invoking selector. - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[[buttonTarget class] instanceMethodSignatureForSelector:nextSelector]]; - invocation.target = buttonTarget; - invocation.selector = nextSelector; - [invocation invoke]; - } - default: - break; - } -} - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQTextView/IQTextView.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQTextView/IQTextView.h deleted file mode 100644 index c8ec931..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQTextView/IQTextView.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// IQTextView.h -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "IQKeyboardManagerConstants.h" - -#import - -/** - UITextView with placeholder support - */ -@interface IQTextView : UITextView - -/** - Set textView's placeholder text. Default is nil. - */ -@property(nullable, nonatomic,copy) IBInspectable NSString *placeholder; - -@end - - - - diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQTextView/IQTextView.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQTextView/IQTextView.m deleted file mode 100644 index 053037f..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQTextView/IQTextView.m +++ /dev/null @@ -1,143 +0,0 @@ -// -// IQTextView.m -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "IQTextView.h" - -#import -#import - -@interface IQTextView () - --(void)refreshPlaceholder; - -@end - -@implementation IQTextView -{ - UILabel *placeHolderLabel; -} - -@synthesize placeholder = _placeholder; - --(void)initialize -{ - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshPlaceholder) name:UITextViewTextDidChangeNotification object:self]; -} - --(void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (instancetype)init -{ - self = [super init]; - if (self) { - [self initialize]; - } - return self; -} - --(void)awakeFromNib -{ - [super awakeFromNib]; - [self initialize]; -} - --(void)refreshPlaceholder -{ - if([[self text] length]) - { - [placeHolderLabel setAlpha:0]; - } - else - { - [placeHolderLabel setAlpha:1]; - } - - [self setNeedsLayout]; - [self layoutIfNeeded]; -} - -- (void)setText:(NSString *)text -{ - [super setText:text]; - [self refreshPlaceholder]; -} - --(void)setFont:(UIFont *)font -{ - [super setFont:font]; - placeHolderLabel.font = self.font; - - [self setNeedsLayout]; - [self layoutIfNeeded]; -} - --(void)setTextAlignment:(NSTextAlignment)textAlignment -{ - [super setTextAlignment:textAlignment]; - placeHolderLabel.textAlignment = textAlignment; - - [self setNeedsLayout]; - [self layoutIfNeeded]; -} - --(void)layoutSubviews -{ - [super layoutSubviews]; - - [placeHolderLabel sizeToFit]; - placeHolderLabel.frame = CGRectMake(4, 8, CGRectGetWidth(self.frame)-16, CGRectGetHeight(placeHolderLabel.frame)); -} - --(void)setPlaceholder:(NSString *)placeholder -{ - _placeholder = placeholder; - - if ( placeHolderLabel == nil ) - { - placeHolderLabel = [[UILabel alloc] init]; - placeHolderLabel.autoresizingMask = (UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight); - placeHolderLabel.lineBreakMode = NSLineBreakByWordWrapping; - placeHolderLabel.numberOfLines = 0; - placeHolderLabel.font = self.font; - placeHolderLabel.textAlignment = self.textAlignment; - placeHolderLabel.backgroundColor = [UIColor clearColor]; - placeHolderLabel.textColor = [UIColor colorWithWhite:0.7 alpha:1.0]; - placeHolderLabel.alpha = 0; - [self addSubview:placeHolderLabel]; - } - - placeHolderLabel.text = self.placeholder; - [self refreshPlaceholder]; -} - -//When any text changes on textField, the delegate getter is called. At this time we refresh the textView's placeholder --(id)delegate -{ - [self refreshPlaceholder]; - return [super delegate]; -} - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQBarButtonItem.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQBarButtonItem.h deleted file mode 100644 index a8a7799..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQBarButtonItem.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// IQBarButtonItem.h -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - - -#import - -/** - IQBarButtonItem used for IQToolbar. - */ -@interface IQBarButtonItem : UIBarButtonItem - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQBarButtonItem.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQBarButtonItem.m deleted file mode 100644 index 3f68575..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQBarButtonItem.m +++ /dev/null @@ -1,81 +0,0 @@ -// -// IQBarButtonItem.m -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "IQBarButtonItem.h" -#import "IQKeyboardManagerConstantsInternal.h" - -@implementation IQBarButtonItem - -+(void)initialize -{ - [super initialize]; - - //Tint color - [[self appearance] setTintColor:nil]; - - //Title - [[self appearance] setTitlePositionAdjustment:UIOffsetZero forBarMetrics:UIBarMetricsDefault]; - [[self appearance] setTitleTextAttributes:nil forState:UIControlStateNormal]; - [[self appearance] setTitleTextAttributes:nil forState:UIControlStateHighlighted]; - [[self appearance] setTitleTextAttributes:nil forState:UIControlStateDisabled]; - [[self appearance] setTitleTextAttributes:nil forState:UIControlStateSelected]; - [[self appearance] setTitleTextAttributes:nil forState:UIControlStateApplication]; - [[self appearance] setTitleTextAttributes:nil forState:UIControlStateReserved]; - - //Background Image - [[self appearance] setBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackgroundImage:nil forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackgroundImage:nil forState:UIControlStateDisabled barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackgroundImage:nil forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackgroundImage:nil forState:UIControlStateApplication barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackgroundImage:nil forState:UIControlStateReserved barMetrics:UIBarMetricsDefault]; - - [[self appearance] setBackgroundImage:nil forState:UIControlStateNormal style:UIBarButtonItemStyleDone barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackgroundImage:nil forState:UIControlStateHighlighted style:UIBarButtonItemStyleDone barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackgroundImage:nil forState:UIControlStateDisabled style:UIBarButtonItemStyleDone barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackgroundImage:nil forState:UIControlStateSelected style:UIBarButtonItemStyleDone barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackgroundImage:nil forState:UIControlStateApplication style:UIBarButtonItemStyleDone barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackgroundImage:nil forState:UIControlStateReserved style:UIBarButtonItemStyleDone barMetrics:UIBarMetricsDefault]; - - [[self appearance] setBackgroundImage:nil forState:UIControlStateNormal style:UIBarButtonItemStylePlain barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackgroundImage:nil forState:UIControlStateHighlighted style:UIBarButtonItemStylePlain barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackgroundImage:nil forState:UIControlStateDisabled style:UIBarButtonItemStylePlain barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackgroundImage:nil forState:UIControlStateSelected style:UIBarButtonItemStylePlain barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackgroundImage:nil forState:UIControlStateApplication style:UIBarButtonItemStylePlain barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackgroundImage:nil forState:UIControlStateReserved style:UIBarButtonItemStylePlain barMetrics:UIBarMetricsDefault]; - - [[self appearance] setBackgroundVerticalPositionAdjustment:0 forBarMetrics:UIBarMetricsDefault]; - - //Back Button - [[self appearance] setBackButtonBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackButtonBackgroundImage:nil forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackButtonBackgroundImage:nil forState:UIControlStateDisabled barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackButtonBackgroundImage:nil forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackButtonBackgroundImage:nil forState:UIControlStateApplication barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackButtonBackgroundImage:nil forState:UIControlStateReserved barMetrics:UIBarMetricsDefault]; - - [[self appearance] setBackButtonTitlePositionAdjustment:UIOffsetZero forBarMetrics:UIBarMetricsDefault]; - [[self appearance] setBackButtonBackgroundVerticalPositionAdjustment:0 forBarMetrics:UIBarMetricsDefault]; -} - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.h deleted file mode 100644 index 9e31cd9..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.h +++ /dev/null @@ -1,78 +0,0 @@ -// -// IQTitleBarButtonItem.h -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import -#import "IQKeyboardManagerConstants.h" -#import "IQBarButtonItem.h" - -/** - BarButtonItem with title text. - */ -@interface IQTitleBarButtonItem : IQBarButtonItem - -/** - Font to be used in bar button. Default is (system font 12.0 bold). - */ -@property(nullable, nonatomic, strong) UIFont *font; - -/** - selectableTextColor to be used for displaying button text when button is enabled. - */ -@property(nullable, nonatomic, strong) UIColor *selectableTextColor; - -/** - Initialize with frame and title. - - @param title Title of barButtonItem. - */ --(nonnull instancetype)initWithTitle:(nullable NSString *)title NS_DESIGNATED_INITIALIZER; - -/** - Optional target & action to behave toolbar title button as clickable button - - @param target Target object. - @param action Target Selector. - */ --(void)setTitleTarget:(nullable id)target action:(nullable SEL)action; - -/** - Customized Invocation to be called on title button action. titleInvocation is internally created using setTitleTarget:action: method. - */ -@property (nullable, strong, nonatomic) NSInvocation *titleInvocation; - -/** - Unavailable. Please use initWithFrame:title: method - */ --(nonnull instancetype)init NS_UNAVAILABLE; - -/** - Unavailable. Please use initWithFrame:title: method - */ --(nonnull instancetype)initWithCoder:(nullable NSCoder *)aDecoder NS_UNAVAILABLE; - -/** - Unavailable. Please use initWithFrame:title: method - */ -+ (nonnull instancetype)new NS_UNAVAILABLE; - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.m deleted file mode 100644 index 8f372fe..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQTitleBarButtonItem.m +++ /dev/null @@ -1,121 +0,0 @@ -// -// IQTitleBarButtonItem.m -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "IQTitleBarButtonItem.h" -#import "IQKeyboardManagerConstants.h" -#import "IQKeyboardManagerConstantsInternal.h" -#import -#import - -@implementation IQTitleBarButtonItem -{ - UIView *_titleView; - UIButton *_titleButton; -} -@synthesize font = _font; - - --(nonnull instancetype)initWithTitle:(nullable NSString *)title -{ - self = [super init]; - if (self) - { - _titleView = [[UIView alloc] init]; - _titleView.backgroundColor = [UIColor clearColor]; - _titleView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - - _titleButton = [UIButton buttonWithType:UIButtonTypeSystem]; - _titleButton.enabled = NO; - _titleButton.titleLabel.numberOfLines = 3; - [_titleButton setTitleColor:[UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:1.0] forState:UIControlStateNormal]; - [_titleButton setTitleColor:[UIColor lightGrayColor] forState:UIControlStateDisabled]; - [_titleButton setBackgroundColor:[UIColor clearColor]]; - [_titleButton.titleLabel setTextAlignment:NSTextAlignmentCenter]; - _titleButton.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - [self setTitle:title]; - [self setFont:[UIFont systemFontOfSize:13.0]]; - [_titleView addSubview:_titleButton]; - self.customView = _titleView; - } - return self; -} - --(void)setFont:(UIFont *)font -{ - _font = font; - - if (font) - { - _titleButton.titleLabel.font = font; - } - else - { - _titleButton.titleLabel.font = [UIFont systemFontOfSize:13]; - } -} - --(void)setTitle:(NSString *)title -{ - [super setTitle:title]; - [_titleButton setTitle:title forState:UIControlStateNormal]; -} - --(void)setSelectableTextColor:(UIColor*)selectableTextColor -{ - _selectableTextColor = selectableTextColor; - [_titleButton setTitleColor:_selectableTextColor forState:UIControlStateNormal]; -} - --(void)setTitleTarget:(nullable id)target action:(nullable SEL)action -{ - NSInvocation *invocation = nil; - - if (target && action) - { - invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:action]]; - invocation.target = target; - invocation.selector = action; - } - - self.titleInvocation = invocation; -} - --(void)setTitleInvocation:(NSInvocation*)invocation -{ - _titleInvocation = invocation; - - if (_titleInvocation.target == nil || _titleInvocation.selector == NULL) - { - self.enabled = NO; - _titleButton.enabled = NO; - [_titleButton removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside]; - } - else - { - self.enabled = YES; - _titleButton.enabled = YES; - [_titleButton addTarget:_titleInvocation.target action:_titleInvocation.selector forControlEvents:UIControlEventTouchUpInside]; - } -} - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQToolbar.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQToolbar.h deleted file mode 100644 index c9d27b7..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQToolbar.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// IQToolbar.h -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import - -/** - IQToolbar for IQKeyboardManager. - */ -@interface IQToolbar : UIToolbar - -/** - Title font for toolbar. - */ -@property(nullable, nonatomic, strong) UIFont *titleFont; - -/** - Toolbar done title - */ -@property(nullable, nonatomic, strong) NSString *doneTitle; - -/** - Toolbar done image - */ -@property(nullable, nonatomic, strong) UIImage *doneImage; - -/** - Toolbar title - */ -@property(nullable, nonatomic, strong) NSString *title; - -/** - Optional target & action to behave toolbar title button as clickable button - - @param target Target object. - @param action Target Selector. - */ --(void)setTitleTarget:(nullable id)target action:(nullable SEL)action; - -/** - Customized Invocation to be called on title button action. titleInvocation is internally created using setTitleTarget:action: method. - */ -@property (nullable, strong, nonatomic) NSInvocation *titleInvocation; - -@end - diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQToolbar.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQToolbar.m deleted file mode 100644 index b9d6b8c..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQToolbar.m +++ /dev/null @@ -1,257 +0,0 @@ -// -// IQToolbar.m -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#import "IQToolbar.h" -#import "IQKeyboardManagerConstantsInternal.h" -#import "IQTitleBarButtonItem.h" -#import "IQUIView+Hierarchy.h" - -#import - -@implementation IQToolbar -@synthesize titleFont = _titleFont; -@synthesize title = _title; - -+(void)initialize -{ - [super initialize]; - - //Tint Color - [[self appearance] setTintColor:nil]; - - [[self appearance] setBarTintColor:nil]; - - //Background image - [[self appearance] setBackgroundImage:nil forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackgroundImage:nil forToolbarPosition:UIBarPositionBottom barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackgroundImage:nil forToolbarPosition:UIBarPositionTop barMetrics:UIBarMetricsDefault]; - [[self appearance] setBackgroundImage:nil forToolbarPosition:UIBarPositionTopAttached barMetrics:UIBarMetricsDefault]; - - //Shadow image - [[self appearance] setShadowImage:nil forToolbarPosition:UIBarPositionAny]; - [[self appearance] setShadowImage:nil forToolbarPosition:UIBarPositionBottom]; - [[self appearance] setShadowImage:nil forToolbarPosition:UIBarPositionTop]; - [[self appearance] setShadowImage:nil forToolbarPosition:UIBarPositionTopAttached]; - - //Background color - [[self appearance] setBackgroundColor:nil]; -} - --(void)initialize -{ - [self sizeToFit]; - self.autoresizingMask = UIViewAutoresizingFlexibleWidth;// | UIViewAutoresizingFlexibleHeight; - self.translucent = YES; - [self setTintColor:[UIColor blackColor]]; -} - -- (instancetype)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) - { - [self initialize]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)coder -{ - self = [super initWithCoder:coder]; - if (self) - { - [self initialize]; - } - return self; -} - --(CGSize)sizeThatFits:(CGSize)size -{ - CGSize sizeThatFit = [super sizeThatFits:size]; - - sizeThatFit.height = 44; - - return sizeThatFit; -} - --(void)setBarStyle:(UIBarStyle)barStyle -{ - [super setBarStyle:barStyle]; - - for (UIBarButtonItem *item in self.items) - { - if ([item isKindOfClass:[IQTitleBarButtonItem class]]) - { - if (barStyle == UIBarStyleDefault) - { - [(IQTitleBarButtonItem*)item setSelectableTextColor:[UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:1.0]]; - } - else - { - [(IQTitleBarButtonItem*)item setSelectableTextColor:[UIColor yellowColor]]; - } - - break; - } - } -} - --(void)setTintColor:(UIColor *)tintColor -{ - [super setTintColor:tintColor]; - - for (UIBarButtonItem *item in self.items) - { - [item setTintColor:tintColor]; - } -} - --(void)setTitleFont:(UIFont *)titleFont -{ - _titleFont = titleFont; - - for (UIBarButtonItem *item in self.items) - { - if ([item isKindOfClass:[IQTitleBarButtonItem class]]) - { - [(IQTitleBarButtonItem*)item setFont:titleFont]; - break; - } - } -} - --(void)setTitle:(NSString *)title -{ - _title = title; - - for (UIBarButtonItem *item in self.items) - { - if ([item isKindOfClass:[IQTitleBarButtonItem class]]) - { - [(IQTitleBarButtonItem*)item setTitle:title]; - break; - } - } -} - --(void)setTitleTarget:(nullable id)target action:(nullable SEL)action -{ - NSInvocation *invocation = nil; - - if (target && action) - { - invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:action]]; - invocation.target = target; - invocation.selector = action; - } - - self.titleInvocation = invocation; -} - --(void)setTitleInvocation:(NSInvocation*)invocation -{ - _titleInvocation = invocation; - - for (UIBarButtonItem *item in self.items) - { - if ([item isKindOfClass:[IQTitleBarButtonItem class]]) - { - [(IQTitleBarButtonItem*)item setTitleInvocation:_titleInvocation]; - break; - } - } -} - --(void)layoutSubviews -{ - [super layoutSubviews]; - - CGRect leftRect = CGRectNull; - CGRect rightRect = CGRectNull; - - BOOL isTitleBarButtonFound = NO; - - NSArray *subviews = [self.subviews sortedArrayUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) { - - CGFloat x1 = CGRectGetMinX(view1.frame); - CGFloat y1 = CGRectGetMinY(view1.frame); - CGFloat x2 = CGRectGetMinX(view2.frame); - CGFloat y2 = CGRectGetMinY(view2.frame); - - if (x1 < x2) return NSOrderedAscending; - - else if (x1 > x2) return NSOrderedDescending; - - //Else both y are same so checking for x positions - else if (y1 < y2) return NSOrderedAscending; - - else if (y1 > y2) return NSOrderedDescending; - - else return NSOrderedSame; - }]; - - for (UIView *barButtonItemView in subviews) - { - if (isTitleBarButtonFound == YES) - { - rightRect = barButtonItemView.frame; - break; - } - else if ([barButtonItemView isMemberOfClass:[UIView class]]) - { - isTitleBarButtonFound = YES; - } - //If it's UIToolbarButton or UIToolbarTextButton (which actually UIBarButtonItem) - else if ([barButtonItemView isKindOfClass:[UIControl class]]) - { - leftRect = barButtonItemView.frame; - } - } - - CGFloat x = 16; - - if (CGRectIsNull(leftRect) == false) - { - x = CGRectGetMaxX(leftRect) + 16; - } - - CGFloat width = CGRectGetWidth(self.frame) - 32 - (CGRectIsNull(leftRect)?0:CGRectGetMaxX(leftRect)) - (CGRectIsNull(rightRect)?0:CGRectGetWidth(self.frame)-CGRectGetMinX(rightRect)); - - for (UIBarButtonItem *item in self.items) - { - if ([item isKindOfClass:[IQTitleBarButtonItem class]]) - { - CGRect titleRect = CGRectMake(x, 0, width, self.frame.size.height); - item.customView.frame = titleRect; - break; - } - } -} - -#pragma mark - UIInputViewAudioFeedback delegate -- (BOOL) enableInputClicksWhenVisible -{ - return YES; -} - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h deleted file mode 100644 index c39f7fa..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h +++ /dev/null @@ -1,380 +0,0 @@ -// -// IQUIView+IQKeyboardToolbar.h -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - - -#import - -@class UIBarButtonItem; - -/** - UIView category methods to add IQToolbar on UIKeyboard. - */ -@interface UIView (IQToolbarAddition) - - -///------------------------- -/// @name Title and Distance -///------------------------- - -/** - If `shouldHidePlaceholderText` is YES, then title will not be added to the toolbar. Default to NO. - */ -@property (assign, nonatomic) BOOL shouldHidePlaceholderText; - -/** - `placeholderText` to override default `placeholder` text when drawing text on toolbar. - */ -@property (nullable, strong, nonatomic) NSString* placeholderText; - -/** - `drawingPlaceholderText` will be actual text used to draw on toolbar. This would either `placeholder` or `placeholderText`. - */ -@property (nullable, strong, nonatomic, readonly) NSString* drawingPlaceholderText; - -/** - Optional target & action to behave toolbar title button as clickable button - - @param target Target object. - @param action Target Selector. - */ --(void)setTitleTarget:(nullable id)target action:(nullable SEL)action; - -/** - Customized Invocation to be called on title button action. titleInvocation is internally created using setTitleTarget:action: method. - */ -@property (nullable, strong, nonatomic) NSInvocation *titleInvocation; - - -///----------------------------------------- -/// @name Customised Invocation Registration -///----------------------------------------- - -/** - Additional target & action to do get callback action. Note that setting custom `previous` selector doesn't affect native `previous` functionality, this is just used to notifiy user to do additional work according to need. - - @param target Target object. - @param action Target Selector. - */ --(void)setCustomPreviousTarget:(nullable id)target action:(nullable SEL)action; - -/** - Additional target & action to do get callback action. Note that setting custom `next` selector doesn't affect native `next` functionality, this is just used to notifiy user to do additional work according to need. - - @param target Target object. - @param action Target Selector. - */ --(void)setCustomNextTarget:(nullable id)target action:(nullable SEL)action; - -/** - Additional target & action to do get callback action. Note that setting custom `done` selector doesn't affect native `done` functionality, this is just used to notifiy user to do additional work according to need. - - @param target Target object. - @param action Target Selector. - */ --(void)setCustomDoneTarget:(nullable id)target action:(nullable SEL)action; - -/** - Customized Invocation to be called on previous arrow action. previousInvocation is internally created using setCustomPreviousTarget:action: method. - */ -@property (nullable, strong, nonatomic) NSInvocation *previousInvocation; - -/** - Customized Invocation to be called on next arrow action. nextInvocation is internally created using setCustomNextTarget:action: method. - */ -@property (nullable, strong, nonatomic) NSInvocation *nextInvocation; - -/** - Customized Invocation to be called on done action. doneInvocation is internally created using setCustomDoneTarget:action: method. - */ -@property (nullable, strong, nonatomic) NSInvocation *doneInvocation; - -///------------ -/// @name Done -///------------ - -/** - Helper function to add Done button on keyboard. - - @param target Target object for selector. - @param action Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. - */ -- (void)addDoneOnKeyboardWithTarget:(nullable id)target action:(nullable SEL)action; - -/** - Helper function to add Done button on keyboard. - - @param target Target object for selector. - @param action Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. - @param titleText text to show as title in IQToolbar'. - */ -- (void)addDoneOnKeyboardWithTarget:(nullable id)target action:(nullable SEL)action titleText:(nullable NSString*)titleText; - -/** - Helper function to add Done button on keyboard. - - @param target Target object for selector. - @param action Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. - @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. - */ -- (void)addDoneOnKeyboardWithTarget:(nullable id)target action:(nullable SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; - -///------------ -/// @name Right -///------------ - -/** - Helper function to add Right button on keyboard. - - @param text Title for rightBarButtonItem, usually 'Done'. - @param target Target object for selector. - @param action Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. - */ -- (void)addRightButtonOnKeyboardWithText:(nullable NSString*)text target:(nullable id)target action:(nullable SEL)action; - -/** - Helper function to add Right button on keyboard. - - @param text Title for rightBarButtonItem, usually 'Done'. - @param target Target object for selector. - @param action Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. - @param titleText text to show as title in IQToolbar'. - */ -- (void)addRightButtonOnKeyboardWithText:(nullable NSString*)text target:(nullable id)target action:(nullable SEL)action titleText:(nullable NSString*)titleText; - -/** - Helper function to add Right button on keyboard. - - @param text Title for rightBarButtonItem, usually 'Done'. - @param target Target object for selector. - @param action Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. - @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. - */ -- (void)addRightButtonOnKeyboardWithText:(nullable NSString*)text target:(nullable id)target action:(nullable SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; - -/** - Helper function to add Right button on keyboard. - - @param image Image icon to use as right button. - @param target Target object for selector. - @param action Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. - @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. - */ -- (void)addRightButtonOnKeyboardWithImage:(nullable UIImage*)image target:(nullable id)target action:(nullable SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; - -/** - Helper function to add Right button on keyboard. - - @param image Image icon to use as right button. - @param target Target object for selector. - @param action Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. - @param titleText text to show as title in IQToolbar'. - */ -- (void)addRightButtonOnKeyboardWithImage:(nullable UIImage*)image target:(nullable id)target action:(nullable SEL)action titleText:(nullable NSString*)titleText; - -///------------------ -/// @name Cancel/Done -///------------------ - -/** - Helper function to add Cancel and Done button on keyboard. - - @param target Target object for selector. - @param cancelAction Cancel button action name. Usually 'cancelAction:(IQBarButtonItem*)item'. - @param doneAction Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. - */ -- (void)addCancelDoneOnKeyboardWithTarget:(nullable id)target cancelAction:(nullable SEL)cancelAction doneAction:(nullable SEL)doneAction; - -/** - Helper function to add Cancel and Done button on keyboard. - - @param target Target object for selector. - @param cancelAction Cancel button action name. Usually 'cancelAction:(IQBarButtonItem*)item'. - @param doneAction Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. - @param titleText text to show as title in IQToolbar'. - */ -- (void)addCancelDoneOnKeyboardWithTarget:(nullable id)target cancelAction:(nullable SEL)cancelAction doneAction:(nullable SEL)doneAction titleText:(nullable NSString*)titleText; - -/** - Helper function to add Cancel and Done button on keyboard. - - @param target Target object for selector. - @param cancelAction Cancel button action name. Usually 'cancelAction:(IQBarButtonItem*)item'. - @param doneAction Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. - @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. - */ -- (void)addCancelDoneOnKeyboardWithTarget:(nullable id)target cancelAction:(nullable SEL)cancelAction doneAction:(nullable SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; - -///----------------- -/// @name Right/Left -///----------------- - -/** - Helper function to add Left and Right button on keyboard. - - @param target Target object for selector. - @param leftButtonTitle Title for leftBarButtonItem, usually 'Cancel'. - @param rightButtonTitle Title for rightBarButtonItem, usually 'Done'. - @param leftButtonAction Left button action name. Usually 'cancelAction:(IQBarButtonItem*)item'. - @param rightButtonAction Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. - */ -- (void)addLeftRightOnKeyboardWithTarget:(nullable id)target leftButtonTitle:(nullable NSString*)leftButtonTitle rightButtonTitle:(nullable NSString*)rightButtonTitle leftButtonAction:(nullable SEL)leftButtonAction rightButtonAction:(nullable SEL)rightButtonAction; - -/** - Helper function to add Left and Right button on keyboard. - - @param target Target object for selector. - @param leftButtonTitle Title for leftBarButtonItem, usually 'Cancel'. - @param rightButtonTitle Title for rightBarButtonItem, usually 'Done'. - @param leftButtonAction Left button action name. Usually 'cancelAction:(IQBarButtonItem*)item'. - @param rightButtonAction Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. - @param titleText text to show as title in IQToolbar'. - */ -- (void)addLeftRightOnKeyboardWithTarget:(nullable id)target leftButtonTitle:(nullable NSString*)leftButtonTitle rightButtonTitle:(nullable NSString*)rightButtonTitle leftButtonAction:(nullable SEL)leftButtonAction rightButtonAction:(nullable SEL)rightButtonAction titleText:(nullable NSString*)titleText; - -/** - Helper function to add Left and Right button on keyboard. - - @param target Target object for selector. - @param leftButtonTitle Title for leftBarButtonItem, usually 'Cancel'. - @param rightButtonTitle Title for rightBarButtonItem, usually 'Done'. - @param leftButtonAction Left button action name. Usually 'cancelAction:(IQBarButtonItem*)item'. - @param rightButtonAction Right button action name. Usually 'doneAction:(IQBarButtonItem*)item'. - @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. - */ -- (void)addLeftRightOnKeyboardWithTarget:(nullable id)target leftButtonTitle:(nullable NSString*)leftButtonTitle rightButtonTitle:(nullable NSString*)rightButtonTitle leftButtonAction:(nullable SEL)leftButtonAction rightButtonAction:(nullable SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; - -///------------------------- -/// @name Previous/Next/Done -///------------------------- - -/** - Helper function to add ArrowNextPrevious and Done button on keyboard. - - @param target Target object for selector. - @param previousAction Previous button action name. Usually 'previousAction:(id)item'. - @param nextAction Next button action name. Usually 'nextAction:(id)item'. - @param doneAction Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. - */ -- (void)addPreviousNextDoneOnKeyboardWithTarget:(nullable id)target previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction doneAction:(nullable SEL)doneAction; - -/** - Helper function to add ArrowNextPrevious and Done button on keyboard. - - @param target Target object for selector. - @param previousAction Previous button action name. Usually 'previousAction:(id)item'. - @param nextAction Next button action name. Usually 'nextAction:(id)item'. - @param doneAction Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. - @param titleText text to show as title in IQToolbar'. - */ -- (void)addPreviousNextDoneOnKeyboardWithTarget:(nullable id)target previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction doneAction:(nullable SEL)doneAction titleText:(nullable NSString*)titleText; - -/** - Helper function to add ArrowNextPrevious and Done button on keyboard. - - @param target Target object for selector. - @param previousAction Previous button action name. Usually 'previousAction:(id)item'. - @param nextAction Next button action name. Usually 'nextAction:(id)item'. - @param doneAction Done button action name. Usually 'doneAction:(IQBarButtonItem*)item'. - @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. - */ -- (void)addPreviousNextDoneOnKeyboardWithTarget:(nullable id)target previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction doneAction:(nullable SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; - -///-------------------------- -/// @name Previous/Next/Right -///-------------------------- - -/** - Helper function to add ArrowNextPrevious and Right button on keyboard. - - @param target Target object for selector. - @param rightButtonTitle Title for rightBarButtonItem, usually 'Done'. - @param previousAction Previous button action name. Usually 'previousAction:(id)item'. - @param nextAction Next button action name. Usually 'nextAction:(id)item'. - @param rightButtonAction RightBarButton action name. Usually 'doneAction:(IQBarButtonItem*)item'. - */ -- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonTitle:(nullable NSString*)rightButtonTitle previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction; - -/** - Helper function to add ArrowNextPrevious and Right button on keyboard. - - @param target Target object for selector. - @param rightButtonTitle Title for rightBarButtonItem, usually 'Done'. - @param previousAction Previous button action name. Usually 'previousAction:(id)item'. - @param nextAction Next button action name. Usually 'nextAction:(id)item'. - @param rightButtonAction RightBarButton action name. Usually 'doneAction:(IQBarButtonItem*)item'. - @param titleText text to show as title in IQToolbar'. - */ -- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonTitle:(nullable NSString*)rightButtonTitle previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction titleText:(nullable NSString*)titleText; - -/** - Helper function to add ArrowNextPrevious and Right button on keyboard. - - @param target Target object for selector. - @param rightButtonTitle Title for rightBarButtonItem, usually 'Done'. - @param previousAction Previous button action name. Usually 'previousAction:(id)item'. - @param nextAction Next button action name. Usually 'nextAction:(id)item'. - @param rightButtonAction RightBarButton action name. Usually 'doneAction:(IQBarButtonItem*)item'. - @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. - */ -- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonTitle:(nullable NSString*)rightButtonTitle previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; - -/** - Helper function to add ArrowNextPrevious and Right button on keyboard. - - @param target Target object for selector. - @param rightButtonImage Image icon to use as rightBarButtonItem. - @param previousAction Previous button action name. Usually 'previousAction:(id)item'. - @param nextAction Next button action name. Usually 'nextAction:(id)item'. - @param rightButtonAction RightBarButton action name. Usually 'doneAction:(IQBarButtonItem*)item'. - @param titleText text to show as title in IQToolbar'. - */ -- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonImage:(nullable UIImage*)rightButtonImage previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction titleText:(nullable NSString*)titleText; - -/** - Helper function to add ArrowNextPrevious and Right button on keyboard. - - @param target Target object for selector. - @param rightButtonImage Image icon to use as rightBarButtonItem. - @param previousAction Previous button action name. Usually 'previousAction:(id)item'. - @param nextAction Next button action name. Usually 'nextAction:(id)item'. - @param rightButtonAction RightBarButton action name. Usually 'doneAction:(IQBarButtonItem*)item'. - @param shouldShowPlaceholder A boolean to indicate whether to show textField placeholder on IQToolbar'. - */ -- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonImage:(nullable UIImage*)rightButtonImage previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; - - -///----------------------------------- -/// @name Enable/Disable Previous/Next -///----------------------------------- - -/** - Helper function to enable and disable previous next buttons. - - @param isPreviousEnabled BOOL to enable/disable previous button on keyboard. - @param isNextEnabled BOOL to enable/disable next button on keyboard.. - */ -- (void)setEnablePrevious:(BOOL)isPreviousEnabled next:(BOOL)isNextEnabled; - -@end - - diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m deleted file mode 100644 index 09bda28..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m +++ /dev/null @@ -1,844 +0,0 @@ -// -// IQUIView+IQKeyboardToolbar.m -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-16 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - - -#import "IQUIView+IQKeyboardToolbar.h" -#import "IQToolbar.h" -#import "IQTitleBarButtonItem.h" -#import "IQKeyboardManagerConstantsInternal.h" -#import "IQBarButtonItem.h" -#import "IQKeyboardManager.h" -#import -#import -#import -#import - -/*UIKeyboardToolbar Category implementation*/ -@implementation UIView (IQToolbarAddition) - --(void)setShouldHidePlaceholderText:(BOOL)shouldHidePlaceholderText -{ - objc_setAssociatedObject(self, @selector(shouldHidePlaceholderText), @(shouldHidePlaceholderText), OBJC_ASSOCIATION_RETAIN_NONATOMIC); - - if ([self respondsToSelector:@selector(placeholder)] && [self.inputAccessoryView respondsToSelector:@selector(setTitle:)]) - { - UITextField *textField = (UITextField*)self; - IQToolbar *toolbar = (IQToolbar*)[self inputAccessoryView]; - toolbar.title = textField.drawingPlaceholderText; - } -} - --(BOOL)shouldHidePlaceholderText -{ - NSNumber *shouldHidePlaceholderText = objc_getAssociatedObject(self, @selector(shouldHidePlaceholderText)); - return [shouldHidePlaceholderText boolValue]; -} - --(void)setPlaceholderText:(NSString*)placeholderText -{ - objc_setAssociatedObject(self, @selector(placeholderText), placeholderText, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - - if ([self respondsToSelector:@selector(placeholder)] && [self.inputAccessoryView respondsToSelector:@selector(setTitle:)]) - { - UITextField *textField = (UITextField*)self; - IQToolbar *toolbar = (IQToolbar*)[self inputAccessoryView]; - toolbar.title = textField.drawingPlaceholderText; - } -} - --(NSString*)placeholderText -{ - NSString *placeholderText = objc_getAssociatedObject(self, @selector(placeholderText)); - return placeholderText; -} - --(NSString*)drawingPlaceholderText -{ - if (self.shouldHidePlaceholderText) - { - return nil; - } - else if (self.placeholderText.length != 0) - { - return self.placeholderText; - } - else if ([self respondsToSelector:@selector(placeholder)]) - { - return [(UITextField*)self placeholder]; - } - else - { - return nil; - } -} - --(void)setTitleTarget:(nullable id)target action:(nullable SEL)action -{ - NSInvocation *invocation = nil; - - if (target && action) - { - invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:action]]; - invocation.target = target; - invocation.selector = action; - UIView *selfObject = self; - [invocation setArgument:&selfObject atIndex:2]; - } - - self.titleInvocation = invocation; -} - --(void)setTitleInvocation:(NSInvocation *)titleInvocation -{ - objc_setAssociatedObject(self, @selector(titleInvocation), titleInvocation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - - if ([self.inputAccessoryView isKindOfClass:[IQToolbar class]]) - { - IQToolbar *toolbar = (IQToolbar*)[self inputAccessoryView]; - toolbar.titleInvocation = titleInvocation; - } -} - --(NSInvocation *)titleInvocation -{ - return objc_getAssociatedObject(self, @selector(titleInvocation)); -} - - --(void)setCustomPreviousTarget:(id)target action:(SEL)action -{ - NSInvocation *invocation = nil; - - if (target && action) - { - invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:action]]; - invocation.target = target; - invocation.selector = action; - UIView *selfObject = self; - [invocation setArgument:&selfObject atIndex:2]; - } - - self.previousInvocation = invocation; -} - --(void)setCustomNextTarget:(id)target action:(SEL)action -{ - NSInvocation *invocation = nil; - - if (target && action) - { - invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:action]]; - invocation.target = target; - invocation.selector = action; - UIView *selfObject = self; - [invocation setArgument:&selfObject atIndex:2]; - } - - self.nextInvocation = invocation; -} - --(void)setCustomDoneTarget:(id)target action:(SEL)action -{ - NSInvocation *invocation = nil; - - if (target && action) - { - invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:action]]; - invocation.target = target; - invocation.selector = action; - UIView *selfObject = self; - [invocation setArgument:&selfObject atIndex:2]; - } - - self.doneInvocation = invocation; -} - --(void)setPreviousInvocation:(NSInvocation *)previousInvocation -{ - objc_setAssociatedObject(self, @selector(previousInvocation), previousInvocation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - --(void)setNextInvocation:(NSInvocation *)nextInvocation -{ - objc_setAssociatedObject(self, @selector(nextInvocation), nextInvocation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - --(void)setDoneInvocation:(NSInvocation *)doneInvocation -{ - objc_setAssociatedObject(self, @selector(doneInvocation), doneInvocation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - --(NSInvocation *)previousInvocation -{ - return objc_getAssociatedObject(self, @selector(previousInvocation)); -} - --(NSInvocation *)nextInvocation -{ - return objc_getAssociatedObject(self, @selector(nextInvocation)); -} - --(NSInvocation *)doneInvocation -{ - return objc_getAssociatedObject(self, @selector(doneInvocation)); -} - -#pragma mark - Private helper - -+(UIBarButtonItem*)flexibleBarButtonItem -{ - static IQBarButtonItem *nilButton = nil; - - if (nilButton == nil) - { - nilButton = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; - } - - return nilButton; -} - -#pragma mark - Toolbar on UIKeyboard - -- (void)addRightButtonOnKeyboardWithImage:(UIImage*)image target:(id)target action:(SEL)action titleText:(NSString*)titleText -{ - // If can't set InputAccessoryView. Then return - if (![self respondsToSelector:@selector(setInputAccessoryView:)]) return; - - // Creating a toolBar for keyboard - IQToolbar *toolbar = [[IQToolbar alloc] init]; - toolbar.doneImage = image; - - if ([self respondsToSelector:@selector(keyboardAppearance)]) - { - switch ([(UITextField*)self keyboardAppearance]) - { - case UIKeyboardAppearanceAlert: toolbar.barStyle = UIBarStyleBlack; break; - default: toolbar.barStyle = UIBarStyleDefault; break; - } - } - - NSMutableArray *items = [[NSMutableArray alloc] init]; - - //Title button - IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithTitle:self.shouldHidePlaceholderText?nil:titleText]; - [items addObject:title]; - - //Flexible space - [items addObject:[[self class] flexibleBarButtonItem]]; - - //Right button - IQBarButtonItem *doneButton = [[IQBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleDone target:target action:action]; - doneButton.accessibilityLabel = @"Toolbar Done Button"; - [items addObject:doneButton]; - - // Adding button to toolBar. - [toolbar setItems:items]; - - toolbar.titleInvocation = self.titleInvocation; - // Setting toolbar to textFieldPhoneNumber keyboard. - [(UITextField*)self setInputAccessoryView:toolbar]; -} - -- (void)addRightButtonOnKeyboardWithImage:(UIImage*)image target:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder -{ - NSString *title = nil; - - if (shouldShowPlaceholder) - title = [self drawingPlaceholderText]; - - [self addRightButtonOnKeyboardWithImage:image target:target action:action titleText:title]; -} - -- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action titleText:(NSString*)titleText -{ - // If can't set InputAccessoryView. Then return - if (![self respondsToSelector:@selector(setInputAccessoryView:)]) return; - - // Creating a toolBar for keyboard - IQToolbar *toolbar = [[IQToolbar alloc] init]; - toolbar.doneTitle = text; - - if ([self respondsToSelector:@selector(keyboardAppearance)]) - { - switch ([(UITextField*)self keyboardAppearance]) - { - case UIKeyboardAppearanceAlert: toolbar.barStyle = UIBarStyleBlack; break; - default: toolbar.barStyle = UIBarStyleDefault; break; - } - } - - NSMutableArray *items = [[NSMutableArray alloc] init]; - - //Title button - IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithTitle:self.shouldHidePlaceholderText?nil:titleText]; - [items addObject:title]; - - //Flexible space - [items addObject:[[self class] flexibleBarButtonItem]]; - - //Right button - IQBarButtonItem *doneButton =[[IQBarButtonItem alloc] initWithTitle:text style:UIBarButtonItemStyleDone target:target action:action]; - [items addObject:doneButton]; - - // Adding button to toolBar. - [toolbar setItems:items]; - - // Setting toolbar to textFieldPhoneNumber keyboard. - toolbar.titleInvocation = self.titleInvocation; - [(UITextField*)self setInputAccessoryView:toolbar]; -} - -- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder -{ - NSString *title = nil; - - if (shouldShowPlaceholder) - title = [self drawingPlaceholderText]; - - [self addRightButtonOnKeyboardWithText:text target:target action:action titleText:title]; -} - -- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action -{ - [self addRightButtonOnKeyboardWithText:text target:target action:action titleText:nil]; -} - - -- (void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action titleText:(NSString*)titleText -{ - // If can't set InputAccessoryView. Then return - if (![self respondsToSelector:@selector(setInputAccessoryView:)]) return; - - // Creating a toolBar for keyboard - IQToolbar *toolbar = [[IQToolbar alloc] init]; - - if ([self respondsToSelector:@selector(keyboardAppearance)]) - { - switch ([(UITextField*)self keyboardAppearance]) - { - case UIKeyboardAppearanceAlert: toolbar.barStyle = UIBarStyleBlack; break; - default: toolbar.barStyle = UIBarStyleDefault; break; - } - } - - NSMutableArray *items = [[NSMutableArray alloc] init]; - - //Title button - IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithTitle:self.shouldHidePlaceholderText?nil:titleText]; - [items addObject:title]; - - //Flexible space - [items addObject:[[self class] flexibleBarButtonItem]]; - - //Done button - IQBarButtonItem *doneButton = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:target action:action]; - [items addObject:doneButton]; - - // Adding button to toolBar. - [toolbar setItems:items]; - - // Setting toolbar to textFieldPhoneNumber keyboard. - toolbar.titleInvocation = self.titleInvocation; - [(UITextField*)self setInputAccessoryView:toolbar]; -} - --(void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder -{ - NSString *title = nil; - - if (shouldShowPlaceholder) - title = [self drawingPlaceholderText]; - - [self addDoneOnKeyboardWithTarget:target action:action titleText:title]; -} - --(void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action -{ - [self addDoneOnKeyboardWithTarget:target action:action titleText:nil]; -} - -- (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)leftTitle rightButtonTitle:(NSString*)rightTitle leftButtonAction:(SEL)leftAction rightButtonAction:(SEL)rightAction titleText:(NSString*)titleText -{ - // If can't set InputAccessoryView. Then return - if (![self respondsToSelector:@selector(setInputAccessoryView:)]) return; - - // Creating a toolBar for keyboard - IQToolbar *toolbar = [[IQToolbar alloc] init]; - toolbar.doneTitle = rightTitle; - - if ([self respondsToSelector:@selector(keyboardAppearance)]) - { - switch ([(UITextField*)self keyboardAppearance]) - { - case UIKeyboardAppearanceAlert: toolbar.barStyle = UIBarStyleBlack; break; - default: toolbar.barStyle = UIBarStyleDefault; break; - } - } - - NSMutableArray *items = [[NSMutableArray alloc] init]; - - //Left button - IQBarButtonItem *cancelButton =[[IQBarButtonItem alloc] initWithTitle:leftTitle style:UIBarButtonItemStylePlain target:target action:leftAction]; - [items addObject:cancelButton]; - - //Flexible space - [items addObject:[[self class] flexibleBarButtonItem]]; - - //Title button - IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithTitle:self.shouldHidePlaceholderText?nil:titleText]; - [items addObject:title]; - - //Flexible space - [items addObject:[[self class] flexibleBarButtonItem]]; - - //Right button - IQBarButtonItem *doneButton =[[IQBarButtonItem alloc] initWithTitle:rightTitle style:UIBarButtonItemStyleDone target:target action:rightAction]; - [items addObject:doneButton]; - - // Adding button to toolBar. - [toolbar setItems:items]; - - // Setting toolbar to keyboard. - toolbar.titleInvocation = self.titleInvocation; - [(UITextField*)self setInputAccessoryView:toolbar]; -} - -- (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)leftTitle rightButtonTitle:(NSString*)rightTitle leftButtonAction:(SEL)leftAction rightButtonAction:(SEL)rightAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder -{ - NSString *title = nil; - - if (shouldShowPlaceholder) - title = [self drawingPlaceholderText]; - - [self addLeftRightOnKeyboardWithTarget:target leftButtonTitle:leftTitle rightButtonTitle:rightTitle leftButtonAction:leftAction rightButtonAction:rightAction titleText:title]; -} - -- (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)leftTitle rightButtonTitle:(NSString*)rightTitle leftButtonAction:(SEL)leftAction rightButtonAction:(SEL)rightAction -{ - [self addLeftRightOnKeyboardWithTarget:target leftButtonTitle:leftTitle rightButtonTitle:rightTitle leftButtonAction:leftAction rightButtonAction:rightAction titleText:nil]; -} - -- (void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAction doneAction:(SEL)doneAction titleText:(NSString*)titleText -{ - // If can't set InputAccessoryView. Then return - if (![self respondsToSelector:@selector(setInputAccessoryView:)]) return; - - // Creating a toolBar for keyboard - IQToolbar *toolbar = [[IQToolbar alloc] init]; - if ([self respondsToSelector:@selector(keyboardAppearance)]) - { - switch ([(UITextField*)self keyboardAppearance]) - { - case UIKeyboardAppearanceAlert: toolbar.barStyle = UIBarStyleBlack; break; - default: toolbar.barStyle = UIBarStyleDefault; break; - } - } - - NSMutableArray *items = [[NSMutableArray alloc] init]; - - //Cancel button - IQBarButtonItem *cancelButton =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:target action:cancelAction]; - [items addObject:cancelButton]; - - //Flexible space - [items addObject:[[self class] flexibleBarButtonItem]]; - - //Title button - IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithTitle:self.shouldHidePlaceholderText?nil:titleText]; - [items addObject:title]; - - //Flexible space - [items addObject:[[self class] flexibleBarButtonItem]]; - - //Done button - IQBarButtonItem *doneButton =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:target action:doneAction]; - [items addObject:doneButton]; - - // Adding button to toolBar. - [toolbar setItems:items]; - - // Setting toolbar to keyboard. - toolbar.titleInvocation = self.titleInvocation; - [(UITextField*)self setInputAccessoryView:toolbar]; -} - --(void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAction doneAction:(SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder -{ - NSString *title = nil; - - if (shouldShowPlaceholder) - title = [self drawingPlaceholderText]; - - [self addCancelDoneOnKeyboardWithTarget:target cancelAction:cancelAction doneAction:doneAction titleText:title]; -} - --(void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAction doneAction:(SEL)doneAction -{ - [self addCancelDoneOnKeyboardWithTarget:target cancelAction:cancelAction doneAction:doneAction titleText:nil]; -} - -- (void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction doneAction:(SEL)doneAction titleText:(NSString*)titleText -{ - //If can't set InputAccessoryView. Then return - if (![self respondsToSelector:@selector(setInputAccessoryView:)]) return; - - // Creating a toolBar for phoneNumber keyboard - IQToolbar *toolbar = [[IQToolbar alloc] init]; - if ([self respondsToSelector:@selector(keyboardAppearance)]) - { - switch ([(UITextField*)self keyboardAppearance]) - { - case UIKeyboardAppearanceAlert: toolbar.barStyle = UIBarStyleBlack; break; - default: toolbar.barStyle = UIBarStyleDefault; break; - } - } - - NSMutableArray *items = [[NSMutableArray alloc] init]; - - // UIBarButtonItem *prev = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:105 target:target action:previousAction]; - // UIBarButtonItem *next = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:106 target:target action:nextAction]; - - // Get the top level "bundle" which may actually be the framework - NSBundle *mainBundle = [NSBundle bundleForClass:[IQKeyboardManager class]]; - - // Check to see if the resource bundle exists inside the top level bundle - NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"IQKeyboardManager" ofType:@"bundle"]]; - - if (resourcesBundle == nil) { - resourcesBundle = mainBundle; - } - - UIImage *imageLeftArrow = nil; - UIImage *imageRightArrow = nil; - - if (IQ_IS_IOS10_OR_GREATER) - { - imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowUp" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; - imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowDown" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; - } - else - { - imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowLeft" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; - imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowRight" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; - } - - //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) - if ([UIImage instancesRespondToSelector:@selector(imageFlippedForRightToLeftLayoutDirection)]) - { - imageLeftArrow = [imageLeftArrow imageFlippedForRightToLeftLayoutDirection]; - imageRightArrow = [imageRightArrow imageFlippedForRightToLeftLayoutDirection]; - } - - //Previous button - IQBarButtonItem *prev = [[IQBarButtonItem alloc] initWithImage:imageLeftArrow style:UIBarButtonItemStylePlain target:target action:previousAction]; - prev.accessibilityLabel = @"Toolbar Previous Button"; - [items addObject:prev]; - - //Fixed space - IQBarButtonItem *fixed =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; - if (IQ_IS_IOS10_OR_GREATER) { - [fixed setWidth:6]; - } else { - [fixed setWidth:20]; - } - [items addObject:fixed]; - - //Next button - IQBarButtonItem *next = [[IQBarButtonItem alloc] initWithImage:imageRightArrow style:UIBarButtonItemStylePlain target:target action:nextAction]; - next.accessibilityLabel = @"Toolbar Next Button"; - [items addObject:next]; - - //Flexible space - [items addObject:[[self class] flexibleBarButtonItem]]; - - //Title button - IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithTitle:self.shouldHidePlaceholderText?nil:titleText]; - [items addObject:title]; - - //Flexible space - [items addObject:[[self class] flexibleBarButtonItem]]; - - //Done button - IQBarButtonItem *doneButton =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:target action:doneAction]; - [items addObject:doneButton]; - - // Adding button to toolBar. - [toolbar setItems:items]; - - // Setting toolbar to keyboard. - toolbar.titleInvocation = self.titleInvocation; - [(UITextField*)self setInputAccessoryView:toolbar]; -} - --(void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction doneAction:(SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder -{ - NSString *title = nil; - - if (shouldShowPlaceholder) - title = [self drawingPlaceholderText]; - - [self addPreviousNextDoneOnKeyboardWithTarget:target previousAction:previousAction nextAction:nextAction doneAction:doneAction titleText:title]; -} - --(void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction doneAction:(SEL)doneAction -{ - [self addPreviousNextDoneOnKeyboardWithTarget:target previousAction:previousAction nextAction:nextAction doneAction:doneAction titleText:nil]; -} - -- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonImage:(UIImage*)rightButtonImage previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction titleText:(NSString*)titleText -{ - //If can't set InputAccessoryView. Then return - if (![self respondsToSelector:@selector(setInputAccessoryView:)]) return; - - // Creating a toolBar for phoneNumber keyboard - IQToolbar *toolbar = [[IQToolbar alloc] init]; - toolbar.doneImage = rightButtonImage; - - if ([self respondsToSelector:@selector(keyboardAppearance)]) - { - switch ([(UITextField*)self keyboardAppearance]) - { - case UIKeyboardAppearanceAlert: toolbar.barStyle = UIBarStyleBlack; break; - default: toolbar.barStyle = UIBarStyleDefault; break; - } - } - - NSMutableArray *items = [[NSMutableArray alloc] init]; - - // UIBarButtonItem *prev = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:105 target:target action:previousAction]; - // UIBarButtonItem *next = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:106 target:target action:nextAction]; - - // Get the top level "bundle" which may actually be the framework - NSBundle *mainBundle = [NSBundle bundleForClass:[IQKeyboardManager class]]; - - // Check to see if the resource bundle exists inside the top level bundle - NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"IQKeyboardManager" ofType:@"bundle"]]; - - if (resourcesBundle == nil) { - resourcesBundle = mainBundle; - } - - UIImage *imageLeftArrow = nil; - UIImage *imageRightArrow = nil; - - if (IQ_IS_IOS10_OR_GREATER) { - imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowUp" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; - imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowDown" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; - } else { - imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowLeft" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; - imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowRight" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; - } - - //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) - if ([UIImage instancesRespondToSelector:@selector(imageFlippedForRightToLeftLayoutDirection)]) - { - imageLeftArrow = [imageLeftArrow imageFlippedForRightToLeftLayoutDirection]; - imageRightArrow = [imageRightArrow imageFlippedForRightToLeftLayoutDirection]; - } - - //Previous button - IQBarButtonItem *prev = [[IQBarButtonItem alloc] initWithImage:imageLeftArrow style:UIBarButtonItemStylePlain target:target action:previousAction]; - prev.accessibilityLabel = @"Toolbar Previous Button"; - [items addObject:prev]; - - //Fixed space - IQBarButtonItem *fixed =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; - if (IQ_IS_IOS10_OR_GREATER) { - [fixed setWidth:6]; - } else { - [fixed setWidth:20]; - } - [items addObject:fixed]; - - //Next button - IQBarButtonItem *next = [[IQBarButtonItem alloc] initWithImage:imageRightArrow style:UIBarButtonItemStylePlain target:target action:nextAction]; - next.accessibilityLabel = @"Toolbar Next Button"; - [items addObject:next]; - - //Flexible space - [items addObject:[[self class] flexibleBarButtonItem]]; - - //Title button - IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithTitle:self.shouldHidePlaceholderText?nil:titleText]; - [items addObject:title]; - - //Flexible space - [items addObject:[[self class] flexibleBarButtonItem]]; - - //Right button - IQBarButtonItem *doneButton = [[IQBarButtonItem alloc] initWithImage:rightButtonImage style:UIBarButtonItemStyleDone target:target action:rightButtonAction]; - doneButton.accessibilityLabel = @"Toolbar Done Button"; - [items addObject:doneButton]; - - // Adding button to toolBar. - [toolbar setItems:items]; - - // Setting toolbar to keyboard. - toolbar.titleInvocation = self.titleInvocation; - [(UITextField*)self setInputAccessoryView:toolbar]; -} - -- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonImage:(nullable UIImage*)rightButtonImage previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder -{ - NSString *title = nil; - - if (shouldShowPlaceholder) - title = [self drawingPlaceholderText]; - - [self addPreviousNextRightOnKeyboardWithTarget:target rightButtonImage:rightButtonImage previousAction:previousAction nextAction:nextAction rightButtonAction:rightButtonAction titleText:title]; -} - -- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction titleText:(NSString*)titleText -{ - //If can't set InputAccessoryView. Then return - if (![self respondsToSelector:@selector(setInputAccessoryView:)]) return; - - // Creating a toolBar for phoneNumber keyboard - IQToolbar *toolbar = [[IQToolbar alloc] init]; - toolbar.doneTitle = rightButtonTitle; - - if ([self respondsToSelector:@selector(keyboardAppearance)]) - { - switch ([(UITextField*)self keyboardAppearance]) - { - case UIKeyboardAppearanceAlert: toolbar.barStyle = UIBarStyleBlack; break; - default: toolbar.barStyle = UIBarStyleDefault; break; - } - } - - NSMutableArray *items = [[NSMutableArray alloc] init]; - - // UIBarButtonItem *prev = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:105 target:target action:previousAction]; - // UIBarButtonItem *next = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:106 target:target action:nextAction]; - - // Get the top level "bundle" which may actually be the framework - NSBundle *mainBundle = [NSBundle bundleForClass:[IQKeyboardManager class]]; - - // Check to see if the resource bundle exists inside the top level bundle - NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"IQKeyboardManager" ofType:@"bundle"]]; - - if (resourcesBundle == nil) { - resourcesBundle = mainBundle; - } - - UIImage *imageLeftArrow = nil; - UIImage *imageRightArrow = nil; - - if (IQ_IS_IOS10_OR_GREATER) { - imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowUp" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; - imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowDown" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; - } else { - imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowLeft" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; - imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowRight" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; - } - - //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) - if ([UIImage instancesRespondToSelector:@selector(imageFlippedForRightToLeftLayoutDirection)]) - { - imageLeftArrow = [imageLeftArrow imageFlippedForRightToLeftLayoutDirection]; - imageRightArrow = [imageRightArrow imageFlippedForRightToLeftLayoutDirection]; - } - - //Previous button - IQBarButtonItem *prev = [[IQBarButtonItem alloc] initWithImage:imageLeftArrow style:UIBarButtonItemStylePlain target:target action:previousAction]; - prev.accessibilityLabel = @"Toolbar Previous Button"; - [items addObject:prev]; - - //Fixed space - IQBarButtonItem *fixed =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; - if (IQ_IS_IOS10_OR_GREATER) { - [fixed setWidth:6]; - } else { - [fixed setWidth:20]; - } - [items addObject:fixed]; - - //Next button - IQBarButtonItem *next = [[IQBarButtonItem alloc] initWithImage:imageRightArrow style:UIBarButtonItemStylePlain target:target action:nextAction]; - next.accessibilityLabel = @"Toolbar Next Button"; - [items addObject:next]; - - //Flexible space - [items addObject:[[self class] flexibleBarButtonItem]]; - - //Title button - IQTitleBarButtonItem *title = [[IQTitleBarButtonItem alloc] initWithTitle:self.shouldHidePlaceholderText?nil:titleText]; - [items addObject:title]; - - //Flexible space - [items addObject:[[self class] flexibleBarButtonItem]]; - - //Right button - IQBarButtonItem *doneButton =[[IQBarButtonItem alloc] initWithTitle:rightButtonTitle style:UIBarButtonItemStyleDone target:target action:rightButtonAction]; - [items addObject:doneButton]; - - // Adding button to toolBar. - [toolbar setItems:items]; - - // Setting toolbar to keyboard. - toolbar.titleInvocation = self.titleInvocation; - [(UITextField*)self setInputAccessoryView:toolbar]; -} - -- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder -{ - NSString *title = nil; - - if (shouldShowPlaceholder) - title = [self drawingPlaceholderText]; - - [self addPreviousNextRightOnKeyboardWithTarget:target rightButtonTitle:rightButtonTitle previousAction:previousAction nextAction:nextAction rightButtonAction:rightButtonAction titleText:title]; -} - -- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction -{ - [self addPreviousNextRightOnKeyboardWithTarget:target rightButtonTitle:rightButtonTitle previousAction:previousAction nextAction:nextAction rightButtonAction:rightButtonAction titleText:nil]; -} - --(void)setEnablePrevious:(BOOL)isPreviousEnabled next:(BOOL)isNextEnabled -{ - // Getting inputAccessoryView. - IQToolbar *inputAccessoryView = (IQToolbar*)[self inputAccessoryView]; - - // If it is IQToolbar and it's items are greater than zero. - if ([inputAccessoryView isKindOfClass:[IQToolbar class]] && [[inputAccessoryView items] count]>0) - { - if ([[inputAccessoryView items] count]>3) - { - // Getting first item from inputAccessoryView. - IQBarButtonItem *prevButton = (IQBarButtonItem*)[inputAccessoryView items][0]; - IQBarButtonItem *nextButton = (IQBarButtonItem*)[inputAccessoryView items][2]; - - // If it is UIBarButtonItem and it's customView is not nil. - if ([prevButton isKindOfClass:[IQBarButtonItem class]] && [nextButton isKindOfClass:[IQBarButtonItem class]]) - { - if (prevButton.enabled != isPreviousEnabled) - [prevButton setEnabled:isPreviousEnabled]; - if (nextButton.enabled != isNextEnabled) - [nextButton setEnabled:isNextEnabled]; - } - } - } -} - -@end diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/KeyboardManager.h b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/KeyboardManager.h deleted file mode 100644 index 48dbe70..0000000 --- a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/KeyboardManager.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// KeyboardManager.h -// https://github.com/hackiftekhar/IQKeyboardManager -// Copyright (c) 2013-15 Iftekhar Qurashi. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - - -#ifndef KeyboardManager_h -#define KeyboardManager_h - -#import "IQBarButtonItem.h" -#import "IQKeyboardManager.h" -#import "IQKeyboardManagerConstants.h" -#import "IQKeyboardReturnKeyHandler.h" -#import "IQSegmentedNextPrevious.h" -#import "IQTextView.h" -#import "IQTitleBarButtonItem.h" -#import "IQToolbar.h" -#import "IQUIView+Hierarchy.h" -#import "IQUIView+IQKeyboardToolbar.h" -#import "IQUIWindow+Hierarchy.h" - -#endif diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft.png b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft.png deleted file mode 100644 index 508c21774e1ac8b79da5c41d326a09286e23d768..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 886 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eU!3HFY*6?ouQY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fIRt zPXT0ZVp4u-iLH_n$Rap^xU(cP4PjGWG1OZ?59)(t^bPe4^x5s1DFMO^d$8xYq=t6$= zq-});g3DC+D)ug`z4h60?qP$>jWx!qCrzF++MQc2lB8f6zdYi^rkyWhjP93)Z@d&P zozip2m&r#pD*fWFyLoe!<~_FzIeBK2qhavMs3p?9q9S`Ib7<%CyPlK|?T)z~>vpky z9#&|iE<*I=quFNq<-uRrYOVg?Q#i}to?8u`J@fM)e?dj_0vd$@? F2>^TLKREyZ diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@2x.png b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@2x.png deleted file mode 100644 index cfc40d6eb0908521aeb70f8ce13b874284be4bcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1793 zcmY*aX;_n28vTMqAQ)LimKs8owIpFjLkN;4@IeWbr8J6biP1u@xjd!+faY%-rX>_kHiV=brPv_s=c)#NQi< zFh&3Xfb;<=K~OY=rj7c3XqAlCM?gU}-jn7D0G*YZJJE1xkB$X{XaMlJ1ppKj0>Cx| z6|4Y2x*Y(lMgaif3IH5tiS7mxp#u#T7{&nrO})Jd1B4<-9Tt`tLg&(HeuUVx6kK#% zS_}i1mBND906@$lKxqnt8;#CNNlxVuvfMFm7z8NagYg*j8wxkc9Yd#mg8nFt%|JWj zoN#s+5(14z6WMW0LJ-C4-F0Z^j!EEhSp+;jGcyyH>4-~X$K&l!oH&8EbHF<|U?B#U zlbywiDf6UxQS`0=sn%&n6z}RI|j37^nSdplbgu=uTv`LU0YCt z_`MUnJ_i6Syr)mHC%$3+ANJ0Nh~G2+pJLv2`UZtsB_W9T_s>Q` z_{l88006G*L-7m&k+&{=oE-A0;g~!&*?PK;qo|#mvwpd1wMup>FPWkp(zU6zahWQ& zcnHSG_=X0;s*b8cxIK=pUH)OSiAm)B@3s;!rLdN+gy63-=IR2216Kwe&r+8^*j=cr zdss{QbxQ9FPm#UzuVrPULKHmi@-=wPFCakv#Q%rfVGXam&C;KcLq0kD%b)XjPs0my zJkU#^&)SALv!ShsSte+k{w-88d!AgpZ|;h2LtyLd!uJUJRz=EFvbmXeORW<5OvI6N zXS>zZ=es`|`4fBZ=FJcLx>`~~SfuuD+;BPR>NrD7XCM%!SveY$TCfo~(>Z`}ofE0- zuo%y8>y+6Nzx1_^{+nfiBD`m`qc>{e=Apj(!P5cmqq6Dw`K$M?%Rw_!wbM1rS6+|% zW&8ocnLqy-QAssGm3z5eIFN&oo1Vj}dZV{Tl5sq)xo9Y9Ud;eiIi}z*cL+TAww>!i zKBkQm@s+psx7`iLbgWY_Q&=arVR(KY!nNqgzMZY`^>9^N;^S$(*g0H+2hla|2-ejU-A#_e$H;odZbBmZg*U(v<# zQ=erYtC0_d8Fh)UH$B@^yPZ2&$xZsLJcEXX$~%H>_6$3V)aXVvwK9=OrhQ?W-aS8B zUc|B%BiMo|kJy8-JmG$ERrlOb%KFQEm}Y=Qja#8hBP_2{aH=5Byhc8F?uS+3Y?VvY zQzk#idYD(ErJg#el9vgWIy>)lEe`gZvgZjx{iDkkFGX3zVfQ+3Cj$l&IY^H#wk7kX6GLt zxFogL^t)W-_dGnNl`q3Cv`Usul zD78FE4ppt+@b(rsZW((WaiXZ#FP)@F6b88-Wp|yaF1qcd>b5&^l>UM`ap||AD~e2+ zxGX|!_st~`t8$D?MOT-AGgl=P%te{!PQJy9_Oc;G{G;U_a8<{uO#fcvQRzz)l2tXJ z+7os8;DAkzQO5UDeaUCnY@cU)P-T-L=GAWKzZccyQ3Uf75f7Bz7;$iVkG1H6e&S=vs`67fk^yqNek?W{k*l~_g U0v_c9{YL=cL-nUf$x-}&16+6esQ>@~ diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@3x.png b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@3x.png deleted file mode 100644 index 849b991336c0c2e85017ce29be00eb8a8e50f3dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1815 zcmV+y2k7{TP)Px*(Md!>RA>donO$fcRTRhXo!umxkNqU+M>e~&o9zdcN}y6duoRn8X-i96`>DlZ z5evokp$`>Q^r@f^MHK8qQ7p7jq10+MwMk==244h05b?o>Y<6ao&}cBbTWXTc&RqX@ zn+-E}caz=hY&tJ<&pE?6zd85ZkGVt06TF(6o1Kwh@EssXISgB_vE27|uh;ExI(rC} zPWs%Q@MJRaJs8*%0SX3#Ua8K}ODTOen+QreydL-3$z<~OvIDiXwfSl#sShyE7<+{h z`n1>WnWRQ#wcD+&t<8>_+Mf`#LyW};yA@TGV|LL{EjhAsyEhycmq!h^oqQ z=rhX#6lw{rA`aG%ZrLEhAT!qia{_ve+o}!}2n1Rsi3|`z*NHHMk*k0?3B8`P&5!?_ z!pb{pCQwVIL3C3d3^Mc8kQy_=@Yq$$PYyx{0)M z=cY?%7XfqLq$?m;1|+YRH{kX9F`8D1aTwD-j>gq@MSUUJ5}-&Ru#riWPkJlFAiB;j z49C?EM13*2;u;G3{T*1bc>(9aU=V#c99K$);gA(&2%~8eWuzBF+b6y;hW2|H+8>Gf z#pERewFd&5F^lwI)%J=(bi&RLtI9=DUy8gWppZZGJSL28bdy^Qg3O!)%%`HhRJm** zY&l=Vu)d1`PGbs680mgE{6VVCqbP7|UQka~v=?OnM81qBC_U z5ZX_v^bKN|VF;N;%^X8FSq{VBr(lLqGlwKfcvsZ$hYVL*)3qb9c>K0OXK6DJC=v)A z!y0rAQAFDey6GTb_^_|qWg7NjS$-3du3$8oV6e}e)^%+^x`|JSRlVkG2ry?PLcauz z2@<1eiZFdIGSgF4k~!zuOtc3==P;5!5d#9|k*1No%BVUZ+Nvc}Wae#T=5sLsU>IPw zE2GM?!EgqNW-`5mu~88ST}N$pateA=J&Dg*EoYYwd|gIrX?AlS5Cb4lH?h%r4fO+Te%t??n=My9%usY7Va zh&C%_6A*XI4+m-_8%`?7dNB|t#=E*gUx|^}v}m(R&I96(`SFRZp7mj2eM$_3EoyIC z&+Ho+8JQAoR><=cqtRLHpV$L3GrbML|1j!#8{N61RBWTQc}Ss@n$;*N*L$N!$r zq&u-}{4NHU1b(pshy75$s&9GTkctZ(S%XU(Fm z61iXvi4H@akVkTndw|$1+A#ipVX4&4=;UNF-&Ve+Bp~kA=kvL|PG>i&=mjwhYVB7& zMP802VhPb!u3Rz@cg(xT)zJ7OYG_MdAav`DuI<3+`!~;4hGM}Q68%g}OgwxvGrbe~ zLD7ccx2e`<@8@UHdA2eXWdU)&~WA$b2E)9S)o;@-u0(rF5xmAnqEY z@4vLJ?LqC_6GNdpHxh^Ae)eoyG?pNjRYL{*)wRnqzS-z*(T4f!uUTE|jK||+qHQ60 zNf|OYoWcKz1IW}523@v^H(k%qsQH2|+7^;41>(NbQ8jiD3-7mifhb+$u-OOsnRTA6 zh@#RiGrF}$f}!g;syS>_@;16p(Foh7D9W&C6J;whl=GRvuYy;RsjqX2+#PQ%^RsKd zGtKFW-K_-TF*MZF>sb4)h zcAjzWks^94)HD*5FJlIOOLT^s8qY9&yQ->xiZ;_%s%WfK#!uZY{M=oEdCIg)KutB- zC_U_PHuWS@sc~bRssiyqfV$&xdwkfsJZB7yb|Yr>Bd$hIZ}MUCLC#inARZ`@Omrht zE@aBQb)mF@O5}*w+?`_n>RNUn9vo1E9+!I-P}}EV zW{AcP;Gf!^Cj!JF5~<|RKDTQMbJ7-^z3+>TsM!Ot{{dv1C-l#MaIOFV002ovPDHLk FV1gYbUD*Ht diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight.png b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight.png deleted file mode 100644 index 0b2ee76e268a72c50211e5704147e37b9e62c3ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 943 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eU!3HFY*6?ouQY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fIRt zPXT0ZVp4u-iLH_n$Rap^xU(cP4PjGWG1OZ?59)(t^bPe4^x{Of1#Hwo{D@^JuJdstlIQnbf>FD zhu^Mcz9(w#FSq8En7Z6+%C^1ng{c~>cNh<7O!WM_>|H>n)wUm+r+>C5&e&abBW}j5 zdHZ~XF1UHMsLs$|zrH`R`?HC6{ub%8Hmbt9>%^rubS!RE7H~TApIv|YfrI6Z<$Dgt z2(9@YwOn`;gSYDOqukvK=A1t-5VJNcay>`lS5Xtr4N?d5x8?f(<*as%czNK%vt8?^ zawG?odW$9Qy`%Yfr%~`pm4hO|8`7<_Q`_ZER-SuWBz!obEBnVqv(v9!=e9d7G;rIv zW9^oA#(#{h4c}D8&6?z#cty?ME2(cc$Oe%$RSP$L|(`s%FO-QO(ibp(s|NY!Nm Qa~K1Ir>mdKI;Vst007Ws#Q*>R diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@2x.png b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@2x.png deleted file mode 100644 index c8b9a874cf27641b060ff537de958ca197896774..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1786 zcmY*adt8!P8vgJWg4as%-Y20Zt{`fK1S(2~ZCEi{ikCzMMN3o4b{`E4ZT%SnxGR;rjY@l^(=gasjJz8u~a$@05Ti_;8YF(ENP%q zN&qiShP4R+E{HYikT6bgs34TKhY-t6#xUc! zF)U14a;k<60K_zcCQW7um|$A+;S@e0jfDKjAZYS67>fiyQUpmPWGHPP=+EV`z^xch zj2qG$27(}w7sn>hDFL6aYjz}Lf_RteZR5-Q88gaOJ0` z2$*TEDg4c!ME;{gVew;moKyjan*y%sGGn+$1tcVL&FIVcRHuN${;yLC|8rZK2C-`= zSRBR;`$b!GmAHly_VPF^jq{qmH;(v``G44FA0l?m{C|r1)agf5)2cU&i2d?x-mpDA zPGJC`3lF4_gQ%ud`nq6ifr6Ru+H?rY(UPmzc_urs75QuCCxBn_W&}x`* zu(qPxVEyg7*HuX5Z9R3Zbe_!Fh4D8EG9>n0Ks!REb;bGeI4e}T6 zIZiD{O8f^LD8t3nJj?7hhp(B$8#n4Fv=S8xX$NR8F?DBEu@T5LB=sN?$vPJ9xinr( zzmv3%=OlqBGLr*n+U)~cH7Ls+W!KBDSay%4%VQc#1AJ{|uIcBSDlb3m*&AXnz;b3h zVXJ1aLx**Lu#y;M_Z-5}<~mSb3jf;Y`=#ku<0>J-j|Z#-d{>jQ`! zojc1$*1btsiD?avNYLZxT{#VwHy#-IORQ;$BD?QMqsi-1+u|U^UoTH4k)LRf`0tkQ zd0u3u`_O(9l6B2o(DKx?-kdab|1sDE_(8XY+ZSAVf0Oks9HoS=2Au!(pHU@$GM;Qd zwUTB3tp6Tq&J3mo1f28-^+jBX*o zmr=<-^T!jOyPx!{;GYOud~4(?zUHAnQR$}4GzdKfZIWrdo<&bdtZ^hf-h!F+td>ok zw3g!S7{ijLIOVdxF(ErHSF{J-s=x;kkV+4ckMf#8yd@-^kEuR6STC%xD{wk@=Y(jl zFW*>pqpYFku`0rQb=%}I9cZsdzAR;Ae$H2nK)fSo61MwH6~62|Y;96dFRYuoohLNP zyk7OFN5N1%<>xL67i~6edu$F`kBMLCn5jIb#l2yoiU(Xz(K3Rem!qH#M(v!nv6Ab{ z9+oX_9G-=ouGE|BT}0W8&awMSuGTIOFK?;2?@P25xm;GYM|i)tYd*u+dc-_JXdBm9 z+~PipHxBftJ(0CX?PuJy5uG6%RTw}Uj!Q4h9H8GpoimQz?%z2;8C|>;`h7inZqfM2 z#on-mlM0KZ-|D0b%~EMU)hd4f19jGd&-4mvY2~ZCT(sO^wD5gBeR&3WW%j!8b}y@K z(B+0-k|GImd`95Dh?m{+9a4Wkv1BeUi4wbvIWlI%y}w#LYrF7`tobU6WOToAHLXpW zFRrFkcRI+S)4d)IBhX{vn1qVKx?D_I-NZFB7y_3y^|J?SKKqC0?{d{4^Tcm$a;NbO zmtVH~*4n*{v5~XqR3x?K+}aNl MxHE{->=&K=Z!8)8l>h($ diff --git a/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@3x.png b/FoodbLog/Pods/IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@3x.png deleted file mode 100644 index 95c43973b283158e67081158220a7f6d6edb8c8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1844 zcmV-42g~@0P)Px*?ny*JRA>donR{#$MI6Ux_pUt(z1_W&(#N%T*Q+STS7Lk+U*RDLDdAb#g!l-? z_=nM$7&Ruwm>4xN#+VpmjQWox_(Baa2*{(QC0-Z*DYbtY8$ns7zZ8S)1{69l1!5_&pG z$f8Ij(qDQULPUs`!I>=#h5-mfnCGBEXMKIW?|%Ub`TfrVW3^FS5XfAY=;*Agt7|aE zOHpS-Ru&2bK8G`Fc|ijzroBC13I)fDDQ*(&_j6LwwGz zHUna1yi4ub07pLkubKHD7W&JG&>5<)pPPx=SJQ!*LK03r45v1k*}sI zVz}{X;#V9|2k86vPe; z-_3f=>Z4<-4r5yUJC7vK#`<)p@f=t>3$gV|W#z8;@bF*8oE7ycfmr9UgtpxyD;}&% z^RvVRVI~p8R!LFzXqsl}ik=f_0!oYT^h$Ci5rn&qP;jXNZnb$NsXdlR^ci!-)UOIO z0hQ2pdt_+_AnrAaVNM|?wn>$8r#7rbjk)R8^8%WH(zLybBs&3hKPToAMWGeIKg2Xm z<#Gi#^9Eu)#}itISCLcL`xbIaF0|WZxBEamk%(})f|>;Zv7X_=eoXXHO!UP@B{)}( zf303cIfQe%jk!YV1p~3pu_XMcDDnl&p`}JK0F_ZnS`|q;45zw`xqR!>0%D!VHSHjr z(%{rGqZot2L~r%F<)c_O&KYz0)Ta%^I)_t-;M5RS_2mG;Dv&NtB4Y8BrQ-lUn~vsD zDGG@755dD;SstK-G;>f6v|HfRNjP;n50;5jiUwl6U=kly6eS9$R`5``Ctjz>@@atQ zwIN#q#GoK}3{FMh)XFR}V?x6M$2H%5LQdrg#giNkg$5sFq{19>F;WS(_Ex zftW}<5kH69lb=vs4~Q}r%M@V=ppt;v&tfG3VnPrMOO?t&3{?xD%2_N^ghkjF1#Ct8 zjQdX}Z(}W3A6y`cbT6RN>y$2+BJ}yJG1U_`9z};pHX7F_T?;F`nxyobQUW>f0J;eP z8*~W$NGa{6W1|bz{{Bd*fSgVK;AQ}{>JaH8rROe%CG?{z=Fy}KddmVD&z2(=qA8IxVvO4C>k#Rzo zMx)UfpR>iGAPLTJ_{mnlJje?I=MWiAEK_4K&78BrA-pWDz&i6SF6{?+K{#_DF>+z~ zP%Jjg=k&Iv4pmoI&vH2&+ptS5&;|4(9*_19UmR&38XEdXk4<*845+HAs&baAVmn0c zGYioUT-qxJ2M0&Yx$KA~Kwhs`k}78Iz?{i?L&Bus%<+&&*f^HcHCSi z8*@IN?;1Qavt8Q+gMr!#7oS`O9J)Ks~gWqa`Vx3Er(1(vEpEkMAGOYzEAuh$s16A?>{9 z5c^!^Ai_R8L6~4tlzal1M~a1E;CTVD&s6Ml72LVb^lK^oxLfVnh&W#L6<@A8WR118 z0l`_;fxW4bm!mZGL0DCvL>zaZ)|8w;?6VZ^#oOUbz$BNV?}dBSr%mx915*we=FGM1 zv(#iTcs_rpt2bgf4ErsUI>bIhiK3$&!&Jxr;1s2Ab*qsV__$SV6HuTwa08w#*`-}$ z7NKtd<|T97x=0pKQ$xc|RK#{b$Q)h*yY{QNv|r)lR=3kYjXvM4_`h^*?Z%w(@)EeTU&N*TCLgz}?F= - Icon -

-

IQKeyboardManager

-

- GitHub license - - -[![Build Status](https://travis-ci.org/hackiftekhar/IQKeyboardManager.svg)](https://travis-ci.org/hackiftekhar/IQKeyboardManager) -[![Coverage Status](http://img.shields.io/coveralls/hackiftekhar/IQKeyboardManager/master.svg)](https://coveralls.io/r/hackiftekhar/IQKeyboardManager?branch=master) -[![Code Health](https://landscape.io/github/hackiftekhar/IQKeyboardManager/master/landscape.svg?style=flat)](https://landscape.io/github/hackiftekhar/IQKeyboardManager/master) - - -Often while developing an app, We ran into an issues where the iPhone keyboard slide up and cover the `UITextField/UITextView`. `IQKeyboardManager` allows you to prevent issues of the keyboard sliding up and cover `UITextField/UITextView` without needing you to enter any code and no additional setup required. To use `IQKeyboardManager` you simply need to add source files to your project. - - -#### Key Features - -[![Issue Stats](http://issuestats.com/github/hackiftekhar/iqkeyboardmanager/badge/pr?style=flat)](http://issuestats.com/github/hackiftekhar/iqkeyboardmanager) -[![Issue Stats](http://issuestats.com/github/hackiftekhar/iqkeyboardmanager/badge/issue?style=flat)](http://issuestats.com/github/hackiftekhar/iqkeyboardmanager) - -1) `**CODELESS**, Zero Lines Of Code` - -2) `Works Automatically` - -3) `No More UIScrollView` - -4) `No More Subclasses` - -5) `No More Manual Work` - -6) `No More #imports` - -`IQKeyboardManager` works on all orientations, and with the toolbar. There are also nice optional features allowing you to customize the distance from the text field, add the next/previous done button as a keyboard UIToolbar, play sounds when the user navigations through the form and more. - - -## Screenshot -[![IQKeyboardManager](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/IQKeyboardManagerScreenshot.png)](http://youtu.be/6nhLw6hju2A) -[![Settings](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/IQKeyboardManagerSettings.png)](http://youtu.be/6nhLw6hju2A) - -## GIF animation -[![IQKeyboardManager](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/IQKeyboardManager.gif)](http://youtu.be/6nhLw6hju2A) - -## Video - - - -## Warning - -- **If you're planning to build SDK/library/framework and wants to handle UITextField/UITextView with IQKeyboardManager then you're totally going on wrong way.** I would never suggest to add IQKeyboardManager as dependency/adding/shipping with any third-party library, instead of adding IQKeyboardManager you should implement your custom solution to achieve same result. IQKeyboardManager is totally designed for projects to help developers for their convenience, it's not designed for adding/dependency/shipping with any third-party library, because **doing this could block adoption by other developers for their projects as well(who are not using IQKeyboardManager and implemented their custom solution to handle UITextField/UITextView thought the project).** -- If IQKeybaordManager conflicts with other third-party library, then it's developer responsibility to enable/disable IQKeyboardManager when presenting/dismissing third-party library UI. Third-party libraries are not responsible to handle IQKeyboardManager. - -## Requirements -[![Platform iOS](https://img.shields.io/badge/Platform-iOS-blue.svg?style=fla)]() - -#### IQKeyboardManager:- -[![Objective-c](https://img.shields.io/badge/Language-Objective C-blue.svg?style=flat)](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html) - -Minimum iOS Target: iOS 8.0 - -Minimum Xcode Version: Xcode 6.0.1 - -#### IQKeyboardManagerSwift:- -[![Swift 3.1 compatible](https://img.shields.io/badge/Language-Swift3-blue.svg?style=flat)](https://developer.apple.com/swift) - -Minimum iOS Target: iOS 8.0 - -Minimum Xcode Version: Xcode 8.0 - -#### Demo Project:- - -Minimum Xcode Version: Xcode 8.3.2 - - -Installation -========================== - -#### Installation with Cocoapod:- - -[![CocoaPods](https://img.shields.io/cocoapods/v/IQKeyboardManager.svg)](http://cocoadocs.org/docsets/IQKeyboardManager) - -**Note:-** -- 3.3.7 is the last iOS 7 supported version. - -***IQKeyboardManager (Objective-C):-*** IQKeyboardManager is available through [CocoaPods](http://cocoapods.org), to install -it simply add the following line to your Podfile: ([#9](https://github.com/hackiftekhar/IQKeyboardManager/issues/9)) - -*iOS8 and later* `pod 'IQKeyboardManager'` - -*iOS7* `pod 'IQKeyboardManagerSwift', '3.3.7'` - -***IQKeyboardManager (Swift):-*** IQKeyboardManagerSwift is available through [CocoaPods](http://cocoapods.org), to install -it simply add the following line to your Podfile: ([#236](https://github.com/hackiftekhar/IQKeyboardManager/issues/236)) - -*Swift 3.1 (Xcode 8.0)* - -`pod 'IQKeyboardManagerSwift'` - -*Or* - -`pod 'IQKeyboardManagerSwift', '4.0.10'` - -*Swift 3.1 (Xcode 8.3)* `pod 'IQKeyboardManagerSwift', '4.0.10'` - -*Swift 3.0(3.0.2) (Xcode 8.2)* `pod 'IQKeyboardManagerSwift', '4.0.8'` - -*Swift 2.2 or 2.3 (Xcode 7.3)* `pod 'IQKeyboardManagerSwift', '4.0.5'` - -*Swift 2.1.1 (Xcode 7.2)* `pod 'IQKeyboardManagerSwift', '4.0.0'` - -*Swift 2.0 (Xcode 7.0)* `pod 'IQKeyboardManagerSwift', '3.3.3.1'` - -In AppDelegate.swift, just import IQKeyboardManagerSwift framework and enable IQKeyboardManager. - -```swift -import IQKeyboardManagerSwift - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - - var window: UIWindow? - - func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { - - IQKeyboardManager.sharedManager().enable = true - - return true - } -} -``` - -#### Installation with Carthage - -[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. - -You can install Carthage with [Homebrew](http://brew.sh/) using the following command: - -```bash -$ brew update -$ brew install carthage -``` - -To integrate `IQKeyboardManger` or `IQKeyboardManagerSwift` into your Xcode project using Carthage, specify it in your `Cartfile`: - -```ogdl -github "hackiftekhar/IQKeyboardManager" -``` - -Run `carthage` to build the frameworks and drag the appropriate framework (`IQKeyboardManager.framework` or `IQKeyboardManagerSwift.framework`) into your Xcode project according to your need. Make sure to add only one framework and not both. - - -#### Installation with Source Code:- - -[![Github tag](https://img.shields.io/github/tag/hackiftekhar/iqkeyboardmanager.svg)]() - - - -***IQKeyboardManager (Objective-C):-*** Just ***drag and drop*** `IQKeyboardManager` directory from demo project to your project. That's it. - -***IQKeyboardManager (Swift):-*** ***Drag and drop*** `IQKeyboardManagerSwift` directory from demo project to your project - -In AppDelegate.swift, just enable IQKeyboardManager. - -```swift -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - - var window: UIWindow? - - func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { - - IQKeyboardManager.sharedManager().enable = true - - return true - } -} -``` - - -## Known Issues:- - -You can find known issues list [here](https://github.com/hackiftekhar/IQKeyboardManager/blob/master/KNOWN%20ISSUES.md). - -Manual Management:- ---- - -You can find some manual management tweaks & examples [here](https://github.com/hackiftekhar/IQKeyboardManager/blob/master/MANUAL%20MANAGEMENT.md). - - - -## Flow Diagram -[![IQKeyboardManager CFD](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/master/Screenshot/IQKeyboardManagerFlowDiagram.jpg)](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/master/Screenshot/IQKeyboardManagerFlowDiagram.jpg) - -If you would like to see detailed Flow diagram then see [here](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/IQKeyboardManagerCFD.jpg). - - - -## Properties and functions usage:- - -You can find some documentation about properties, methods and their uses [here](https://github.com/hackiftekhar/IQKeyboardManager/blob/master/PROPERTIES%20%26%20FUNCTIONS.md). - - -LICENSE ---- -Distributed under the MIT License. - -Contributions ---- -Any contribution is more than welcome! You can contribute through pull requests and issues on GitHub. - -Author ---- -If you wish to contact me, email at: hack.iftekhar@gmail.com diff --git a/FoodbLog/Pods/Manifest.lock b/FoodbLog/Pods/Manifest.lock deleted file mode 100644 index 463da6c..0000000 --- a/FoodbLog/Pods/Manifest.lock +++ /dev/null @@ -1,74 +0,0 @@ -PODS: - - AFNetworking (2.6.1): - - AFNetworking/NSURLConnection (= 2.6.1) - - AFNetworking/NSURLSession (= 2.6.1) - - AFNetworking/Reachability (= 2.6.1) - - AFNetworking/Security (= 2.6.1) - - AFNetworking/Serialization (= 2.6.1) - - AFNetworking/UIKit (= 2.6.1) - - AFNetworking/NSURLConnection (2.6.1): - - AFNetworking/Reachability - - AFNetworking/Security - - AFNetworking/Serialization - - AFNetworking/NSURLSession (2.6.1): - - AFNetworking/Reachability - - AFNetworking/Security - - AFNetworking/Serialization - - AFNetworking/Reachability (2.6.1) - - AFNetworking/Security (2.6.1) - - AFNetworking/Serialization (2.6.1) - - AFNetworking/UIKit (2.6.1): - - AFNetworking/NSURLConnection - - AFNetworking/NSURLSession - - Bolts/Tasks (1.3.0) - - ChameleonFramework (2.0.4): - - ChameleonFramework/Default (= 2.0.4) - - ChameleonFramework/Default (2.0.4) - - FlatUIKit (1.6.2) - - IQKeyboardManager (4.0.11) - - Parse (1.9.0): - - Bolts/Tasks (>= 1.3.0) - - ParseUI (1.2.0): - - Bolts/Tasks (~> 1.3) - - Parse (~> 1.9) - - SDWebImage (3.7.3): - - SDWebImage/Core (= 3.7.3) - - SDWebImage/Core (3.7.3) - - Unirest (1.1.4) - -DEPENDENCIES: - - AFNetworking (~> 2.6) - - ChameleonFramework - - FlatUIKit - - IQKeyboardManager (= 4.0.11) - - Parse (~> 1.9) - - ParseUI (~> 1.2) - - SDWebImage (~> 3.7) - - Unirest (~> 1.1.4) - -SPEC REPOS: - trunk: - - AFNetworking - - Bolts - - ChameleonFramework - - FlatUIKit - - IQKeyboardManager - - Parse - - ParseUI - - SDWebImage - - Unirest - -SPEC CHECKSUMS: - AFNetworking: cd116683fd5dd1a34715a3c9410b6d7b8745d8b9 - Bolts: 805a4a87413e49d4a0c2b7d469084cbc46b09342 - ChameleonFramework: 5abe69b1f2a6cc79c3c435fcd9d3d855748225ee - FlatUIKit: 1b41f0d4952ce8d970d8479ce79df54a960242c4 - IQKeyboardManager: 83eae5318483a34eb2069ef413d195b97605232e - Parse: 712efbc476d4f47b0f96b70db7e53101575753aa - ParseUI: 2b37a0bc692a3e7666cf0c37b5521dfddd74a1af - SDWebImage: 1d2b1a1efda1ade1b00b6f8498865f8ddedc8a84 - Unirest: 5e4d93eaf32463bf619a4ecd3bbc8c32acf21eac - -PODFILE CHECKSUM: 09b53eef3412218e3591c5319fce8435cc752a95 - -COCOAPODS: 1.11.3 diff --git a/FoodbLog/Pods/Parse/LICENSE b/FoodbLog/Pods/Parse/LICENSE deleted file mode 100644 index d98b0e0..0000000 --- a/FoodbLog/Pods/Parse/LICENSE +++ /dev/null @@ -1,30 +0,0 @@ -BSD License - -For Parse iOS/OSX SDK software - -Copyright (c) 2015-present, Parse, LLC. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name Parse nor the names of its contributors may be used to - endorse or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/FoodbLog/Pods/Parse/Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h b/FoodbLog/Pods/Parse/Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h deleted file mode 100644 index cff7a3e..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h +++ /dev/null @@ -1,52 +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. - */ - -#import - -#import - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFACL; - -NS_ASSUME_NONNULL_BEGIN - -@interface PFDefaultACLController : NSObject - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -// TODO: (nlutsenko, richardross) Make it not terrible aka don't have singletons -+ (instancetype)defaultController; -+ (void)clearDefaultController; - -///-------------------------------------- -/// @name Default ACL -///-------------------------------------- - -/*! - Get the default ACL managed by this controller. - - @return A task that returns the ACL encapsulated by this controller. - */ -- (BFTask *)getDefaultACLAsync; - -/*! - Set the new default default ACL to be encapsulated in this controller. - - @param acl The new ACL. Will be copied. - @param accessForCurrentUser Whether or not we should add special access for the current user on this ACL. - - @return A task that returns the new (copied) ACL now encapsulated in this controller. - */ -- (BFTask *)setDefaultACLAsync:(PFACL *)acl withCurrentUserAccess:(BOOL)accessForCurrentUser; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m b/FoodbLog/Pods/Parse/Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m deleted file mode 100644 index 82bd638..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m +++ /dev/null @@ -1,99 +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. - */ - -#import "PFDefaultACLController.h" - -#import - -#import "PFACLPrivate.h" -#import "PFAsyncTaskQueue.h" -#import "PFCoreManager.h" -#import "PFCurrentUserController.h" -#import "Parse_Private.h" - -@implementation PFDefaultACLController { - PFAsyncTaskQueue *_taskQueue; - - PFACL *_defaultACL; - BOOL _useCurrentUser; - - PFUser *_lastCurrentUser; - PFACL *_defaultACLWithCurrentUser; -} - -static PFDefaultACLController *defaultController_; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -+ (instancetype)defaultController { - if (!defaultController_) { - defaultController_ = [[self alloc] init]; - } - return defaultController_; -} - -+ (void)clearDefaultController { - defaultController_ = nil; -} - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _taskQueue = [[PFAsyncTaskQueue alloc] init]; - - return self; -} - -///-------------------------------------- -#pragma mark - ACL -///-------------------------------------- - -- (BFTask PF_GENERIC(PFACL *)*)getDefaultACLAsync { - return [_taskQueue enqueue:^id(BFTask *task) { - if (!_defaultACL || !_useCurrentUser) { - return _defaultACL; - } - - PFCurrentUserController *currentUserController = [Parse _currentManager].coreManager.currentUserController; - return [[currentUserController getCurrentObjectAsync] continueWithBlock:^id(BFTask *task) { - PFUser *currentUser = task.result; - if (!currentUser) { - return _defaultACL; - } - - if (currentUser != _lastCurrentUser) { - _defaultACLWithCurrentUser = [_defaultACL createUnsharedCopy]; - [_defaultACLWithCurrentUser setShared:YES]; - [_defaultACLWithCurrentUser setReadAccess:YES forUser:currentUser]; - [_defaultACLWithCurrentUser setWriteAccess:YES forUser:currentUser]; - _lastCurrentUser = currentUser; - } - return _defaultACLWithCurrentUser; - }]; - }]; -} - -- (BFTask PF_GENERIC(PFACL *)*)setDefaultACLAsync:(PFACL *)acl withCurrentUserAccess:(BOOL)accessForCurrentUser { - return [_taskQueue enqueue:^id(BFTask *task) { - _defaultACLWithCurrentUser = nil; - _lastCurrentUser = nil; - - _defaultACL = [acl createUnsharedCopy]; - [_defaultACL setShared:YES]; - - _useCurrentUser = accessForCurrentUser; - - return _defaultACL; - }]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/ACL/PFACLPrivate.h b/FoodbLog/Pods/Parse/Parse/Internal/ACL/PFACLPrivate.h deleted file mode 100644 index 6a641d6..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/ACL/PFACLPrivate.h +++ /dev/null @@ -1,42 +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. - */ - -#import - -#import "PFACL.h" - -@class PFUser; - -@interface PFACL (Private) - -// Internal commands - -/* - Gets the encoded format for an ACL. - */ -- (NSDictionary *)encodeIntoDictionary; - -/* - Creates a new ACL object from an existing dictionary. - */ -- (instancetype)initWithDictionary:(NSDictionary *)dictionary; - -/*! - Creates an ACL from its encoded format. - */ -+ (instancetype)ACLWithDictionary:(NSDictionary *)dictionary; - -- (void)setShared:(BOOL)shared; -- (BOOL)isShared; -- (instancetype)createUnsharedCopy; -- (BOOL)hasUnresolvedUser; - -+ (instancetype)defaultACL; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFACLState.h b/FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFACLState.h deleted file mode 100644 index 90e06af..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFACLState.h +++ /dev/null @@ -1,42 +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. - */ - -#import "PFBaseState.h" - -NS_ASSUME_NONNULL_BEGIN - -@class PFMutableACLState; - -typedef void (^PFACLStateMutationBlock)(PFMutableACLState *); - -@interface PFACLState : PFBaseState - -@property (nonatomic, copy, readonly) NSDictionary *permissions; -@property (nonatomic, assign, readonly, getter=isShared) BOOL shared; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_DESIGNATED_INITIALIZER; -- (instancetype)initWithState:(PFACLState *)otherState NS_DESIGNATED_INITIALIZER; -- (instancetype)initWithState:(PFACLState *)otherState mutatingBlock:(PFACLStateMutationBlock)mutatingBlock; - -+ (instancetype)stateWithState:(PFACLState *)otherState; -+ (instancetype)stateWithState:(PFACLState *)otherState mutatingBlock:(PFACLStateMutationBlock)mutatingBlock; - -///-------------------------------------- -/// @name Mutating -///-------------------------------------- - -- (instancetype)copyByMutatingWithBlock:(PFACLStateMutationBlock)mutatingBlock NS_RETURNS_RETAINED; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFACLState.m b/FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFACLState.m deleted file mode 100644 index a80649e..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFACLState.m +++ /dev/null @@ -1,87 +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. - */ - -#import "PFACLState_Private.h" - -#import "PFMutableACLState.h" - -@implementation PFACLState - -///-------------------------------------- -#pragma mark - PFBaseStateSubclass -///-------------------------------------- - -+ (NSDictionary *)propertyAttributes { - return @{ - @"permissions": [PFPropertyAttributes attributes], - @"shared": [PFPropertyAttributes attributes], - }; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _permissions = [NSDictionary dictionary]; - _shared = NO; - - return self; -} - -- (instancetype)initWithState:(PFACLState *)otherState { - return [super initWithState:otherState]; -} - -- (instancetype)initWithState:(PFACLState *)otherState mutatingBlock:(PFACLStateMutationBlock)mutatingBlock { - self = [self initWithState:otherState]; - if (!self) return nil; - - // Make permissions mutable for the duration of the block. - _permissions = [_permissions mutableCopy]; - - mutatingBlock((PFMutableACLState *)self); - - _permissions = [_permissions copy]; - - return self; -} - -+ (instancetype)stateWithState:(PFACLState *)otherState { - return [super stateWithState:otherState]; -} - -+ (instancetype)stateWithState:(PFACLState *)otherState mutatingBlock:(PFACLStateMutationBlock)mutatingBlock { - return [[self alloc] initWithState:otherState mutatingBlock:mutatingBlock]; -} - -///-------------------------------------- -#pragma mark - Copying -///-------------------------------------- - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[PFACLState allocWithZone:zone] initWithState:self]; -} - -- (instancetype)mutableCopyWithZone:(NSZone *)zone { - return [[PFMutableACLState allocWithZone:zone] initWithState:self]; -} - -///-------------------------------------- -#pragma mark - Mutating -///-------------------------------------- - -- (instancetype)copyByMutatingWithBlock:(PFACLStateMutationBlock)mutationsBlock { - return [[PFACLState alloc] initWithState:self mutatingBlock:mutationsBlock]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFACLState_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFACLState_Private.h deleted file mode 100644 index a3ed153..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFACLState_Private.h +++ /dev/null @@ -1,21 +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. - */ - -#import "PFACLState.h" - -@interface PFACLState () { -@protected - NSDictionary *_permissions; - BOOL _shared; -} - -@property (nonatomic, copy, readwrite) NSDictionary *permissions; -@property (nonatomic, assign, readwrite, getter=isShared) BOOL shared; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFMutableACLState.h b/FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFMutableACLState.h deleted file mode 100644 index d2bda0c..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFMutableACLState.h +++ /dev/null @@ -1,17 +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. - */ - -#import "PFACLState.h" - -@interface PFMutableACLState : PFACLState - -@property (nonatomic, copy, readwrite) NSMutableDictionary *permissions; -@property (nonatomic, assign, readwrite, getter=isShared) BOOL shared; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFMutableACLState.m b/FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFMutableACLState.m deleted file mode 100644 index 5361b8d..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/ACL/State/PFMutableACLState.m +++ /dev/null @@ -1,32 +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. - */ - -#import "PFMutableACLState.h" - -#import "PFACLState_Private.h" - -@implementation PFMutableACLState - -@dynamic permissions; -@dynamic shared; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _permissions = [NSMutableDictionary dictionary]; - - return self; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Analytics/Controller/PFAnalyticsController.h b/FoodbLog/Pods/Parse/Parse/Internal/Analytics/Controller/PFAnalyticsController.h deleted file mode 100644 index 0681ec4..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Analytics/Controller/PFAnalyticsController.h +++ /dev/null @@ -1,61 +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. - */ - -#import - -#import - -#import "PFDataProvider.h" - -@class BFTask PF_GENERIC(__covariant BFGenericType); - -@interface PFAnalyticsController : NSObject - -@property (nonatomic, weak, readonly) id dataSource; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; - -+ (instancetype)controllerWithDataSource:(id)dataSource; - -///-------------------------------------- -/// @name Track Event -///-------------------------------------- - -/*! - @abstract Tracks this application being launched. If this happened as the result of the - user opening a push notification, this method sends along information to - correlate this open with that push. - - @param payload The Remote Notification payload. - @param sessionToken Current user session token. - - @returns `BFTask` with result set to `@YES`. - */ -- (BFTask *)trackAppOpenedEventAsyncWithRemoteNotificationPayload:(NSDictionary *)payload - sessionToken:(NSString *)sessionToken; - -/*! - @abstract Tracks the occurrence of a custom event with additional dimensions. - - @param name Event name. - @param dimensions `NSDictionary` of information by which to segment this event. - @param sessionToken Current user session token. - - @returns `BFTask` with result set to `@YES`. - */ -- (BFTask *)trackEventAsyncWithName:(NSString *)name - dimensions:(NSDictionary *)dimensions - sessionToken:(NSString *)sessionToken; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Analytics/Controller/PFAnalyticsController.m b/FoodbLog/Pods/Parse/Parse/Internal/Analytics/Controller/PFAnalyticsController.m deleted file mode 100644 index b77eba6..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Analytics/Controller/PFAnalyticsController.m +++ /dev/null @@ -1,100 +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. - */ - -#import "PFAnalyticsController.h" - -#import "BFTask+Private.h" -#import "PFAnalyticsUtilities.h" -#import "PFAssert.h" -#import "PFEventuallyQueue.h" -#import "PFRESTAnalyticsCommand.h" - -@interface PFAnalyticsController () - -@property (nonatomic, weak, readonly) PFEventuallyQueue *eventuallyQueue; - -@end - -@implementation PFAnalyticsController - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithDataSource:(id)dataSource { - self = [super init]; - if (!self) return nil; - - _dataSource = dataSource; - - return self; -} - -+ (instancetype)controllerWithDataSource:(id)dataSource { - return [[self alloc] initWithDataSource:dataSource]; -} - -///-------------------------------------- -#pragma mark - Track Event -///-------------------------------------- - -- (BFTask *)trackAppOpenedEventAsyncWithRemoteNotificationPayload:(NSDictionary *)payload - sessionToken:(NSString *)sessionToken { - @weakify(self); - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - // If the Remote Notification payload had a message sent along with it, make - // sure to send that along so the server can identify "app opened from push" - // instead. - id alert = payload[@"aps"][@"alert"]; - NSString *pushDigest = (alert ? [PFAnalyticsUtilities md5DigestFromPushPayload:alert] : nil); - - PFRESTCommand *command = [PFRESTAnalyticsCommand trackAppOpenedEventCommandWithPushHash:pushDigest - sessionToken:sessionToken]; - return [self.eventuallyQueue enqueueCommandInBackground:command]; - }] continueWithSuccessResult:@YES]; -} - -- (BFTask *)trackEventAsyncWithName:(NSString *)name - dimensions:(NSDictionary *)dimensions - sessionToken:(NSString *)sessionToken { - PFParameterAssert([[name stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length], - @"A name for the custom event must be provided."); - - if (dimensions) { - [dimensions enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - PFParameterAssert([key isKindOfClass:[NSString class]] && [obj isKindOfClass:[NSString class]], - @"trackEvent dimensions expect keys and values of type NSString."); - }]; - } - - @weakify(self); - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - NSDictionary *encodedDimensions = [[PFNoObjectEncoder objectEncoder] encodeObject:dimensions]; - PFRESTCommand *command = [PFRESTAnalyticsCommand trackEventCommandWithEventName:name - dimensions:encodedDimensions - sessionToken:sessionToken]; - return [self.eventuallyQueue enqueueCommandInBackground:command]; - }] continueWithSuccessResult:@YES]; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (PFEventuallyQueue *)eventuallyQueue { - return self.dataSource.eventuallyQueue; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Analytics/PFAnalytics_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/Analytics/PFAnalytics_Private.h deleted file mode 100644 index d001798..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Analytics/PFAnalytics_Private.h +++ /dev/null @@ -1,17 +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. - */ - -#import - -/*! - Predefined events - AppOpened, CrashReport - Coming soon - Log, ... - */ -extern NSString *const PFAnalyticsEventAppOpened; -extern NSString *const PFAnalyticsEventCrashReport; diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h b/FoodbLog/Pods/Parse/Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h deleted file mode 100644 index 69f581f..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h +++ /dev/null @@ -1,28 +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. - */ - -#import - -@interface PFAnalyticsUtilities : NSObject - -/*! - Serializes and hexdigests an alert payload into a "push_hash" identifier - for use in Analytics. - Limitedly flexible - the payload is the value under the "alert" key in the - "aps" hash of a remote notification, so we can reasonably assume that the - complexity of its structure is limited to that accepted by Apple (in its - "The Notification Payload" docs) - - @param payload `alert` value from a push notification. - - @returns md5 identifier. - */ -+ (NSString *)md5DigestFromPushPayload:(id)payload; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m b/FoodbLog/Pods/Parse/Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m deleted file mode 100644 index 9107d18..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m +++ /dev/null @@ -1,38 +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. - */ - -#import "PFAnalyticsUtilities.h" - -#import "PFHash.h" - -@implementation PFAnalyticsUtilities - -+ (NSString *)md5DigestFromPushPayload:(id)payload { - if (!payload || payload == [NSNull null]) { - payload = @""; - } else if ([payload isKindOfClass:[NSDictionary class]]) { - NSDictionary *dict = payload; - NSArray *keys = [[dict allKeys] sortedArrayUsingSelector:@selector(compare:)]; - NSMutableArray *components = [NSMutableArray arrayWithCapacity:[dict count] * 2]; - [keys enumerateObjectsUsingBlock:^(id key, NSUInteger idx, BOOL *stop) { - [components addObject:key]; - - // alert[@"loc-args"] can be an NSArray - id value = [dict objectForKey:key]; - if ([value isKindOfClass:[NSArray class]]) { - value = [value componentsJoinedByString:@""]; - } - [components addObject:value]; - }]; - payload = [components componentsJoinedByString:@""]; - } - return PFMD5HashFromString([payload description]); -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/BFTask+Private.h b/FoodbLog/Pods/Parse/Parse/Internal/BFTask+Private.h deleted file mode 100644 index 0d01c82..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/BFTask+Private.h +++ /dev/null @@ -1,71 +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. - */ - -#import - -#import -#import - -#import "PFInternalUtils.h" - -@interface BFExecutor (Background) - -+ (instancetype)defaultPriorityBackgroundExecutor; - -@end - -@interface BFTask (Private) - -- (instancetype)continueAsyncWithBlock:(BFContinuationBlock)block; -- (instancetype)continueAsyncWithSuccessBlock:(BFContinuationBlock)block; - -- (instancetype)continueWithResult:(id)result; -- (instancetype)continueWithSuccessResult:(id)result; - -- (instancetype)continueWithMainThreadResultBlock:(PFIdResultBlock)resultBlock - executeIfCancelled:(BOOL)executeIfCancelled; -- (instancetype)continueWithMainThreadBooleanResultBlock:(PFBooleanResultBlock)resultBlock - executeIfCancelled:(BOOL)executeIfCancelled; - -/*! - Adds a continuation to the task that will run the given block on the main - thread sometime after this task has finished. If the task was cancelled, - the block will never be called. If the task had an exception, the exception - will be throw on the main thread instead of running the block. Otherwise, - the block will be given the result and error of this task. - @returns A new task that will be finished once the block has run. - */ -- (BFTask *)thenCallBackOnMainThreadAsync:(void(^)(id result, NSError *error))block; - -/*! - Identical to thenCallBackOnMainThreadAsync:, except that the result of a successful - task will be converted to a BOOL using the boolValue method, and that will - be passed to the block instead of the original result. - */ -- (BFTask *)thenCallBackOnMainThreadWithBoolValueAsync:(void(^)(BOOL result, NSError *error))block; - -/*! - Same as `waitForResult:error withMainThreadWarning:YES` - */ -- (id)waitForResult:(NSError **)error; - -/*! - Waits until this operation is completed, then returns its value. - This method is inefficient and consumes a thread resource while its running. - - @param error If an error occurs, upon return contains an `NSError` object that describes the problem. - @param warningEnabled `BOOL` value that - - @return Returns a `self.result` if task completed. `nil` - if cancelled. - */ -- (id)waitForResult:(NSError **)error withMainThreadWarning:(BOOL)warningEnabled; - -@end - -extern void forceLoadCategory_BFTask_Private(); diff --git a/FoodbLog/Pods/Parse/Parse/Internal/BFTask+Private.m b/FoodbLog/Pods/Parse/Parse/Internal/BFTask+Private.m deleted file mode 100644 index 5ed4959..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/BFTask+Private.m +++ /dev/null @@ -1,130 +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. - */ - -#import "BFTask+Private.h" - -#import -#import - -#import "PFLogging.h" - -@implementation BFExecutor (Background) - -+ (instancetype)defaultPriorityBackgroundExecutor { - static BFExecutor *executor; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - executor = [BFExecutor executorWithDispatchQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)]; - }); - return executor; -} - -@end - -@implementation BFTask (Private) - -- (instancetype)continueAsyncWithBlock:(BFContinuationBlock)block { - return [self continueWithExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:block]; -} - -- (instancetype)continueAsyncWithSuccessBlock:(BFContinuationBlock)block { - return [self continueWithExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withSuccessBlock:block]; -} - -- (instancetype)continueWithResult:(id)result { - return [self continueWithBlock:^id(BFTask *task) { - return result; - }]; -} - -- (instancetype)continueWithSuccessResult:(id)result { - return [self continueWithSuccessBlock:^id(BFTask *task) { - return result; - }]; -} - -- (instancetype)continueWithMainThreadResultBlock:(PFIdResultBlock)resultBlock - executeIfCancelled:(BOOL)executeIfCancelled { - if (!resultBlock) { - return self; - } - return [self continueWithExecutor:[BFExecutor mainThreadExecutor] - withBlock:^id(BFTask *task) { - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - - @try { - if (self.exception) { - //TODO: (nlutsenko) Add more context, by passing a `_cmd` from the caller method - PFLogException(self.exception); - @throw self.exception; - } - - if (!self.cancelled || executeIfCancelled) { - resultBlock(self.result, self.error); - } - } @finally { - tcs.result = nil; - } - - return tcs.task; - }]; -} - -- (instancetype)continueWithMainThreadBooleanResultBlock:(PFBooleanResultBlock)resultBlock - executeIfCancelled:(BOOL)executeIfCancelled { - return [self continueWithMainThreadResultBlock:^(id object, NSError *error) { - resultBlock([object boolValue], error); - } executeIfCancelled:executeIfCancelled]; -} - -- (BFTask *)thenCallBackOnMainThreadAsync:(void(^)(id result, NSError *error))block { - return [self continueWithMainThreadResultBlock:block executeIfCancelled:NO]; -} - -- (BFTask *)thenCallBackOnMainThreadWithBoolValueAsync:(void(^)(BOOL result, NSError *error))block { - if (!block) { - return self; - } - return [self thenCallBackOnMainThreadAsync:^(id blockResult, NSError *blockError) { - block([blockResult boolValue], blockError); - }]; -} - -- (id)waitForResult:(NSError **)error { - return [self waitForResult:error withMainThreadWarning:YES]; -} - -- (id)waitForResult:(NSError **)error withMainThreadWarning:(BOOL)warningEnabled { - if (warningEnabled) { - [self waitUntilFinished]; - } else { - dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); - [self continueWithBlock:^id(BFTask *task) { - dispatch_semaphore_signal(semaphore); - return nil; - }]; - dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); - } - if (self.cancelled) { - return nil; - } else if (self.exception) { - @throw self.exception; - } - if (self.error && error) { - *error = self.error; - } - return self.result; -} - -@end - -void forceLoadCategory_BFTask_Private() { - NSString *string = nil; - [string description]; -} diff --git a/FoodbLog/Pods/Parse/Parse/Internal/CloudCode/PFCloudCodeController.h b/FoodbLog/Pods/Parse/Parse/Internal/CloudCode/PFCloudCodeController.h deleted file mode 100644 index 8532572..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/CloudCode/PFCloudCodeController.h +++ /dev/null @@ -1,47 +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. - */ - -#import - -#import - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@protocol PFCommandRunning; - -@interface PFCloudCodeController : NSObject - -@property (nonatomic, strong, readonly) id commandRunner; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithCommandRunner:(id)commandRunner NS_DESIGNATED_INITIALIZER; - -+ (instancetype)controllerWithCommandRunner:(id)commandRunner; - -///-------------------------------------- -/// @name Cloud Functions -///-------------------------------------- - -/*! - Calls a Cloud Code function and returns a result of it's execution. - - @param functionName Function name to call. - @param parameters Parameters to pass. (can't be nil). - @param sessionToken Session token to use. - - @returns `BFTask` with a result set to a result of Cloud Function. - */ -- (BFTask *)callCloudCodeFunctionAsync:(NSString *)functionName - withParameters:(NSDictionary *)parameters - sessionToken:(NSString *)sessionToken; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/CloudCode/PFCloudCodeController.m b/FoodbLog/Pods/Parse/Parse/Internal/CloudCode/PFCloudCodeController.m deleted file mode 100644 index 212e47a..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/CloudCode/PFCloudCodeController.m +++ /dev/null @@ -1,66 +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. - */ - -#import "PFCloudCodeController.h" - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFCommandResult.h" -#import "PFCommandRunning.h" -#import "PFDecoder.h" -#import "PFEncoder.h" -#import "PFInternalUtils.h" -#import "PFRESTCloudCommand.h" - -@implementation PFCloudCodeController - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithCommandRunner:(id)commandRunner { - self = [super init]; - if (!self) return nil; - - _commandRunner = commandRunner; - - return self; -} - -+ (instancetype)controllerWithCommandRunner:(id)commandRunner { - return [[self alloc] initWithCommandRunner:commandRunner]; -} - -///-------------------------------------- -#pragma mark - Cloud Functions -///-------------------------------------- - -- (BFTask *)callCloudCodeFunctionAsync:(NSString *)functionName - withParameters:(NSDictionary *)parameters - sessionToken:(NSString *)sessionToken { - @weakify(self); - return [[[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - NSDictionary *encodedParameters = [[PFNoObjectEncoder objectEncoder] encodeObject:parameters]; - PFRESTCloudCommand *command = [PFRESTCloudCommand commandForFunction:functionName - withParameters:encodedParameters - sessionToken:sessionToken]; - return [self.commandRunner runCommandAsync:command withOptions:PFCommandRunningOptionRetryIfFailed]; - }] continueWithSuccessBlock:^id(BFTask *task) { - return ((PFCommandResult *)(task.result)).result[@"result"]; - }] continueWithSuccessBlock:^id(BFTask *task) { - return [[PFDecoder objectDecoder] decodeObject:task.result]; - }]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunning.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunning.h deleted file mode 100644 index c07f754..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunning.h +++ /dev/null @@ -1,96 +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. - */ - -#import - -#import - -#import "PFDataProvider.h" - -@class BFCancellationToken; -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFCommandResult; -@class PFRESTCommand; -@protocol PFNetworkCommand; - -typedef NS_OPTIONS(NSUInteger, PFCommandRunningOptions) { - PFCommandRunningOptionRetryIfFailed = 1 << 0, -}; - -extern NSTimeInterval const PFCommandRunningDefaultRetryDelay; - -NS_ASSUME_NONNULL_BEGIN - -@protocol PFCommandRunning - -@property (nonatomic, weak, readonly) id dataSource; - -@property (nonatomic, copy, readonly) NSString *applicationId; -@property (nonatomic, copy, readonly) NSString *clientKey; - -@property (nonatomic, assign) NSTimeInterval initialRetryDelay; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)initWithDataSource:(id)dataSource - applicationId:(NSString *)applicationId - clientKey:(NSString *)clientKey; -+ (instancetype)commandRunnerWithDataSource:(id)dataSource - applicationId:(NSString *)applicationId - clientKey:(NSString *)clientKey; - -///-------------------------------------- -/// @name Data Commands -///-------------------------------------- - -/*! - Run command. - - @param command Command to run. - @param options Options to use to run command. - - @returns `BFTask` with result set to `PFCommandResult`. - */ -- (BFTask *)runCommandAsync:(PFRESTCommand *)command - withOptions:(PFCommandRunningOptions)options; - -/*! - Run command. - - @param command Command to run. - @param options Options to use to run command. - @param cancellationToken Operation to use as a cancellation token. - - @returns `BFTask` with result set to `PFCommandResult`. - */ -- (BFTask *)runCommandAsync:(PFRESTCommand *)command - withOptions:(PFCommandRunningOptions)options - cancellationToken:(nullable BFCancellationToken *)cancellationToken; - -///-------------------------------------- -/// @name File Commands -///-------------------------------------- - -- (BFTask *)runFileUploadCommandAsync:(PFRESTCommand *)command - withContentType:(NSString *)contentType - contentSourceFilePath:(NSString *)sourceFilePath - options:(PFCommandRunningOptions)options - cancellationToken:(nullable BFCancellationToken *)cancellationToken - progressBlock:(nullable PFProgressBlock)progressBlock; - -- (BFTask *)runFileDownloadCommandAsyncWithFileURL:(NSURL *)url - targetFilePath:(NSString *)filePath - cancellationToken:(nullable BFCancellationToken *)cancellationToken - progressBlock:(nullable PFProgressBlock)progressBlock; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunning.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunning.m deleted file mode 100644 index 6b0c49f..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunning.m +++ /dev/null @@ -1,12 +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. - */ - -#import "PFCommandRunning.h" - -NSTimeInterval const PFCommandRunningDefaultRetryDelay = 1.0; diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h deleted file mode 100644 index 7531fde..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h +++ /dev/null @@ -1,35 +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. - */ - -#import - -///-------------------------------------- -/// @name Running -///-------------------------------------- - -extern uint8_t const PFCommandRunningDefaultMaxAttemptsCount; - -///-------------------------------------- -/// @name Headers -///-------------------------------------- - -extern NSString *const PFCommandHeaderNameApplicationId; -extern NSString *const PFCommandHeaderNameClientKey; -extern NSString *const PFCommandHeaderNameClientVersion; -extern NSString *const PFCommandHeaderNameInstallationId; -extern NSString *const PFCommandHeaderNameAppBuildVersion; -extern NSString *const PFCommandHeaderNameAppDisplayVersion; -extern NSString *const PFCommandHeaderNameOSVersion; -extern NSString *const PFCommandHeaderNameSessionToken; - -///-------------------------------------- -/// @name HTTP Method Override -///-------------------------------------- - -extern NSString *const PFCommandParameterNameMethodOverride; diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m deleted file mode 100644 index 3ea747f..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m +++ /dev/null @@ -1,23 +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. - */ - -#import "PFCommandRunningConstants.h" - -uint8_t const PFCommandRunningDefaultMaxAttemptsCount = 5; - -NSString *const PFCommandHeaderNameApplicationId = @"X-Parse-Application-Id"; -NSString *const PFCommandHeaderNameClientKey = @"X-Parse-Client-Key"; -NSString *const PFCommandHeaderNameClientVersion = @"X-Parse-Client-Version"; -NSString *const PFCommandHeaderNameInstallationId = @"X-Parse-Installation-Id"; -NSString *const PFCommandHeaderNameAppBuildVersion = @"X-Parse-App-Build-Version"; -NSString *const PFCommandHeaderNameAppDisplayVersion = @"X-Parse-App-Display-Version"; -NSString *const PFCommandHeaderNameOSVersion = @"X-Parse-OS-Version"; -NSString *const PFCommandHeaderNameSessionToken = @"X-Parse-Session-Token"; - -NSString *const PFCommandParameterNameMethodOverride = @"_method"; diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h deleted file mode 100644 index 6583f5b..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h +++ /dev/null @@ -1,50 +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. - */ - -#import - -#import "PFDataProvider.h" - -@class PFRESTCommand; - -@interface PFCommandURLRequestConstructor : NSObject - -@property (nonatomic, weak, readonly) id dataSource; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; -+ (instancetype)constructorWithDataSource:(id)dataSource; - -///-------------------------------------- -/// @name Data -///-------------------------------------- - -- (NSURLRequest *)dataURLRequestForCommand:(PFRESTCommand *)command; - -///-------------------------------------- -/// @name File Upload -///-------------------------------------- - -- (NSURLRequest *)fileUploadURLRequestForCommand:(PFRESTCommand *)command - withContentType:(NSString *)contentType - contentSourceFilePath:(NSString *)contentFilePath; - -///-------------------------------------- -/// @name Headers -///-------------------------------------- - -+ (NSDictionary *)defaultURLRequestHeadersForApplicationId:(NSString *)applicationId - clientKey:(NSString *)clientKey - bundle:(NSBundle *)bundle; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m deleted file mode 100644 index b489704..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m +++ /dev/null @@ -1,149 +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. - */ - -#import "PFCommandURLRequestConstructor.h" - -#import "PFAssert.h" -#import "PFCommandRunningConstants.h" -#import "PFDevice.h" -#import "PFHTTPRequest.h" -#import "PFHTTPURLRequestConstructor.h" -#import "PFInstallationIdentifierStore.h" -#import "PFInternalUtils.h" -#import "PFRESTCommand.h" -#import "PFURLConstructor.h" -#import "Parse_Private.h" - -@implementation PFCommandURLRequestConstructor - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithDataSource:(id)dataSource { - self = [super init]; - if (!self) return nil; - - _dataSource = dataSource; - - return self; -} - -+ (instancetype)constructorWithDataSource:(id)dataSource { - return [[self alloc] initWithDataSource:dataSource]; -} - -///-------------------------------------- -#pragma mark - Data -///-------------------------------------- - -- (NSURLRequest *)dataURLRequestForCommand:(PFRESTCommand *)command { - NSURL *url = [PFURLConstructor URLFromAbsoluteString:[PFInternalUtils parseServerURLString] - path:[NSString stringWithFormat:@"/1/%@", command.httpPath] - query:nil]; - NSDictionary *headers = [self _URLRequestHeadersForCommand:command]; - - NSString *requestMethod = command.httpMethod; - NSDictionary *requestParameters = nil; - if (command.parameters) { - NSDictionary *parameters = nil; - - // The request URI may be too long to include parameters in the URI. - // To avoid this problem we send the parameters in a POST request json-encoded body - // and add a custom parameter that overrides the method in a request. - if ([requestMethod isEqualToString:PFHTTPRequestMethodGET] || - [requestMethod isEqualToString:PFHTTPRequestMethodHEAD] || - [requestMethod isEqualToString:PFHTTPRequestMethodDELETE]) { - NSMutableDictionary *mutableParameters = [command.parameters mutableCopy]; - mutableParameters[PFCommandParameterNameMethodOverride] = command.httpMethod; - - requestMethod = PFHTTPRequestMethodPOST; - parameters = [mutableParameters copy]; - } else { - parameters = command.parameters; - } - requestParameters = [[PFPointerObjectEncoder objectEncoder] encodeObject:parameters]; - } - - return [PFHTTPURLRequestConstructor urlRequestWithURL:url - httpMethod:requestMethod - httpHeaders:headers - parameters:requestParameters]; -} - -///-------------------------------------- -#pragma mark - File -///-------------------------------------- - -- (NSURLRequest *)fileUploadURLRequestForCommand:(PFRESTCommand *)command - withContentType:(NSString *)contentType - contentSourceFilePath:(NSString *)contentFilePath { - NSMutableURLRequest *request = [[self dataURLRequestForCommand:command] mutableCopy]; - - if (contentType) { - [request setValue:contentType forHTTPHeaderField:PFHTTPRequestHeaderNameContentType]; - } - - //TODO (nlutsenko): Check for error here. - NSNumber *fileSize = [PFInternalUtils fileSizeOfFileAtPath:contentFilePath error:nil]; - [request setValue:[fileSize stringValue] forHTTPHeaderField:PFHTTPRequestHeaderNameContentLength]; - - return request; -} - -///-------------------------------------- -#pragma mark - Headers -///-------------------------------------- - -+ (NSDictionary *)defaultURLRequestHeadersForApplicationId:(NSString *)applicationId - clientKey:(NSString *)clientKey - bundle:(NSBundle *)bundle { -#if TARGET_OS_IPHONE - NSString *versionPrefix = @"i"; -#else - NSString *versionPrefix = @"osx"; -#endif - - NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; - - mutableHeaders[PFCommandHeaderNameApplicationId] = applicationId; - mutableHeaders[PFCommandHeaderNameClientKey] = clientKey; - - mutableHeaders[PFCommandHeaderNameClientVersion] = [versionPrefix stringByAppendingString:PARSE_VERSION]; - mutableHeaders[PFCommandHeaderNameOSVersion] = [PFDevice currentDevice].operatingSystemFullVersion; - - // Bundle Version and Display Version can be null, when running tests - NSString *bundleVersion = [bundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]; - if (bundleVersion) { - mutableHeaders[PFCommandHeaderNameAppBuildVersion] = bundleVersion; - } - NSString *displayVersion = [bundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; - if (displayVersion) { - mutableHeaders[PFCommandHeaderNameAppDisplayVersion] = displayVersion; - } - - return [mutableHeaders copy]; -} - -- (NSDictionary *)_URLRequestHeadersForCommand:(PFRESTCommand *)command { - NSMutableDictionary *headers = [NSMutableDictionary dictionary]; - [headers addEntriesFromDictionary:command.additionalRequestHeaders]; - PFInstallationIdentifierStore *installationIdentifierStore = self.dataSource.installationIdentifierStore; - headers[PFCommandHeaderNameInstallationId] = installationIdentifierStore.installationIdentifier; - if (command.sessionToken) { - headers[PFCommandHeaderNameSessionToken] = command.sessionToken; - } - return [headers copy]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h deleted file mode 100644 index 7f75dfd..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h +++ /dev/null @@ -1,22 +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. - */ - -#import - -#import "PFCommandRunning.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFURLSessionCommandRunner : NSObject - -- (instancetype)init NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m deleted file mode 100644 index d504980..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m +++ /dev/null @@ -1,286 +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. - */ - -#import "PFURLSessionCommandRunner.h" -#import "PFURLSessionCommandRunner_Private.h" - -#import - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFCommandResult.h" -#import "PFCommandRunningConstants.h" -#import "PFCommandURLRequestConstructor.h" -#import "PFConstants.h" -#import "PFDevice.h" -#import "PFEncoder.h" -#import "PFHTTPRequest.h" -#import "PFHTTPURLRequestConstructor.h" -#import "PFInstallationIdentifierStore.h" -#import "PFInternalUtils.h" -#import "PFLogging.h" -#import "PFMacros.h" -#import "PFRESTCommand.h" -#import "PFURLConstructor.h" -#import "PFURLSession.h" - -@interface PFURLSessionCommandRunner () - -@property (nonatomic, strong) NSNotificationCenter *notificationCenter; - -@end - -@implementation PFURLSessionCommandRunner - -@synthesize applicationId = _applicationId; -@synthesize clientKey = _clientKey; -@synthesize initialRetryDelay = _initialRetryDelay; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithDataSource:(id)dataSource - applicationId:(NSString *)applicationId - clientKey:(NSString *)clientKey { - NSURLSessionConfiguration *configuration = [[self class] _urlSessionConfigurationForApplicationId:applicationId - clientKey:clientKey]; - PFURLSession *session = [PFURLSession sessionWithConfiguration:configuration delegate:self]; - PFCommandURLRequestConstructor *constructor = [PFCommandURLRequestConstructor constructorWithDataSource:dataSource]; - self = [self initWithDataSource:dataSource - session:session - requestConstructor:constructor - notificationCenter:[NSNotificationCenter defaultCenter]]; - if (!self) return nil; - - _applicationId = [applicationId copy]; - _clientKey = [clientKey copy]; - - return self; -} - -- (instancetype)initWithDataSource:(id)dataSource - session:(PFURLSession *)session - requestConstructor:(PFCommandURLRequestConstructor *)requestConstructor - notificationCenter:(NSNotificationCenter *)notificationCenter { - self = [super init]; - if (!self) return nil; - - _initialRetryDelay = PFCommandRunningDefaultRetryDelay; - - _requestConstructor = requestConstructor; - _session = session; - _notificationCenter = notificationCenter; - - return self; -} - -+ (instancetype)commandRunnerWithDataSource:(id)dataSource - applicationId:(NSString *)applicationId - clientKey:(NSString *)clientKey { - return [[self alloc] initWithDataSource:dataSource applicationId:applicationId clientKey:clientKey]; -} - -///-------------------------------------- -#pragma mark - Dealloc -///-------------------------------------- - -- (void)dealloc { - // This is required to call, since session will continue to be present in memory and running otherwise. - [_session invalidateAndCancel]; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (id)dataSource { - return _requestConstructor.dataSource; -} - -///-------------------------------------- -#pragma mark - Data Commands -///-------------------------------------- - -- (BFTask PF_GENERIC(PFCommandResult *)*)runCommandAsync:(PFRESTCommand *)command withOptions:(PFCommandRunningOptions)options { - return [self runCommandAsync:command withOptions:options cancellationToken:nil]; -} - -- (BFTask PF_GENERIC(PFCommandResult *)*)runCommandAsync:(PFRESTCommand *)command - withOptions:(PFCommandRunningOptions)options - cancellationToken:(BFCancellationToken *)cancellationToken { - return [self _performCommandRunningBlock:^id { - [command resolveLocalIds]; - NSURLRequest *request = [self.requestConstructor dataURLRequestForCommand:command]; - return [_session performDataURLRequestAsync:request forCommand:command cancellationToken:cancellationToken]; - } withOptions:options cancellationToken:cancellationToken]; -} - -///-------------------------------------- -#pragma mark - File Commands -///-------------------------------------- - -- (BFTask PF_GENERIC(PFCommandResult *)*)runFileUploadCommandAsync:(PFRESTCommand *)command - withContentType:(NSString *)contentType - contentSourceFilePath:(NSString *)sourceFilePath - options:(PFCommandRunningOptions)options - cancellationToken:(nullable BFCancellationToken *)cancellationToken - progressBlock:(nullable PFProgressBlock)progressBlock { - @weakify(self); - return [self _performCommandRunningBlock:^id { - @strongify(self); - - [command resolveLocalIds]; - NSURLRequest *request = [self.requestConstructor fileUploadURLRequestForCommand:command - withContentType:contentType - contentSourceFilePath:sourceFilePath]; - return [_session performFileUploadURLRequestAsync:request - forCommand:command - withContentSourceFilePath:sourceFilePath - cancellationToken:cancellationToken - progressBlock:progressBlock]; - - } withOptions:options cancellationToken:cancellationToken]; -} - -- (BFTask PF_GENERIC(PFCommandResult *)*)runFileDownloadCommandAsyncWithFileURL:(NSURL *)url - targetFilePath:(NSString *)filePath - cancellationToken:(nullable BFCancellationToken *)cancellationToken - progressBlock:(nullable PFProgressBlock)progressBlock { - return [self _performCommandRunningBlock:^id { - NSURLRequest *request = [NSURLRequest requestWithURL:url]; - return [_session performFileDownloadURLRequestAsync:request - toFileAtPath:filePath - withCancellationToken:cancellationToken - progressBlock:progressBlock]; - } withOptions:PFCommandRunningOptionRetryIfFailed - cancellationToken:cancellationToken]; -} - -///-------------------------------------- -#pragma mark - Retrying -///-------------------------------------- - -- (BFTask *)_performCommandRunningBlock:(nonnull id (^)())block - withOptions:(PFCommandRunningOptions)options - cancellationToken:(BFCancellationToken *)cancellationToken { - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - - if (!(options & PFCommandRunningOptionRetryIfFailed)) { - return block(); - } - - NSTimeInterval delay = self.initialRetryDelay; // Delay (secs) of next retry attempt - - // Set the initial delay to something between 1 and 2 seconds. We want it to be - // random so that clients that fail simultaneously don't retry on simultaneous - // intervals. - delay += self.initialRetryDelay * ((double)(arc4random() & 0x0FFFF) / (double)0x0FFFF); - return [self _performCommandRunningBlock:block - withCancellationToken:cancellationToken - delay:delay - forAttempts:PFCommandRunningDefaultMaxAttemptsCount]; -} - -- (BFTask *)_performCommandRunningBlock:(nonnull id (^)())block - withCancellationToken:(BFCancellationToken *)cancellationToken - delay:(NSTimeInterval)delay - forAttempts:(NSUInteger)attempts { - @weakify(self); - return [block() continueWithBlock:^id(BFTask *task) { - @strongify(self); - if (task.cancelled) { - return task; - } - - if ([[task.error userInfo][@"temporary"] boolValue] && attempts > 1) { - PFLogError(PFLoggingTagCommon, - @"Network connection failed. Making attempt %lu after sleeping for %f seconds.", - (unsigned long)(PFCommandRunningDefaultMaxAttemptsCount - attempts + 1), (double)delay); - - return [[BFTask taskWithDelay:(int)(delay * 1000)] continueWithBlock:^id(BFTask *task) { - return [self _performCommandRunningBlock:block - withCancellationToken:cancellationToken - delay:delay * 2.0 - forAttempts:attempts - 1]; - } cancellationToken:cancellationToken]; - } - return task; - } cancellationToken:cancellationToken]; -} - -///-------------------------------------- -#pragma mark - NSURLSessionConfiguration -///-------------------------------------- - -+ (NSURLSessionConfiguration *)_urlSessionConfigurationForApplicationId:(NSString *)applicationId - clientKey:(NSString *)clientKey { - NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; - - // No cookies, they are bad for you. - configuration.HTTPCookieAcceptPolicy = NSHTTPCookieAcceptPolicyNever; - configuration.HTTPShouldSetCookies = NO; - - // Completely disable caching of responses for security reasons. - configuration.URLCache = [[NSURLCache alloc] initWithMemoryCapacity:[NSURLCache sharedURLCache].memoryCapacity - diskCapacity:0 - diskPath:nil]; - - NSBundle *bundle = [NSBundle mainBundle]; - NSDictionary *headers = [PFCommandURLRequestConstructor defaultURLRequestHeadersForApplicationId:applicationId - clientKey:clientKey - bundle:bundle]; - configuration.HTTPAdditionalHeaders = headers; - - return configuration; -} - -///-------------------------------------- -#pragma mark - PFURLSessionDelegate -///-------------------------------------- - -- (void)urlSession:(PFURLSession *)session willPerformURLRequest:(NSURLRequest *)request { - [[BFExecutor defaultPriorityBackgroundExecutor] execute:^{ - NSDictionary *userInfo = ([PFLogger sharedLogger].logLevel == PFLogLevelDebug ? - @{ PFNetworkNotificationURLRequestUserInfoKey : request } : nil); - [self.notificationCenter postNotificationName:PFNetworkWillSendURLRequestNotification - object:self - userInfo:userInfo]; - }]; -} - -- (void)urlSession:(PFURLSession *)session -didPerformURLRequest:(NSURLRequest *)request - withURLResponse:(nullable NSURLResponse *)response - responseString:(nullable NSString *)responseString { - [[BFExecutor defaultPriorityBackgroundExecutor] execute:^{ - NSMutableDictionary *userInfo = nil; - if ([PFLogger sharedLogger].logLevel == PFLogLevelDebug) { - userInfo = [NSMutableDictionary dictionaryWithObject:request - forKey:PFNetworkNotificationURLRequestUserInfoKey]; - if (response) { - userInfo[PFNetworkNotificationURLResponseUserInfoKey] = response; - } - if (responseString) { - userInfo[PFNetworkNotificationURLResponseBodyUserInfoKey] = responseString; - } - } - [self.notificationCenter postNotificationName:PFNetworkDidReceiveURLResponseNotification - object:self - userInfo:userInfo]; - }]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h deleted file mode 100644 index e10c6f1..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h +++ /dev/null @@ -1,29 +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. - */ - -#import "PFURLSessionCommandRunner.h" - -@class PFCommandURLRequestConstructor; -@class PFURLSession; - -NS_ASSUME_NONNULL_BEGIN - -@interface PFURLSessionCommandRunner () - -@property (nonatomic, strong, readonly) PFURLSession *session; -@property (nonatomic, strong, readonly) PFCommandURLRequestConstructor *requestConstructor; - -- (instancetype)initWithDataSource:(id)dataSource - session:(PFURLSession *)session - requestConstructor:(PFCommandURLRequestConstructor *)requestConstructor - notificationCenter:(NSNotificationCenter *)notificationCenter NS_DESIGNATED_INITIALIZER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h deleted file mode 100644 index ff53d22..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h +++ /dev/null @@ -1,73 +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. - */ - -#import - -#import - -@class BFCancellationToken; - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFRESTCommand; - -NS_ASSUME_NONNULL_BEGIN - -@class PFURLSession; - -@protocol PFURLSessionDelegate - -- (void)urlSession:(PFURLSession *)session willPerformURLRequest:(NSURLRequest *)request; - -- (void)urlSession:(PFURLSession *)session didPerformURLRequest:(NSURLRequest *)request withURLResponse:(nullable NSURLResponse *)response responseString:(nullable NSString *)string; - -@end - -@interface PFURLSession : NSObject - -@property (nonatomic, weak, readonly) id delegate; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithConfiguration:(NSURLSessionConfiguration *)configuration - delegate:(id)delegate NS_DESIGNATED_INITIALIZER; - -+ (instancetype)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration - delegate:(id)delegate; - -///-------------------------------------- -/// @name Teardown -///-------------------------------------- - -- (void)invalidateAndCancel; - -///-------------------------------------- -/// @name Network Requests -///-------------------------------------- - -- (BFTask *)performDataURLRequestAsync:(NSURLRequest *)request - forCommand:(PFRESTCommand *)command - cancellationToken:(nullable BFCancellationToken *)cancellationToken; - -- (BFTask *)performFileUploadURLRequestAsync:(NSURLRequest *)request - forCommand:(PFRESTCommand *)command - withContentSourceFilePath:(NSString *)sourceFilePath - cancellationToken:(nullable BFCancellationToken *)cancellationToken - progressBlock:(nullable PFProgressBlock)progressBlock; - -- (BFTask *)performFileDownloadURLRequestAsync:(NSURLRequest *)request - toFileAtPath:(NSString *)filePath - withCancellationToken:(nullable BFCancellationToken *)cancellationToken - progressBlock:(nullable PFProgressBlock)progressBlock; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m deleted file mode 100644 index 9934f47..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m +++ /dev/null @@ -1,264 +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. - */ - -#import "PFURLSession.h" -#import "PFURLSession_Private.h" - -#import - -#import "BFTask+Private.h" -#import "PFCommandResult.h" -#import "PFMacros.h" -#import "PFAssert.h" -#import "PFURLSessionJSONDataTaskDelegate.h" -#import "PFURLSessionUploadTaskDelegate.h" -#import "PFURLSessionFileDownloadTaskDelegate.h" - -typedef void (^PFURLSessionTaskCompletionHandler)(NSData *data, NSURLResponse *response, NSError *error); - -@interface PFURLSession () { - dispatch_queue_t _sessionTaskQueue; - NSURLSession *_urlSession; - NSMutableDictionary *_delegatesDictionary; - dispatch_queue_t _delegatesAccessQueue; -} - -@end - -@implementation PFURLSession - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithConfiguration:(NSURLSessionConfiguration *)configuration - delegate:(id)delegate { - // NOTE: cast to id suppresses warning about designated initializer. - return [(id)self initWithURLSession:[NSURLSession sessionWithConfiguration:configuration - delegate:self - delegateQueue:nil] - delegate:delegate]; -} - -- (instancetype)initWithURLSession:(NSURLSession *)session - delegate:(id)delegate { - self = [super init]; - if (!self) return nil; - - _delegate = delegate; - _urlSession = session; - - _sessionTaskQueue = dispatch_queue_create("com.parse.urlSession.tasks", DISPATCH_QUEUE_SERIAL); - - _delegatesDictionary = [NSMutableDictionary dictionary]; - _delegatesAccessQueue = dispatch_queue_create("com.parse.urlSession.delegates", DISPATCH_QUEUE_CONCURRENT); - - return self; -} - -+ (instancetype)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration - delegate:(id)delegate { - return [[self alloc] initWithConfiguration:configuration delegate:delegate]; -} - -+ (instancetype)sessionWithURLSession:(nonnull NSURLSession *)session - delegate:(id)delegate { - return [[self alloc] initWithURLSession:session delegate:delegate]; -} - -///-------------------------------------- -#pragma mark - Teardown -///-------------------------------------- - -- (void)invalidateAndCancel { - [_urlSession invalidateAndCancel]; -} - -///-------------------------------------- -#pragma mark - Network Requests -///-------------------------------------- - -- (BFTask *)performDataURLRequestAsync:(NSURLRequest *)request - forCommand:(PFRESTCommand *)command - cancellationToken:(BFCancellationToken *)cancellationToken { - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - - @weakify(self); - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - - __block NSURLSessionDataTask *task = nil; - dispatch_sync(_sessionTaskQueue, ^{ - task = [_urlSession dataTaskWithRequest:request]; - }); - PFURLSessionDataTaskDelegate *delegate = [PFURLSessionJSONDataTaskDelegate taskDelegateForDataTask:task - withCancellationToken:cancellationToken]; - return [self _performDataTask:task withDelegate:delegate]; - }]; -} - -- (BFTask *)performFileUploadURLRequestAsync:(NSURLRequest *)request - forCommand:(PFRESTCommand *)command - withContentSourceFilePath:(NSString *)sourceFilePath - cancellationToken:(BFCancellationToken *)cancellationToken - progressBlock:(PFProgressBlock)progressBlock { - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - - @weakify(self); - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - - __block NSURLSessionDataTask *task = nil; - dispatch_sync(_sessionTaskQueue, ^{ - task = [_urlSession uploadTaskWithRequest:request fromFile:[NSURL fileURLWithPath:sourceFilePath]]; - }); - PFURLSessionUploadTaskDelegate *delegate = [PFURLSessionUploadTaskDelegate taskDelegateForDataTask:task - withCancellationToken:cancellationToken - uploadProgressBlock:progressBlock]; - return [self _performDataTask:task withDelegate:delegate]; - }]; -} - -- (BFTask *)performFileDownloadURLRequestAsync:(NSURLRequest *)request - toFileAtPath:(NSString *)filePath - withCancellationToken:(nullable BFCancellationToken *)cancellationToken - progressBlock:(nullable PFProgressBlock)progressBlock { - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - - @weakify(self); - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - - __block NSURLSessionDataTask *task = nil; - dispatch_sync(_sessionTaskQueue, ^{ - task = [_urlSession dataTaskWithRequest:request]; - }); - PFURLSessionFileDownloadTaskDelegate *delegate = [PFURLSessionFileDownloadTaskDelegate taskDelegateForDataTask:task - withCancellationToken:cancellationToken - targetFilePath:filePath - progressBlock:progressBlock]; - return [self _performDataTask:task withDelegate:delegate]; - }]; -} - -- (BFTask *)_performDataTask:(NSURLSessionDataTask *)dataTask withDelegate:(PFURLSessionDataTaskDelegate *)delegate { - [self.delegate urlSession:self willPerformURLRequest:dataTask.originalRequest]; - - @weakify(self); - return [BFTask taskFromExecutor:[BFExecutor defaultExecutor] withBlock:^id{ - @strongify(self); - NSNumber *taskIdentifier = @(dataTask.taskIdentifier); - [self setDelegate:delegate forDataTask:dataTask]; - - BFTask *resultTask = [delegate.resultTask continueWithBlock:^id(BFTask *task) { - @strongify(self); - [self.delegate urlSession:self - didPerformURLRequest:dataTask.originalRequest - withURLResponse:delegate.response - responseString:delegate.responseString]; - - [self _removeDelegateForTaskWithIdentifier:taskIdentifier]; - return task; - }]; - [dataTask resume]; - - return resultTask; - }]; -} - -///-------------------------------------- -#pragma mark - Private -///-------------------------------------- - -- (PFURLSessionDataTaskDelegate *)_taskDelegateForDataTask:(NSURLSessionDataTask *)task { - __block PFURLSessionDataTaskDelegate *delegate = nil; - dispatch_sync(_delegatesAccessQueue, ^{ - delegate = _delegatesDictionary[@(task.taskIdentifier)]; - }); - return delegate; -} - -- (void)setDelegate:(PFURLSessionDataTaskDelegate *)delegate forDataTask:(NSURLSessionDataTask *)task { - dispatch_barrier_async(_delegatesAccessQueue, ^{ - _delegatesDictionary[@(task.taskIdentifier)] = delegate; - }); -} - -- (void)_removeDelegateForTaskWithIdentifier:(NSNumber *)identifier { - dispatch_barrier_async(_delegatesAccessQueue, ^{ - [_delegatesDictionary removeObjectForKey:identifier]; - }); -} - -///-------------------------------------- -#pragma mark - NSURLSessionTaskDelegate -///-------------------------------------- - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionDataTask *)task - didSendBodyData:(int64_t)bytesSent - totalBytesSent:(int64_t)totalBytesSent -totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend { - PFURLSessionDataTaskDelegate *delegate = [self _taskDelegateForDataTask:task]; - [delegate URLSession:session - task:task - didSendBodyData:bytesSent - totalBytesSent:totalBytesSent -totalBytesExpectedToSend:totalBytesExpectedToSend]; -} - -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionDataTask *)task didCompleteWithError:(NSError *)error { - PFURLSessionDataTaskDelegate *delegate = [self _taskDelegateForDataTask:task]; - [delegate URLSession:session task:task didCompleteWithError:error]; -} - -///-------------------------------------- -#pragma mark - NSURLSessionDataDelegate -///-------------------------------------- - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask -didReceiveResponse:(NSURLResponse *)response - completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler { - PFURLSessionDataTaskDelegate *delegate = [self _taskDelegateForDataTask:dataTask]; - [delegate URLSession:session dataTask:dataTask didReceiveResponse:response completionHandler:completionHandler]; -} - -- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { - PFURLSessionDataTaskDelegate *delegate = [self _taskDelegateForDataTask:dataTask]; - [delegate URLSession:session dataTask:dataTask didReceiveData:data]; -} - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask - willCacheResponse:(NSCachedURLResponse *)proposedResponse - completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler { - completionHandler(nil); // Prevent any caching for security reasons -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h deleted file mode 100644 index 1f047ac..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h +++ /dev/null @@ -1,24 +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. - */ - -#import "PFURLSession.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFURLSession () - -- (instancetype)initWithURLSession:(NSURLSession *)session - delegate:(id)delegate NS_DESIGNATED_INITIALIZER; - -+ (instancetype)sessionWithURLSession:(NSURLSession *)session - delegate:(id)delegate; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h deleted file mode 100644 index a1f8ca9..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h +++ /dev/null @@ -1,37 +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. - */ - -#import - -#import - -@class BFCancellationToken; - -@class BFTask PF_GENERIC(__covariant BFGenericType); - -NS_ASSUME_NONNULL_BEGIN - -@interface PFURLSessionDataTaskDelegate : NSObject - -@property (nonatomic, strong, readonly) NSURLSessionDataTask *dataTask; -@property (nonatomic, strong, readonly) BFTask *resultTask; - -@property (nonatomic, strong, readonly) NSHTTPURLResponse *response; -@property (nullable, nonatomic, copy, readonly) NSString *responseString; - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initForDataTask:(NSURLSessionDataTask *)dataTask - withCancellationToken:(nullable BFCancellationToken *)cancellationToken NS_DESIGNATED_INITIALIZER; - -+ (instancetype)taskDelegateForDataTask:(NSURLSessionDataTask *)dataTask - withCancellationToken:(nullable BFCancellationToken *)cancellationToken; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m deleted file mode 100644 index f81e9d6..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m +++ /dev/null @@ -1,180 +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. - */ - -#import "PFURLSessionDataTaskDelegate.h" -#import "PFURLSessionDataTaskDelegate_Private.h" - -#import -#import - -#import "PFAssert.h" -#import "PFMacros.h" - -@interface PFURLSessionDataTaskDelegate () { - BFTaskCompletionSource *_taskCompletionSource; -} - -@end - -@implementation PFURLSessionDataTaskDelegate - -@synthesize dataOutputStream = _dataOutputStream; -@synthesize downloadedBytes = _downloadedBytes; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initForDataTask:(NSURLSessionDataTask *)dataTask - withCancellationToken:(BFCancellationToken *)cancellationToken { - self = [super init]; - if (!self) return nil; - - _taskCompletionSource = [BFTaskCompletionSource taskCompletionSource]; - - _dataTask = dataTask; - @weakify(self); - [cancellationToken registerCancellationObserverWithBlock:^{ - @strongify(self); - [self _cancel]; - }]; - - return self; -} - -+ (instancetype)taskDelegateForDataTask:(NSURLSessionDataTask *)dataTask - withCancellationToken:(nullable BFCancellationToken *)cancellationToken { - return [[self alloc] initForDataTask:dataTask withCancellationToken:cancellationToken]; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (BFTask *)resultTask { - return _taskCompletionSource.task; -} - -- (NSOutputStream *)dataOutputStream { - if (!_dataOutputStream) { - _dataOutputStream = [NSOutputStream outputStreamToMemory]; - } - return _dataOutputStream; -} - -///-------------------------------------- -#pragma mark - Task -///-------------------------------------- - -- (void)_taskDidFinish { - [self _closeDataOutputStream]; - if (self.error) { - [_taskCompletionSource trySetError:self.error]; - } else { - [_taskCompletionSource trySetResult:self.result]; - } -} - -- (void)_taskDidCancel { - [self _closeDataOutputStream]; - [_taskCompletionSource trySetCancelled]; -} - -- (void)_cancel { - [self.dataTask cancel]; -} - -///-------------------------------------- -#pragma mark - Stream -///-------------------------------------- - -- (void)_openDataOutputStream { - [self.dataOutputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; - [self.dataOutputStream open]; -} - -- (void)_writeDataOutputStreamData:(NSData *)data { - NSInteger length = [data length]; - while (YES) { - NSInteger bytesWritten = 0; - if ([self.dataOutputStream hasSpaceAvailable]) { - const uint8_t *dataBuffer = (uint8_t *)[data bytes]; - - NSInteger numberOfBytesWritten = 0; - while (bytesWritten < length) { - numberOfBytesWritten = [self.dataOutputStream write:&dataBuffer[bytesWritten] - maxLength:(length - bytesWritten)]; - if (numberOfBytesWritten == -1) { - break; - } - - bytesWritten += numberOfBytesWritten; - } - break; - } - - if (self.dataOutputStream.streamError) { - [self.dataTask cancel]; - self.error = self.dataOutputStream.streamError; - // Don't finish the delegate here, as we will finish when NSURLSessionTask calls back about cancellation. - return; - } - } - _downloadedBytes += length; -} - -- (void)_closeDataOutputStream { - [self.dataOutputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; - [self.dataOutputStream close]; -} - -///-------------------------------------- -#pragma mark - NSURLSessionTaskDelegate -///-------------------------------------- - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task - didSendBodyData:(int64_t)bytesSent - totalBytesSent:(int64_t)totalBytesSent -totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend { - // No-op, we don't care about progress here. -} - -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { - if ([error.domain isEqualToString:NSURLErrorDomain] && error.code == NSURLErrorCancelled) { - [self _taskDidCancel]; - } else { - self.error = self.error ?: error; - [self _taskDidFinish]; - } -} - -///-------------------------------------- -#pragma mark - NSURLSessionDataDelegate -///-------------------------------------- - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask -didReceiveResponse:(NSURLResponse *)response - completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler { - _response = (NSHTTPURLResponse *)response; - [self _openDataOutputStream]; - - completionHandler(NSURLSessionResponseAllow); -} - -- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { - [self _writeDataOutputStreamData:data]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h deleted file mode 100644 index 030d4f0..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h +++ /dev/null @@ -1,34 +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. - */ - -#import "PFURLSessionDataTaskDelegate.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFURLSessionDataTaskDelegate () - -@property (nonatomic, strong, readonly) dispatch_queue_t dataQueue; - -/*! - @abstract Defaults to to-memory output stream if not overwritten. - */ -@property (nonatomic, strong, readonly) NSOutputStream *dataOutputStream; -@property (nonatomic, assign, readonly) uint64_t downloadedBytes; - -@property (nullable, nonatomic, strong) id result; -@property (nullable, nonatomic, strong) NSError *error; - -@property (nullable, nonatomic, copy, readwrite) NSString *responseString; - -- (void)_taskDidFinish NS_REQUIRES_SUPER; -- (void)_taskDidCancel NS_REQUIRES_SUPER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h deleted file mode 100644 index 918e1b5..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h +++ /dev/null @@ -1,35 +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. - */ - -#import "PFURLSessionDataTaskDelegate.h" - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface PFURLSessionFileDownloadTaskDelegate : PFURLSessionDataTaskDelegate - -@property (nonatomic, copy, readonly) NSString *targetFilePath; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initForDataTask:(NSURLSessionDataTask *)dataTask - withCancellationToken:(nullable BFCancellationToken *)cancellationToken - targetFilePath:(NSString *)targetFilePath - progressBlock:(nullable PFProgressBlock)progressBlock; -+ (instancetype)taskDelegateForDataTask:(NSURLSessionDataTask *)dataTask - withCancellationToken:(nullable BFCancellationToken *)cancellationToken - targetFilePath:(NSString *)targetFilePath - progressBlock:(nullable PFProgressBlock)progressBlock; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m deleted file mode 100644 index d770267..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m +++ /dev/null @@ -1,101 +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. - */ - -#import "PFURLSessionFileDownloadTaskDelegate.h" - -#import "PFErrorUtilities.h" -#import "PFHash.h" -#import "PFURLSessionDataTaskDelegate_Private.h" - -@interface PFURLSessionFileDownloadTaskDelegate () { - NSOutputStream *_fileDataOutputStream; - PFProgressBlock _progressBlock; -} - -@end - -@implementation PFURLSessionFileDownloadTaskDelegate - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initForDataTask:(NSURLSessionDataTask *)dataTask - withCancellationToken:(BFCancellationToken *)cancellationToken - targetFilePath:(NSString *)targetFilePath - progressBlock:(PFProgressBlock)progressBlock { - self = [super initForDataTask:dataTask withCancellationToken:cancellationToken]; - if (!self) return nil; - - _targetFilePath = targetFilePath; - _fileDataOutputStream = [NSOutputStream outputStreamToFileAtPath:_targetFilePath append:NO]; - _progressBlock = progressBlock; - - return self; -} - -+ (instancetype)taskDelegateForDataTask:(NSURLSessionDataTask *)dataTask - withCancellationToken:(BFCancellationToken *)cancellationToken - targetFilePath:(NSString *)targetFilePath - progressBlock:(PFProgressBlock)progressBlock { - return [[self alloc] initForDataTask:dataTask - withCancellationToken:cancellationToken - targetFilePath:targetFilePath - progressBlock:progressBlock]; -} - -///-------------------------------------- -#pragma mark - Progress -///-------------------------------------- - -- (void)_reportProgress { - if (!_progressBlock) { - return; - } - - int progress = (int)(self.downloadedBytes / (CGFloat)self.response.expectedContentLength * 100); - _progressBlock(progress); -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (NSOutputStream *)dataOutputStream { - return _fileDataOutputStream; -} - -///-------------------------------------- -#pragma mark - Task -///-------------------------------------- - -- (void)_taskDidFinish { - if (self.error) { - // TODO: (nlutsenko) Unify this with code from PFURLSessionJSONDataTaskDelegate - NSMutableDictionary *errorDictionary = [NSMutableDictionary dictionary]; - errorDictionary[@"code"] = @(kPFErrorConnectionFailed); - errorDictionary[@"error"] = [self.error localizedDescription]; - errorDictionary[@"originalError"] = self.error; - errorDictionary[NSUnderlyingErrorKey] = self.error; - errorDictionary[@"temporary"] = @(self.response.statusCode >= 500 || self.response.statusCode < 400); - self.error = [PFErrorUtilities errorFromResult:errorDictionary]; - } - [super _taskDidFinish]; -} - -///-------------------------------------- -#pragma mark - NSURLSessionDataDelegate -///-------------------------------------- - -- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { - [super URLSession:session dataTask:dataTask didReceiveData:data]; - [self _reportProgress]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h deleted file mode 100644 index 66a06d1..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h +++ /dev/null @@ -1,20 +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. - */ - -#import - -#import "PFURLSessionDataTaskDelegate.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFURLSessionJSONDataTaskDelegate : PFURLSessionDataTaskDelegate - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m deleted file mode 100644 index f10eac3..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m +++ /dev/null @@ -1,90 +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. - */ - -#import "PFURLSessionJSONDataTaskDelegate.h" - -#import -#import -#import - -#import "PFCommandResult.h" -#import "PFConstants.h" -#import "PFErrorUtilities.h" -#import "PFMacros.h" -#import "PFURLSessionDataTaskDelegate_Private.h" - -@interface PFURLSessionJSONDataTaskDelegate () - -@end - -@implementation PFURLSessionJSONDataTaskDelegate - -///-------------------------------------- -#pragma mark - Private -///-------------------------------------- - -- (void)_taskDidFinish { - NSData *data = [self.dataOutputStream propertyForKey:NSStreamDataWrittenToMemoryStreamKey]; - - id result = nil; - - NSError *jsonError = nil; - if (data) { - self.responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - result = [NSJSONSerialization JSONObjectWithData:data - options:0 - error:&jsonError]; - - if (jsonError && !self.error) { - self.error = jsonError; - [super _taskDidFinish]; - return; - } - } - - if (self.error) { - NSMutableDictionary *errorDictionary = [NSMutableDictionary dictionary]; - errorDictionary[@"code"] = @(kPFErrorConnectionFailed); - errorDictionary[@"originalError"] = self.error; - errorDictionary[NSUnderlyingErrorKey] = self.error; - errorDictionary[@"temporary"] = @(self.response.statusCode >= 500 || self.response.statusCode < 400); - - NSString *description = [self.error localizedDescription] ?: [self.error localizedFailureReason]; - if (description) { - errorDictionary[@"error"] = description; - } - - self.error = [PFErrorUtilities errorFromResult:errorDictionary]; - [super _taskDidFinish]; - return; - } - - if (self.response.statusCode >= 200) { - if (self.response.statusCode < 400) { - PFCommandResult *commandResult = [PFCommandResult commandResultWithResult:result - resultString:self.responseString - httpResponse:self.response]; - self.result = commandResult; - } else if ([result isKindOfClass:[NSDictionary class]]) { - NSDictionary *resultDictionary = (NSDictionary *)result; - if (resultDictionary[@"error"]) { - NSMutableDictionary *errorDictionary = [NSMutableDictionary dictionaryWithDictionary:resultDictionary]; - errorDictionary[@"temporary"] = @(self.response.statusCode >= 500 || self.response.statusCode < 400); - self.error = [PFErrorUtilities errorFromResult:errorDictionary]; - } - } - } - - if (!self.result && !self.error) { - self.error = [PFErrorUtilities errorWithCode:kPFErrorInternalServer message:self.responseString]; - } - [super _taskDidFinish]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h deleted file mode 100644 index d08225f..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h +++ /dev/null @@ -1,29 +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. - */ - -#import - -#import - -#import "PFURLSessionJSONDataTaskDelegate.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFURLSessionUploadTaskDelegate : PFURLSessionJSONDataTaskDelegate - -- (instancetype)initForDataTask:(NSURLSessionDataTask *)dataTask - withCancellationToken:(nullable BFCancellationToken *)cancellationToken - uploadProgressBlock:(nullable PFProgressBlock)progressBlock; -+ (instancetype)taskDelegateForDataTask:(NSURLSessionDataTask *)dataTask - withCancellationToken:(nullable BFCancellationToken *)cancellationToken - uploadProgressBlock:(nullable PFProgressBlock)progressBlock; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m deleted file mode 100644 index 8cf9698..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m +++ /dev/null @@ -1,56 +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. - */ - -#import "PFURLSessionUploadTaskDelegate.h" - -@implementation PFURLSessionUploadTaskDelegate { - __nullable PFProgressBlock _progressBlock; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initForDataTask:(NSURLSessionDataTask *)dataTask - withCancellationToken:(nullable BFCancellationToken *)cancellationToken - uploadProgressBlock:(nullable PFProgressBlock)progressBlock { - self = [self initForDataTask:dataTask withCancellationToken:cancellationToken]; - if (!self) return nil; - - _progressBlock = [progressBlock copy]; - - return self; -} - -+ (instancetype)taskDelegateForDataTask:(NSURLSessionDataTask *)dataTask - withCancellationToken:(nullable BFCancellationToken *)cancellationToken - uploadProgressBlock:(nullable PFProgressBlock)progressBlock { - return [[self alloc] initForDataTask:dataTask - withCancellationToken:cancellationToken - uploadProgressBlock:progressBlock]; -} - -///-------------------------------------- -#pragma mark - NSURLSessionTaskDelegate -///-------------------------------------- - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task - didSendBodyData:(int64_t)bytesSent - totalBytesSent:(int64_t)totalBytesSent -totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend { - int progress = (int)round(totalBytesSent / (CGFloat)totalBytesExpectedToSend * 100); - dispatch_async(dispatch_get_main_queue(), ^{ - if (_progressBlock) { - _progressBlock(progress); - } - }); -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTAnalyticsCommand.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTAnalyticsCommand.h deleted file mode 100644 index 585b141..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTAnalyticsCommand.h +++ /dev/null @@ -1,31 +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. - */ - -#import "PFRESTCommand.h" - -NS_ASSUME_NONNULL_BEGIN - -extern NSString *const PFRESTAnalyticsEventNameAppOpened; -extern NSString *const PFRESTAnalyticsEventNameCrashReport; - -@interface PFRESTAnalyticsCommand : PFRESTCommand - -+ (instancetype)trackAppOpenedEventCommandWithPushHash:(nullable NSString *)pushHash - sessionToken:(nullable NSString *)sessionToken; - -+ (instancetype)trackEventCommandWithEventName:(NSString *)eventName - dimensions:(nullable NSDictionary *)dimensions - sessionToken:(nullable NSString *)sessionToken; - -+ (instancetype)trackCrashReportCommandWithBreakpadDumpParameters:(NSDictionary *)parameters - sessionToken:(nullable NSString *)sessionToken; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTAnalyticsCommand.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTAnalyticsCommand.m deleted file mode 100644 index 6badd35..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTAnalyticsCommand.m +++ /dev/null @@ -1,61 +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. - */ - -#import "PFRESTAnalyticsCommand.h" - -#import "PFHTTPRequest.h" - -/** - * Predefined events - AppOpened, CrashReport - * Coming soon - Log, ... - */ -NSString *const PFRESTAnalyticsEventNameAppOpened = @"AppOpened"; -NSString *const PFRESTAnalyticsEventNameCrashReport = @"_CrashReport"; - -@implementation PFRESTAnalyticsCommand - -+ (instancetype)trackAppOpenedEventCommandWithPushHash:(NSString *)pushHash - sessionToken:(NSString *)sessionToken { - NSDictionary *parameters = (pushHash ? @{ @"push_hash" : pushHash } : nil); - return [self _trackEventCommandWithEventName:PFRESTAnalyticsEventNameAppOpened - parameters:parameters - sessionToken:sessionToken]; -} - -+ (instancetype)trackEventCommandWithEventName:(NSString *)eventName - dimensions:(NSDictionary *)dimensions - sessionToken:(NSString *)sessionToken { - NSDictionary *parameters = (dimensions ? @{ @"dimensions" : dimensions } : nil); - return [self _trackEventCommandWithEventName:eventName parameters:parameters sessionToken:sessionToken]; -} - -+ (instancetype)trackCrashReportCommandWithBreakpadDumpParameters:(NSDictionary *)parameters - sessionToken:(NSString *)sessionToken { - return [self _trackEventCommandWithEventName:PFRESTAnalyticsEventNameCrashReport - parameters:@{ @"breakpadDump" : parameters } - sessionToken:sessionToken]; -} - -+ (instancetype)_trackEventCommandWithEventName:(NSString *)eventName - parameters:(NSDictionary *)parameters - sessionToken:(NSString *)sessionToken { - NSString *httpPath = [NSString stringWithFormat:@"events/%@", eventName]; - - NSMutableDictionary *dictionary = (parameters ? [parameters mutableCopy] : [NSMutableDictionary dictionary]); - if (!dictionary[@"at"]) { - dictionary[@"at"] = [NSDate date]; - } - - return [self commandWithHTTPPath:httpPath - httpMethod:PFHTTPRequestMethodPOST - parameters:dictionary - sessionToken:sessionToken]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCloudCommand.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCloudCommand.h deleted file mode 100644 index b15bf7a..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCloudCommand.h +++ /dev/null @@ -1,22 +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. - */ - -#import "PFRESTCommand.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFRESTCloudCommand : PFRESTCommand - -+ (instancetype)commandForFunction:(NSString *)function - withParameters:(nullable NSDictionary *)parameters - sessionToken:(nullable NSString *)sessionToken; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCloudCommand.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCloudCommand.m deleted file mode 100644 index 5bd85a9..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCloudCommand.m +++ /dev/null @@ -1,27 +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. - */ - -#import "PFRESTCloudCommand.h" - -#import "PFAssert.h" -#import "PFHTTPRequest.h" - -@implementation PFRESTCloudCommand - -+ (instancetype)commandForFunction:(NSString *)function - withParameters:(NSDictionary *)parameters - sessionToken:(NSString *)sessionToken { - NSString *path = [NSString stringWithFormat:@"functions/%@", function]; - return [self commandWithHTTPPath:path - httpMethod:PFHTTPRequestMethodPOST - parameters:parameters - sessionToken:sessionToken]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCommand.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCommand.h deleted file mode 100644 index 0e6ad3e..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCommand.h +++ /dev/null @@ -1,45 +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. - */ - -#import - -#import "PFNetworkCommand.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFRESTCommand : NSObject - -@property (nonatomic, copy, readonly) NSString *httpPath; -@property (nonatomic, copy, readonly) NSString *httpMethod; - -@property (nullable, nonatomic, copy, readonly) NSDictionary *parameters; -@property (nullable, nonatomic, copy) NSDictionary *additionalRequestHeaders; - -@property (nonatomic, copy, readonly) NSString *cacheKey; - -@property (nullable, nonatomic, copy) NSString *localId; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -+ (instancetype)commandWithHTTPPath:(NSString *)path - httpMethod:(NSString *)httpMethod - parameters:(nullable NSDictionary *)parameters - sessionToken:(nullable NSString *)sessionToken; - -+ (instancetype)commandWithHTTPPath:(NSString *)path - httpMethod:(NSString *)httpMethod - parameters:(nullable NSDictionary *)parameters - operationSetUUID:(nullable NSString *)operationSetIdentifier - sessionToken:(nullable NSString *)sessionToken; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCommand.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCommand.m deleted file mode 100644 index b9460fa..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCommand.m +++ /dev/null @@ -1,230 +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. - */ - -#import "PFRESTCommand.h" -#import "PFRESTCommand_Private.h" - -#import "PFAssert.h" -#import "PFCoreManager.h" -#import "PFFieldOperation.h" -#import "PFHTTPRequest.h" -#import "PFHash.h" -#import "PFInternalUtils.h" -#import "PFObjectLocalIdStore.h" -#import "PFObjectPrivate.h" -#import "Parse_Private.h" - -static NSString *const PFRESTCommandHTTPPathEncodingKey = @"httpPath"; -static NSString *const PFRESTCommandHTTPMethodEncodingKey = @"httpMethod"; -static NSString *const PFRESTCommandParametersEncodingKey = @"parameters"; -static NSString *const PFRESTCommandSessionTokenEncodingKey = @"sessionToken"; -static NSString *const PFRESTCommandLocalIdEncodingKey = @"localId"; - -// Increment this when you change the format of cache values. -static const int PFRESTCommandCacheKeyVersion = 1; - -@implementation PFRESTCommand - -@synthesize sessionToken = _sessionToken; -@synthesize operationSetUUID = _operationSetUUID; -@synthesize localId = _localId; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -+ (instancetype)commandWithHTTPPath:(NSString *)path - httpMethod:(NSString *)httpMethod - parameters:(NSDictionary *)parameters - sessionToken:(NSString *)sessionToken { - return [self commandWithHTTPPath:path - httpMethod:httpMethod - parameters:parameters - operationSetUUID:nil - sessionToken:sessionToken]; -} - -+ (instancetype)commandWithHTTPPath:(NSString *)path - httpMethod:(NSString *)httpMethod - parameters:(NSDictionary *)parameters - operationSetUUID:(NSString *)operationSetIdentifier - sessionToken:(NSString *)sessionToken { - PFRESTCommand *command = [[self alloc] init]; - command.httpPath = path; - command.httpMethod = httpMethod; - command.parameters = parameters; - command.operationSetUUID = operationSetIdentifier; - command.sessionToken = sessionToken; - return command; -} - -///-------------------------------------- -#pragma mark - CacheKey -///-------------------------------------- - -- (NSString *)cacheKey { - if (_cacheKey) { - return _cacheKey; - } - - NSMutableDictionary *cacheParameters = [NSMutableDictionary dictionaryWithCapacity:2]; - if (self.parameters) { - cacheParameters[PFRESTCommandParametersEncodingKey] = self.parameters; - } - if (self.sessionToken) { - cacheParameters[PFRESTCommandSessionTokenEncodingKey] = self.sessionToken; - } - - NSString *parametersCacheKey = [PFInternalUtils cacheKeyForObject:cacheParameters]; - - _cacheKey = [NSString stringWithFormat:@"PFRESTCommand.%i.%@.%@.%ld.%@", - PFRESTCommandCacheKeyVersion, self.httpMethod, PFMD5HashFromString(self.httpPath), - // We use MD5 instead of native hash because it collides too much. - (long)PARSE_API_VERSION, PFMD5HashFromString(parametersCacheKey)]; - return _cacheKey; -} - -///-------------------------------------- -#pragma mark - PFNetworkCommand -///-------------------------------------- - -#pragma mark Encoding/Decoding - -+ (instancetype)commandFromDictionaryRepresentation:(NSDictionary *)dictionary { - if (![self isValidDictionaryRepresentation:dictionary]) { - return nil; - } - - PFRESTCommand *command = [self commandWithHTTPPath:dictionary[PFRESTCommandHTTPPathEncodingKey] - httpMethod:dictionary[PFRESTCommandHTTPMethodEncodingKey] - parameters:dictionary[PFRESTCommandParametersEncodingKey] - sessionToken:dictionary[PFRESTCommandSessionTokenEncodingKey]]; - command.localId = dictionary[PFRESTCommandLocalIdEncodingKey]; - return command; -} - -- (NSDictionary *)dictionaryRepresentation { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - if (self.httpPath) { - dictionary[PFRESTCommandHTTPPathEncodingKey] = self.httpPath; - } - if (self.httpMethod) { - dictionary[PFRESTCommandHTTPMethodEncodingKey] = self.httpMethod; - } - if (self.parameters) { - NSDictionary *parameters = [[PFPointerOrLocalIdObjectEncoder objectEncoder] encodeObject:self.parameters]; - dictionary[PFRESTCommandParametersEncodingKey] = parameters; - } - if (self.sessionToken) { - dictionary[PFRESTCommandSessionTokenEncodingKey] = self.sessionToken; - } - if (self.localId) { - dictionary[PFRESTCommandLocalIdEncodingKey] = self.localId; - } - return [dictionary copy]; -} - -+ (BOOL)isValidDictionaryRepresentation:(NSDictionary *)dictionary { - return dictionary[PFRESTCommandHTTPPathEncodingKey] != nil; -} - -#pragma mark Local Identifiers - -/*! - If this was the second save on a new object while offline, then its objectId - wasn't yet set when the command was created, so it would have been considered a - "create". But if the first save succeeded, then there is an objectId now, and it - will be mapped to the localId for this command's result. If so, change the - "create" operation to an "update", and add the objectId to the command. - */ -- (void)maybeChangeServerOperation { - if (self.localId) { - NSString *objectId = [[Parse _currentManager].coreManager.objectLocalIdStore objectIdForLocalId:self.localId]; - if (objectId) { - self.localId = nil; - - NSArray *components = [self.httpPath pathComponents]; - if ([components count] == 2) { - self.httpPath = [NSString pathWithComponents:[components arrayByAddingObject:objectId]]; - } - - if ([self.httpPath hasPrefix:@"classes"] && - [self.httpMethod isEqualToString:PFHTTPRequestMethodPOST]) { - self.httpMethod = PFHTTPRequestMethodPUT; - } - } - - PFConsistencyAssert(![self.httpMethod isEqualToString:PFHTTPRequestMethodDELETE] || objectId, - @"Attempt to delete non-existent object."); - } -} - -+ (BOOL)forEachLocalIdIn:(id)object doBlock:(BOOL(^)(PFObject *pointer))block { - __block BOOL modified = NO; - - // If this is a Pointer with a local id, try to resolve it. - if ([object isKindOfClass:[PFObject class]] && !((PFObject *)object).objectId) { - return block(object); - } - - if ([object isKindOfClass:[NSDictionary class]]) { - [object enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) { - if ([[self class] forEachLocalIdIn:obj doBlock:block]) { - modified = YES; - } - }]; - } else if ([object isKindOfClass:[NSArray class]]) { - for (id value in object) { - if ([[self class] forEachLocalIdIn:value doBlock:block]) { - modified = YES; - } - } - } else if ([object isKindOfClass:[PFAddOperation class]]) { - for (id value in ((PFAddOperation *)object).objects) { - if ([[self class] forEachLocalIdIn:value doBlock:block]) { - modified = YES; - } - } - } else if ([object isKindOfClass:[PFAddUniqueOperation class]]) { - for (id value in ((PFAddUniqueOperation *)object).objects) { - if ([[self class] forEachLocalIdIn:value doBlock:block]) { - modified = YES; - } - } - } else if ([object isKindOfClass:[PFRemoveOperation class]]) { - for (id value in ((PFRemoveOperation *)object).objects) { - if ([[self class] forEachLocalIdIn:value doBlock:block]) { - modified = YES; - } - } - } - - return modified; -} - -- (void)forEachLocalId:(BOOL(^)(PFObject *pointer))block { - NSDictionary *data = [[PFDecoder objectDecoder] decodeObject:self.parameters]; - if (!data) { - return; - } - - if ([[self class] forEachLocalIdIn:data doBlock:block]) { - self.parameters = [[PFPointerOrLocalIdObjectEncoder objectEncoder] encodeObject:data]; - } -} - -- (void)resolveLocalIds { - [self forEachLocalId:^(PFObject *pointer) { - [pointer resolveLocalId]; - return YES; - }]; - [self maybeChangeServerOperation]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCommand_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCommand_Private.h deleted file mode 100644 index f3d1e4e..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTCommand_Private.h +++ /dev/null @@ -1,25 +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. - */ - -#import "PFRESTCommand.h" - -@interface PFRESTCommand () - -@property (nonatomic, copy, readwrite) NSString *sessionToken; - -@property (nonatomic, copy, readwrite) NSString *httpPath; -@property (nonatomic, copy, readwrite) NSString *httpMethod; - -@property (nonatomic, copy, readwrite) NSDictionary *parameters; - -@property (nonatomic, copy, readwrite) NSString *cacheKey; - -@property (nonatomic, copy, readwrite) NSString *operationSetUUID; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTConfigCommand.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTConfigCommand.h deleted file mode 100644 index 7b52307..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTConfigCommand.h +++ /dev/null @@ -1,22 +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. - */ - -#import "PFRESTCommand.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFRESTConfigCommand : PFRESTCommand - -+ (instancetype)configFetchCommandWithSessionToken:(nullable NSString *)sessionToken; -+ (instancetype)configUpdateCommandWithConfigParameters:(NSDictionary *)parameters - sessionToken:(nullable NSString *)sessionToken; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTConfigCommand.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTConfigCommand.m deleted file mode 100644 index 6709990..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTConfigCommand.m +++ /dev/null @@ -1,33 +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. - */ - -#import "PFRESTConfigCommand.h" - -#import "PFAssert.h" -#import "PFHTTPRequest.h" - -@implementation PFRESTConfigCommand - -+ (instancetype)configFetchCommandWithSessionToken:(NSString *)sessionToken { - return [self commandWithHTTPPath:@"config" - httpMethod:PFHTTPRequestMethodGET - parameters:nil - sessionToken:sessionToken]; -} - -+ (instancetype)configUpdateCommandWithConfigParameters:(NSDictionary *)parameters - sessionToken:(NSString *)sessionToken { - NSDictionary *commandParameters = @{ @"params" : parameters }; - return [self commandWithHTTPPath:@"config" - httpMethod:PFHTTPRequestMethodPUT - parameters:commandParameters - sessionToken:sessionToken]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTFileCommand.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTFileCommand.h deleted file mode 100644 index 770b258..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTFileCommand.h +++ /dev/null @@ -1,21 +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. - */ - -#import "PFRESTCommand.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFRESTFileCommand : PFRESTCommand - -+ (instancetype)uploadCommandForFileWithName:(NSString *)fileName - sessionToken:(nullable NSString *)sessionToken; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTFileCommand.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTFileCommand.m deleted file mode 100644 index 1de7cc9..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTFileCommand.m +++ /dev/null @@ -1,29 +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. - */ - -#import "PFRESTFileCommand.h" - -#import "PFAssert.h" -#import "PFHTTPRequest.h" - -@implementation PFRESTFileCommand - -+ (instancetype)uploadCommandForFileWithName:(NSString *)fileName - sessionToken:(NSString *)sessionToken { - NSMutableString *httpPath = [@"files/" mutableCopy]; - if (fileName) { - [httpPath appendString:fileName]; - } - return [self commandWithHTTPPath:httpPath - httpMethod:PFHTTPRequestMethodPOST - parameters:nil - sessionToken:sessionToken]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTObjectBatchCommand.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTObjectBatchCommand.h deleted file mode 100644 index 8b28e34..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTObjectBatchCommand.h +++ /dev/null @@ -1,22 +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. - */ - -#import "PFRESTCommand.h" - -extern NSUInteger const PFRESTObjectBatchCommandSubcommandsLimit; - -NS_ASSUME_NONNULL_BEGIN - -@interface PFRESTObjectBatchCommand : PFRESTCommand - -+ (instancetype)batchCommandWithCommands:(NSArray *)commands sessionToken:(nullable NSString *)sessionToken; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTObjectBatchCommand.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTObjectBatchCommand.m deleted file mode 100644 index 7aa407f..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTObjectBatchCommand.m +++ /dev/null @@ -1,42 +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. - */ - -#import "PFRESTObjectBatchCommand.h" - -#import "PFAssert.h" -#import "PFHTTPRequest.h" - -NSUInteger const PFRESTObjectBatchCommandSubcommandsLimit = 50; - -@implementation PFRESTObjectBatchCommand - -+ (nonnull instancetype)batchCommandWithCommands:(NSArray *)commands - sessionToken:(NSString *)sessionToken { - PFParameterAssert([commands count] <= PFRESTObjectBatchCommandSubcommandsLimit, - @"Max of %d commands are allowed in a single batch command", - (int)PFRESTObjectBatchCommandSubcommandsLimit); - - NSMutableArray *requests = [NSMutableArray arrayWithCapacity:[commands count]]; - for (PFRESTCommand *command in commands) { - NSMutableDictionary *requestDictionary = [@{ @"method" : command.httpMethod, - @"path" : [NSString stringWithFormat:@"/1/%@", command.httpPath] - } mutableCopy]; - if (command.parameters) { - requestDictionary[@"body"] = command.parameters; - } - - [requests addObject:requestDictionary]; - } - return [self commandWithHTTPPath:@"batch" - httpMethod:PFHTTPRequestMethodPOST - parameters:@{ @"requests" : requests } - sessionToken:sessionToken]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTObjectCommand.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTObjectCommand.h deleted file mode 100644 index 67a8ff4..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTObjectCommand.h +++ /dev/null @@ -1,36 +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. - */ - -#import "PFRESTCommand.h" - -NS_ASSUME_NONNULL_BEGIN - -@class PFObjectState; - -@interface PFRESTObjectCommand : PFRESTCommand - -+ (instancetype)fetchObjectCommandForObjectState:(PFObjectState *)state - withSessionToken:(nullable NSString *)sessionToken; - -+ (instancetype)createObjectCommandForObjectState:(PFObjectState *)state - changes:(nullable NSDictionary *)changes - operationSetUUID:(nullable NSString *)operationSetIdentifier - sessionToken:(nullable NSString *)sessionToken; - -+ (instancetype)updateObjectCommandForObjectState:(PFObjectState *)state - changes:(nullable NSDictionary *)changes - operationSetUUID:(nullable NSString *)operationSetIdentifier - sessionToken:(nullable NSString *)sessionToken; - -+ (instancetype)deleteObjectCommandForObjectState:(PFObjectState *)state - withSessionToken:(nullable NSString *)sessionToken; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTObjectCommand.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTObjectCommand.m deleted file mode 100644 index 964273e..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTObjectCommand.m +++ /dev/null @@ -1,77 +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. - */ - -#import "PFRESTObjectCommand.h" - -#import "PFAssert.h" -#import "PFHTTPRequest.h" -#import "PFObjectState.h" - -@implementation PFRESTObjectCommand - -+ (instancetype)fetchObjectCommandForObjectState:(PFObjectState *)state - withSessionToken:(NSString *)sessionToken { - PFParameterAssert(state.objectId.length, @"objectId should be non nil"); - PFParameterAssert(state.parseClassName.length, @"Class name should be non nil"); - - NSString *httpPath = [NSString stringWithFormat:@"classes/%@/%@", state.parseClassName, state.objectId]; - PFRESTObjectCommand *command = [self commandWithHTTPPath:httpPath - httpMethod:PFHTTPRequestMethodGET - parameters:nil - sessionToken:sessionToken]; - return command; -} - -+ (instancetype)createObjectCommandForObjectState:(PFObjectState *)state - changes:(NSDictionary *)changes - operationSetUUID:(NSString *)operationSetIdentifier - sessionToken:(NSString *)sessionToken { - PFParameterAssert(state.parseClassName.length, @"Class name should be non nil"); - - NSString *httpPath = [NSString stringWithFormat:@"classes/%@", state.parseClassName]; - PFRESTObjectCommand *command = [self commandWithHTTPPath:httpPath - httpMethod:PFHTTPRequestMethodPOST - parameters:changes - operationSetUUID:operationSetIdentifier - sessionToken:sessionToken]; - return command; -} - -+ (instancetype)updateObjectCommandForObjectState:(PFObjectState *)state - changes:(NSDictionary *)changes - operationSetUUID:(NSString *)operationSetIdentifier - sessionToken:(NSString *)sessionToken { - PFParameterAssert(state.parseClassName.length, @"Class name should be non nil"); - PFParameterAssert(state.objectId.length, @"objectId should be non nil"); - - NSString *httpPath = [NSString stringWithFormat:@"classes/%@/%@", state.parseClassName, state.objectId]; - PFRESTObjectCommand *command = [self commandWithHTTPPath:httpPath - httpMethod:PFHTTPRequestMethodPUT - parameters:changes - operationSetUUID:operationSetIdentifier - sessionToken:sessionToken]; - return command; -} - -+ (instancetype)deleteObjectCommandForObjectState:(PFObjectState *)state - withSessionToken:(NSString *)sessionToken { - PFParameterAssert(state.parseClassName.length, @"Class name should be non nil"); - - NSMutableString *httpPath = [NSMutableString stringWithFormat:@"classes/%@", state.parseClassName]; - if (state.objectId) { - [httpPath appendFormat:@"/%@", state.objectId]; - } - PFRESTObjectCommand *command = [self commandWithHTTPPath:httpPath - httpMethod:PFHTTPRequestMethodDELETE - parameters:nil - sessionToken:sessionToken]; - return command; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTPushCommand.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTPushCommand.h deleted file mode 100644 index d58965d..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTPushCommand.h +++ /dev/null @@ -1,25 +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. - */ - -#import "PFRESTCommand.h" - -#import - -@class PFPushState; - -NS_ASSUME_NONNULL_BEGIN - -PF_WATCH_UNAVAILABLE @interface PFRESTPushCommand : PFRESTCommand - -+ (instancetype)sendPushCommandWithPushState:(PFPushState *)state - sessionToken:(nullable NSString *)sessionToken; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTPushCommand.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTPushCommand.m deleted file mode 100644 index 2f7601e..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTPushCommand.m +++ /dev/null @@ -1,57 +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. - */ - -#import "PFRESTPushCommand.h" - -#import "PFAssert.h" -#import "PFDateFormatter.h" -#import "PFHTTPRequest.h" -#import "PFInternalUtils.h" -#import "PFPushState.h" -#import "PFQueryState.h" -#import "PFRESTQueryCommand.h" - -@implementation PFRESTPushCommand - -+ (instancetype)sendPushCommandWithPushState:(PFPushState *)state - sessionToken:(NSString *)sessionToken { - NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; - - if (state.queryState) { - NSDictionary *queryParameters = [PFRESTQueryCommand findCommandParametersForQueryState:state.queryState]; - parameters[@"where"] = queryParameters[@"where"]; - } else { - if (state.channels) { - parameters[@"channels"] = [state.channels allObjects]; - } - } - - // If there are no conditions set, then push to everyone by specifying empty query conditions. - if ([parameters count] == 0) { - parameters[@"where"] = @{}; - } - - if (state.expirationDate) { - parameters[@"expiration_time"] = [[PFDateFormatter sharedFormatter] preciseStringFromDate:state.expirationDate]; - } else if (state.expirationTimeInterval) { - parameters[@"expiration_interval"] = state.expirationTimeInterval; - } - - // TODO (nlutsenko): Probably we need an assert here, as there is no reason to send push without message - if (state.payload) { - parameters[@"data"] = state.payload; - } - - return [self commandWithHTTPPath:@"push" - httpMethod:PFHTTPRequestMethodPOST - parameters:parameters - sessionToken:sessionToken]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTQueryCommand.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTQueryCommand.h deleted file mode 100644 index a77a66f..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTQueryCommand.h +++ /dev/null @@ -1,57 +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. - */ - -#import "PFRESTCommand.h" - -@class PFQueryState; - -NS_ASSUME_NONNULL_BEGIN - -@interface PFRESTQueryCommand : PFRESTCommand - -///-------------------------------------- -/// @name Find -///-------------------------------------- - -+ (instancetype)findCommandForQueryState:(PFQueryState *)queryState withSessionToken:(nullable NSString *)sessionToken; - -+ (instancetype)findCommandForClassWithName:(NSString *)className - order:(nullable NSString *)order - conditions:(nullable NSDictionary *)conditions - selectedKeys:(nullable NSSet *)selectedKeys - includedKeys:(nullable NSSet *)includedKeys - limit:(NSInteger)limit - skip:(NSInteger)skip - extraOptions:(nullable NSDictionary *)extraOptions - tracingEnabled:(BOOL)trace - sessionToken:(nullable NSString *)sessionToken; - -///-------------------------------------- -/// @name Count -///-------------------------------------- - -+ (instancetype)countCommandFromFindCommand:(PFRESTQueryCommand *)findCommand; - -///-------------------------------------- -/// @name Parameters -///-------------------------------------- - -+ (NSDictionary *)findCommandParametersForQueryState:(PFQueryState *)queryState; -+ (NSDictionary *)findCommandParametersWithOrder:(nullable NSString *)order - conditions:(nullable NSDictionary *)conditions - selectedKeys:(nullable NSSet *)selectedKeys - includedKeys:(nullable NSSet *)includedKeys - limit:(NSInteger)limit - skip:(NSInteger)skip - extraOptions:(nullable NSDictionary *)extraOptions - tracingEnabled:(BOOL)trace; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTQueryCommand.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTQueryCommand.m deleted file mode 100644 index bf90f49..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTQueryCommand.m +++ /dev/null @@ -1,200 +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. - */ - -#import "PFRESTQueryCommand.h" - -#import "PFAssert.h" -#import "PFEncoder.h" -#import "PFHTTPRequest.h" -#import "PFQueryPrivate.h" -#import "PFQueryState.h" - -@implementation PFRESTQueryCommand - -///-------------------------------------- -#pragma mark - Find -///-------------------------------------- - -+ (instancetype)findCommandForQueryState:(PFQueryState *)queryState withSessionToken:(NSString *)sessionToken { - NSDictionary *parameters = [self findCommandParametersForQueryState:queryState]; - return [self _findCommandForClassWithName:queryState.parseClassName - parameters:parameters - sessionToken:sessionToken]; -} - -+ (instancetype)findCommandForClassWithName:(NSString *)className - order:(NSString *)order - conditions:(NSDictionary *)conditions - selectedKeys:(NSSet *)selectedKeys - includedKeys:(NSSet *)includedKeys - limit:(NSInteger)limit - skip:(NSInteger)skip - extraOptions:(NSDictionary *)extraOptions - tracingEnabled:(BOOL)trace - sessionToken:(NSString *)sessionToken { - NSDictionary *parameters = [self findCommandParametersWithOrder:order - conditions:conditions - selectedKeys:selectedKeys - includedKeys:includedKeys - limit:limit - skip:skip - extraOptions:extraOptions - tracingEnabled:trace]; - return [self _findCommandForClassWithName:className - parameters:parameters - sessionToken:sessionToken]; -} - -+ (instancetype)_findCommandForClassWithName:(NSString *)className - parameters:(NSDictionary *)parameters - sessionToken:(NSString *)sessionToken { - NSString *httpPath = [NSString stringWithFormat:@"classes/%@", className]; - PFRESTQueryCommand *command = [self commandWithHTTPPath:httpPath - httpMethod:PFHTTPRequestMethodGET - parameters:parameters - sessionToken:sessionToken]; - return command; -} - -///-------------------------------------- -#pragma mark - Count -///-------------------------------------- - -+ (instancetype)countCommandFromFindCommand:(PFRESTQueryCommand *)findCommand { - NSMutableDictionary *parameters = [findCommand.parameters mutableCopy]; - parameters[@"count"] = @"1"; - parameters[@"limit"] = @"0"; // Set the limit to 0, as we are not interested in results at all. - [parameters removeObjectForKey:@"skip"]; - - return [self commandWithHTTPPath:findCommand.httpPath - httpMethod:findCommand.httpMethod - parameters:[parameters copy] - sessionToken:findCommand.sessionToken]; -} - -///-------------------------------------- -#pragma mark - Parameters -///-------------------------------------- - -+ (NSDictionary *)findCommandParametersForQueryState:(PFQueryState *)queryState { - return [self findCommandParametersWithOrder:queryState.sortOrderString - conditions:queryState.conditions - selectedKeys:queryState.selectedKeys - includedKeys:queryState.includedKeys - limit:queryState.limit - skip:queryState.skip - extraOptions:queryState.extraOptions - tracingEnabled:queryState.trace]; -} - -+ (NSDictionary *)findCommandParametersWithOrder:(NSString *)order - conditions:(NSDictionary *)conditions - selectedKeys:(NSSet *)selectedKeys - includedKeys:(NSSet *)includedKeys - limit:(NSInteger)limit - skip:(NSInteger)skip - extraOptions:(NSDictionary *)extraOptions - tracingEnabled:(BOOL)trace { - NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; - - if ([order length]) { - parameters[@"order"] = order; - } - if (selectedKeys != nil) { - parameters[@"keys"] = [[selectedKeys allObjects] componentsJoinedByString:@","]; - } - if ([includedKeys count] > 0) { - parameters[@"include"] = [[includedKeys allObjects] componentsJoinedByString:@","]; - } - if (limit >= 0) { - parameters[@"limit"] = [NSString stringWithFormat:@"%d", (int)limit]; - } - if (skip > 0) { - parameters[@"skip"] = [NSString stringWithFormat:@"%d", (int)skip]; - } - if (trace) { - // TODO: (nlutsenko) Double check that tracing still works. Maybe create test for it. - parameters[@"trace"] = @"1"; - } - [extraOptions enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - parameters[key] = obj; - }]; - - if ([conditions count] > 0) { - NSMutableDictionary *whereData = [[NSMutableDictionary alloc] init]; - [conditions enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - if ([key isEqualToString:@"$or"]) { - NSArray *array = (NSArray *)obj; - NSMutableArray *newArray = [NSMutableArray array]; - for (PFQuery *subquery in array) { - // TODO: (nlutsenko) Move this validation into PFQuery/PFQueryState. - PFParameterAssert(subquery.state.limit < 0, @"OR queries do not support sub queries with limits"); - PFParameterAssert(subquery.state.skip == 0, @"OR queries do not support sub queries with skip"); - PFParameterAssert(subquery.state.sortKeys.count == 0, @"OR queries do not support sub queries with order"); - PFParameterAssert(subquery.state.includedKeys.count == 0, @"OR queries do not support sub-queries with includes"); - PFParameterAssert(subquery.state.selectedKeys == nil, @"OR queries do not support sub-queries with selectKeys"); - - NSDictionary *queryDict = [self findCommandParametersWithOrder:subquery.state.sortOrderString - conditions:subquery.state.conditions - selectedKeys:subquery.state.selectedKeys - includedKeys:subquery.state.includedKeys - limit:subquery.state.limit - skip:subquery.state.skip - extraOptions:nil - tracingEnabled:NO]; - - queryDict = queryDict[@"where"]; - if ([queryDict count] > 0) { - [newArray addObject:queryDict]; - } else { - [newArray addObject:[NSDictionary dictionary]]; - } - } - whereData[key] = newArray; - } else { - id object = [self _encodeSubqueryIfNeeded:obj]; - whereData[key] = [[PFPointerObjectEncoder objectEncoder] encodeObject:object]; - } - }]; - - parameters[@"where"] = whereData; - } - - return parameters; -} - -+ (id)_encodeSubqueryIfNeeded:(id)object { - if (![object isKindOfClass:[NSDictionary class]]) { - return object; - } - - NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithCapacity:[object count]]; - [object enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - if ([obj isKindOfClass:[PFQuery class]]) { - PFQuery *subquery = (PFQuery *)obj; - NSMutableDictionary *subqueryParameters = [[self findCommandParametersWithOrder:subquery.state.sortOrderString - conditions:subquery.state.conditions - selectedKeys:subquery.state.selectedKeys - includedKeys:subquery.state.includedKeys - limit:subquery.state.limit - skip:subquery.state.skip - extraOptions:subquery.state.extraOptions - tracingEnabled:NO] mutableCopy]; - subqueryParameters[@"className"] = subquery.parseClassName; - obj = subqueryParameters; - } else if ([obj isKindOfClass:[NSDictionary class]]) { - obj = [self _encodeSubqueryIfNeeded:obj]; - } - - parameters[key] = obj; - }]; - return parameters; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTSessionCommand.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTSessionCommand.h deleted file mode 100644 index d777b04..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTSessionCommand.h +++ /dev/null @@ -1,20 +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. - */ - -#import "PFRESTCommand.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFRESTSessionCommand : PFRESTCommand - -+ (instancetype)getCurrentSessionCommandWithSessionToken:(nullable NSString *)sessionToken; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTSessionCommand.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTSessionCommand.m deleted file mode 100644 index c38bd1c..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTSessionCommand.m +++ /dev/null @@ -1,23 +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. - */ - -#import "PFRESTSessionCommand.h" - -#import "PFHTTPRequest.h" - -@implementation PFRESTSessionCommand - -+ (instancetype)getCurrentSessionCommandWithSessionToken:(nullable NSString *)sessionToken { - return [self commandWithHTTPPath:@"sessions/me" - httpMethod:PFHTTPRequestMethodGET - parameters:nil - sessionToken:sessionToken]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTUserCommand.h b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTUserCommand.h deleted file mode 100644 index 93c81db..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTUserCommand.h +++ /dev/null @@ -1,56 +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. - */ - -#import "PFRESTCommand.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFRESTUserCommand : PFRESTCommand - -@property (nonatomic, assign, readonly) BOOL revocableSessionEnabled; - -///-------------------------------------- -/// @name Log In -///-------------------------------------- - -+ (instancetype)logInUserCommandWithUsername:(NSString *)username - password:(NSString *)password - revocableSession:(BOOL)revocableSessionEnabled; -+ (instancetype)serviceLoginUserCommandWithAuthenticationType:(NSString *)authenticationType - authenticationData:(NSDictionary *)authenticationData - revocableSession:(BOOL)revocableSessionEnabled; -+ (instancetype)serviceLoginUserCommandWithParameters:(NSDictionary *)parameters - revocableSession:(BOOL)revocableSessionEnabled - sessionToken:(nullable NSString *)sessionToken; - -///-------------------------------------- -/// @name Sign Up -///-------------------------------------- - -+ (instancetype)signUpUserCommandWithParameters:(NSDictionary *)parameters - revocableSession:(BOOL)revocableSessionEnabled - sessionToken:(nullable NSString *)sessionToken; - -///-------------------------------------- -/// @name Current User -///-------------------------------------- - -+ (instancetype)getCurrentUserCommandWithSessionToken:(NSString *)sessionToken; -+ (instancetype)upgradeToRevocableSessionCommandWithSessionToken:(NSString *)sessionToken; -+ (instancetype)logOutUserCommandWithSessionToken:(NSString *)sessionToken; - -///-------------------------------------- -/// @name Password Rest -///-------------------------------------- - -+ (instancetype)resetPasswordCommandForUserWithEmail:(NSString *)email; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTUserCommand.m b/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTUserCommand.m deleted file mode 100644 index 190a5d5..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Commands/PFRESTUserCommand.m +++ /dev/null @@ -1,132 +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. - */ - -#import "PFRESTUserCommand.h" - -#import "PFAssert.h" -#import "PFHTTPRequest.h" - -static NSString *const PFRESTUserCommandRevocableSessionHeader = @"X-Parse-Revocable-Session"; -static NSString *const PFRESTUserCommandRevocableSessionHeaderEnabledValue = @"1"; - -@interface PFRESTUserCommand () - -@property (nonatomic, assign, readwrite) BOOL revocableSessionEnabled; - -@end - -@implementation PFRESTUserCommand - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -+ (instancetype)_commandWithHTTPPath:(NSString *)path - httpMethod:(NSString *)httpMethod - parameters:(NSDictionary *)parameters - sessionToken:(NSString *)sessionToken - revocableSession:(BOOL)revocableSessionEnabled { - PFRESTUserCommand *command = [self commandWithHTTPPath:path - httpMethod:httpMethod - parameters:parameters - sessionToken:sessionToken]; - if (revocableSessionEnabled) { - command.additionalRequestHeaders = @{ PFRESTUserCommandRevocableSessionHeader : - PFRESTUserCommandRevocableSessionHeaderEnabledValue}; - } - command.revocableSessionEnabled = revocableSessionEnabled; - return command; -} - -///-------------------------------------- -#pragma mark - Log In -///-------------------------------------- - -+ (instancetype)logInUserCommandWithUsername:(NSString *)username - password:(NSString *)password - revocableSession:(BOOL)revocableSessionEnabled { - NSDictionary *parameters = @{ @"username" : username, - @"password" : password }; - return [self _commandWithHTTPPath:@"login" - httpMethod:PFHTTPRequestMethodGET - parameters:parameters - sessionToken:nil - revocableSession:revocableSessionEnabled]; -} - -+ (instancetype)serviceLoginUserCommandWithAuthenticationType:(NSString *)authenticationType - authenticationData:(NSDictionary *)authenticationData - revocableSession:(BOOL)revocableSessionEnabled { - NSDictionary *parameters = @{ @"authData" : @{ authenticationType : authenticationData } }; - return [self serviceLoginUserCommandWithParameters:parameters - revocableSession:revocableSessionEnabled - sessionToken:nil]; -} - -+ (instancetype)serviceLoginUserCommandWithParameters:(NSDictionary *)parameters - revocableSession:(BOOL)revocableSessionEnabled - sessionToken:(NSString *)sessionToken { - return [self _commandWithHTTPPath:@"users" - httpMethod:PFHTTPRequestMethodPOST - parameters:parameters - sessionToken:sessionToken - revocableSession:revocableSessionEnabled]; -} - -///-------------------------------------- -#pragma mark - Sign Up -///-------------------------------------- - -+ (instancetype)signUpUserCommandWithParameters:(NSDictionary *)parameters - revocableSession:(BOOL)revocableSessionEnabled - sessionToken:(NSString *)sessionToken { - return [self _commandWithHTTPPath:@"users" - httpMethod:PFHTTPRequestMethodPOST - parameters:parameters - sessionToken:sessionToken - revocableSession:revocableSessionEnabled]; -} - -///-------------------------------------- -#pragma mark - Current User -///-------------------------------------- - -+ (instancetype)getCurrentUserCommandWithSessionToken:(NSString *)sessionToken { - return [self commandWithHTTPPath:@"users/me" - httpMethod:PFHTTPRequestMethodGET - parameters:nil - sessionToken:sessionToken]; -} - -+ (instancetype)upgradeToRevocableSessionCommandWithSessionToken:(NSString *)sessionToken { - return [self commandWithHTTPPath:@"upgradeToRevocableSession" - httpMethod:PFHTTPRequestMethodPOST - parameters:nil - sessionToken:sessionToken]; -} - -+ (instancetype)logOutUserCommandWithSessionToken:(NSString *)sessionToken { - return [self commandWithHTTPPath:@"logout" - httpMethod:PFHTTPRequestMethodPOST - parameters:nil - sessionToken:sessionToken]; -} - -///-------------------------------------- -#pragma mark - Additional User Commands -///-------------------------------------- - -+ (instancetype)resetPasswordCommandForUserWithEmail:(NSString *)email { - return [self commandWithHTTPPath:@"requestPasswordReset" - httpMethod:PFHTTPRequestMethodPOST - parameters:@{ @"email" : email } - sessionToken:nil]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Config/Controller/PFConfigController.h b/FoodbLog/Pods/Parse/Parse/Internal/Config/Controller/PFConfigController.h deleted file mode 100644 index 1333849..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Config/Controller/PFConfigController.h +++ /dev/null @@ -1,48 +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. - */ - -#import - -#import - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFConfig; -@class PFCurrentConfigController; -@class PFFileManager; -@protocol PFCommandRunning; - -@interface PFConfigController : NSObject - -@property (nonatomic, strong, readonly) PFFileManager *fileManager; -@property (nonatomic, strong, readonly) id commandRunner; - -@property (nonatomic, strong, readonly) PFCurrentConfigController *currentConfigController; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithFileManager:(PFFileManager *)fileManager - commandRunner:(id)commandRunner NS_DESIGNATED_INITIALIZER; - -///-------------------------------------- -/// @name Fetch -///-------------------------------------- - -/*! - Fetches current config from network async. - - @param sessionToken Current user session token. - - @returns `BFTask` with result set to `PFConfig`. - */ -- (BFTask *)fetchConfigAsyncWithSessionToken:(NSString *)sessionToken; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Config/Controller/PFConfigController.m b/FoodbLog/Pods/Parse/Parse/Internal/Config/Controller/PFConfigController.m deleted file mode 100644 index ec26b5b..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Config/Controller/PFConfigController.m +++ /dev/null @@ -1,95 +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. - */ - -#import "PFConfigController.h" - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFCommandResult.h" -#import "PFCommandRunning.h" -#import "PFConfig_Private.h" -#import "PFCurrentConfigController.h" -#import "PFDecoder.h" -#import "PFRESTConfigCommand.h" - -@interface PFConfigController () -{ - dispatch_queue_t _dataAccessQueue; - dispatch_queue_t _networkQueue; - BFExecutor *_networkExecutor; -} - -@end - -@implementation PFConfigController - -@synthesize currentConfigController = _currentConfigController; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithFileManager:(PFFileManager *)fileManager - commandRunner:(id)commandRunner { - self = [super init]; - if (!self) return nil; - - _fileManager = fileManager; - _commandRunner = commandRunner; - - _dataAccessQueue = dispatch_queue_create("com.parse.config.access", DISPATCH_QUEUE_SERIAL); - - _networkQueue = dispatch_queue_create("com.parse.config.network", DISPATCH_QUEUE_SERIAL); - _networkExecutor = [BFExecutor executorWithDispatchQueue:_networkQueue]; - - return self; -} - -///-------------------------------------- -#pragma mark - Fetch -///-------------------------------------- - -- (BFTask *)fetchConfigAsyncWithSessionToken:(NSString *)sessionToken { - @weakify(self); - return [BFTask taskFromExecutor:_networkExecutor withBlock:^id{ - @strongify(self); - PFRESTCommand *command = [PFRESTConfigCommand configFetchCommandWithSessionToken:sessionToken]; - return [[[self.commandRunner runCommandAsync:command - withOptions:PFCommandRunningOptionRetryIfFailed] - continueWithSuccessBlock:^id(BFTask *task) { - PFCommandResult *result = task.result; - NSDictionary *fetchedConfig = [[PFDecoder objectDecoder] decodeObject:result.result]; - return [[PFConfig alloc] initWithFetchedConfig:fetchedConfig]; - }] continueWithSuccessBlock:^id(BFTask *task) { - // Roll-forward the config. - return [[self.currentConfigController setCurrentConfigAsync:task.result] continueWithResult:task.result]; - }]; - }]; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (PFCurrentConfigController *)currentConfigController { - __block PFCurrentConfigController *controller = nil; - dispatch_sync(_dataAccessQueue, ^{ - if (!_currentConfigController) { - _currentConfigController = [[PFCurrentConfigController alloc] initWithFileManager:self.fileManager]; - } - controller = _currentConfigController; - }); - return controller; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Config/Controller/PFCurrentConfigController.h b/FoodbLog/Pods/Parse/Parse/Internal/Config/Controller/PFCurrentConfigController.h deleted file mode 100644 index 0c947c8..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Config/Controller/PFCurrentConfigController.h +++ /dev/null @@ -1,43 +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. - */ - -#import - -#import - -#import "PFMacros.h" - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFConfig; -@class PFFileManager; - -@interface PFCurrentConfigController : NSObject - -@property (nonatomic, strong, readonly) PFFileManager *fileManager; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithFileManager:(PFFileManager *)fileManager NS_DESIGNATED_INITIALIZER; - -+ (instancetype)controllerWithFileManager:(PFFileManager *)fileManager; - -///-------------------------------------- -/// @name Accessors -///-------------------------------------- - -- (BFTask *)getCurrentConfigAsync; -- (BFTask *)setCurrentConfigAsync:(PFConfig *)config; - -- (BFTask *)clearCurrentConfigAsync; -- (BFTask *)clearMemoryCachedCurrentConfigAsync; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Config/Controller/PFCurrentConfigController.m b/FoodbLog/Pods/Parse/Parse/Internal/Config/Controller/PFCurrentConfigController.m deleted file mode 100644 index 1378520..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Config/Controller/PFCurrentConfigController.m +++ /dev/null @@ -1,109 +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. - */ - -#import "PFCurrentConfigController.h" - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFConfig_Private.h" -#import "PFDecoder.h" -#import "PFFileManager.h" -#import "PFJSONSerialization.h" - -static NSString *const PFConfigCurrentConfigFileName_ = @"config"; - -@interface PFCurrentConfigController () { - dispatch_queue_t _dataQueue; - BFExecutor *_dataExecutor; - PFConfig *_currentConfig; -} - -@property (nonatomic, copy, readonly) NSString *configFilePath; - -@end - -@implementation PFCurrentConfigController - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithFileManager:(PFFileManager *)fileManager { - self = [super init]; - if (!self) return nil; - - _dataQueue = dispatch_queue_create("com.parse.config.current", DISPATCH_QUEUE_SERIAL); - _dataExecutor = [BFExecutor executorWithDispatchQueue:_dataQueue]; - - _fileManager = fileManager; - - return self; -} - -+ (instancetype)controllerWithFileManager:(PFFileManager *)fileManager { - return [[self alloc] initWithFileManager:fileManager]; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (BFTask *)getCurrentConfigAsync { - return [BFTask taskFromExecutor:_dataExecutor withBlock:^id{ - if (!_currentConfig) { - NSDictionary *dictionary = [PFJSONSerialization JSONObjectFromFileAtPath:self.configFilePath]; - if (dictionary) { - NSDictionary *decodedDictionary = [[PFDecoder objectDecoder] decodeObject:dictionary]; - _currentConfig = [[PFConfig alloc] initWithFetchedConfig:decodedDictionary]; - } else { - _currentConfig = [[PFConfig alloc] init]; - } - } - return _currentConfig; - }]; -} - -- (BFTask *)setCurrentConfigAsync:(PFConfig *)config { - @weakify(self); - return [BFTask taskFromExecutor:_dataExecutor withBlock:^id{ - @strongify(self); - _currentConfig = config; - - NSDictionary *configParameters = @{ PFConfigParametersRESTKey : (config.parametersDictionary ?: @{}) }; - id encodedObject = [[PFPointerObjectEncoder objectEncoder] encodeObject:configParameters]; - NSData *jsonData = [PFJSONSerialization dataFromJSONObject:encodedObject]; - return [PFFileManager writeDataAsync:jsonData toFile:self.configFilePath]; - }]; -} - -- (BFTask *)clearCurrentConfigAsync { - @weakify(self); - return [BFTask taskFromExecutor:_dataExecutor withBlock:^id{ - @strongify(self); - _currentConfig = nil; - return [PFFileManager removeItemAtPathAsync:self.configFilePath]; - }]; -} - -- (BFTask *)clearMemoryCachedCurrentConfigAsync { - return [BFTask taskFromExecutor:_dataExecutor withBlock:^id{ - _currentConfig = nil; - return nil; - }]; -} - -- (NSString *)configFilePath { - return [self.fileManager parseDataItemPathForPathComponent:PFConfigCurrentConfigFileName_]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Config/PFConfig_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/Config/PFConfig_Private.h deleted file mode 100644 index 8ea452f..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Config/PFConfig_Private.h +++ /dev/null @@ -1,22 +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. - */ - -#import - -#import - -extern NSString *const PFConfigParametersRESTKey; - -@interface PFConfig (Private) - -@property (atomic, copy, readonly) NSDictionary *parametersDictionary; - -- (instancetype)initWithFetchedConfig:(NSDictionary *)config; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperation.h b/FoodbLog/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperation.h deleted file mode 100644 index 519353d..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperation.h +++ /dev/null @@ -1,168 +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. - */ - -#import - -#import "PFEncoder.h" - -@class PFDecoder; -@class PFObject; - -///-------------------------------------- -#pragma mark - PFFieldOperation -///-------------------------------------- - -/*! - A PFFieldOperation represents a modification to a value in a PFObject. - For example, setting, deleting, or incrementing a value are all different - kinds of PFFieldOperations. PFFieldOperations themselves can be considered - to be immutable. - */ -@interface PFFieldOperation : NSObject - -/*! - Converts the PFFieldOperation to a data structure (typically an NSDictionary) - that can be converted to JSON and sent to Parse as part of a save operation. - - @param objectEncoder encoder that will be used to encode the object. - @returns An object to be jsonified. - */ -- (id)encodeWithObjectEncoder:(PFEncoder *)objectEncoder; - -/*! - Returns a field operation that is composed of a previous operation followed by - this operation. This will not mutate either operation. However, it may return - self if the current operation is not affected by previous changes. For example: - [{increment by 2} mergeWithPrevious:{set to 5}] -> {set to 7} - [{set to 5} mergeWithPrevious:{increment by 2}] -> {set to 5} - [{add "foo"} mergeWithPrevious:{delete}] -> {set to ["foo"]} - [{delete} mergeWithPrevious:{add "foo"}] -> {delete} - - @param previous The most recent operation on the field, or nil if none. - @returns A new PFFieldOperation or self. - */ -- (PFFieldOperation *)mergeWithPrevious:(PFFieldOperation *)previous; - -/*! - Returns a new estimated value based on a previous value and this operation. This - value is not intended to be sent to Parse, but it used locally on the client to - inspect the most likely current value for a field. - - The key and object are used solely for PFRelation to be able to construct objects - that refer back to its parent. - - @param oldValue The previous value for the field. - @param key The key that this value is for. - - @returns The new value for the field. - */ -- (id)applyToValue:(id)oldValue forKey:(NSString *)key; - -@end - -///-------------------------------------- -#pragma mark - Independent Operations -///-------------------------------------- - -/*! - An operation where a field is set to a given value regardless of - its previous value. - */ -@interface PFSetOperation : PFFieldOperation - -@property (nonatomic, strong, readonly) id value; - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithValue:(id)value NS_DESIGNATED_INITIALIZER; -+ (instancetype)setWithValue:(id)value; - -@end - -/*! - An operation where a field is deleted from the object. - */ -@interface PFDeleteOperation : PFFieldOperation - -+ (instancetype)operation; - -@end - -///-------------------------------------- -#pragma mark - Numeric Operations -///-------------------------------------- - -/*! - An operation that increases a numeric field's value by a given amount. - */ -@interface PFIncrementOperation : PFFieldOperation - -@property (nonatomic, strong, readonly) NSNumber *amount; - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithAmount:(NSNumber *)amount NS_DESIGNATED_INITIALIZER; -+ (instancetype)incrementWithAmount:(NSNumber *)amount; - -@end - -///-------------------------------------- -#pragma mark - Array Operations -///-------------------------------------- - -/*! - An operation that adds a new element to an array field. - */ -@interface PFAddOperation : PFFieldOperation - -@property (nonatomic, strong, readonly) NSArray *objects; - -+ (instancetype)addWithObjects:(NSArray *)array; - -@end - -/*! - An operation that adds a new element to an array field, - only if it wasn't already present. - */ -@interface PFAddUniqueOperation : PFFieldOperation - -@property (nonatomic, strong, readonly) NSArray *objects; - -+ (instancetype)addUniqueWithObjects:(NSArray *)array; - -@end - -/*! - An operation that removes every instance of an element from - an array field. - */ -@interface PFRemoveOperation : PFFieldOperation - -@property (nonatomic, strong, readonly) NSArray *objects; - -+ (instancetype)removeWithObjects:(NSArray *)array; - -@end - -///-------------------------------------- -#pragma mark - Relation Operations -///-------------------------------------- - -/*! - An operation where a PFRelation's value is modified. - */ -@interface PFRelationOperation : PFFieldOperation - -@property (nonatomic, copy) NSString *targetClass; -@property (nonatomic, strong) NSMutableSet *relationsToAdd; -@property (nonatomic, strong) NSMutableSet *relationsToRemove; - -+ (instancetype)addRelationToObjects:(NSArray *)targets; -+ (instancetype)removeRelationToObjects:(NSArray *)targets; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperation.m b/FoodbLog/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperation.m deleted file mode 100644 index 780347f..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperation.m +++ /dev/null @@ -1,552 +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. - */ - -#import "PFFieldOperation.h" - -#import "PFAssert.h" -#import "PFDecoder.h" -#import "PFInternalUtils.h" -#import "PFObject.h" -#import "PFOfflineStore.h" -#import "PFRelation.h" -#import "PFRelationPrivate.h" - -///-------------------------------------- -#pragma mark - PFFieldOperation -///-------------------------------------- - -// PFFieldOperation and its subclasses encapsulate operations that can be done on a field. -@implementation PFFieldOperation - -- (id)encodeWithObjectEncoder:(PFEncoder *)objectEncoder { - PFConsistencyAssert(NO, @"Operation is invalid."); - return nil; -} - -- (PFFieldOperation *)mergeWithPrevious:(PFFieldOperation *)previous { - PFConsistencyAssert(NO, @"Operation is invalid."); - return nil; -} - -- (id)applyToValue:(id)oldValue forKey:(NSString *)key { - PFConsistencyAssert(NO, @"Operation is invalid."); - return nil; -} - -@end - -///-------------------------------------- -#pragma mark - Independent Operations -///-------------------------------------- - -@implementation PFSetOperation - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithValue:(id)value { - self = [super init]; - if (!self) return nil; - - PFParameterAssert(value, @"Cannot set a nil value in a PFObject."); - _value = value; - - return self; -} - -+ (id)setWithValue:(id)newValue { - return [[self alloc] initWithValue:newValue]; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"set to %@", self.value]; -} - -- (id)encodeWithObjectEncoder:(PFEncoder *)objectEncoder { - return [objectEncoder encodeObject:self.value]; -} - -- (PFSetOperation *)mergeWithPrevious:(PFFieldOperation *)previous { - return self; -} - -- (id)applyToValue:(id)oldValue forKey:(NSString *)key { - return self.value; -} - -@end - -@implementation PFDeleteOperation - -+ (instancetype)operation { - return [[self alloc] init]; -} - -- (NSString *)description { - return @"delete"; -} - -- (id)encodeWithObjectEncoder:(PFEncoder *)objectEncoder { - return @{ @"__op" : @"Delete" }; -} - -- (PFFieldOperation *)mergeWithPrevious:(PFFieldOperation *)previous { - return self; -} - -- (id)applyToValue:(id)oldValue forKey:(NSString *)key { - return nil; -} - -@end - -///-------------------------------------- -#pragma mark - Numeric Operations -///-------------------------------------- - -@implementation PFIncrementOperation - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithAmount:(NSNumber *)amount { - self = [super init]; - if (!self) return nil; - - _amount = amount; - - return self; -} - -+ (instancetype)incrementWithAmount:(NSNumber *)newAmount { - return [[self alloc] initWithAmount:newAmount]; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"increment by %@", self.amount]; -} - -- (id)encodeWithObjectEncoder:(PFEncoder *)objectEncoder { - return @{ @"__op" : @"Increment", - @"amount" : self.amount }; -} - -- (PFFieldOperation *)mergeWithPrevious:(PFFieldOperation *)previous { - if (!previous) { - return self; - } else if ([previous isKindOfClass:[PFDeleteOperation class]]) { - return [PFSetOperation setWithValue:self.amount]; - } else if ([previous isKindOfClass:[PFSetOperation class]]) { - id oldValue = ((PFSetOperation *)previous).value; - PFParameterAssert([oldValue isKindOfClass:[NSNumber class]], @"You cannot increment a non-number."); - return [PFSetOperation setWithValue:[PFInternalUtils addNumber:self.amount withNumber:oldValue]]; - } else if ([previous isKindOfClass:[PFIncrementOperation class]]) { - NSNumber *newAmount = [PFInternalUtils addNumber:self.amount - withNumber:((PFIncrementOperation *)previous).amount]; - return [PFIncrementOperation incrementWithAmount:newAmount]; - } - [NSException raise:NSInternalInconsistencyException format:@"Operation is invalid after previous operation."]; - return nil; -} - -- (id)applyToValue:(id)oldValue forKey:(NSString *)key { - if (!oldValue) { - return self.amount; - } - - PFParameterAssert([oldValue isKindOfClass:[NSNumber class]], @"You cannot increment a non-number."); - return [PFInternalUtils addNumber:self.amount withNumber:oldValue]; -} - -@end - -///-------------------------------------- -#pragma mark - Array Operations -///-------------------------------------- - -@implementation PFAddOperation - -- (instancetype)initWithObjects:(NSArray *)array { - self = [super init]; - if (!self) return nil; - - _objects = array; - - return self; -} - -+ (instancetype)addWithObjects:(NSArray *)objects { - return [(PFAddOperation *)[self alloc] initWithObjects:objects]; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"add %@", self.objects]; -} - -- (id)encodeWithObjectEncoder:(PFEncoder *)objectEncoder { - NSMutableArray *encodedObjects = [objectEncoder encodeObject:self.objects]; - return @{ @"__op" : @"Add", - @"objects" : encodedObjects }; -} - -- (PFFieldOperation *)mergeWithPrevious:(PFFieldOperation *)previous { - if (!previous) { - return self; - } else if ([previous isKindOfClass:[PFDeleteOperation class]]) { - return [PFSetOperation setWithValue:self.objects]; - } else if ([previous isKindOfClass:[PFSetOperation class]]) { - if ([((PFSetOperation *)previous).value isKindOfClass:[NSArray class]]) { - NSArray *oldArray = (NSArray *)(((PFSetOperation *)previous).value); - NSArray *newArray = [oldArray arrayByAddingObjectsFromArray:self.objects]; - return [PFSetOperation setWithValue:newArray]; - } else { - [NSException raise:NSInternalInconsistencyException format:@"You can't add an item to a non-array."]; - return nil; - } - } else if ([previous isKindOfClass:[PFAddOperation class]]) { - NSMutableArray *newObjects = [((PFAddOperation *)previous).objects mutableCopy]; - [newObjects addObjectsFromArray:self.objects]; - return [[self class] addWithObjects:newObjects]; - } - [NSException raise:NSInternalInconsistencyException format:@"Operation is invalid after previous operation."]; - return nil; -} - -- (id)applyToValue:(id)oldValue forKey:(NSString *)key { - if (!oldValue) { - return [self.objects mutableCopy]; - } else if ([oldValue isKindOfClass:[NSArray class]]) { - return [((NSArray *)oldValue)arrayByAddingObjectsFromArray:self.objects]; - } - [NSException raise:NSInternalInconsistencyException format:@"Operation is invalid after previous operation."]; - return nil; -} - -@end - -@implementation PFAddUniqueOperation - -- (instancetype)initWithObjects:(NSArray *)array { - self = [super init]; - if (!self) return nil; - - _objects = [[NSSet setWithArray:array] allObjects]; - - return self; -} - -+ (instancetype)addUniqueWithObjects:(NSArray *)objects { - return [(PFAddUniqueOperation *)[self alloc] initWithObjects:objects]; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"addToSet %@", self.objects]; -} - -- (id)encodeWithObjectEncoder:(PFEncoder *)objectEncoder { - NSMutableArray *encodedObjects = [objectEncoder encodeObject:self.objects]; - return @{ @"__op" : @"AddUnique", - @"objects" : encodedObjects }; -} - -- (PFFieldOperation *)mergeWithPrevious:(PFFieldOperation *)previous { - if (!previous) { - return self; - } else if ([previous isKindOfClass:[PFDeleteOperation class]]) { - return [PFSetOperation setWithValue:self.objects]; - } else if ([previous isKindOfClass:[PFSetOperation class]]) { - if ([((PFSetOperation *)previous).value isKindOfClass:[NSArray class]]) { - NSArray *oldArray = (((PFSetOperation *)previous).value); - return [PFSetOperation setWithValue:[self applyToValue:oldArray forKey:nil]]; - } else { - [NSException raise:NSInternalInconsistencyException format:@"You can't add an item to a non-array."]; - return nil; - } - } else if ([previous isKindOfClass:[PFAddUniqueOperation class]]) { - NSArray *previousObjects = ((PFAddUniqueOperation *)previous).objects; - return [[self class] addUniqueWithObjects:[self applyToValue:previousObjects forKey:nil]]; - } - [NSException raise:NSInternalInconsistencyException format:@"Operation is invalid after previous operation."]; - return nil; -} - -- (id)applyToValue:(id)oldValue forKey:(NSString *)key { - if (!oldValue) { - return [self.objects mutableCopy]; - } else if ([oldValue isKindOfClass:[NSArray class]]) { - NSMutableArray *newValue = [oldValue mutableCopy]; - for (id objectToAdd in self.objects) { - if ([objectToAdd isKindOfClass:[PFObject class]] && [objectToAdd objectId]) { - // Check uniqueness by objectId instead of equality. If the PFObject - // already exists in the array, replace it with the newer one. - NSUInteger index = [newValue indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { - return [obj isKindOfClass:[PFObject class]] && - [[obj objectId] isEqualToString:[objectToAdd objectId]]; - }]; - if (index == NSNotFound) { - [newValue addObject:objectToAdd]; - } else { - [newValue replaceObjectAtIndex:index withObject:objectToAdd]; - } - } else if (![newValue containsObject:objectToAdd]) { - [newValue addObject:objectToAdd]; - } - } - return newValue; - } - [NSException raise:NSInternalInconsistencyException format:@"Operation is invalid after previous operation."]; - return nil; -} - -@end - -@implementation PFRemoveOperation - -- (instancetype)initWithObjects:(NSArray *)array { - self = [super init]; - - _objects = array; - - return self; -} - -+ (id)removeWithObjects:(NSArray *)objects { - return [(PFRemoveOperation *)[self alloc] initWithObjects:objects]; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"remove %@", self.objects]; -} - -- (id)encodeWithObjectEncoder:(PFEncoder *)objectEncoder { - NSMutableArray *encodedObjects = [objectEncoder encodeObject:self.objects]; - return @{ @"__op" : @"Remove", - @"objects" : encodedObjects }; -} - -- (PFFieldOperation *)mergeWithPrevious:(PFFieldOperation *)previous { - if (!previous) { - return self; - } else if ([previous isKindOfClass:[PFDeleteOperation class]]) { - [NSException raise:NSInternalInconsistencyException format:@"You can't remove items from a deleted array."]; - return nil; - } else if ([previous isKindOfClass:[PFSetOperation class]]) { - if ([((PFSetOperation *)previous).value isKindOfClass:[NSArray class]]) { - NSArray *oldArray = ((PFSetOperation *)previous).value; - return [PFSetOperation setWithValue:[self applyToValue:oldArray forKey:nil]]; - } else { - [NSException raise:NSInternalInconsistencyException format:@"You can't add an item to a non-array."]; - return nil; - } - } else if ([previous isKindOfClass:[PFRemoveOperation class]]) { - NSArray *newObjects = [((PFRemoveOperation *)previous).objects arrayByAddingObjectsFromArray:self.objects]; - return [PFRemoveOperation removeWithObjects:newObjects]; - } - - [NSException raise:NSInternalInconsistencyException format:@"Operation is invalid after previous operation."]; - return nil; -} - -- (id)applyToValue:(id)oldValue forKey:(NSString *)key { - if (!oldValue) { - return [self.objects mutableCopy]; - } else if ([oldValue isKindOfClass:[NSArray class]]) { - NSMutableArray *newValue = [((NSArray *)oldValue)mutableCopy]; - [newValue removeObjectsInArray:self.objects]; - - // Remove the removed objects from objectsToBeRemoved -- the items - // remaining should be ones that weren't removed by object equality. - NSMutableArray *objectsToBeRemoved = [self.objects mutableCopy]; - [objectsToBeRemoved removeObjectsInArray:newValue]; - for (id objectToRemove in objectsToBeRemoved) { - if ([objectToRemove isKindOfClass:[PFObject class]] && [objectToRemove objectId]) { - NSIndexSet *indexes = [newValue indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { - return ([obj isKindOfClass:[PFObject class]] && - [[obj objectId] isEqualToString:[objectToRemove objectId]]); - }]; - if ([indexes count] != 0) { - [newValue removeObjectsAtIndexes:indexes]; - } - } - } - return newValue; - } - [NSException raise:NSInternalInconsistencyException format:@"Operation is invalid after previous operation."]; - return nil; -} - -@end - -///-------------------------------------- -#pragma mark - Relation Operations -///-------------------------------------- - -@implementation PFRelationOperation -@synthesize targetClass; - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _relationsToAdd = [NSMutableSet set]; - _relationsToRemove = [NSMutableSet set]; - - return self; -} - -+ (instancetype)addRelationToObjects:(NSArray *)targets { - PFRelationOperation *op = [[self alloc] init]; - if (targets.count > 0) { - op.targetClass = [[targets firstObject] parseClassName]; - } - - for (PFObject *target in targets) { - PFParameterAssert([target.parseClassName isEqualToString:op.targetClass], - @"All objects in a relation must be of the same class."); - [op.relationsToAdd addObject:target]; - } - - return op; -} - -+ (instancetype)removeRelationToObjects:(NSArray *)targets { - PFRelationOperation *operation = [[self alloc] init]; - if (targets.count > 0) { - operation.targetClass = [[targets objectAtIndex:0] parseClassName]; - } - - for (PFObject *target in targets) { - PFParameterAssert([target.parseClassName isEqualToString:operation.targetClass], - @"All objects in a relation must be of the same class."); - [operation.relationsToRemove addObject:target]; - } - - return operation; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"PFRelationOperation<%@> add:%@ remove:%@", - self.targetClass, - self.relationsToAdd, - self.relationsToRemove]; -} - -- (NSArray *)_convertToArrayInSet:(NSSet *)set withObjectEncoder:(PFEncoder *)objectEncoder { - NSMutableArray *array = [NSMutableArray arrayWithCapacity:set.count]; - for (PFObject *object in set) { - id encodedDict = [objectEncoder encodeObject:object]; - [array addObject:encodedDict]; - } - return array; -} - -- (id)encodeWithObjectEncoder:(PFEncoder *)objectEncoder { - NSDictionary *addDict = nil; - NSDictionary *removeDict = nil; - if (self.relationsToAdd.count > 0) { - NSArray *array = [self _convertToArrayInSet:self.relationsToAdd withObjectEncoder:objectEncoder]; - addDict = @{ @"__op" : @"AddRelation", - @"objects" : array }; - } - if (self.relationsToRemove.count > 0) { - NSArray *array = [self _convertToArrayInSet:self.relationsToRemove withObjectEncoder:objectEncoder]; - removeDict = @{ @"__op" : @"RemoveRelation", - @"objects" : array }; - } - - if (addDict && removeDict) { - return @{ @"__op" : @"Batch", - @"ops" : @[ addDict, removeDict ] }; - } - - if (addDict) { - return addDict; - } - - if (removeDict) { - return removeDict; - } - - [NSException raise:NSInternalInconsistencyException format:@"A PFRelationOperation was created without any data."]; - return nil; -} - -- (PFFieldOperation *)mergeWithPrevious:(PFFieldOperation *)previous { - if (!previous) { - return self; - } - - PFConsistencyAssert(![previous isKindOfClass:[PFDeleteOperation class]], @"You can't modify a relation after deleting it"); - PFConsistencyAssert([previous isKindOfClass:[PFRelationOperation class]], @"Operation is invalid after previous operation"); - - PFRelationOperation *previousOperation = (PFRelationOperation *)previous; - - PFParameterAssert(!previousOperation.targetClass || [previousOperation.targetClass isEqualToString:self.targetClass], - @"Related object object must be of class %@, but %@ was passed in", - previousOperation.targetClass, self.targetClass); - - //TODO: (nlutsenko) This logic seems to be messed up. We should return a new operation here, also merging logic seems funky. - NSSet *newRelationsToAdd = [self.relationsToAdd copy]; - NSSet *newRelationsToRemove = [self.relationsToRemove copy]; - [self.relationsToAdd removeAllObjects]; - [self.relationsToRemove removeAllObjects]; - - for (NSString *objectId in previousOperation.relationsToAdd) { - [self.relationsToRemove removeObject:objectId]; - [self.relationsToAdd addObject:objectId]; - } - for (NSString *objectId in previousOperation.relationsToRemove) { - [self.relationsToRemove removeObject:objectId]; - [self.relationsToRemove addObject:objectId]; - } - - for (NSString *objectId in newRelationsToAdd) { - [self.relationsToRemove removeObject:objectId]; - [self.relationsToAdd addObject:objectId]; - } - for (NSString *objectId in newRelationsToRemove) { - [self.relationsToRemove removeObject:objectId]; - [self.relationsToRemove addObject:objectId]; - } - return self; -} - -- (id)applyToValue:(id)oldValue forKey:(NSString *)key { - PFRelation *relation = nil; - if (!oldValue) { - relation = [PFRelation relationWithTargetClass:self.targetClass]; - } else if ([oldValue isKindOfClass:[PFRelation class]]) { - relation = oldValue; - if (self.targetClass) { - if (relation.targetClass) { - PFParameterAssert([relation.targetClass isEqualToString:targetClass], - @"Related object object must be of class %@, but %@ was passed in", - relation.targetClass, self.targetClass); - } else { - relation.targetClass = self.targetClass; - } - } - } else { - [NSException raise:NSInternalInconsistencyException format:@"Operation is invalid after previous operation."]; - return nil; - } - - for (PFObject *object in self.relationsToAdd) { - [relation _addKnownObject:object]; - } - for (PFObject *object in self.relationsToRemove) { - [relation _removeKnownObject:object]; - } - - return relation; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperationDecoder.h b/FoodbLog/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperationDecoder.h deleted file mode 100644 index 831418a..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperationDecoder.h +++ /dev/null @@ -1,39 +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. - */ - -#import - -@class PFDecoder; -@class PFFieldOperation; - -NS_ASSUME_NONNULL_BEGIN - -@interface PFFieldOperationDecoder : NSObject - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -+ (instancetype)defaultDecoder; - -///-------------------------------------- -/// @name Decoding -///-------------------------------------- - -/*! - Converts a parsed JSON object into a PFFieldOperation. - - @param encoded An NSDictionary containing an __op field. - @returns An NSObject that conforms to PFFieldOperation. - */ -- (PFFieldOperation *)decode:(NSDictionary *)encoded withDecoder:(PFDecoder *)decoder; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperationDecoder.m b/FoodbLog/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperationDecoder.m deleted file mode 100644 index 1c5a303..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/FieldOperation/PFFieldOperationDecoder.m +++ /dev/null @@ -1,126 +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. - */ - -#import "PFFieldOperationDecoder.h" - -#import "PFAssert.h" -#import "PFDecoder.h" -#import "PFFieldOperation.h" - -@interface PFFieldOperationDecoder () { - NSMutableDictionary *_operationDecoders; -} - -@end - -typedef PFFieldOperation * (^PFFieldOperationDecodingBlock_)(NSDictionary *encoded, PFDecoder *decoder); - -@implementation PFFieldOperationDecoder - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _operationDecoders = [NSMutableDictionary dictionary]; - [self _registerDefaultOperationDecoders]; - - return self; -} - -+ (instancetype)defaultDecoder { - static PFFieldOperationDecoder *decoder; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - decoder = [[self alloc] init]; - }); - return decoder; -} - -///-------------------------------------- -#pragma mark - Setup -///-------------------------------------- - -- (void)_registerDecoderForOperationWithName:(NSString *)name block:(PFFieldOperationDecodingBlock_)block { - _operationDecoders[name] = [block copy]; -} - -- (void)_registerDefaultOperationDecoders { - @weakify(self); - [self _registerDecoderForOperationWithName:@"Batch" block:^(NSDictionary *encoded, PFDecoder *decoder) { - @strongify(self); - PFFieldOperation *op = nil; - NSArray *ops = encoded[@"ops"]; - for (id maybeEncodedNextOp in ops) { - PFFieldOperation *nextOp = nil; - if ([maybeEncodedNextOp isKindOfClass:[PFFieldOperation class]]) { - nextOp = maybeEncodedNextOp; - } else { - nextOp = [self decode:maybeEncodedNextOp withDecoder:decoder]; - } - op = [nextOp mergeWithPrevious:op]; - } - return op; - }]; - - [self _registerDecoderForOperationWithName:@"Delete" block:^(NSDictionary *encoded, PFDecoder *decoder) { - // Deleting has no state, so it can be a singleton. - static PFDeleteOperation *deleteOperation = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - deleteOperation = [[PFDeleteOperation alloc] init]; - }); - return deleteOperation; - }]; - - [self _registerDecoderForOperationWithName:@"Increment" block:^(NSDictionary *encoded, PFDecoder *decoder) { - return [PFIncrementOperation incrementWithAmount:encoded[@"amount"]]; - }]; - - [self _registerDecoderForOperationWithName:@"Add" block:^(NSDictionary *encoded, PFDecoder *decoder) { - NSArray *objects = [decoder decodeObject:encoded[@"objects"]]; - return [PFAddOperation addWithObjects:objects]; - }]; - - [self _registerDecoderForOperationWithName:@"AddUnique" block:^(NSDictionary *encoded, PFDecoder *decoder) { - NSArray *objects = [decoder decodeObject:encoded[@"objects"]]; - return [PFAddUniqueOperation addUniqueWithObjects:objects]; - }]; - - [self _registerDecoderForOperationWithName:@"Remove" block:^(NSDictionary *encoded, PFDecoder *decoder) { - NSArray *objects = [decoder decodeObject:encoded[@"objects"]]; - return [PFRemoveOperation removeWithObjects:objects]; - }]; - - [self _registerDecoderForOperationWithName:@"AddRelation" block:^(NSDictionary *encoded, PFDecoder *decoder) { - NSArray *objects = [decoder decodeObject:encoded[@"objects"]]; - return [PFRelationOperation addRelationToObjects:objects]; - }]; - - [self _registerDecoderForOperationWithName:@"RemoveRelation" block:^(NSDictionary *encoded, PFDecoder *decoder) { - NSArray *objects = [decoder decodeObject:encoded[@"objects"]]; - return [PFRelationOperation removeRelationToObjects:objects]; - }]; -} - -///-------------------------------------- -#pragma mark - Decoding -///-------------------------------------- - -- (PFFieldOperation *)decode:(NSDictionary *)encoded withDecoder:(PFDecoder *)decoder { - NSString *operationName = encoded[@"__op"]; - PFFieldOperationDecodingBlock_ block = _operationDecoders[operationName]; - PFConsistencyAssert(block, @"Unable to decode operation of type %@.", operationName); - return block(encoded, decoder); -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/File/Controller/PFFileController.h b/FoodbLog/Pods/Parse/Parse/Internal/File/Controller/PFFileController.h deleted file mode 100644 index dd12a2c..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/File/Controller/PFFileController.h +++ /dev/null @@ -1,99 +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. - */ - -#import - -#import - -#import "PFDataProvider.h" -#import "PFMacros.h" - -@class BFCancellationToken; -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFFileState; -@class PFFileStagingController; - -@interface PFFileController : NSObject - -@property (nonatomic, weak, readonly) id dataSource; - -@property (nonatomic, strong, readonly) PFFileStagingController *fileStagingController; - -@property (nonatomic, copy, readonly) NSString *cacheFilesDirectoryPath; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; - -+ (instancetype)controllerWithDataSource:(id)dataSource; - - -///-------------------------------------- -/// @name Download -///-------------------------------------- - -/*! - Downloads a file asynchronously with a given state. - - @param fileState File state to download the file for. - @param cancellationToken Cancellation token. - @param progressBlock Progress block to call (optional). - - @returns `BFTask` with a result set to `nil`. - */ -- (BFTask *)downloadFileAsyncWithState:(PFFileState *)fileState - cancellationToken:(BFCancellationToken *)cancellationToken - progressBlock:(PFProgressBlock)progressBlock; - -/*! - Downloads a file asynchronously with a given state and yields a stream to the live download of that file. - - @param fileState File state to download the file for. - @param cancellationToken Cancellation token. - @param progressBlock Progress block to call (optional). - - @return `BFTask` with a result set to live `NSInputStream` of the file. - */ -- (BFTask *)downloadFileStreamAsyncWithState:(PFFileState *)fileState - cancellationToken:(BFCancellationToken *)cancellationToken - progressBlock:(PFProgressBlock)progressBlock; - -///-------------------------------------- -/// @name Upload -///-------------------------------------- - -/*! - Uploads a file asynchronously from file path for a given file state. - - @param fileState File state to upload the file for. - @param sourceFilePath Source file path. - @param sessionToken Session token to use. - @param cancellationToken Cancellation token. - @param progressBlock Progress block to call (optional). - - @returns `BFTask` with a result set to `PFFileState` of uploaded file. - */ -- (BFTask *)uploadFileAsyncWithState:(PFFileState *)fileState - sourceFilePath:(NSString *)sourceFilePath - sessionToken:(NSString *)sessionToken - cancellationToken:(BFCancellationToken *)cancellationToken - progressBlock:(PFProgressBlock)progressBlock; - -///-------------------------------------- -/// @name Cache -///-------------------------------------- - -- (BFTask *)clearFileCacheAsync; - -- (NSString *)cachedFilePathForFileState:(PFFileState *)fileState; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/File/Controller/PFFileController.m b/FoodbLog/Pods/Parse/Parse/Internal/File/Controller/PFFileController.m deleted file mode 100644 index d9b2a51..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/File/Controller/PFFileController.m +++ /dev/null @@ -1,269 +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. - */ - -#import "PFFileController.h" - -#import -#import - -#import "BFTask+Private.h" -#import "PFFileDataStream.h" -#import "PFAssert.h" -#import "PFCommandResult.h" -#import "PFCommandRunning.h" -#import "PFFileManager.h" -#import "PFFileStagingController.h" -#import "PFFileState.h" -#import "PFHash.h" -#import "PFMacros.h" -#import "PFRESTFileCommand.h" - -static NSString *const PFFileControllerCacheDirectoryName_ = @"PFFileCache"; - -@interface PFFileController () { - NSMutableDictionary *_downloadTasks; // { "urlString" : BFTask } - NSMutableDictionary *_downloadProgressBlocks; // { "urlString" : [ block1, block2 ] } - dispatch_queue_t _downloadDataAccessQueue; - dispatch_queue_t _fileStagingControllerAccessQueue; -} - -@end - -@implementation PFFileController - -@synthesize fileStagingController = _fileStagingController; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithDataSource:(id)dataSource { - self = [super init]; - if (!self) return nil; - - _dataSource = dataSource; - - _downloadTasks = [NSMutableDictionary dictionary]; - _downloadProgressBlocks = [NSMutableDictionary dictionary]; - _downloadDataAccessQueue = dispatch_queue_create("com.parse.fileController.download", DISPATCH_QUEUE_SERIAL); - _fileStagingControllerAccessQueue = dispatch_queue_create("com.parse.filestaging.controller.access", DISPATCH_QUEUE_SERIAL); - - return self; -} - -+ (instancetype)controllerWithDataSource:(id)dataSource { - return [[self alloc] initWithDataSource:dataSource]; -} - -///-------------------------------------- -#pragma mark - Properties -///-------------------------------------- - -- (PFFileStagingController *)fileStagingController { - __block PFFileStagingController *result = nil; - dispatch_sync(_fileStagingControllerAccessQueue, ^{ - if (!_fileStagingController) { - _fileStagingController = [PFFileStagingController controllerWithDataSource:self.dataSource]; - } - result = _fileStagingController; - }); - return result; -} - -///-------------------------------------- -#pragma mark - Download -///-------------------------------------- - -- (BFTask *)downloadFileAsyncWithState:(PFFileState *)fileState - cancellationToken:(BFCancellationToken *)cancellationToken - progressBlock:(PFProgressBlock)progressBlock { - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - - @weakify(self); - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - [self _addFileDownloadProgressBlock:progressBlock forFileWithState:fileState]; - - BFTask *resultTask = [self _fileDownloadResultTaskForFileWithState:fileState]; - if (!resultTask) { - NSURL *url = [NSURL URLWithString:fileState.secureURLString]; - NSString *temporaryPath = [self _temporaryFileDownloadPathForFileState:fileState]; - - PFProgressBlock unifyingProgressBlock = [self _fileDownloadUnifyingProgressBlockForFileState:fileState]; - resultTask = [self.dataSource.commandRunner runFileDownloadCommandAsyncWithFileURL:url - targetFilePath:temporaryPath - cancellationToken:cancellationToken - progressBlock:unifyingProgressBlock]; - resultTask = [[resultTask continueWithSuccessBlock:^id(BFTask *task) { - return [[PFFileManager moveItemAsyncAtPath:temporaryPath - toPath:[self cachedFilePathForFileState:fileState]] continueWithBlock:^id(BFTask *task) { - // Ignore the error if file exists. - if (task.error && task.error.code == NSFileWriteFileExistsError) { - return nil; - } - return task; - }]; - }] continueWithBlock:^id(BFTask *task) { - dispatch_barrier_async(_downloadDataAccessQueue, ^{ - [_downloadTasks removeObjectForKey:fileState.secureURLString]; - [_downloadProgressBlocks removeObjectForKey:fileState.secureURLString]; - }); - return task; - }]; - dispatch_barrier_async(_downloadDataAccessQueue, ^{ - _downloadTasks[fileState.secureURLString] = resultTask; - }); - } - return resultTask; - }]; -} - -- (BFTask *)downloadFileStreamAsyncWithState:(PFFileState *)fileState - cancellationToken:(BFCancellationToken *)cancellationToken - progressBlock:(PFProgressBlock)progressBlock { - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - BFTaskCompletionSource *taskCompletionSource = [BFTaskCompletionSource taskCompletionSource]; - NSString *filePath = [self _temporaryFileDownloadPathForFileState:fileState]; - PFFileDataStream *stream = [[PFFileDataStream alloc] initWithFileAtPath:filePath]; - [[self downloadFileAsyncWithState:fileState - cancellationToken:cancellationToken - progressBlock:^(int percentDone) { - [taskCompletionSource trySetResult:stream]; - - if (progressBlock) { - progressBlock(percentDone); - } - }] continueWithBlock:^id(BFTask *task) { - [stream stopBlocking]; - return task; - }]; - return taskCompletionSource.task; - }]; -} - -- (BFTask *)_fileDownloadResultTaskForFileWithState:(PFFileState *)state { - __block BFTask *resultTask = nil; - dispatch_sync(_downloadDataAccessQueue, ^{ - resultTask = _downloadTasks[state.secureURLString]; - }); - return resultTask; -} - -- (PFProgressBlock)_fileDownloadUnifyingProgressBlockForFileState:(PFFileState *)fileState { - return ^(int progress) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - __block NSArray *blocks = nil; - dispatch_sync(_downloadDataAccessQueue, ^{ - blocks = [_downloadProgressBlocks[fileState.secureURLString] copy]; - }); - if (blocks.count != 0) { - dispatch_async(dispatch_get_main_queue(), ^{ - for (PFProgressBlock block in blocks) { - block(progress); - } - }); - } - }); - }; -} - -- (void)_addFileDownloadProgressBlock:(PFProgressBlock)block forFileWithState:(PFFileState *)state { - if (!block) { - return; - } - - dispatch_barrier_async(_downloadDataAccessQueue, ^{ - NSMutableArray *progressBlocks = _downloadProgressBlocks[state.secureURLString]; - if (!progressBlocks) { - progressBlocks = [NSMutableArray arrayWithObject:block]; - _downloadProgressBlocks[state.secureURLString] = progressBlocks; - } else { - [progressBlocks addObject:block]; - } - }); -} - -- (NSString *)_temporaryFileDownloadPathForFileState:(PFFileState *)fileState { - return [NSTemporaryDirectory() stringByAppendingPathComponent:PFMD5HashFromString(fileState.secureURLString)]; -} - -///-------------------------------------- -#pragma mark - Upload -///-------------------------------------- - -- (BFTask *)uploadFileAsyncWithState:(PFFileState *)fileState - sourceFilePath:(NSString *)sourceFilePath - sessionToken:(NSString *)sessionToken - cancellationToken:(BFCancellationToken *)cancellationToken - progressBlock:(PFProgressBlock)progressBlock { - PFRESTFileCommand *command = [PFRESTFileCommand uploadCommandForFileWithName:fileState.name - sessionToken:sessionToken]; - - @weakify(self); - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - return [[[self.dataSource.commandRunner runFileUploadCommandAsync:command - withContentType:fileState.mimeType - contentSourceFilePath:sourceFilePath - options:PFCommandRunningOptionRetryIfFailed - cancellationToken:cancellationToken - progressBlock:progressBlock] continueWithSuccessBlock:^id(BFTask *task) { - PFCommandResult *result = task.result; - PFFileState *fileState = [[PFFileState alloc] initWithName:result.result[@"name"] - urlString:result.result[@"url"] - mimeType:nil]; - return fileState; - }] continueWithSuccessBlock:^id(BFTask *task) { - @strongify(self); - - NSString *finalPath = [self cachedFilePathForFileState:task.result]; - NSError *error = nil; - [[NSFileManager defaultManager] moveItemAtPath:sourceFilePath - toPath:finalPath - error:&error]; - if (error) { - return [BFTask taskWithError:error]; - } - return task; - }]; -} - -///-------------------------------------- -#pragma mark - Cache -///-------------------------------------- - -- (NSString *)cachedFilePathForFileState:(PFFileState *)fileState { - if (!fileState.secureURLString) { - return nil; - } - - NSString *filename = [fileState.secureURLString lastPathComponent]; - NSString *path = [self.cacheFilesDirectoryPath stringByAppendingPathComponent:filename]; - return path; -} - -- (NSString *)cacheFilesDirectoryPath { - NSString *path = [self.dataSource.fileManager parseCacheItemPathForPathComponent:PFFileControllerCacheDirectoryName_]; - [[PFFileManager createDirectoryIfNeededAsyncAtPath:path] waitForResult:nil withMainThreadWarning:NO]; - return path; -} - -- (BFTask *)clearFileCacheAsync { - NSString *path = [self cacheFilesDirectoryPath]; - return [PFFileManager removeDirectoryContentsAsyncAtPath:path]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/File/Controller/PFFileStagingController.h b/FoodbLog/Pods/Parse/Parse/Internal/File/Controller/PFFileStagingController.h deleted file mode 100644 index 15ee8d7..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/File/Controller/PFFileStagingController.h +++ /dev/null @@ -1,74 +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. - */ - -#import - -#import - -@class BFTask PF_GENERIC(__covariant BFGenericType); - -NS_ASSUME_NONNULL_BEGIN - -@protocol PFFileManagerProvider; - -@interface PFFileStagingController : NSObject - -@property (nonatomic, weak, readonly) id dataSource; - -@property (nonatomic, copy, readonly) NSString *stagedFilesDirectoryPath; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; - -+ (instancetype)controllerWithDataSource:(id)dataSource; - -///-------------------------------------- -/// @name Staging -///-------------------------------------- - -/*! - Moves a file from the specified path to the staging directory based off of the name and unique ID passed in. - - @param filePath The source path to stage - @param name The name of the file to stage - @param uniqueId A unique ID for this file to be used when differentiating between files with the same name. - - @return A task, which yields the path of the staged file on disk. - */ -- (BFTask *)stageFileAsyncAtPath:(NSString *)filePath name:(NSString *)name uniqueId:(uint64_t)uniqueId; - -/*! - Creates a file from the specified data and places it into the staging directory based off of the name and unique - ID passed in. - - @param fileData The data to stage - @param name The name of the file to stage - @param uniqueId The unique ID for this file to be used when differentiating between files with the same name. - - @return A task, which yields the path of the staged file on disk. - */ -- (BFTask *)stageFileAsyncWithData:(NSData *)fileData name:(NSString *)name uniqueId:(uint64_t)uniqueId; - -/*! - Get the staged directory path for a file with the specified name and unique ID. - - @param name The name of the staged file - @param uniqueId The unique ID of the staged file - - @return The path in the staged directory folder which contains the contents of the requested file. - */ -- (NSString *)stagedFilePathForFileWithName:(NSString *)name uniqueId:(uint64_t)uniqueId; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/File/Controller/PFFileStagingController.m b/FoodbLog/Pods/Parse/Parse/Internal/File/Controller/PFFileStagingController.m deleted file mode 100644 index fb13749..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/File/Controller/PFFileStagingController.m +++ /dev/null @@ -1,96 +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. - */ - -#import "PFFileStagingController.h" - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFAsyncTaskQueue.h" -#import "PFDataProvider.h" -#import "PFFileManager.h" -#import "PFLogging.h" - -static NSString *const PFFileStagingControllerDirectoryName_ = @"PFFileStaging"; - -@implementation PFFileStagingController { - PFAsyncTaskQueue *_taskQueue; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithDataSource:(id)dataSource { - self = [super init]; - if (!self) return nil; - - _dataSource = dataSource; - _taskQueue = [PFAsyncTaskQueue taskQueue]; - - [self _clearStagedFilesAsync]; - - return self; -} - -+ (instancetype)controllerWithDataSource:(id)dataSource { - return [[self alloc] initWithDataSource:dataSource]; -} - -///-------------------------------------- -#pragma mark - Properties -///-------------------------------------- - -- (NSString *)stagedFilesDirectoryPath { - NSString *folderPath = [self.dataSource.fileManager parseLocalSandboxDataDirectoryPath]; - return [folderPath stringByAppendingPathComponent:PFFileStagingControllerDirectoryName_]; -} - -///-------------------------------------- -#pragma mark - Staging -///-------------------------------------- - -- (BFTask *)stageFileAsyncAtPath:(NSString *)filePath name:(NSString *)name uniqueId:(uint64_t)uniqueId { - return [_taskQueue enqueue:^id(BFTask *task) { - return [[PFFileManager createDirectoryIfNeededAsyncAtPath:[self stagedFilesDirectoryPath]] continueWithBlock:^id(BFTask *task) { - NSString *destinationPath = [self stagedFilePathForFileWithName:name uniqueId:uniqueId]; - return [[PFFileManager copyItemAsyncAtPath:filePath toPath:destinationPath] continueWithSuccessResult:destinationPath]; - }]; - }]; -} - -- (BFTask *)stageFileAsyncWithData:(NSData *)fileData name:(NSString *)name uniqueId:(uint64_t)uniqueId { - return [_taskQueue enqueue:^id(BFTask *task) { - return [[PFFileManager createDirectoryIfNeededAsyncAtPath:[self stagedFilesDirectoryPath]] continueWithBlock:^id(BFTask *task) { - NSString *destinationPath = [self stagedFilePathForFileWithName:name uniqueId:uniqueId]; - return [[PFFileManager writeDataAsync:fileData toFile:destinationPath] continueWithSuccessResult:destinationPath]; - }]; - }]; -} - -- (NSString *)stagedFilePathForFileWithName:(NSString *)name uniqueId:(uint64_t)uniqueId { - NSString *fileName = [NSString stringWithFormat:@"%llX_%@", uniqueId, name]; - return [[self stagedFilesDirectoryPath] stringByAppendingPathComponent:fileName]; -} - -///-------------------------------------- -#pragma mark - Clearing -///-------------------------------------- - -- (BFTask *)_clearStagedFilesAsync { - return [_taskQueue enqueue:^id(BFTask *task) { - NSString *stagedFilesDirectoryPath = [self stagedFilesDirectoryPath]; - return [PFFileManager removeItemAtPathAsync:stagedFilesDirectoryPath]; - }]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/File/FileDataStream/PFFileDataStream.h b/FoodbLog/Pods/Parse/Parse/Internal/File/FileDataStream/PFFileDataStream.h deleted file mode 100644 index fa86bc6..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/File/FileDataStream/PFFileDataStream.h +++ /dev/null @@ -1,31 +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. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - PFFileDataStream is an NSStream proxy which won't read the last byte of a file until the downlaod has finished. - - When downloading a file stream via `-[PFFile getDataDownloadStreamInBackground]`, we need to be able to read and write - to the same file on disk concurrently. - - NSInputStream closes itself as soon as it hits EOF, so this class wraps an underlying NSInputStream and stops the - stream from closing until after writing has finished. - */ -@interface PFFileDataStream : NSProxy - -- (instancetype)initWithFileAtPath:(NSString *)path; - -- (void)stopBlocking; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/File/FileDataStream/PFFileDataStream.m b/FoodbLog/Pods/Parse/Parse/Internal/File/FileDataStream/PFFileDataStream.m deleted file mode 100644 index ac03501..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/File/FileDataStream/PFFileDataStream.m +++ /dev/null @@ -1,112 +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. - */ - -#import "PFFileDataStream.h" - -#import -#import - -@interface PFFileDataStream() { - NSString *_path; - NSInputStream *_inputStream; - - int _fd; - BOOL _finished; - - __weak id _delegate; -} - -@end - -@implementation PFFileDataStream - -- (instancetype)initWithFileAtPath:(NSString *)path { - _finished = NO; - - _path = path; - _inputStream = [NSInputStream inputStreamWithFileAtPath:path]; - _inputStream.delegate = self; - - return self; -} - -- (void)stopBlocking { - _finished = YES; - - [self stream:_inputStream handleEvent:NSStreamEventHasBytesAvailable]; -} - -///-------------------------------------- -#pragma mark - NSProxy methods -///-------------------------------------- - -- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel { - return [_inputStream methodSignatureForSelector:sel]; -} - -- (void)forwardInvocation:(NSInvocation *)invocation { - [invocation invokeWithTarget:_inputStream]; -} - -- (BOOL)respondsToSelector:(SEL)aSelector { - Method implementation = class_getInstanceMethod([self class], aSelector); - return implementation ? YES : [_inputStream respondsToSelector:aSelector]; -} - -///-------------------------------------- -#pragma mark - NSInputStream methods -///-------------------------------------- - -- (void)setDelegate:(id)delegate { - _delegate = delegate; -} - -- (id)delegate { - return _delegate; -} - -- (void)open { - _fd = open([_path UTF8String], O_RDONLY | O_NONBLOCK); - [_inputStream open]; -} - -- (void)close { - [_inputStream close]; - close(_fd); -} - -- (NSInteger)read:(uint8_t *)buffer maxLength:(NSUInteger)len { - if (!_finished) { - off_t currentOffset = [[_inputStream propertyForKey:NSStreamFileCurrentOffsetKey] unsignedLongLongValue]; - off_t fileSize = lseek(_fd, 0, SEEK_END); - - len = (NSUInteger)MIN(len, ((fileSize - currentOffset) - 1)); - } - - // Reading 0 bytes from an NSInputStream causes this strange undocumented behavior: it marks the stream as 'at end', - // regardless of whether more bytes are available or not. lolwut? - if (len == 0) { - return 0; - } - - return [_inputStream read:buffer maxLength:len]; -} - -///-------------------------------------- -#pragma mark - NSStreamDelegate -///-------------------------------------- - -- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { - id delegate = _delegate; - if ([delegate respondsToSelector:@selector(stream:handleEvent:)]) { - [delegate stream:(NSInputStream *)self handleEvent:eventCode]; - } -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/File/PFFile_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/File/PFFile_Private.h deleted file mode 100644 index 43fe6cc..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/File/PFFile_Private.h +++ /dev/null @@ -1,29 +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. - */ - -#import - -#import -#import - -#import "PFFileState.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFFile (Private) - -@property (nonatomic, strong, readonly) PFFileState *state; - -+ (instancetype)fileWithName:(nullable NSString *)name url:(nullable NSString *)url; - -- (nullable NSString *)_cachedFilePath; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/File/State/PFFileState.h b/FoodbLog/Pods/Parse/Parse/Internal/File/State/PFFileState.h deleted file mode 100644 index 8088ae9..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/File/State/PFFileState.h +++ /dev/null @@ -1,35 +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. - */ - -#import - -#import "PFBaseState.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFFileState : PFBaseState - -@property (nonatomic, copy, readonly) NSString *name; -@property (nullable, nonatomic, copy, readonly) NSString *urlString; -@property (nullable, nonatomic, copy, readonly) NSString *secureURLString; - -@property (nullable, nonatomic, copy, readonly) NSString *mimeType; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)initWithState:(PFFileState *)state; -- (instancetype)initWithName:(nullable NSString *)name - urlString:(nullable NSString *)urlString - mimeType:(nullable NSString *)mimeType; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/File/State/PFFileState.m b/FoodbLog/Pods/Parse/Parse/Internal/File/State/PFFileState.m deleted file mode 100644 index 3a0e4e8..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/File/State/PFFileState.m +++ /dev/null @@ -1,106 +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. - */ - -#import "PFFileState.h" -#import "PFFileState_Private.h" - -#import "PFMutableFileState.h" -#import "PFPropertyInfo.h" - -static NSString *const _PFFileStateSecureDomain = @"files.parsetfss.com"; - -@interface PFFileState () - -@property (nonatomic, copy, readwrite) NSString *secureURLString; - -@end - -@implementation PFFileState - -///-------------------------------------- -#pragma mark - PFBaseStateSubclass -///-------------------------------------- - -+ (NSDictionary *)propertyAttributes { - return @{ - @"name" : [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], - @"urlString" : [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], - @"mimeType" : [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], - }; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithState:(PFFileState *)state { - return [super initWithState:state]; -} - -- (instancetype)initWithName:(NSString *)name urlString:(NSString *)urlString mimeType:(NSString *)mimeType { - self = [super init]; - if (!self) return nil; - - _name = (name ? [name copy] : @"file"); - _urlString = [urlString copy]; - _mimeType = [mimeType copy]; - - return self; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (void)setUrlString:(NSString *)urlString { - if (self.urlString != urlString) { - _urlString = [urlString copy]; - _secureURLString = nil; // Invalidate variable cache - } -} - -- (NSString *)secureURLString { - if (_secureURLString) { - return _secureURLString; - } - - if (!self.urlString) { - return nil; - } - - NSURLComponents *components = [NSURLComponents componentsWithString:self.urlString]; - if (!components) { - return self.urlString; - } - - NSString *scheme = [components scheme]; - if (![scheme isEqualToString:@"http"]) { - return self.urlString; - } - - if ([[components host] isEqualToString:_PFFileStateSecureDomain]) { - components.scheme = @"https"; - } - _secureURLString = [[components URL] absoluteString]; - return _secureURLString; -} - -///-------------------------------------- -#pragma mark - Mutable Copying -///-------------------------------------- - -- (id)copyWithZone:(NSZone *)zone { - return [[PFFileState allocWithZone:zone] initWithState:self]; -} - -- (instancetype)mutableCopyWithZone:(NSZone *)zone { - return [[PFMutableFileState allocWithZone:zone] initWithState:self]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/File/State/PFFileState_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/File/State/PFFileState_Private.h deleted file mode 100644 index 5114fef..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/File/State/PFFileState_Private.h +++ /dev/null @@ -1,22 +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. - */ - -#import "PFFileState.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFFileState () - -@property (nonatomic, copy, readwrite) NSString *name; -@property (nullable, nonatomic, copy, readwrite) NSString *urlString; -@property (nullable, nonatomic, copy, readwrite) NSString *mimeType; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/File/State/PFMutableFileState.h b/FoodbLog/Pods/Parse/Parse/Internal/File/State/PFMutableFileState.h deleted file mode 100644 index 1d33fa8..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/File/State/PFMutableFileState.h +++ /dev/null @@ -1,22 +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. - */ - -#import "PFFileState.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFMutableFileState : PFFileState - -@property (nonatomic, copy, readwrite) NSString *name; -@property (nullable, nonatomic, copy, readwrite) NSString *urlString; -@property (nullable, nonatomic, copy, readwrite) NSString *mimeType; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/File/State/PFMutableFileState.m b/FoodbLog/Pods/Parse/Parse/Internal/File/State/PFMutableFileState.m deleted file mode 100644 index 53db52c..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/File/State/PFMutableFileState.m +++ /dev/null @@ -1,18 +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. - */ - -#import "PFMutableFileState.h" - -@implementation PFMutableFileState - -@dynamic name; -@dynamic urlString; -@dynamic mimeType; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPRequest.h b/FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPRequest.h deleted file mode 100644 index e6394e4..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPRequest.h +++ /dev/null @@ -1,24 +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. - */ - -#ifndef Parse_PFHTTPRequest_h -#define Parse_PFHTTPRequest_h - -#import - -static NSString *const PFHTTPRequestMethodGET = @"GET"; -static NSString *const PFHTTPRequestMethodHEAD = @"HEAD"; -static NSString *const PFHTTPRequestMethodDELETE = @"DELETE"; -static NSString *const PFHTTPRequestMethodPOST = @"POST"; -static NSString *const PFHTTPRequestMethodPUT = @"PUT"; - -static NSString *const PFHTTPRequestHeaderNameContentType = @"Content-Type"; -static NSString *const PFHTTPRequestHeaderNameContentLength = @"Content-Length"; - -#endif diff --git a/FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h b/FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h deleted file mode 100644 index b3bfb70..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h +++ /dev/null @@ -1,19 +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. - */ - -#import - -@interface PFHTTPURLRequestConstructor : NSObject - -+ (NSMutableURLRequest *)urlRequestWithURL:(NSURL *)url - httpMethod:(NSString *)httpMethod - httpHeaders:(NSDictionary *)httpHeaders - parameters:(NSDictionary *)parameters; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m b/FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m deleted file mode 100644 index e948c3d..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m +++ /dev/null @@ -1,52 +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. - */ - -#import "PFHTTPURLRequestConstructor.h" - -#import "PFAssert.h" -#import "PFHTTPRequest.h" -#import "PFURLConstructor.h" - -static NSString *const PFHTTPURLRequestContentTypeJSON = @"application/json; charset=utf8"; - -@implementation PFHTTPURLRequestConstructor - -///-------------------------------------- -#pragma mark - Public -///-------------------------------------- - -+ (NSMutableURLRequest *)urlRequestWithURL:(NSURL *)url - httpMethod:(NSString *)httpMethod - httpHeaders:(NSDictionary *)httpHeaders - parameters:(NSDictionary *)parameters { - NSParameterAssert(url != nil); - NSParameterAssert(httpMethod != nil); - - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; - - request.HTTPMethod = httpMethod; - request.allHTTPHeaderFields = httpHeaders; - - if (parameters != nil) { - PFConsistencyAssert([httpMethod isEqualToString:PFHTTPRequestMethodPOST] || - [httpMethod isEqualToString:PFHTTPRequestMethodPUT], - @"Can't create %@ request with json body.", httpMethod); - - [request setValue:PFHTTPURLRequestContentTypeJSON forHTTPHeaderField:PFHTTPRequestHeaderNameContentType]; - - NSError *error = nil; - [request setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters - options:(NSJSONWritingOptions)0 - error:&error]]; - PFConsistencyAssert(error == nil, @"Failed to serialize JSON with error = %@", error); - } - return request; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFURLConstructor.h b/FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFURLConstructor.h deleted file mode 100644 index 19f7e26..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFURLConstructor.h +++ /dev/null @@ -1,22 +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. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface PFURLConstructor : NSObject - -+ (NSURL *)URLFromAbsoluteString:(NSString *)string - path:(nullable NSString *)path - query:(nullable NSString *)query; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFURLConstructor.m b/FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFURLConstructor.m deleted file mode 100644 index 7e0dd24..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/HTTPRequest/PFURLConstructor.m +++ /dev/null @@ -1,33 +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. - */ - -#import "PFURLConstructor.h" - -#import "PFAssert.h" - -@implementation PFURLConstructor - -///-------------------------------------- -#pragma mark - Basic -///-------------------------------------- - -+ (NSURL *)URLFromAbsoluteString:(NSString *)string - path:(nullable NSString *)path - query:(nullable NSString *)query { - NSURLComponents *components = [NSURLComponents componentsWithString:string]; - if (components.path) { - components.path = path; - } - if (query) { - components.query = query; - } - return components.URL; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Installation/Constants/PFInstallationConstants.h b/FoodbLog/Pods/Parse/Parse/Internal/Installation/Constants/PFInstallationConstants.h deleted file mode 100644 index 29ef544..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Installation/Constants/PFInstallationConstants.h +++ /dev/null @@ -1,22 +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. - */ - -#import - -extern NSString *const PFInstallationKeyParseVersion; -extern NSString *const PFInstallationKeyDeviceType; -extern NSString *const PFInstallationKeyInstallationId; -extern NSString *const PFInstallationKeyDeviceToken; -extern NSString *const PFInstallationKeyAppName; -extern NSString *const PFInstallationKeyAppVersion; -extern NSString *const PFInstallationKeyAppIdentifier; -extern NSString *const PFInstallationKeyTimeZone; -extern NSString *const PFInstallationKeyLocaleIdentifier; -extern NSString *const PFInstallationKeyBadge; -extern NSString *const PFInstallationKeyChannels; diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Installation/Constants/PFInstallationConstants.m b/FoodbLog/Pods/Parse/Parse/Internal/Installation/Constants/PFInstallationConstants.m deleted file mode 100644 index 19f2565..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Installation/Constants/PFInstallationConstants.m +++ /dev/null @@ -1,22 +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. - */ - -#import "PFInstallationConstants.h" - -NSString *const PFInstallationKeyParseVersion = @"parseVersion"; -NSString *const PFInstallationKeyDeviceType = @"deviceType"; -NSString *const PFInstallationKeyInstallationId = @"installationId"; -NSString *const PFInstallationKeyDeviceToken = @"deviceToken"; -NSString *const PFInstallationKeyAppName = @"appName"; -NSString *const PFInstallationKeyAppVersion = @"appVersion"; -NSString *const PFInstallationKeyAppIdentifier = @"appIdentifier"; -NSString *const PFInstallationKeyTimeZone = @"timeZone"; -NSString *const PFInstallationKeyLocaleIdentifier = @"localeIdentifier"; -NSString *const PFInstallationKeyBadge = @"badge"; -NSString *const PFInstallationKeyChannels = @"channels"; diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Installation/Controller/PFInstallationController.h b/FoodbLog/Pods/Parse/Parse/Internal/Installation/Controller/PFInstallationController.h deleted file mode 100644 index 75573b9..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Installation/Controller/PFInstallationController.h +++ /dev/null @@ -1,31 +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. - */ - -#import - -#import "PFCoreDataProvider.h" -#import "PFObjectControlling.h" - -NS_ASSUME_NONNULL_BEGIN - -PF_WATCH_UNAVAILABLE @interface PFInstallationController : NSObject - -@property (nonatomic, weak, readonly) id dataSource; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithDataSource:(id)dataSource; -+ (instancetype)controllerWithDataSource:(id)dataSource; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Installation/Controller/PFInstallationController.m b/FoodbLog/Pods/Parse/Parse/Internal/Installation/Controller/PFInstallationController.m deleted file mode 100644 index 66d09cc..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Installation/Controller/PFInstallationController.m +++ /dev/null @@ -1,105 +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. - */ - -#import "PFInstallationController.h" - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFCurrentInstallationController.h" -#import "PFInstallationPrivate.h" -#import "PFObjectController.h" -#import "PFObjectPrivate.h" - -@implementation PFInstallationController - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithDataSource:(id)dataSource { - self = [super init]; - if (!self) return nil; - - _dataSource = dataSource; - - return self; -} - -+ (instancetype)controllerWithDataSource:(id)dataSource { - return [[self alloc] initWithDataSource:dataSource]; -} - -///-------------------------------------- -#pragma mark - Fetch -///-------------------------------------- - -- (BFTask *)fetchObjectAsync:(PFInstallation *)object withSessionToken:(nullable NSString *)sessionToken { - @weakify(self); - return [[[self.objectController fetchObjectAsync:object - withSessionToken:sessionToken] continueWithBlock:^id(BFTask *task) { - @strongify(self); - - // Do not attempt to resave an object if LDS is enabled, since changing objectId is not allowed. - if (self.currentInstallationController.storageType == PFCurrentObjectStorageTypeOfflineStore) { - return task; - } - - if (task.faulted && task.error.code == kPFErrorObjectNotFound) { - @synchronized (object.lock) { - // Retry the fetch as a save operation because this Installation was deleted on the server. - // We always want [currentInstallation fetch] to succeed. - object.objectId = nil; - [object _markAllFieldsDirty]; - return [[object saveAsync:nil] continueWithSuccessResult:object]; - } - } - return task; - }] continueWithBlock:^id(BFTask *task) { - @strongify(self); - // Roll-forward the previous task. - return [[self.currentInstallationController saveCurrentObjectAsync:object] continueWithResult:task]; - }]; -} - -- (BFTask *)processFetchResultAsync:(NSDictionary *)result forObject:(PFInstallation *)object { - @weakify(self); - return [[self.objectController processFetchResultAsync:result forObject:object] continueWithBlock:^id(BFTask *task) { - @strongify(self); - // Roll-forward the previous task. - return [[self.currentInstallationController saveCurrentObjectAsync:object] continueWithResult:task]; - }]; -} - -///-------------------------------------- -#pragma mark - Delete -///-------------------------------------- - -- (BFTask *)deleteObjectAsync:(PFObject *)object withSessionToken:(nullable NSString *)sessionToken { - PFConsistencyAssert(NO, @"Installations cannot be deleted."); - return nil; -} - -- (BFTask *)processDeleteResultAsync:(nullable NSDictionary *)result forObject:(PFObject *)object { - PFConsistencyAssert(NO, @"Installations cannot be deleted."); - return nil; -} - -///-------------------------------------- -#pragma mark - Private -///-------------------------------------- - -- (id)objectController { - return self.dataSource.objectController; -} - -- (PFCurrentInstallationController *)currentInstallationController { - return self.dataSource.currentInstallationController; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h b/FoodbLog/Pods/Parse/Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h deleted file mode 100644 index b51f996..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h +++ /dev/null @@ -1,52 +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. - */ - -#import - -#import - -#import "PFCoreDataProvider.h" -#import "PFCurrentObjectControlling.h" -#import "PFDataProvider.h" -#import "PFMacros.h" - -extern NSString *const PFCurrentInstallationFileName; -extern NSString *const PFCurrentInstallationPinName; - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFInstallation; - -PF_WATCH_UNAVAILABLE @interface PFCurrentInstallationController : NSObject - -@property (nonatomic, weak, readonly) id commonDataSource; -@property (nonatomic, weak, readonly) id coreDataSource; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithStorageType:(PFCurrentObjectStorageType)dataStorageType - commonDataSource:(id)commonDataSource - coreDataSource:(id)coreDataSource; - -+ (instancetype)controllerWithStorageType:(PFCurrentObjectStorageType)dataStorageType - commonDataSource:(id)commonDataSource - coreDataSource:(id)coreDataSource; - -///-------------------------------------- -/// @name Installation -///-------------------------------------- - -@property (nonatomic, strong, readonly) PFInstallation *memoryCachedCurrentInstallation; - -- (BFTask *)clearCurrentInstallationAsync; -- (BFTask *)clearMemoryCachedCurrentInstallationAsync; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m b/FoodbLog/Pods/Parse/Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m deleted file mode 100644 index f716106..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m +++ /dev/null @@ -1,289 +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. - */ - -#import "PFCurrentInstallationController.h" - -#import "BFTask+Private.h" -#import "PFAsyncTaskQueue.h" -#import "PFFileManager.h" -#import "PFInstallationIdentifierStore.h" -#import "PFInstallationPrivate.h" -#import "PFMacros.h" -#import "PFObjectFilePersistenceController.h" -#import "PFObjectPrivate.h" -#import "PFPushPrivate.h" -#import "PFQuery.h" - -NSString *const PFCurrentInstallationFileName = @"currentInstallation"; -NSString *const PFCurrentInstallationPinName = @"_currentInstallation"; - -@interface PFCurrentInstallationController () { - dispatch_queue_t _dataQueue; - PFAsyncTaskQueue *_dataTaskQueue; -} - -@property (nonatomic, strong, readonly) PFFileManager *fileManager; -@property (nonatomic, strong, readonly) PFInstallationIdentifierStore *installationIdentifierStore; - -@property (nonatomic, strong) PFInstallation *currentInstallation; -@property (nonatomic, assign) BOOL currentInstallationMatchesDisk; - -@end - -@implementation PFCurrentInstallationController - -@synthesize storageType = _storageType; - -@synthesize currentInstallation = _currentInstallation; -@synthesize currentInstallationMatchesDisk = _currentInstallationMatchesDisk; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithStorageType:(PFCurrentObjectStorageType)storageType - commonDataSource:(id)commonDataSource - coreDataSource:(id)coreDataSource { - self = [super init]; - if (!self) return nil; - - _dataQueue = dispatch_queue_create("com.parse.installation.current", DISPATCH_QUEUE_CONCURRENT); - _dataTaskQueue = [[PFAsyncTaskQueue alloc] init]; - - _storageType = storageType; - _commonDataSource = commonDataSource; - _coreDataSource = coreDataSource; - - return self; -} - -+ (instancetype)controllerWithStorageType:(PFCurrentObjectStorageType)storageType - commonDataSource:(id)commonDataSource - coreDataSource:(id)coreDataSource { - return [[self alloc] initWithStorageType:storageType - commonDataSource:commonDataSource - coreDataSource:coreDataSource]; -} - -///-------------------------------------- -#pragma mark - PFCurrentObjectControlling -///-------------------------------------- - -- (BFTask *)getCurrentObjectAsync { - @weakify(self); - return [_dataTaskQueue enqueue:^BFTask *(BFTask *unused) { - return [[[BFTask taskFromExecutor:[BFExecutor defaultExecutor] withBlock:^id { - @strongify(self); - if (self.currentInstallation) { - return self.currentInstallation; - } - - if (!self.currentInstallationMatchesDisk) { - return [[self _loadCurrentInstallationFromDiskAsync] continueWithBlock:^id(BFTask *task) { - PFInstallation *installation = task.result; - if (installation) { - // If there is no objectId, but there is some data - // it means that the data wasn't yet saved to the server - // so we should mark everything as dirty - if (!installation.objectId && [[installation allKeys] count]) { - [installation _markAllFieldsDirty]; - } - } - return task; - }]; - } - return nil; - }] continueWithBlock:^id(BFTask *task) { - @strongify(self); - if (task.faulted) { - return task; - } - - PFInstallation *installation = task.result; - NSString *installationId = self.installationIdentifierStore.installationIdentifier; - installationId = [installationId lowercaseString]; - if (!installation || ![installationId isEqualToString:installation.installationId]) { - // If there's no installation object, or the object's installation - // ID doesn't match this device's installation ID, create a new - // installation. Try to keep track of the previously stored device - // token: if there was an installation already stored just re-use - // its device token, otherwise try loading from the keychain (where - // old SDKs stored the token). Discard the old installation. - NSString *oldDeviceToken = nil; - if (installation) { - oldDeviceToken = installation.deviceToken; - } else { - oldDeviceToken = [[PFPush pushInternalUtilClass] getDeviceTokenFromKeychain]; - } - - installation = [PFInstallation object]; - installation.deviceType = kPFDeviceType; - installation.installationId = installationId; - if (oldDeviceToken) { - installation.deviceToken = oldDeviceToken; - } - } - - return installation; - }] continueWithBlock:^id(BFTask *task) { - dispatch_barrier_sync(_dataQueue, ^{ - _currentInstallation = task.result; - _currentInstallationMatchesDisk = !task.faulted; - }); - return task; - }]; - }]; -} - -- (BFTask *)saveCurrentObjectAsync:(PFInstallation *)installation { - @weakify(self); - return [_dataTaskQueue enqueue:^BFTask *(BFTask *unused) { - @strongify(self); - - if (installation != self.currentInstallation) { - return nil; - } - return [[self _saveCurrentInstallationToDiskAsync:installation] continueWithBlock:^id(BFTask *task) { - self.currentInstallationMatchesDisk = (!task.faulted && !task.cancelled); - return nil; - }]; - }]; -} - -///-------------------------------------- -#pragma mark - Installation -///-------------------------------------- - -- (PFInstallation *)memoryCachedCurrentInstallation { - return self.currentInstallation; -} - -- (BFTask *)clearCurrentInstallationAsync { - @weakify(self); - return [_dataTaskQueue enqueue:^BFTask *(BFTask *unused) { - @strongify(self); - - dispatch_barrier_sync(_dataQueue, ^{ - _currentInstallation = nil; - _currentInstallationMatchesDisk = NO; - }); - - NSMutableArray *tasks = [NSMutableArray arrayWithCapacity:2]; - if (self.storageType == PFCurrentObjectStorageTypeOfflineStore) { - BFTask *unpinTask = [PFObject unpinAllObjectsInBackgroundWithName:PFCurrentInstallationPinName]; - [tasks addObject:unpinTask]; - } - - NSString *path = [self.fileManager parseDataItemPathForPathComponent:PFCurrentInstallationFileName]; - BFTask *fileTask = [PFFileManager removeItemAtPathAsync:path]; - [tasks addObject:fileTask]; - - return [BFTask taskForCompletionOfAllTasks:tasks]; - }]; -} - -- (BFTask *)clearMemoryCachedCurrentInstallationAsync { - return [_dataTaskQueue enqueue:^BFTask *(BFTask *unused) { - self.currentInstallation = nil; - self.currentInstallationMatchesDisk = NO; - - return nil; - }]; -} - -///-------------------------------------- -#pragma mark - Data Storage -///-------------------------------------- - -- (BFTask *)_loadCurrentInstallationFromDiskAsync { - if (self.storageType == PFCurrentObjectStorageTypeOfflineStore) { - // Try loading from OfflineStore - PFQuery *query = [[[PFQuery queryWithClassName:[PFInstallation parseClassName]] - fromPinWithName:PFCurrentInstallationPinName] ignoreACLs]; - - return [[query findObjectsInBackground] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *results = task.result; - if ([results count] == 1) { - return [BFTask taskWithResult:[results firstObject]]; - } else if ([results count] != 0) { - return [[PFObject unpinAllObjectsInBackgroundWithName:PFCurrentInstallationPinName] - continueWithSuccessResult:nil]; - } - - // Backward compatibility if we previously have non-LDS currentInstallation. - return [PFObject _migrateObjectInBackgroundFromFile:PFCurrentInstallationFileName - toPin:PFCurrentInstallationPinName]; - }]; - } - - PFObjectFilePersistenceController *controller = self.objectFilePersistenceController; - return [controller loadPersistentObjectAsyncForKey:PFCurrentInstallationFileName]; -} - -- (BFTask *)_saveCurrentInstallationToDiskAsync:(PFInstallation *)installation { - if (self.storageType == PFCurrentObjectStorageTypeOfflineStore) { - BFTask *task = [PFObject unpinAllObjectsInBackgroundWithName:PFCurrentInstallationPinName]; - return [task continueWithBlock:^id(BFTask *task) { - // Make sure to not pin children of PFInstallation automatically, as it can create problems - // if any of the children are of Installation class. - return [installation _pinInBackgroundWithName:PFCurrentInstallationPinName includeChildren:NO]; - }]; - } - - PFObjectFilePersistenceController *controller = self.objectFilePersistenceController; - return [controller persistObjectAsync:installation forKey:PFCurrentInstallationFileName]; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (PFFileManager *)fileManager { - return self.commonDataSource.fileManager; -} - -- (PFObjectFilePersistenceController *)objectFilePersistenceController { - return self.coreDataSource.objectFilePersistenceController; -} - -- (PFInstallationIdentifierStore *)installationIdentifierStore { - return self.commonDataSource.installationIdentifierStore; -} - -- (PFInstallation *)currentInstallation { - __block PFInstallation *installation = nil; - dispatch_sync(_dataQueue, ^{ - installation = _currentInstallation; - }); - return installation; -} - -- (void)setCurrentInstallation:(PFInstallation *)currentInstallation { - dispatch_barrier_sync(_dataQueue, ^{ - if (_currentInstallation != currentInstallation) { - _currentInstallation = currentInstallation; - } - }); -} - -- (BOOL)currentInstallationMatchesDisk { - __block BOOL matches = NO; - dispatch_sync(_dataQueue, ^{ - matches = _currentInstallationMatchesDisk; - }); - return matches; -} - -- (void)setCurrentInstallationMatchesDisk:(BOOL)currentInstallationMatchesDisk { - dispatch_barrier_sync(_dataQueue, ^{ - _currentInstallationMatchesDisk = currentInstallationMatchesDisk; - }); -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h b/FoodbLog/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h deleted file mode 100644 index 3e7becb..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h +++ /dev/null @@ -1,39 +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. - */ - -#import - -@class PFFileManager; - -@interface PFInstallationIdentifierStore : NSObject - -/*! - Returns a cached installationId or creates a new one, saves it to disk and returns it. - - @returns `NSString` representation of current installationId. - */ -@property (nonatomic, copy, readonly) NSString *installationIdentifier; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithFileManager:(PFFileManager *)fileManager NS_DESIGNATED_INITIALIZER; - -///-------------------------------------- -/// @name Clear -///-------------------------------------- - -/*! - Clears installation identifier on disk and in-memory. - */ -- (void)clearInstallationIdentifier; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m b/FoodbLog/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m deleted file mode 100644 index af7fac5..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m +++ /dev/null @@ -1,118 +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. - */ - -#import "PFInstallationIdentifierStore.h" - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFFileManager.h" -#import "PFInternalUtils.h" -#import "PFMacros.h" -#import "PFMultiProcessFileLockController.h" -#import "Parse_Private.h" - -static NSString *const PFInstallationIdentifierFileName = @"installationId"; - -@interface PFInstallationIdentifierStore () { - dispatch_queue_t _synchronizationQueue; - PFFileManager *_fileManager; -} - -@property (nonatomic, copy, readwrite) NSString *installationIdentifier; -@property (nonatomic, copy, readonly) NSString *installationIdentifierFilePath; - -@end - -@implementation PFInstallationIdentifierStore - -@synthesize installationIdentifier = _installationIdentifier; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithFileManager:(PFFileManager *)fileManager { - self = [super init]; - if (!self) return nil; - - _synchronizationQueue = dispatch_queue_create("com.parse.installationIdentifier", DISPATCH_QUEUE_SERIAL); - PFMarkDispatchQueue(_synchronizationQueue); - - _fileManager = fileManager; - - return self; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (NSString *)installationIdentifier { - __block NSString *identifier = nil; - dispatch_sync(_synchronizationQueue, ^{ - if (!_installationIdentifier) { - [self _loadInstallationIdentifier]; - } - - identifier = _installationIdentifier; - }); - return identifier; -} - -- (void)setInstallationIdentifier:(NSString *)installationIdentifier { - PFAssertIsOnDispatchQueue(_synchronizationQueue); - if (_installationIdentifier != installationIdentifier) { - _installationIdentifier = [installationIdentifier copy]; - } -} - -- (void)clearInstallationIdentifier { - dispatch_sync(_synchronizationQueue, ^{ - NSString *filePath = self.installationIdentifierFilePath; - [[PFFileManager removeItemAtPathAsync:filePath] waitForResult:nil withMainThreadWarning:NO]; - - self.installationIdentifier = nil; - }); -} - -///-------------------------------------- -#pragma mark - Disk Operations -///-------------------------------------- - -- (void)_loadInstallationIdentifier { - PFAssertIsOnDispatchQueue(_synchronizationQueue); - - NSString *filePath = self.installationIdentifierFilePath; - [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:filePath]; - - NSString *identifier = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; - if (!identifier) { - identifier = [[[NSUUID UUID] UUIDString] lowercaseString]; - [[PFFileManager writeStringAsync:identifier toFile:filePath] waitForResult:nil withMainThreadWarning:NO]; - } - self.installationIdentifier = identifier; - - [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:filePath]; -} - -- (void)_clearCachedInstallationIdentifier { - dispatch_sync(_synchronizationQueue, ^{ - self.installationIdentifier = nil; - }); -} - -- (NSString *)installationIdentifierFilePath { - return [_fileManager parseDataItemPathForPathComponent:PFInstallationIdentifierFileName]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h deleted file mode 100644 index f84b36b..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h +++ /dev/null @@ -1,19 +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. - */ - -#import "PFInstallationIdentifierStore.h" - -@interface PFInstallationIdentifierStore (Private) - -/*! - Clears in-memory cached installation identifier, if any. - */ -- (void)_clearCachedInstallationIdentifier; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Installation/PFInstallationPrivate.h b/FoodbLog/Pods/Parse/Parse/Internal/Installation/PFInstallationPrivate.h deleted file mode 100644 index 0e24f86..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Installation/PFInstallationPrivate.h +++ /dev/null @@ -1,28 +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. - */ - -#import - -#import - -@interface PFInstallation (Private) - -- (void)_clearDeviceToken; -- (void)_markAllFieldsDirty; - -@end - -@interface PFInstallation () - -// Private read-write declarations of publicly-readonly fields. -@property (nonatomic, copy, readwrite) NSString *deviceType; -@property (nonatomic, copy, readwrite) NSString *installationId; -@property (nonatomic, copy, readwrite) NSString *timeZone; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache.h b/FoodbLog/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache.h deleted file mode 100644 index e2518de..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache.h +++ /dev/null @@ -1,47 +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. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface PFKeyValueCache : NSObject - -@property (nonatomic, copy, readonly) NSString *cacheDirectoryPath; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithCacheDirectoryPath:(NSString *)path; - -///-------------------------------------- -/// @name Setting -///-------------------------------------- - -- (void)setObject:(NSString *)object forKey:(NSString *)key; -- (void)setObject:(NSString *)object forKeyedSubscript:(NSString *)key; - -///-------------------------------------- -/// @name Getting -///-------------------------------------- - -- (NSString *)objectForKey:(NSString *)key maxAge:(NSTimeInterval)age; - -///-------------------------------------- -/// @name Removing -///-------------------------------------- - -- (void)removeObjectForKey:(NSString *)key; -- (void)removeAllObjects; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache.m b/FoodbLog/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache.m deleted file mode 100644 index f2ee85f..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache.m +++ /dev/null @@ -1,336 +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. - */ - -#import "PFKeyValueCache_Private.h" - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFConstants.h" -#import "PFFileManager.h" -#import "PFInternalUtils.h" -#import "PFLogging.h" - -static const NSUInteger PFKeyValueCacheDefaultDiskCacheSize = 10 << 20; -static const NSUInteger PFKeyValueCacheDefaultDiskCacheRecords = 1000; -static const NSUInteger PFKeyValueCacheDefaultMemoryCacheRecordSize = 1 << 20; -static const NSTimeInterval PFKeyValueCacheDiskCacheTimeResolution = 1; // HFS+ stores only second level accuracy. - -static NSString *const PFKeyValueCacheDiskCachePathKey = @"path"; - -@interface PFKeyValueCacheEntry () - -// We need to generate a setter that's atomic to safely clear the value. -@property (nullable, atomic, readwrite, copy) NSString *value; - -@end - -@implementation PFKeyValueCacheEntry - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithValue:(NSString *)value { - return [self initWithValue:value creationTime:[NSDate date]]; -} - -- (instancetype)initWithValue:(NSString *)value creationTime:(NSDate *)creationTime { - self = [super init]; - if (!self) return nil; - - _value = [value copy]; - _creationTime = creationTime; - - return self; -} - -+ (instancetype)cacheEntryWithValue:(NSString *)value { - return [[self alloc] initWithValue:value]; -} - -+ (instancetype)cacheEntryWithValue:(NSString *)value creationTime:(NSDate *)creationTime { - return [[self alloc] initWithValue:value creationTime:creationTime]; -} - -@end - -@implementation PFKeyValueCache { - NSURL *_cacheDirectoryURL; - dispatch_queue_t _diskCacheQueue; - - NSDate *_lastDiskCacheModDate; - NSUInteger _lastDiskCacheSize; - NSMutableArray *_lastDiskCacheAttributes; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithCacheDirectoryPath:(NSString *)path { - return [self initWithCacheDirectoryURL:[NSURL fileURLWithPath:path] - fileManager:[NSFileManager defaultManager] - memoryCache:[[NSCache alloc] init]]; -} - -- (instancetype)initWithCacheDirectoryURL:(NSURL *)url - fileManager:(NSFileManager *)fileManager - memoryCache:(NSCache *)cache { - self = [super init]; - if (!self) return nil; - - _cacheDirectoryURL = url; - _fileManager = fileManager; - _memoryCache = cache; - - _diskCacheQueue = dispatch_queue_create("com.parse.keyvaluecache.disk", DISPATCH_QUEUE_SERIAL); - - _maxDiskCacheBytes = PFKeyValueCacheDefaultDiskCacheSize; - _maxDiskCacheRecords = PFKeyValueCacheDefaultDiskCacheRecords; - _maxMemoryCacheBytesPerRecord = PFKeyValueCacheDefaultMemoryCacheRecordSize; - - return self; -} - -///-------------------------------------- -#pragma mark - Property Accessors -///-------------------------------------- - -- (NSString *)cacheDirectoryPath { - [_fileManager createDirectoryAtURL:_cacheDirectoryURL withIntermediateDirectories:YES attributes:nil error:NULL]; - return _cacheDirectoryURL.path; -} - -///-------------------------------------- -#pragma mark - Public -///-------------------------------------- - -- (void)setObject:(NSString *)object forKeyedSubscript:(NSString *)key { - [self setObject:object forKey:key]; -} - -- (void)setObject:(NSString *)value forKey:(NSString *)key { - NSUInteger keyBytes = [key maximumLengthOfBytesUsingEncoding:[key fastestEncoding]]; - NSUInteger valueBytes = [value maximumLengthOfBytesUsingEncoding:[value fastestEncoding]]; - - if ((keyBytes + valueBytes) < self.maxMemoryCacheBytesPerRecord) { - [self.memoryCache setObject:[PFKeyValueCacheEntry cacheEntryWithValue:value] forKey:key]; - } else { - [self.memoryCache removeObjectForKey:key]; - } - - dispatch_async(_diskCacheQueue, ^{ - [self _createDiskCacheEntry:value atURL:[self _cacheURLForKey:key]]; - [self _compactDiskCache]; - }); -} - -- (NSString *)objectForKey:(NSString *)key maxAge:(NSTimeInterval)maxAge { - NSURL *cacheURL = [self _cacheURLForKey:key]; - PFKeyValueCacheEntry *cacheEntry = [self.memoryCache objectForKey:key]; - - if (cacheEntry) { - if ([[NSDate date] timeIntervalSinceDate:cacheEntry.creationTime] > maxAge) { - // We know the cache to be too old in both copies. - // Save space, remove this key from disk, and it's value from the memory cache. - [self removeObjectForKey:key]; - return nil; - } - - dispatch_async(_diskCacheQueue, ^{ - [self _updateModificationDateAtURL:cacheURL]; - }); - - return cacheEntry.value; - } - - // Wait for all outstanding disk operations before continuing, as another thread could be in the process of - // Writing a value to disk right now. - __block NSString *value = nil; - dispatch_sync(_diskCacheQueue, ^{ - NSDate *modificationDate = [self _modificationDateOfCacheEntryAtURL:cacheURL]; - if ([[NSDate date] timeIntervalSinceDate:modificationDate] > maxAge) { - [self removeObjectForKey:key]; - return; - } - - // Cache misses here (e.g. creationDate and value are both nil) should still be put into the memory cache. - value = [self _diskCacheEntryForURL:cacheURL]; - [self.memoryCache setObject:[PFKeyValueCacheEntry cacheEntryWithValue:value creationTime:modificationDate] - forKey:key]; - }); - - return value; -} - -- (void)removeObjectForKey:(NSString *)key { - [self.memoryCache removeObjectForKey:key]; - - dispatch_async(_diskCacheQueue, ^{ - [self.fileManager removeItemAtURL:[self _cacheURLForKey:key] error:NULL]; - }); -} - -- (void)removeAllObjects { - [self.memoryCache removeAllObjects]; - - dispatch_sync(_diskCacheQueue, ^{ - // Directory will be automatically recreated the next time 'cacheDir' is accessed. - [self.fileManager removeItemAtURL:_cacheDirectoryURL error:NULL]; - }); -} - -- (void)waitForOutstandingOperations { - dispatch_sync(_diskCacheQueue, ^{ - // Wait, do nothing - }); -} - -///-------------------------------------- -#pragma mark - Private -///-------------------------------------- - -- (NSURL *)_cacheURLForKey:(NSString *)key { - return [_cacheDirectoryURL URLByAppendingPathComponent:key]; -} - -- (void)_updateModificationDateAtURL:(NSURL *)url { - [self.fileManager setAttributes:@{ NSFileModificationDate: [NSDate date] } ofItemAtPath:url.path error:NULL]; -} - -- (NSDate *)_modificationDateOfCacheEntryAtURL:(NSURL *)url { - return [self.fileManager attributesOfItemAtPath:url.path error:NULL][NSFileModificationDate]; -} - -///-------------------------------------- -#pragma mark - Disk Cache -///-------------------------------------- - -- (NSString *)_diskCacheEntryForURL:(NSURL *)url { - NSData *bytes = [self.fileManager contentsAtPath:[url path]]; - if (!bytes) { - return nil; - } - - [self _updateModificationDateAtURL:url]; - return [[NSString alloc] initWithData:bytes encoding:NSUTF8StringEncoding]; -} - -- (void)_createDiskCacheEntry:(NSString *)value atURL:(NSURL *)url { - NSString *path = [url path]; - NSData *bytes = [value dataUsingEncoding:NSUTF8StringEncoding]; - NSDate *creationDate = [NSDate date]; - - BOOL isDirty = [self _isDiskCacheDirty]; - - [_fileManager createDirectoryAtURL:_cacheDirectoryURL withIntermediateDirectories:YES attributes:nil error:NULL]; - [self.fileManager createFileAtPath:path - contents:bytes - attributes:@{ NSFileCreationDate: creationDate, NSFileModificationDate: creationDate }]; - - if (!isDirty) { - _lastDiskCacheModDate = creationDate; - _lastDiskCacheSize += bytes.length; - - [self _addToDiskCacheDictionary:path - modificationDate:creationDate - size:bytes.length]; - } else { - [self _invalidateDiskCache]; - } -} - -- (BOOL)_isDiskCacheDirty { - if (!_lastDiskCacheModDate) { - return YES; - } - - NSDate *modificationDate = [self _modificationDateOfCacheEntryAtURL:_cacheDirectoryURL]; - NSTimeInterval knownInterval = [_lastDiskCacheModDate timeIntervalSinceReferenceDate]; - NSTimeInterval actualInterval = [modificationDate timeIntervalSinceReferenceDate]; - - // NOTE: Most file systems (HFS) can only store up to 1 second of precision, whereas NSDate is super high resolution - // Yes, this is actually really bad to have hard coded, as this does give some window where we can get unwanted - // entries in the cache. However, that chance of another process touching this directory is greatly outweighed by - // the performance gained by using this technique. Plus, in the case of concurrent modification, we will never over- - // agressively remove something from the cache, we just might go a little bit over our limit. - return (actualInterval - knownInterval) >= PFKeyValueCacheDiskCacheTimeResolution; -} - -- (void)_invalidateDiskCache { - _lastDiskCacheModDate = nil; - _lastDiskCacheSize = 0; - _lastDiskCacheAttributes = nil; -} - -- (void)_recreateDiskCache { - NSDictionary *cacheDirectoryAttributes = [self.fileManager attributesOfItemAtPath:_cacheDirectoryURL.path error:NULL]; - - _lastDiskCacheModDate = cacheDirectoryAttributes[NSFileModificationDate]; - _lastDiskCacheSize = 0; - _lastDiskCacheAttributes = [[NSMutableArray alloc] init]; - - NSDirectoryEnumerator *enumerator = [self.fileManager enumeratorAtPath:[_cacheDirectoryURL path]]; - NSString *path = nil; - - while ((path = [enumerator nextObject]) != nil) { - [enumerator skipDescendants]; - - NSDictionary *attributes = enumerator.fileAttributes; - NSUInteger size = [attributes[NSFileSize] unsignedIntegerValue]; - - _lastDiskCacheSize += size; - - // NOTE: Do not use -copy here, as fileAttributes are lazily-loaded, we would run into issues with a lot of - // syscalls all at once here. - [self _addToDiskCacheDictionary:path - modificationDate:attributes[NSFileModificationDate] - size:size]; - } -} - -- (void)_addToDiskCacheDictionary:(NSString *)path modificationDate:(NSDate *)modificationDate size:(NSUInteger)size { - NSDictionary *entry = @{ - PFKeyValueCacheDiskCachePathKey: path, - NSFileModificationDate: modificationDate, - NSFileSize: @(size) - }; - - NSInteger insertionIndex = [_lastDiskCacheAttributes indexOfObject:entry - inSortedRange:NSMakeRange(0, _lastDiskCacheAttributes.count) - options:NSBinarySearchingInsertionIndex - usingComparator:^NSComparisonResult(id obj1, id obj2) { - return [obj1[NSFileModificationDate] compare:obj2[NSFileModificationDate]]; - }]; - - [_lastDiskCacheAttributes insertObject:entry atIndex:insertionIndex]; -} - -- (void)_compactDiskCache { - if ([self _isDiskCacheDirty]) { - [self _recreateDiskCache]; - } - - while (_lastDiskCacheAttributes.count > _maxDiskCacheRecords || _lastDiskCacheSize > _maxDiskCacheBytes) { - NSDictionary *attributes = [_lastDiskCacheAttributes firstObject]; - NSString *toRemove = attributes[PFKeyValueCacheDiskCachePathKey]; - NSNumber *fileSize = attributes[NSFileSize]; - - [self.fileManager removeItemAtURL:[self _cacheURLForKey:toRemove] error:NULL]; - _lastDiskCacheSize -= [fileSize unsignedIntegerValue]; - - [_lastDiskCacheAttributes removeObjectAtIndex:0]; - } -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h deleted file mode 100644 index 6c45b6d..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h +++ /dev/null @@ -1,66 +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. - */ - -#import "PFKeyValueCache.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFKeyValueCache () - -///-------------------------------------- -/// @name Properties -///-------------------------------------- - -@property (nullable, nonatomic, strong, readwrite) NSFileManager *fileManager; -@property (nullable, nonatomic, strong, readwrite) NSCache *memoryCache; - -@property (nonatomic, assign) NSUInteger maxDiskCacheBytes; -@property (nonatomic, assign) NSUInteger maxDiskCacheRecords; -@property (nonatomic, assign) NSUInteger maxMemoryCacheBytesPerRecord; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)initWithCacheDirectoryURL:(nullable NSURL *)url - fileManager:(nullable NSFileManager *)fileManager - memoryCache:(nullable NSCache *)cache NS_DESIGNATED_INITIALIZER; - -///-------------------------------------- -/// @name Waiting -///-------------------------------------- - -- (void)waitForOutstandingOperations; - -@end - -@interface PFKeyValueCacheEntry : NSObject - -///-------------------------------------- -/// @name Properties -///-------------------------------------- - -@property (atomic, copy, readonly) NSString *value; -@property (atomic, strong, readonly) NSDate *creationTime; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -+ (instancetype)cacheEntryWithValue:(NSString *)value; -+ (instancetype)cacheEntryWithValue:(NSString *)value creationTime:(NSDate *)creationTime; - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithValue:(NSString *)value; -- (instancetype)initWithValue:(NSString *)value - creationTime:(NSDate *)creationTime NS_DESIGNATED_INITIALIZER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h b/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h deleted file mode 100644 index ff8bfa2..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h +++ /dev/null @@ -1,79 +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. - */ - -#import - -#import - -#import "PFMacros.h" - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFObject; -@class PFOfflineStore; -@class PFQueryState; -@class PFSQLiteDatabase; -@class PFUser; - -typedef BFTask PF_GENERIC(NSNumber *)* (^PFConstraintMatcherBlock)(PFObject *object, PFSQLiteDatabase *database); - -typedef NS_OPTIONS(uint8_t, PFOfflineQueryOption) { - PFOfflineQueryOptionOrder = 1 << 0, - PFOfflineQueryOptionLimit = 1 << 1, - PFOfflineQueryOptionSkip = 1 << 2, -}; - -@interface PFOfflineQueryLogic : NSObject - -/*! - Initialize an `PFOfflineQueryLogic` instance with `PFOfflineStore` instance. - `PFOfflineStore` is needed for subQuery, inQuery and fetch. - */ -- (instancetype)initWithOfflineStore:(PFOfflineStore *)offlineStore; - -/*! - @returns YES iff the object is visible based on its read ACL and the given user objectId. - */ -+ (BOOL)userHasReadAccess:(PFUser *)user ofObject:(PFObject *)object; - -/*! - @returns YES iff the object is visible based on its read ACL and the given user objectId. - */ -+ (BOOL)userHasWriteAccess:(PFUser *)user ofObject:(PFObject *)object; - -/*! - Returns a PFConstraintMatcherBlock that returns true iff the object matches the given - query's constraints. This takes in a PFSQLiteDatabase connection because SQLite is finicky - about nesting connections, so we want to reuse them whenever possible. - */ -- (PFConstraintMatcherBlock)createMatcherForQueryState:(PFQueryState *)queryState user:(PFUser *)user; - -/*! - Sort given array with given `PFQuery` constraint. - - @returns sorted result. - */ -- (NSArray *)resultsByApplyingOptions:(PFOfflineQueryOption)options - ofQueryState:(PFQueryState *)queryState - toResults:(NSArray *)results; - -/*! - Make sure all of the objects included by the given query get fetched. - */ -- (BFTask *)fetchIncludesAsyncForResults:(NSArray *)results - ofQueryState:(PFQueryState *)queryState - inDatabase:(PFSQLiteDatabase *)database; - -/*! - Make sure all of the objects included by the given query get fetched. - */ -- (BFTask *)fetchIncludesForObjectAsync:(PFObject *)object - queryState:(PFQueryState *)queryState - database:(PFSQLiteDatabase *)database; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m b/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m deleted file mode 100644 index 63168ce..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m +++ /dev/null @@ -1,918 +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. - */ - -#import "PFOfflineQueryLogic.h" - -#import - -#import "PFACL.h" -#import "PFAssert.h" -#import "PFConstants.h" -#import "PFDateFormatter.h" -#import "PFDecoder.h" -#import "PFEncoder.h" -#import "PFErrorUtilities.h" -#import "PFGeoPoint.h" -#import "PFOfflineStore.h" -#import "PFQueryPrivate.h" -#import "PFRelation.h" -#import "PFRelationPrivate.h" - -typedef BOOL (^PFComparatorDeciderBlock)(id value, id constraint); -typedef BOOL (^PFSubQueryMatcherBlock)(id object, NSArray *results); - -/*! - A query to be used in $inQuery, $notInQuery, $select and $dontSelect - */ -@interface PFSubQueryMatcher : NSObject - -@property (nonatomic, strong, readonly) PFQuery *subQuery; -@property (nonatomic, strong) BFTask *subQueryResults; -@property (nonatomic, strong, readonly) PFOfflineStore *offlineStore; - -@end - -@implementation PFSubQueryMatcher - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithSubQuery:(PFQuery *)query offlineStore:(PFOfflineStore *)offlineStore { - if ((self = [super init]) != nil) { - _subQuery = query; - _offlineStore = offlineStore; - } - - return self; -} - -///-------------------------------------- -#pragma mark - SubQuery Matcher Creator -///-------------------------------------- - -- (PFConstraintMatcherBlock)createMatcherWithSubQueryMatcherBlock:(PFSubQueryMatcherBlock)block user:(PFUser *)user { - return ^BFTask *(PFObject *object, PFSQLiteDatabase *database) { - if (self.subQueryResults == nil) { - self.subQueryResults = [self.offlineStore findAsyncForQueryState:self.subQuery.state - user:user - pin:nil - isCount:NO - database:database]; - } - return [self.subQueryResults continueWithSuccessBlock:^id(BFTask *task) { - return @(block(object, task.result)); - }]; - }; -} - -@end - -@interface PFOfflineQueryLogic () - -@property (nonatomic, weak) PFOfflineStore *offlineStore; - -@end - -@implementation PFOfflineQueryLogic - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithOfflineStore:(PFOfflineStore *)offlineStore { - if ((self = [super init]) != nil) { - _offlineStore = offlineStore; - } - return self; -} - -///-------------------------------------- -#pragma mark - Value Getter -///-------------------------------------- - -- (id)valueForContainer:(id)container - key:(NSString *)key { - return [self valueForContainer:container key:key depth:0]; -} - -- (id)valueForContainer:(id)container - key:(NSString *)key - depth:(int)depth { - if ([key rangeOfString:@"."].location != NSNotFound) { - NSArray *parts = [key componentsSeparatedByString:@"."]; - - NSString *firstKey = [parts firstObject]; - NSString *rest = nil; - if ([parts count] > 1) { - NSRange range = NSMakeRange(1, [parts count] - 1); - rest = [[parts subarrayWithRange:range] componentsJoinedByString:@"."]; - } - id value = [self valueForContainer:container key:firstKey depth:depth + 1]; - // Only NSDictionary can be dotted into for getting values, so we should reject - // anything like ParseObjects and arrays. - if (!(value == nil || [value isKindOfClass:[NSDictionary class]])) { - if (depth > 0) { - id restFormat = [[PFPointerObjectEncoder objectEncoder] encodeObject:value]; - if ([restFormat isKindOfClass:[NSDictionary class]]) { - return [self valueForContainer:restFormat key:rest depth:depth + 1]; - } - } - [NSException raise:NSInvalidArgumentException format:@"Key %@ is invalid", key]; - } - return [self valueForContainer:value key:rest depth:depth + 1]; - } - - if ([container isKindOfClass:[PFObject class]]) { - PFObject *object = (PFObject *)container; - - // The object needs to have been fetched already if we are going to sort by one of its field. - PFParameterAssert(object.isDataAvailable, @"Bad key %@", key); - - // Handle special keys for PFObject. - if ([key isEqualToString:@"objectId"]) { - return object.objectId; - } else if ([key isEqualToString:@"createdAt"] || [key isEqualToString:@"_created_at"]) { - return object.createdAt; - } else if ([key isEqualToString:@"updatedAt"] || [key isEqualToString:@"_updated_at"]) { - return object.updatedAt; - } else { - return object[key]; - } - } else if ([container isKindOfClass:[NSDictionary class]]) { - return ((NSDictionary *)container)[key]; - } else if (container == nil) { - return nil; - } else { - [NSException raise:NSInvalidArgumentException format:@"Bad key %@", key]; - // Shouldn't reach here. - return nil; - } -} - -///-------------------------------------- -#pragma mark - Matcher With Decider -///-------------------------------------- - -/*! - Returns YES if decider returns YES for any value in the given array. - */ -+ (BOOL)matchesArray:(NSArray *)array - constraint:(id)constraint - withDecider:(PFComparatorDeciderBlock)decider { - for (id value in array) { - if (decider(value, constraint)) { - return YES; - } - } - return NO; -} - -/*! - Returns YES if decider returns YES for any value in the given array. - */ -+ (BOOL)matchesValue:(id)value - constraint:(id)constraint - withDecider:(PFComparatorDeciderBlock)decider { - if ([value isKindOfClass:[NSArray class]]) { - return [self matchesArray:value constraint:constraint withDecider:decider]; - } else { - return decider(value, constraint); - } -} - -///-------------------------------------- -#pragma mark - Matcher -///-------------------------------------- - -/*! - Implements simple equality constraints. This emulates Mongo's behavior where "equals" can mean array containment. - */ -+ (BOOL)matchesValue:(id)value - equalTo:(id)constraint { - return [self matchesValue:value constraint:constraint withDecider:^BOOL (id value, id constraint) { - // Do custom matching for dates to make sure we have proper precision. - if ([value isKindOfClass:[NSDate class]] && - [constraint isKindOfClass:[NSDate class]]) { - PFDateFormatter *dateFormatter = [PFDateFormatter sharedFormatter]; - NSString *valueString = [dateFormatter preciseStringFromDate:value]; - NSString *constraintString = [dateFormatter preciseStringFromDate:constraint]; - return [valueString isEqual:constraintString]; - } - - if ([value isKindOfClass:[PFRelation class]]) { - return [value isEqual:constraint] || [value _hasKnownObject:constraint]; - } - - return [value isEqual:constraint]; - }]; -} - -/*! - Matches $ne constraints. - */ -+ (BOOL)matchesValue:(id)value - notEqualTo:(id)constraint { - return ![self matchesValue:value equalTo:constraint]; -} - -/*! - Matches $lt constraints. - */ -+ (BOOL)matchesValue:(id)value - lessThan:(id)constraint { - return [self matchesValue:value constraint:constraint withDecider:^BOOL (id value, id constraint) { - if (value == nil || value == [NSNull null]) { - return NO; - } - NSComparisonResult comparisonResult = [value compare:constraint]; - return comparisonResult == NSOrderedAscending; - }]; -} - -/*! - Matches $lte constraints. - */ -+ (BOOL)matchesValue:(id)value - lessThanOrEqualTo:(id)constraint { - return [self matchesValue:value constraint:constraint withDecider:^BOOL (id value, id constraint) { - if (value == nil || value == [NSNull null]) { - return NO; - } - NSComparisonResult comparisonResult = [value compare:constraint]; - return (comparisonResult == NSOrderedAscending) || (comparisonResult == NSOrderedSame); - }]; -} - -/*! - Matches $gt constraints. - */ -+ (BOOL)matchesValue:(id)value - greaterThan:(id)constraint { - return [self matchesValue:value constraint:constraint withDecider:^BOOL (id value, id constraint) { - if (value == nil || value == [NSNull null]) { - return NO; - } - NSComparisonResult comparisonResult = [value compare:constraint]; - return comparisonResult == NSOrderedDescending; - }]; -} - -/*! - Matches $gte constraints. - */ -+ (BOOL)matchesValue:(id)value -greaterThanOrEqualTo:(id)constraint { - return [self matchesValue:value constraint:constraint withDecider:^BOOL (id value, id constraint) { - if (value == nil || value == [NSNull null]) { - return NO; - } - NSComparisonResult comparisonResult = [value compare:constraint]; - return (comparisonResult == NSOrderedDescending) || (comparisonResult == NSOrderedSame); - }]; -} - -/*! - Matches $in constraints. - $in returns YES if the intersection of value and constraint is not an empty set. - */ -+ (BOOL)matchesValue:(id)value - containedIn:(id)constraint { - if (constraint == nil || constraint == [NSNull null]) { - return NO; - } - - PFParameterAssert([constraint isKindOfClass:[NSArray class]], @"Constraint type not supported for $in queries"); - - for (id requiredItem in (NSArray *)constraint) { - if ([self matchesValue:value equalTo:requiredItem]) { - return YES; - } - } - return NO; -} - -/*! - Matches $nin constraints. - */ -+ (BOOL)matchesValue:(id)value - notContainedIn:(id)constraint { - return ![self matchesValue:value containedIn:constraint]; -} - -/*! - Matches $all constraints. - */ -+ (BOOL)matchesValue:(id)value containsAllObjectsInArray:(id)constraints { - PFParameterAssert([constraints isKindOfClass:[NSArray class]], @"Constraint type not supported for $all queries"); - PFParameterAssert([value isKindOfClass:[NSArray class]], @"Value type not supported for $all queries"); - - for (id requiredItem in (NSArray *)constraints) { - if (![self matchesValue:value equalTo:requiredItem]) { - return NO; - } - } - return YES; -} - -/*! - Matches $regex constraints. - */ -+ (BOOL)matchesValue:(id)value - regex:(id)constraint - withOptions:(NSString *)options { - if (value == nil || value == [NSNull null]) { - return NO; - } - - if (options == nil) { - options = @""; - } - - PFParameterAssert([options rangeOfString:@"^[imxs]*$" options:NSRegularExpressionSearch].location != NSNotFound, - @"Invalid regex options %@", options); - - NSRegularExpressionOptions flags = 0; - if ([options rangeOfString:@"i"].location != NSNotFound) { - flags = flags | NSRegularExpressionCaseInsensitive; - } - if ([options rangeOfString:@"m"].location != NSNotFound) { - flags = flags | NSRegularExpressionAnchorsMatchLines; - } - if ([options rangeOfString:@"x"].location != NSNotFound) { - flags = flags | NSRegularExpressionAllowCommentsAndWhitespace; - } - if ([options rangeOfString:@"s"].location != NSNotFound) { - flags = flags | NSRegularExpressionDotMatchesLineSeparators; - } - - NSError *error = nil; - NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:constraint - options:flags - error:&error]; - NSArray *matches = [regex matchesInString:value options:0 range:NSMakeRange(0, [value length])]; - return matches.count > 0; -} - -/*! - Matches $exists constraints. - */ -+ (BOOL)matchesValue:(id)value - exists:(id)constraint { - if (constraint != nil && [constraint boolValue]) { - return value != nil && value != [NSNull null]; - } - - return value == nil || value == [NSNull null]; -} - -/*! - Matches $nearSphere constraints. - */ -+ (BOOL)matchesValue:(id)value - nearSphere:(id)constraint - maxDistance:(NSNumber *)maxDistance { - if (value == nil || value == [NSNull null]) { - return NO; - } - if (maxDistance == nil) { - return YES; - } - PFGeoPoint *point1 = constraint; - PFGeoPoint *point2 = value; - return [point1 distanceInRadiansTo:point2] <= [maxDistance doubleValue]; -} - -/*! - Matches $within constraints. - */ -+ (BOOL)matchesValue:(id)value - within:(id)constraint { - NSDictionary *constraintDictionary = (NSDictionary *)constraint; - NSArray *box = constraintDictionary[PFQueryOptionKeyBox]; - PFGeoPoint *southWest = box[0]; - PFGeoPoint *northEast = box[1]; - PFGeoPoint *target = (PFGeoPoint *)value; - - PFParameterAssert(northEast.longitude >= southWest.longitude, - @"whereWithinGeoBox queries cannot cross the International Date Line."); - PFParameterAssert(northEast.latitude >= southWest.latitude, - @"The southwest corner of a geo box must be south of the northeast corner."); - PFParameterAssert((northEast.longitude - southWest.longitude) <= 180, - @"Geo box queries larger than 180 degrees in longitude are not supported." - @"Please check point order."); - - return (target.latitude >= southWest.latitude && - target.latitude <= northEast.latitude && - target.longitude >= southWest.longitude && - target.longitude <= northEast.longitude); -} - -/*! - Returns YES iff the given value matches the given operator and constraint. - Raise NSInvalidArgumentException if the operator is not one this function can handle - */ -+ (BOOL)matchesValue:(id)value - constraint:(id)constraint - operator:(NSString *)operator - allKeyConstraints:(NSDictionary *)allKeyConstraints { - if ([operator isEqualToString:PFQueryKeyNotEqualTo]) { - return [self matchesValue:value notEqualTo:constraint]; - } else if ([operator isEqualToString:PFQueryKeyLessThan]) { - return [self matchesValue:value lessThan:constraint]; - } else if ([operator isEqualToString:PFQueryKeyLessThanEqualTo]) { - return [self matchesValue:value lessThanOrEqualTo:constraint]; - } else if ([operator isEqualToString:PFQueryKeyGreaterThan]) { - return [self matchesValue:value greaterThan:constraint]; - } else if ([operator isEqualToString:PFQueryKeyGreaterThanOrEqualTo]) { - return [self matchesValue:value greaterThanOrEqualTo:constraint]; - } else if ([operator isEqualToString:PFQueryKeyContainedIn]) { - return [self matchesValue:value containedIn:constraint]; - } else if ([operator isEqualToString:PFQueryKeyNotContainedIn]) { - return [self matchesValue:value notContainedIn:constraint]; - } else if ([operator isEqualToString:PFQueryKeyContainsAll]) { - return [self matchesValue:value containsAllObjectsInArray:constraint]; - } else if ([operator isEqualToString:PFQueryKeyRegex]) { - return [self matchesValue:value regex:constraint withOptions:allKeyConstraints[PFQueryOptionKeyRegexOptions]]; - } else if ([operator isEqualToString:PFQueryOptionKeyRegexOptions]) { - // No need to do anything. This is handled by $regex. - return YES; - } else if ([operator isEqualToString:PFQueryKeyExists]) { - return [self matchesValue:value exists:constraint]; - } else if ([operator isEqualToString:PFQueryKeyNearSphere]) { - return [self matchesValue:value - nearSphere:constraint - maxDistance:allKeyConstraints[PFQueryOptionKeyMaxDistance]]; - } else if ([operator isEqualToString:PFQueryOptionKeyMaxDistance]) { - // No need to do anything. This is handled by $nearSphere. - return YES; - } else if ([operator isEqualToString:PFQueryKeyWithin]) { - return [self matchesValue:value within:constraint]; - } - - [NSException raise:NSInvalidArgumentException - format:@"The offline store does not yet support %@ operator.", operator]; - // Shouldn't reach here - return YES; -} - -/*! - Creates a matcher that handles $inQuery constraints. - */ -- (PFConstraintMatcherBlock)createMatcherForKey:(NSString *)key - inQuery:(id)constraints - user:(PFUser *)user { - PFQuery *query = (PFQuery *)constraints; - PFSubQueryMatcher *subQueryMatcher = [[PFSubQueryMatcher alloc] initWithSubQuery:query - offlineStore:self.offlineStore]; - return [subQueryMatcher createMatcherWithSubQueryMatcherBlock:^BOOL(id object, NSArray *results) { - id value = [self valueForContainer:object key:key]; - return [[self class] matchesValue:value containedIn:results]; - } user:user]; -} - -/*! - Creates a matcher that handles $notInQuery constraints. - */ -- (PFConstraintMatcherBlock)createMatcherForKey:(NSString *)key - notInQuery:(id)constraints - user:(PFUser *)user { - PFConstraintMatcherBlock inQueryMatcher = [self createMatcherForKey:key inQuery:constraints user:user]; - return ^BFTask *(PFObject *object, PFSQLiteDatabase *database) { - return [inQueryMatcher(object, database) continueWithSuccessBlock:^id(BFTask *task) { - return @(![task.result boolValue]); - }]; - }; -} - -/*! - Creates a matcher that handles $select constraints. - */ -- (PFConstraintMatcherBlock)createMatcherForKey:(NSString *)key - select:(id)constraints - user:(PFUser *)user { - NSDictionary *constraintDictionary = (NSDictionary *)constraints; - PFQuery *query = (PFQuery *)constraintDictionary[PFQueryKeyQuery]; - NSString *resultKey = (NSString *)constraintDictionary[PFQueryKeyKey]; - PFSubQueryMatcher *subQueryMatcher = [[PFSubQueryMatcher alloc] initWithSubQuery:query - offlineStore:self.offlineStore]; - return [subQueryMatcher createMatcherWithSubQueryMatcherBlock:^BOOL(id object, NSArray *results) { - id value = [self valueForContainer:object key:key]; - for (id result in results) { - id resultValue = [self valueForContainer:result key:resultKey]; - if ([[self class] matchesValue:resultValue equalTo:value]) { - return YES; - } - } - return NO; - } user:user]; -} - -/*! - Creates a matcher that handles $dontSelect constraints. - */ -- (PFConstraintMatcherBlock)createMatcherForKey:(NSString *)key - dontSelect:(id)constraints - user:(PFUser *)user { - PFConstraintMatcherBlock selectMatcher = [self createMatcherForKey:key select:constraints user:user]; - return ^BFTask *(PFObject *object, PFSQLiteDatabase *database) { - return [selectMatcher(object, database) continueWithSuccessBlock:^id(BFTask *task) { - return @(![task.result boolValue]); - }]; - }; -} - -/*! - Creates a matcher for a particular constraint operator. - */ -- (PFConstraintMatcherBlock)createMatcherWithOperator:(NSString *)operator - constraints:(id)constraint - key:(NSString *)key - allKeyConstraints:(NSDictionary *)allKeyConstraints - user:(PFUser *)user { - if ([operator isEqualToString:PFQueryKeyInQuery]) { - return [self createMatcherForKey:key inQuery:constraint user:user]; - } else if ([operator isEqualToString:PFQueryKeyNotInQuery]) { - return [self createMatcherForKey:key notInQuery:constraint user:user]; - } else if ([operator isEqualToString:PFQueryKeySelect]) { - return [self createMatcherForKey:key select:constraint user:user]; - } else if ([operator isEqualToString:PFQueryKeyDontSelect]) { - return [self createMatcherForKey:key dontSelect:constraint user:user]; - } else { - return ^BFTask *(PFObject *object, PFSQLiteDatabase *database) { - id value = [self valueForContainer:object key:key]; - BOOL matchesValue = [[self class] matchesValue:value - constraint:constraint - operator:operator - allKeyConstraints:allKeyConstraints]; - return [BFTask taskWithResult:@(matchesValue)]; - }; - } -} - -/*! - Handles $or queries. - */ -- (PFConstraintMatcherBlock)createOrMatcherForQueries:(NSArray *)queries user:(PFUser *)user { - NSMutableArray *matchers = [NSMutableArray array]; - for (PFQuery *query in queries) { - PFConstraintMatcherBlock matcher = [self createMatcherWithQueryConstraints:query.state.conditions user:user]; - [matchers addObject:matcher]; - } - - // Now OR together the constraints for each query. - return ^BFTask *(PFObject *object, PFSQLiteDatabase *database) { - BFTask *task = [BFTask taskWithResult:@NO]; - for (PFConstraintMatcherBlock matcher in matchers) { - task = [task continueWithSuccessBlock:^id(BFTask *task) { - if ([task.result boolValue]) { - return task; - } - return matcher(object, database); - }]; - } - return task; - }; -} - -/*! - Returns a PFConstraintMatcherBlock that return true iff the object matches queryConstraints. This - takes in a SQLiteDatabase connection because SQLite is finicky about nesting connections, so we - want to reuse them whenever possible. - */ -- (PFConstraintMatcherBlock)createMatcherWithQueryConstraints:(NSDictionary *)queryConstraints user:(PFUser *)user { - NSMutableArray *matchers = [[NSMutableArray alloc] init]; - [queryConstraints enumerateKeysAndObjectsUsingBlock:^(id key, id queryConstraintValue, BOOL *stop) { - if ([key isEqualToString:PFQueryKeyOr]) { - // A set of queries to be OR-ed together - PFConstraintMatcherBlock matcher = [self createOrMatcherForQueries:queryConstraintValue user:user]; - [matchers addObject:matcher]; - } else if ([key isEqualToString:PFQueryKeyRelatedTo]) { - PFConstraintMatcherBlock matcher = ^BFTask *(PFObject *object, PFSQLiteDatabase *database) { - PFObject *parent = queryConstraintValue[PFQueryKeyObject]; - NSString *relationKey = queryConstraintValue[PFQueryKeyKey]; - PFRelation *relation = parent[relationKey]; - - return [BFTask taskWithResult:@([relation _hasKnownObject:object])]; - }; - [matchers addObject:matcher]; - } else if ([queryConstraintValue isKindOfClass:[NSDictionary class]]) { - // If it's a set of constraints that should be AND-ed together - NSDictionary *keyConstraints = (NSDictionary *)queryConstraintValue; - [keyConstraints enumerateKeysAndObjectsUsingBlock:^(id operator, id keyConstraintValue, BOOL *stop) { - PFConstraintMatcherBlock matcher = [self createMatcherWithOperator:operator - constraints:keyConstraintValue - key:key - allKeyConstraints:keyConstraints - user:user]; - [matchers addObject:matcher]; - }]; - } else { - // It's not a set of constraints, so it's just a value to compare against. - PFConstraintMatcherBlock matcher = ^BFTask *(PFObject *object, PFSQLiteDatabase *database) { - id objectValue = [self valueForContainer:object key:key]; - BOOL matches = [[self class] matchesValue:objectValue equalTo:queryConstraintValue]; - return [BFTask taskWithResult:@(matches)]; - }; - [matchers addObject:matcher]; - } - }]; - - // Now AND together the constraints for each key - return ^BFTask *(PFObject *object, PFSQLiteDatabase *database) { - BFTask *task = [BFTask taskWithResult:@YES]; - for (PFConstraintMatcherBlock matcher in matchers) { - task = [task continueWithSuccessBlock:^id(BFTask *task) { - if (![task.result boolValue]) { - return task; - } - @try { - return matcher(object, database); - } @catch (NSException *exception) { - // Promote to error to keep the same behavior as online. - NSError *error = [PFErrorUtilities errorWithCode:kPFErrorInvalidQuery - message:exception.reason - shouldLog:NO]; - return [BFTask taskWithError:error]; - } - }]; - } - return task; - }; -} - -///-------------------------------------- -#pragma mark - Fetch -///-------------------------------------- - -- (BFTask *)fetchIncludeAsync:(NSString *)include - container:(id)container - database:(PFSQLiteDatabase *)database { - if (container == nil) { - return [BFTask taskWithResult:nil]; - } - - if ([container isKindOfClass:[NSArray class]]) { - NSArray *array = (NSArray *)container; - // We do the fetches in series because it makes it easier to fail on the first error. - BFTask *task = [BFTask taskWithResult:nil]; - for (id item in array) { - task = [task continueWithSuccessBlock:^id(BFTask *task) { - return [self fetchIncludeAsync:include container:item database:database]; - }]; - } - return task; - } - - // If we've reached the end of include, then actually do the fetch. - if (include == nil) { - if ([container isKindOfClass:[PFObject class]]) { - PFObject *object = (PFObject *)container; - return [self.offlineStore fetchObjectLocallyAsync:object database:database]; - } else if (container == [NSNull null]) { - // Accept NSNull value in included field. We swallow it silently instead of - // throwing an exception. - return nil; - } - NSError *error = [PFErrorUtilities errorWithCode:kPFErrorInvalidNestedKey - message:@"include is invalid for non-ParseObjects"]; - return [BFTask taskWithError:error]; - } - - // Descend into the container and try again - NSArray *parts = [include componentsSeparatedByString:@"."]; - - NSString *key = [parts firstObject]; - NSString *rest = nil; - if ([parts count] > 1) { - NSRange range = NSMakeRange(1, [parts count] - 1); - rest = [[parts subarrayWithRange:range] componentsJoinedByString:@"."]; - } - - return [[[BFTask taskWithResult:nil] continueWithBlock:^id(BFTask *task) { - if ([container isKindOfClass:[PFObject class]]) { - BFTask *fetchTask = [self fetchIncludeAsync:nil container:container database:database]; - return [fetchTask continueWithSuccessBlock:^id(BFTask *task) { - return ((PFObject *)container)[key]; - }]; - } else if ([container isKindOfClass:[NSDictionary class]]) { - return ((NSDictionary *)container)[key]; - } else if (container == [NSNull null]) { - // Accept NSNull value in included field. We swallow it silently instead of - // throwing an exception. - return nil; - } - NSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException - reason:@"include is invalid" - userInfo:nil]; - return [BFTask taskWithException:exception]; - }] continueWithSuccessBlock:^id(BFTask *task) { - return [self fetchIncludeAsync:rest container:task.result database:database]; - }]; -} - -///-------------------------------------- -#pragma mark - User Access -///-------------------------------------- - -+ (BOOL)userHasReadAccess:(PFUser *)user ofObject:(PFObject *)object { - if (user == object) { - return YES; - } - - PFACL *acl = [object ACL]; - if (acl == nil) { - return YES; - } - if ([acl getPublicReadAccess]) { - return YES; - } - if (user != nil && [acl getReadAccessForUser:user]) { - return YES; - } - - // TODO (hallucinogen): Implement roles - return NO; -} - -+ (BOOL)userHasWriteAccess:(PFUser *)user ofObject:(PFObject *)object { - if (user == object) { - return YES; - } - - PFACL *acl = [object ACL]; - if (acl == nil) { - return YES; - } - if ([acl getPublicWriteAccess]) { - return YES; - } - if (user != nil && [acl getWriteAccessForUser:user]) { - return YES; - } - - // TODO (hallucinogen): Implement roles - return NO; -} - -///-------------------------------------- -#pragma mark - Internal Public Methods -///-------------------------------------- - -- (PFConstraintMatcherBlock)createMatcherForQueryState:(PFQueryState *)queryState user:(PFUser *)user { - PFConstraintMatcherBlock constraintMatcher = [self createMatcherWithQueryConstraints:queryState.conditions - user:user]; - // Capture ignoreACLs before the block since it might be modified between matchings. - BOOL shouldIgnoreACLs = queryState.shouldIgnoreACLs; - - return ^BFTask *(PFObject *object, PFSQLiteDatabase *database) { - // TODO (hallucinogen): revisit this whether we should check query and object parseClassname equality - if (!shouldIgnoreACLs && ![[self class] userHasReadAccess:user ofObject:object]) { - return [BFTask taskWithResult:@NO]; - } - return constraintMatcher(object, database); - }; -} - -///-------------------------------------- -#pragma mark - Query Options -///-------------------------------------- - -- (NSArray *)resultsByApplyingOptions:(PFOfflineQueryOption)options - ofQueryState:(PFQueryState *)queryState - toResults:(NSArray *)results { - // No results or empty options. - if (results.count == 0 || options == 0) { - return results; - } - - NSMutableArray *mutableResults = [results mutableCopy]; - if (options & PFOfflineQueryOptionOrder) { - [self _sortResults:mutableResults ofQueryState:queryState]; - } - if (options & PFOfflineQueryOptionSkip) { - NSInteger skip = queryState.skip; - if (skip > 0) { - skip = MIN(skip, results.count); - [mutableResults removeObjectsInRange:NSMakeRange(0, skip)]; - } - } - if (options & PFOfflineQueryOptionLimit) { - NSInteger limit = queryState.limit; - if (limit >= 0 && mutableResults.count > limit) { - [mutableResults removeObjectsInRange:NSMakeRange(limit, mutableResults.count - limit)]; - } - } - - return [mutableResults copy]; -} - -- (void)_sortResults:(NSMutableArray *)results ofQueryState:(PFQueryState *)queryState { - NSArray *keys = queryState.sortKeys; - [keys enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - NSString *key = (NSString *)obj; - if ([key rangeOfString:@"^-?[A-Za-z][A-Za-z0-9_]*$" options:NSRegularExpressionSearch].location == NSNotFound) { - PFConsistencyAssert([@"_created_at" isEqualToString:key] || [@"_updated_at" isEqualToString:key], - @"Invalid key name: %@", key); - } - }]; - - __block NSString *nearSphereKey = nil; - __block PFGeoPoint *nearSphereValue = nil; - [queryState.conditions enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - if ([obj isKindOfClass:[NSDictionary class]]) { - NSDictionary *keyConstraints = (NSDictionary *)obj; - if (keyConstraints[PFQueryKeyNearSphere]) { - nearSphereKey = [key copy]; - nearSphereValue = keyConstraints[PFQueryKeyNearSphere]; - } - } - }]; - - // If there's nothing to sort based on, then don't do anything. - if (keys.count == 0 && nearSphereKey == nil) { - return; - } - - [results sortUsingComparator:^NSComparisonResult(id lhs, id rhs) { - if (nearSphereKey != nil) { - PFGeoPoint *lhsPoint = [self valueForContainer:lhs key:nearSphereKey]; - PFGeoPoint *rhsPoint = [self valueForContainer:rhs key:nearSphereKey]; - - double lhsDistance = [lhsPoint distanceInRadiansTo:nearSphereValue]; - double rhsDistance = [rhsPoint distanceInRadiansTo:nearSphereValue]; - if (lhsDistance != rhsDistance) { - return (lhsDistance - rhsDistance < 0) ? NSOrderedAscending : NSOrderedDescending; - } - } - - for (int i = 0; i < keys.count; ++i) { - NSString *key = keys[i]; - BOOL descending = NO; - if ([key hasPrefix:@"-"]) { - descending = YES; - key = [key substringFromIndex:1]; - } - - id lhsValue = [self valueForContainer:lhs key:key]; - id rhsValue = [self valueForContainer:rhs key:key]; - - NSComparisonResult result = NSOrderedSame; - if (lhsValue != nil && rhsValue == nil) { - result = NSOrderedAscending; - } else if (lhsValue == nil && rhsValue != nil) { - result = NSOrderedDescending; - } else if (lhsValue == nil && rhsValue == nil) { - result = NSOrderedSame; - } else { - result = [lhsValue compare:rhsValue]; - } - - if (result != 0) { - return descending ? -result : result; - } - - } - - return NSOrderedSame; - }]; -} - -- (BFTask *)fetchIncludesAsyncForResults:(NSArray *)results - ofQueryState:(PFQueryState *)queryState - inDatabase:(PFSQLiteDatabase *)database { - BFTask *fetchTask = [BFTask taskWithResult:nil]; - for (PFObject *object in results) { - @weakify(self); - fetchTask = [fetchTask continueWithSuccessBlock:^id(BFTask *task) { - @strongify(self); - return [self fetchIncludesForObjectAsync:object - queryState:queryState - database:database]; - }]; - } - return fetchTask; -} - -- (BFTask *)fetchIncludesForObjectAsync:(PFObject *)object - queryState:(PFQueryState *)queryState - database:(PFSQLiteDatabase *)database { - NSSet *includes = queryState.includedKeys; - // We do the fetches in series because it makes it easier to fail on first error. - BFTask *task = [BFTask taskWithResult:nil]; - for (NSString *include in includes) { - // We do the fetches in series because it makes it easier to fail on the first error. - task = [task continueWithSuccessBlock:^id(BFTask *task) { - return [self fetchIncludeAsync:include container:object database:database]; - }]; - } - return task; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h b/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h deleted file mode 100644 index b8f1c69..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h +++ /dev/null @@ -1,201 +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. - */ - -#import - -#import - -#import "PFMacros.h" - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFFileManager; -@class PFObject; -@class PFPin; -@class PFQueryState; -@class PFSQLiteDatabase; -@class PFUser; - -typedef NS_OPTIONS(uint8_t, PFOfflineStoreOptions) -{ - PFOfflineStoreOptionAlwaysFetchFromSQLite = 1 << 0, -}; - -//TODO: (nlutsenko) Bring this header up to standard with @name, method comments, etc... -@interface PFOfflineStore : NSObject - -@property (nonatomic, assign, readonly) PFOfflineStoreOptions options; -@property (nonatomic, strong, readonly) PFFileManager *fileManager; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithFileManager:(PFFileManager *)fileManager - options:(PFOfflineStoreOptions)options NS_DESIGNATED_INITIALIZER; - -///-------------------------------------- -/// @name Fetch -///-------------------------------------- - -- (BFTask *)fetchObjectLocallyAsync:(PFObject *)object; - -/*! - Gets the data for the given object from the offline database. Returns a task that will be - completed if data for the object was available. If the object is not in the cache, the task - will be faulted, with a CACHE_MISS error. - - @param object The object to fetch. - @param database A database connection to use. - */ -- (BFTask *)fetchObjectLocallyAsync:(PFObject *)object database:(PFSQLiteDatabase *)database; - -///-------------------------------------- -/// @name Save -///-------------------------------------- - -//TODO: (nlutsenko) Remove `includChildren` method, replace with PFLocalStore that wraps OfflineStore + Pin. -- (BFTask *)saveObjectLocallyAsync:(PFObject *)object includeChildren:(BOOL)includeChildren; -- (BFTask *)saveObjectLocallyAsync:(PFObject *)object withChildren:(NSArray *)children; - -/*! - Stores an object (and optionally, every object it points to recursively) in the local database. - If any of the objects have not been fetched from Parse, they will not be stored. However, if - they have changed data, the data will be retained. To get the objects back later, you can use a - ParseQuery with a cache policy that uses the local cache, or you can create an unfetched - pointer with ParseObject.createWithoutData() and then call fetchFromLocalDatastore() on it. - If you modify the object after saving it locally, such as by fetching it or saving it, - those changes will automatically be applied to the cache. - - @param object The root of the objects to save. - @param children If non-empty - these children will be saved to LDS as well. - @param database A database connection to use. - */ -- (BFTask *)saveObjectLocallyAsync:(PFObject *)object - withChildren:(NSArray *)children - database:(PFSQLiteDatabase *)database; - -///-------------------------------------- -/// @name Find -///-------------------------------------- - -/*! - Runs a PFQueryState against the store's contents. - - @returns The objects that match the query's constraint. - */ -- (BFTask *)findAsyncForQueryState:(PFQueryState *)queryState - user:(PFUser *)user - pin:(PFPin *)pin; - -/*! - Runs a PFQueryState against the store's contents. - - @returns The count of objects that match the query's constraint. - */ -- (BFTask *)countAsyncForQueryState:(PFQueryState *)queryState - user:(PFUser *)user - pin:(PFPin *)pin; - -/*! - Runs a PFQueryState against the store's contents. - - @returns The objects that match the query's constraint. - */ -- (BFTask *)findAsyncForQueryState:(PFQueryState *)queryState - user:(PFUser *)user - pin:(PFPin *)pin - isCount:(BOOL)isCount; - -/*! - Runs a PFQueryState against the store's contents. May cause any instances of the object to get fetched from - offline database. (TODO (hallucinogen): should we consider objects in memory but not in Offline Store?) - - @param queryState The query. - @param user The user making the query. - @param pin (Optional) The pin we're querying across. If null, all pins. - @param isCount YES if we're doing count. - @param database The PFSQLiteDatabase - - @returns The objects that match the query's constraint. - */ -- (BFTask *)findAsyncForQueryState:(PFQueryState *)queryState - user:(PFUser *)user - pin:(PFPin *)pin - isCount:(BOOL)isCount - database:(PFSQLiteDatabase *)database; - -///-------------------------------------- -/// @name Update Internal State -///-------------------------------------- - -/*! - Takes an object that has been fetched from the database before and updates it with whatever - data is in memory. This will only be used when data comes back from the server after a fetch - or a save. - */ -- (BFTask *)updateDataForObjectAsync:(PFObject *)object; - -///-------------------------------------- -/// @name Delete -///-------------------------------------- - -/*! - Deletes the given object from Offline Store's pins - */ -- (BFTask *)deleteDataForObjectAsync:(PFObject *)object; - -///-------------------------------------- -/// @name Unpin -///-------------------------------------- - -- (BFTask *)unpinObjectAsync:(PFObject *)object; - -///-------------------------------------- -/// @name Internal Helper Methods -///-------------------------------------- - -/*! - Gets the UUID for the given object, if it has one. Otherwise, creates a new UUID for the object - and adds a new row to the database for the object with no data. - */ -- (BFTask *)getOrCreateUUIDAsyncForObject:(PFObject *)object - database:(PFSQLiteDatabase *)database; - -/*! - This should only be called from `PFObject.objectWithoutDataWithClassName`. - - @returns an object from OfflineStore cache. If nil is returned the object is not found in the cache. - */ -- (PFObject *)getOrCreateObjectWithoutDataWithClassName:(NSString *)className - objectId:(NSString *)objectId; - -/*! - When an object is finished saving, it gets an objectId. Then it should call this method to - clean up the bookeeping around ids. - */ -- (void)updateObjectIdForObject:(PFObject *)object - oldObjectId:(NSString *)oldObjectId - newObjectId:(NSString *)newObjectId; - -///-------------------------------------- -/// @name Unit Test Helper Methods -///-------------------------------------- - -/*! - Used in unit testing only. Clears all in-memory caches so that data must be retrieved from disk. - */ -- (void)simulateReboot; - -/*! - Used in unit testing only. Clears the database on disk. - */ -- (void)clearDatabase; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m b/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m deleted file mode 100644 index d90e373..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m +++ /dev/null @@ -1,1067 +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. - */ - -#import "PFOfflineStore.h" - -#import - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFDecoder.h" -#import "PFEncoder.h" -#import "PFErrorUtilities.h" -#import "PFFileManager.h" -#import "PFJSONSerialization.h" -#import "PFObjectPrivate.h" -#import "PFOfflineQueryLogic.h" -#import "PFPin.h" -#import "PFQueryPrivate.h" -#import "PFSQLiteDatabase.h" -#import "PFSQLiteDatabaseController.h" -#import "PFSQLiteDatabaseResult.h" -#import "PFUser.h" -#import "PFWeakValue.h" -#import "Parse_Private.h" - -typedef BFTask *(^PFOfflineStoreDatabaseExecutionBlock)(PFSQLiteDatabase *database); - -NSString *const PFOfflineStoreDatabaseName = @"ParseOfflineStore"; - -NSString *const PFOfflineStoreTableOfObjects = @"ParseObjects"; -NSString *const PFOfflineStoreKeyOfClassName = @"className"; -NSString *const PFOfflineStoreKeyOfIsDeletingEventually = @"isDeletingEventually"; -NSString *const PFOfflineStoreKeyOfJSON = @"json"; -NSString *const PFOfflineStoreKeyOfObjectId = @"objectId"; -NSString *const PFOfflineStoreKeyOfUUID = @"uuid"; - -NSString *const PFOfflineStoreTableOfDependencies = @"Dependencies"; -NSString *const PFOfflineStoreKeyOfKey = @"key"; - -int const PFOfflineStoreMaximumSQLVariablesCount = 999; - -@interface PFOfflineStore () - -@property (nonatomic, assign, readwrite) PFOfflineStoreOptions options; - -@property (nonatomic, strong, readonly) NSObject *lock; - -/*! - In-memory map of (className, objectId) to ParseObject. This is used so that we can - always return the same instance for a given object. Objects in this map may or may - not be in the database. - */ -@property (nonatomic, strong, readonly) NSMapTable *classNameAndObjectIdToObjectMap; - -/*! - In-memory set of ParseObjects that have been fetched from local database already. - If the object is in the map, a fetch of it has been started. If the value is a - finished task, then the fetch was completed. - */ -@property (nonatomic, strong, readonly) NSMapTable *fetchedObjects; - -/*! - In-memory map of ParseObject to UUID. This is used so that we can always return - the same instance for a given object. Objects in this map may or may not be in the - database. - */ -@property (nonatomic, strong, readonly) NSMapTable *objectToUUIDMap; - -/*! - In-memory map of UUID to ParseObject. This is used so we can always return - the same instance for a given object. The only objects in this map are ones that - are in database. - */ -@property (nonatomic, strong, readonly) NSMapTable *UUIDToObjectMap; - -@property (nonatomic, strong, readonly) PFOfflineQueryLogic *offlineQueryLogic; - -@property (nonatomic, strong, readonly) PFSQLiteDatabaseController *databaseController; - -@end - -@implementation PFOfflineStore - -@synthesize offlineQueryLogic = _offlineQueryLogic; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithFileManager:(PFFileManager *)fileManager options:(PFOfflineStoreOptions)options { - self = [super init]; - if (!self) return nil; - - _options = options; - _fileManager = fileManager; - _databaseController = [PFSQLiteDatabaseController controllerWithFileManager:_fileManager]; - _lock = [[NSObject alloc] init]; - _classNameAndObjectIdToObjectMap = [NSMapTable strongToWeakObjectsMapTable]; - _fetchedObjects = [NSMapTable weakToStrongObjectsMapTable]; - // This is a bit different from what we have in Android. The reason is because the object is quickly - // retained by the OS and we depend on this MapTable to fetch the `uuidTask` of the object. - _objectToUUIDMap = [NSMapTable weakToStrongObjectsMapTable]; - _UUIDToObjectMap = [NSMapTable strongToWeakObjectsMapTable]; - - [[self class] _initializeTablesInBackgroundWithDatabaseController:_databaseController]; - - return self; -} - -///-------------------------------------- -#pragma mark - Fetch -///-------------------------------------- - -- (BFTask *)fetchObjectLocallyAsync:(PFObject *)object { - __block BFTask *fetchTask = nil; - return [[self _performDatabaseOperationAsyncWithBlock:^BFTask *(PFSQLiteDatabase *database) { - // We need this to return the result of `fetchObjectLocallyAsync` instead of returning the - // result of `[database closeAsync]` - fetchTask = [self fetchObjectLocallyAsync:object database:database]; - return fetchTask; - }] continueWithBlock:^id(BFTask *task) { - return fetchTask; - }]; -} - -- (BFTask *)fetchObjectLocallyAsync:(PFObject *)object database:(PFSQLiteDatabase *)database { - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - BFTask *uuidTask = nil; - - @synchronized (self.lock) { - BFTask *fetchTask = [self.fetchedObjects objectForKey:object]; - if (fetchTask && !(self.options & PFOfflineStoreOptionAlwaysFetchFromSQLite)) { - // The object has been fetched from offline store, so any data that's in there - // is already reflected in the in-memory version. There's nothing more to do. - return [fetchTask continueWithBlock:^id(BFTask *task) { - return [BFTask taskWithResult:[task.result weakObject]]; - }]; - } - - // Put a placeholder so that anyone else who attempts to fetch this object will just - // wait for this call to finish doing it. - [self.fetchedObjects setObject:[tcs.task continueWithBlock:^id(BFTask *task) { - return [BFTask taskWithResult:[PFWeakValue valueWithWeakObject:task.result]]; - }] forKey:object]; - uuidTask = [self.objectToUUIDMap objectForKey:object]; - } - NSString *className = [object parseClassName]; - NSString *objectId = [object objectId]; - - // If this gets set, then it will contain data from offline store that need to be merged - // into existing object in memory - BFTask *jsonStringTask = [BFTask taskWithResult:nil]; - __block NSString *uuid = nil; - - if (objectId == nil) { - // This object has never been saved to Parse - if (uuidTask == nil) { - // This object was not pulled from the datastore or previously saved to it. - // There's nothing that can be fetched from it. This isn't an error, because it's - // really convenient to try to fetch objects from offline store just to make sure - // they're up-to-date, and we shouldn't force developers to specially handle this case. - } else { - // This object is a new ParseObject that is known to the datastore, but hasn't been - // fetched. The only way this could happen is if the object had previously been stored - // in the offline store, then the object was removed from memory (maybe by rebooting), - // and then an object with a pointer to it was fetched, so we only created the pointer. - // We need to pull the data out of the database using UUID. - - jsonStringTask = [[uuidTask continueWithSuccessBlock:^id(BFTask *task) { - uuid = task.result; - NSString *query = [NSString stringWithFormat:@"SELECT %@ FROM %@ WHERE %@ = ?;", - PFOfflineStoreKeyOfJSON, PFOfflineStoreTableOfObjects, PFOfflineStoreKeyOfUUID]; - return [database executeQueryAsync:query - withArgumentsInArray:[NSArray arrayWithObjects:uuid, nil]]; - }] continueWithSuccessBlock:^id(BFTask *task) { - PFSQLiteDatabaseResult *result = task.result; - if (![result next]) { - [result close]; - [NSException raise:NSInternalInconsistencyException - format:@"Attempted to find non-existent uuid %@.", uuid]; - } - NSString *jsonString = [result stringForColumnIndex:0]; - [result close]; - - return jsonString; - }]; - } - } else { - if (uuidTask && !(self.options & PFOfflineStoreOptionAlwaysFetchFromSQLite)) { - // This object is an existing ParseObject, and we must've already pulled its data - // out of the offline store, or else we wouldn't know its UUID. This should never happen. - NSString *message = @"Object must have already been fetched but isn't marked as fetched."; - [tcs setException:[NSException exceptionWithName:NSInternalInconsistencyException - reason:message - userInfo:nil]]; - - @synchronized (self.lock) { - [self.fetchedObjects removeObjectForKey:object]; - } - return tcs.task; - } - - // We've got a pointer to an existing ParseObject, but we've never pulled its data out of - // the offline store. Since fetching from the server forces a fetch from the offline - // store, that means this is a pointer. We need to try to find any existing entry for this - // object in the database. - NSString *query = [NSString stringWithFormat:@"SELECT %@, %@ FROM %@ WHERE %@ = ? AND %@ = ?;", - PFOfflineStoreKeyOfJSON, PFOfflineStoreKeyOfUUID, - PFOfflineStoreTableOfObjects, PFOfflineStoreKeyOfClassName, - PFOfflineStoreKeyOfObjectId]; - NSArray *args = @[ className, objectId ]; - jsonStringTask = [[database executeQueryAsync:query - withArgumentsInArray:args] continueWithSuccessBlock:^id(BFTask *task) { - PFSQLiteDatabaseResult *result = task.result; - if (![result next]) { - NSString *errorMessage = @"This object is not available in the offline cache."; - NSError *error = [PFErrorUtilities errorWithCode:kPFErrorCacheMiss - message:errorMessage - shouldLog:NO]; - [result close]; - return [BFTask taskWithError:error]; - } - - NSString *jsonString = [result stringForColumnIndex:0]; - NSString *newUUID = [result stringForColumnIndex:1]; - [result close]; - - @synchronized (self.lock) { - // It's okay to put this object into the uuid map. No one will try to fetch it, - // because it's already in the fetchedObjects map. And no one will try to save it - // without fetching it first, so everything should be fine. - [self.objectToUUIDMap setObject:[BFTask taskWithResult:newUUID] forKey:object]; - [self.UUIDToObjectMap setObject:object forKey:newUUID]; - } - return jsonString; - }]; - } - - return [[jsonStringTask continueWithSuccessBlock:^id(BFTask *task) { - NSString *jsonString = task.result; - if (jsonString == nil) { - // This means we tried to fetch from the database that was never actually saved - // locally. This probably means that its parent object was saved locally and we - // just created a pointer to this object. This should be considered cache miss. - - NSString *errorMessage = @"Attempted to fetch and object offline which was never " - @"saved to the offline cache"; - NSError *error = [PFErrorUtilities errorWithCode:kPFErrorCacheMiss - message:errorMessage - shouldLog:NO]; - return [BFTask taskWithError:error]; - } - id parsedJson = [PFJSONSerialization JSONObjectFromString:jsonString]; - NSMutableDictionary *offlineObjects = [[NSMutableDictionary alloc] init]; - [PFInternalUtils traverseObject:parsedJson usingBlock:^id(id object) { - // Omit root and PFObject - if ([object isKindOfClass:[NSDictionary class]] && - [((NSDictionary *)object)[@"__type"] isEqualToString:@"OfflineObject"] && - object != parsedJson) { - NSString *uuid = ((NSDictionary *)object)[@"uuid"]; - offlineObjects[uuid] = [self _getPointerAsyncWithUUID:uuid database:database]; - } - return object; - }]; - - NSArray *objectValues = [offlineObjects allValues]; - return [[BFTask taskForCompletionOfAllTasks:objectValues] continueWithSuccessBlock:^id(BFTask *task) { - PFDecoder *decoder = [PFOfflineDecoder decoderWithOfflineObjects:offlineObjects]; - [object mergeFromRESTDictionary:parsedJson withDecoder:decoder]; - return [BFTask taskWithResult:nil]; - }]; - }] continueWithBlock:^id(BFTask *task) { - if (task.isCancelled) { - [tcs cancel]; - } else if (task.error != nil) { - [tcs setError:task.error]; - } else if (task.exception != nil) { - [tcs setException:task.exception]; - } else { - [tcs setResult:object]; - } - return tcs.task; - }]; -} - -///-------------------------------------- -#pragma mark - Save -///-------------------------------------- - -- (BFTask *)saveObjectLocallyAsync:(PFObject *)object includeChildren:(BOOL)includeChildren { - //TODO: (nlutsenko) Remove this method, replace with LocalStore implementation that wraps OfflineStore + Pin. - return [self _performDatabaseTransactionAsyncWithBlock:^BFTask *(PFSQLiteDatabase *database) { - return [self saveObjectLocallyAsync:object includeChildren:includeChildren database:database]; - }]; -} - -- (BFTask *)saveObjectLocallyAsync:(PFObject *)object withChildren:(NSArray *)children { - return [self _performDatabaseTransactionAsyncWithBlock:^BFTask *(PFSQLiteDatabase *database) { - return [self saveObjectLocallyAsync:object withChildren:children database:database]; - }]; -} - -- (BFTask *)saveObjectLocallyAsync:(PFObject *)object - includeChildren:(BOOL)includeChildren - database:(PFSQLiteDatabase *)database { - //TODO: (nlutsenko) Remove this method, replace with LocalStore implementation that wraps OfflineStore + Pin. - NSMutableArray *children = nil; - if (includeChildren) { - children = [NSMutableArray array]; - [PFInternalUtils traverseObject:object usingBlock:^id(id traversedObject) { - if ([traversedObject isKindOfClass:[PFObject class]]) { - [children addObject:traversedObject]; - } - return traversedObject; - }]; - } - return [self saveObjectLocallyAsync:object withChildren:children database:database]; -} - -- (BFTask *)saveObjectLocallyAsync:(PFObject *)object - withChildren:(NSArray *)children - database:(PFSQLiteDatabase *)database { - //TODO (nlutsenko): Add assert that checks whether all children are actually children of an object. - NSMutableArray *objectsInTree = nil; - if (children == nil) { - objectsInTree = [NSMutableArray arrayWithObject:object]; - } else { - objectsInTree = [children mutableCopy]; - if (![objectsInTree containsObject:object]) { - [objectsInTree addObject:object]; - } - } - - // Call saveObjectLocallyAsync for each of them individually - NSMutableArray *tasks = [[NSMutableArray alloc] init]; - for (PFObject *objInTree in objectsInTree) { - [tasks addObject:[self fetchObjectLocallyAsync:objInTree database:database]]; - } - - return [[[[[BFTask taskForCompletionOfAllTasks:tasks] continueWithBlock:^id(BFTask *task) { - return [self.objectToUUIDMap objectForKey:object]; - }] continueWithSuccessBlock:^id(BFTask *task) { - NSString *uuid = task.result; - if (uuid == nil) { - // The root object was never stored in offline store, so nothing unpin. - return [BFTask taskWithResult:nil]; - } - - // Delete all objects locally corresponding to the key we're trying to use in case it was - // used before (overwrite) - return [self _unpinKeyAsync:uuid database:database]; - }] continueWithSuccessBlock:^id(BFTask *task) { - return [self getOrCreateUUIDAsyncForObject:object database:database]; - }] continueWithSuccessBlock:^id(BFTask *task) { - NSString *uuid = task.result; - - NSMutableArray *tasks = [[NSMutableArray alloc] init]; - for (PFObject *object in objectsInTree) { - [tasks addObject:[self saveObjectLocallyAsync:object key:uuid database:database]]; - } - - return [BFTask taskForCompletionOfAllTasks:tasks]; - }]; -} - -- (BFTask *)saveObjectLocallyAsync:(PFObject *)object - key:(NSString *)key - database:(PFSQLiteDatabase *)database { - if ([object objectId] != nil && ![object isDataAvailable] && - ![object _hasChanges] && ![object _hasOutstandingOperations]) { - return [BFTask taskWithResult:nil]; - } - - __block NSString *uuid = nil; - __block id encoded = nil; - return [[[[BFTask taskFromExecutor:[BFExecutor defaultExecutor] withBlock:^id{ - // Make sure we have UUID for the object to be saved. - return [self getOrCreateUUIDAsyncForObject:object database:database]; - }] continueWithSuccessBlock:^id(BFTask *task) { - uuid = task.result; - - // Encode the object, and wait for the UUIDs in its pointers to get encoded. - PFOfflineObjectEncoder *encoder = [PFOfflineObjectEncoder objectEncoderWithOfflineStore:self database:database]; - // We don't care about operationSetUUIDs here - NSArray *operationSetUUIDs = nil; - encoded = [object RESTDictionaryWithObjectEncoder:encoder operationSetUUIDs:&operationSetUUIDs]; - return [encoder encodeFinished]; - }] continueWithSuccessBlock:^id(BFTask *task) { - // Time to actually save the object - NSString *className = [object parseClassName]; - NSString *objectId = [object objectId]; - NSString *encodedString = [PFJSONSerialization stringFromJSONObject:encoded]; - NSString *updateFields = nil; - NSArray *queryParams = nil; - - if (objectId != nil) { - updateFields = [NSString stringWithFormat:@"%@ = ?, %@ = ?, %@ = ?", - PFOfflineStoreKeyOfClassName, PFOfflineStoreKeyOfJSON, - PFOfflineStoreKeyOfObjectId]; - queryParams = @[className, encodedString, objectId, uuid]; - } else { - updateFields = [NSString stringWithFormat:@"%@ = ?, %@ = ?", - PFOfflineStoreKeyOfClassName, PFOfflineStoreKeyOfJSON]; - queryParams = @[className, encodedString, uuid]; - } - - NSString *sql = [NSString stringWithFormat:@"UPDATE %@ SET %@ WHERE %@ = ?", - PFOfflineStoreTableOfObjects, updateFields, - PFOfflineStoreKeyOfUUID]; - return [database executeSQLAsync:sql withArgumentsInArray:queryParams]; - }] continueWithSuccessBlock:^id(BFTask *task) { - NSString *sql = [NSString stringWithFormat:@"INSERT OR IGNORE INTO %@(%@, %@) VALUES (?, ?)", - PFOfflineStoreTableOfDependencies, PFOfflineStoreKeyOfKey, - PFOfflineStoreKeyOfUUID]; - return [database executeSQLAsync:sql withArgumentsInArray:@[key, uuid]]; - }]; -} - -///-------------------------------------- -#pragma mark - Find -///-------------------------------------- - -- (BFTask *)findAsyncForQueryState:(PFQueryState *)queryState - user:(PFUser *)user - pin:(PFPin *)pin { - return [self findAsyncForQueryState:queryState user:user pin:pin isCount:NO]; -} - -- (BFTask *)countAsyncForQueryState:(PFQueryState *)queryState - user:(PFUser *)user - pin:(PFPin *)pin { - return [[self findAsyncForQueryState:queryState - user:user - pin:pin - isCount:YES] continueWithSuccessBlock:^id(BFTask *task) { - if (!task.cancelled && !task.error && !task.exception) { - NSArray *result = task.result; - return @(result.count); - } - return task; - }]; -} - -- (BFTask *)findAsyncForQueryState:(PFQueryState *)queryState - user:(PFUser *)user - pin:(PFPin *)pin - isCount:(BOOL)isCount { - __block BFTask *resultTask = nil; - return [[self _performDatabaseOperationAsyncWithBlock:^BFTask *(PFSQLiteDatabase *database) { - resultTask = [self findAsyncForQueryState:queryState user:user pin:pin isCount:isCount database:database]; - return resultTask; - }] continueWithBlock:^id(BFTask *ignored) { - // We need this to return the result of `findQuery` instead of returning the - // result of `[database closeAsync]` - return resultTask; - }]; -} - -- (BFTask *)findAsyncForQueryState:(PFQueryState *)queryState - user:(PFUser *)user - pin:(PFPin *)pin - isCount:(BOOL)isCount - database:(PFSQLiteDatabase *)database { - __block NSMutableArray *mutableResults = [NSMutableArray array]; - BFTask *queryTask = nil; - BOOL includeIsDeletingEventually = queryState.shouldIncludeDeletingEventually; - - if (pin == nil) { - NSString *isDeletingEventuallyQuery = @""; - if (!includeIsDeletingEventually) { - isDeletingEventuallyQuery = [NSString stringWithFormat:@"AND %@ = 0", - PFOfflineStoreKeyOfIsDeletingEventually]; - } - NSString *queryString = [NSString stringWithFormat:@"SELECT %@ FROM %@ WHERE %@ = ? %@;", - PFOfflineStoreKeyOfUUID, PFOfflineStoreTableOfObjects, - PFOfflineStoreKeyOfClassName, isDeletingEventuallyQuery]; - queryTask = [database executeQueryAsync:queryString withArgumentsInArray:@[ queryState.parseClassName ]]; - } else { - BFTask *uuidTask = [self.objectToUUIDMap objectForKey:pin]; - if (uuidTask == nil) { - // Pin was never saved locally, therefore there won't be any results. - return [BFTask taskWithResult:mutableResults]; - } - - queryTask = [uuidTask continueWithSuccessBlock:^id(BFTask *task) { - NSString *uuid = task.result; - NSString *isDeletingEventuallyQuery = @""; - if (!includeIsDeletingEventually) { - isDeletingEventuallyQuery = [NSString stringWithFormat:@"AND %@ = 0", - PFOfflineStoreKeyOfIsDeletingEventually]; - } - NSString *queryString = [NSString stringWithFormat:@"SELECT A.%@ FROM %@ A " - @"INNER JOIN %@ B ON A.%@ = B.%@ WHERE %@ = ? AND %@ = ? %@;", - PFOfflineStoreKeyOfUUID, PFOfflineStoreTableOfObjects, - PFOfflineStoreTableOfDependencies, PFOfflineStoreKeyOfUUID, - PFOfflineStoreKeyOfUUID, PFOfflineStoreKeyOfClassName, - PFOfflineStoreKeyOfKey, isDeletingEventuallyQuery]; - - return [database executeQueryAsync:queryString - withArgumentsInArray:@[ queryState.parseClassName, uuid ]]; - }]; - } - - @weakify(self); - return [[queryTask continueWithSuccessBlock:^id(BFTask *task) { - @strongify(self); - PFSQLiteDatabaseResult *result = task.result; - - PFConstraintMatcherBlock matcherBlock = [self.offlineQueryLogic createMatcherForQueryState:queryState - user:user]; - - BFTask *checkAllObjectsTask = [BFTask taskWithResult:nil]; - while ([result next]) { - NSString *uuid = [result stringForColumnIndex:0]; - __block PFObject *object = nil; - - checkAllObjectsTask = [[[[checkAllObjectsTask continueWithSuccessBlock:^id(BFTask *task) { - return [self _getPointerAsyncWithUUID:uuid database:database]; - }] continueWithSuccessBlock:^id(BFTask *task) { - object = task.result; - return [self fetchObjectLocallyAsync:object database:database]; - }] continueWithSuccessBlock:^id(BFTask *task) { - if (!object.isDataAvailable) { - return [BFTask taskWithResult:@NO]; - } - return matcherBlock(object, database); - }] continueWithSuccessBlock:^id(BFTask *task) { - if ([task.result boolValue]) { - [mutableResults addObject:object]; - } - return [BFTask taskWithResult:nil]; - }]; - } - [result close]; - - return checkAllObjectsTask; - }] continueWithSuccessBlock:^id(BFTask *task) { - @strongify(self); - - // Sort, Apply Skip and Limit - - PFOfflineQueryOption queryOptions = 0; - if (!isCount) { - queryOptions = PFOfflineQueryOptionOrder | PFOfflineQueryOptionSkip | PFOfflineQueryOptionLimit; - } - NSArray *results = [self.offlineQueryLogic resultsByApplyingOptions:queryOptions - ofQueryState:queryState - toResults:mutableResults]; - - // Fetch includes - BFTask *fetchIncludesTask = [self.offlineQueryLogic fetchIncludesAsyncForResults:results - ofQueryState:queryState - inDatabase:database]; - - return [fetchIncludesTask continueWithSuccessBlock:^id(BFTask *task) { - return results; - }]; - }]; -} - -///-------------------------------------- -#pragma mark - Update -///-------------------------------------- - -- (BFTask *)updateDataForObjectAsync:(PFObject *)object { - BFTask *fetchTask = nil; - - @synchronized (self.lock) { - fetchTask = [self.fetchedObjects objectForKey:object]; - if (!fetchTask) { - NSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException - reason:@"An object cannot be updated if it wasn't fetched" - userInfo:nil]; - return [BFTask taskWithException:exception]; - } - } - return [fetchTask continueWithBlock:^id(BFTask *task) { - if (task.error != nil) { - // Catch CACHE_MISS errors and ignore them. - if (task.error.code == kPFErrorCacheMiss) { - return [BFTask taskWithResult:nil]; - } - return [BFTask taskWithResult:[task.result weakObject]]; - } - - return [self _performDatabaseTransactionAsyncWithBlock:^BFTask *(PFSQLiteDatabase *database) { - return [self _updateDataForObjectAsync:object inDatabase:database]; - }]; - }]; -} - -- (BFTask *)_updateDataForObjectAsync:(PFObject *)object inDatabase:(PFSQLiteDatabase *)database { - BFTask *uuidTask = nil; - @synchronized (self.lock) { - uuidTask = [self.objectToUUIDMap objectForKey:object]; - if (!uuidTask) { - // It was fetched, but it has no UUID. That must mean it isn't actually in the database. - return [BFTask taskWithResult:nil]; - } - } - - __block NSString *uuid = nil; - __block NSDictionary *dataDictionary = nil; - return [[uuidTask continueWithSuccessBlock:^id(BFTask *task) { - uuid = task.result; - - PFOfflineObjectEncoder *encoder = [PFOfflineObjectEncoder objectEncoderWithOfflineStore:self - database:database]; - NSArray *operationSetUUIDs = nil; - dataDictionary = [object RESTDictionaryWithObjectEncoder:encoder operationSetUUIDs:&operationSetUUIDs]; - return [encoder encodeFinished]; - }] continueWithSuccessBlock:^id(BFTask *task) { - // Put it in database - NSString *className = object.parseClassName; - NSString *objectId = object.objectId; - NSString *encodedDataDictionary = [PFJSONSerialization stringFromJSONObject:dataDictionary]; - NSNumber *deletingEventually = dataDictionary[PFOfflineStoreKeyOfIsDeletingEventually]; - - NSString *updateParams = nil; - NSArray *updateArguments = nil; - if (objectId != nil) { - updateParams = [NSString stringWithFormat:@"%@ = ?, %@ = ?, %@ = ?, %@ = ?", - PFOfflineStoreKeyOfClassName, PFOfflineStoreKeyOfJSON, - PFOfflineStoreKeyOfIsDeletingEventually, PFOfflineStoreKeyOfObjectId]; - updateArguments = @[ className, encodedDataDictionary, deletingEventually, objectId, uuid ]; - } else { - updateParams = [NSString stringWithFormat:@"%@ = ?, %@ = ?, %@ = ?", - PFOfflineStoreKeyOfClassName, PFOfflineStoreKeyOfJSON, - PFOfflineStoreKeyOfIsDeletingEventually]; - updateArguments = @[ className, encodedDataDictionary, deletingEventually, uuid ]; - } - - NSString *sql = [NSString stringWithFormat:@"UPDATE %@ SET %@ WHERE %@ = ?", - PFOfflineStoreTableOfObjects, updateParams, PFOfflineStoreKeyOfUUID]; - - return [database executeSQLAsync:sql withArgumentsInArray:updateArguments]; - }]; -} - -///-------------------------------------- -#pragma mark - Delete -///-------------------------------------- - -- (BFTask *)deleteDataForObjectAsync:(PFObject *)object { - return [self _performDatabaseTransactionAsyncWithBlock:^BFTask *(PFSQLiteDatabase *database) { - return [self deleteDataForObjectAsync:object database:database]; - }]; -} - -- (BFTask *)deleteDataForObjectAsync:(PFObject *)object database:(PFSQLiteDatabase *)database { - __block NSString *uuid = nil; - - // Make sure the object has a UUID. - BFTask *uuidTask = nil; - @synchronized (self.lock) { - uuidTask = [self.objectToUUIDMap objectForKey:object]; - if (!uuidTask) { - // It was fetched, but it has no UUID. That must mean it isn't actually in the database. - return [BFTask taskWithResult:nil]; - } - } - - uuidTask = [uuidTask continueWithSuccessBlock:^id(BFTask *task) { - uuid = task.result; - return task; - }]; - - // If the object was the root of a pin, unpin it. - BFTask *unpinTask = [[uuidTask continueWithSuccessBlock:^id(BFTask *task) { - // Find all the roots for this object. - NSString *sql = [NSString stringWithFormat:@"SELECT %@ FROM %@ WHERE %@ = ?", - PFOfflineStoreKeyOfKey, PFOfflineStoreTableOfDependencies, - PFOfflineStoreKeyOfUUID]; - return [database executeQueryAsync:sql withArgumentsInArray:@[ uuid ]]; - }] continueWithSuccessBlock:^id(BFTask *task) { - // Try to unpin this object from the pin label if it's a root of the PFPin. - PFSQLiteDatabaseResult *result = task.result; - NSMutableArray *tasks = [NSMutableArray array]; - - while (result.next) { - NSString *objectUUID = [result stringForColumnIndex:0]; - - BFTask *getPointerTask = [self _getPointerAsyncWithUUID:objectUUID database:database]; - BFTask *objectUnpinTask = [[getPointerTask continueWithSuccessBlock:^id(BFTask *task) { - PFPin *pin = task.result; - return [self fetchObjectLocallyAsync:pin database:database]; - }] continueWithBlock:^id(BFTask *task) { - PFPin *pin = task.result; - - NSMutableArray *modified = pin.objects; - if (modified == nil || ![modified containsObject:object]) { - return task; - } - - [modified removeObject:object]; - if (modified.count == 0) { - return [self _unpinKeyAsync:objectUUID database:database]; - } - pin.objects = modified; - - return [self saveObjectLocallyAsync:pin includeChildren:YES database:database]; - }]; - [tasks addObject:objectUnpinTask]; - } - [result close]; - - return [BFTask taskForCompletionOfAllTasks:tasks]; - }]; - - return [[[unpinTask continueWithSuccessBlock:^id(BFTask *task) { - NSString *sql = [NSString stringWithFormat:@"DELETE FROM %@ WHERE %@ = ?", - PFOfflineStoreTableOfDependencies, PFOfflineStoreKeyOfUUID]; - return [database executeSQLAsync:sql withArgumentsInArray:@[ uuid ]]; - }] continueWithSuccessBlock:^id(BFTask *task) { - NSString *sql = [NSString stringWithFormat:@"DELETE FROM %@ WHERE %@ = ?", - PFOfflineStoreTableOfObjects, PFOfflineStoreKeyOfUUID]; - return [database executeSQLAsync:sql withArgumentsInArray:@[ uuid ]]; - }] continueWithSuccessBlock:^id(BFTask *task) { - // Delete the object from memory cache. - // (or else `PFObject.objectWithoutDataWithClassName` will return a valid object) - @synchronized (self.lock) { - // TODO (hallucinogen): we should probably clean up UUIDToObjectMap and objectToUUIDMap - // but getting the uuid requires a task and things might get a little funky... - if (object.objectId != nil) { - NSString *key = [self _generateKeyForClassName:object.parseClassName objectId:object.objectId]; - [self.classNameAndObjectIdToObjectMap removeObjectForKey:key]; - } - [self.fetchedObjects removeObjectForKey:object]; - } - return task; - }]; -} - -///-------------------------------------- -#pragma mark - Unpin -///-------------------------------------- - -- (BFTask *)unpinObjectAsync:(PFObject *)object { - BFTask *uuidTask = [self.objectToUUIDMap objectForKey:object]; - return [uuidTask continueWithBlock:^id(BFTask *task) { - NSString *uuid = task.result; - if (!uuid) { - // The root object was never stored in the offline store, so nothing to unpin. - return [BFTask taskWithResult:nil]; - } - return [self _unpinKeyAsync:uuid]; - }]; -} - -- (BFTask *)_unpinKeyAsync:(NSString *)key { - return [self _performDatabaseTransactionAsyncWithBlock:^BFTask *(PFSQLiteDatabase *database) { - return [self _unpinKeyAsync:key database:database]; - }]; -} - -- (BFTask *)_unpinKeyAsync:(NSString *)key database:(PFSQLiteDatabase *)database { - NSMutableArray *uuidsToDelete = [NSMutableArray array]; - // Fetch all uuids from Dependencies for key=? grouped by uuid having a count of 1 - NSString *query = [NSString stringWithFormat:@"SELECT %@ FROM %@ WHERE %@ = ? AND %@ IN " - @"(SELECT %@ FROM %@ GROUP BY %@ HAVING COUNT(%@) = 1);", - PFOfflineStoreKeyOfUUID, PFOfflineStoreTableOfDependencies, - PFOfflineStoreKeyOfKey, PFOfflineStoreKeyOfUUID, PFOfflineStoreKeyOfUUID, - PFOfflineStoreTableOfDependencies, PFOfflineStoreKeyOfUUID, - PFOfflineStoreKeyOfUUID]; - return [[[[database executeQueryAsync:query - withArgumentsInArray:@[ key ]] continueWithSuccessBlock:^id(BFTask *task) { - // DELETE FROM Objects - PFSQLiteDatabaseResult *result = task.result; - while (result.next) { - [uuidsToDelete addObject:[result stringForColumnIndex:0]]; - } - [result close]; - - return [self _deleteObjectsWithUUIDs:uuidsToDelete database:database]; - }] continueWithSuccessBlock:^id(BFTask *task) { - // DELETE FROM Dependencies - NSString *sql = [NSString stringWithFormat:@"DELETE FROM %@ WHERE %@ = ?", - PFOfflineStoreTableOfDependencies, PFOfflineStoreKeyOfKey]; - return [database executeSQLAsync:sql withArgumentsInArray:@[ key ]]; - }] continueWithSuccessBlock:^id(BFTask *task) { - @synchronized (self.lock) { - // Remove uuids from memory - for (NSString *uuid in uuidsToDelete) { - PFObject *object = [self.UUIDToObjectMap objectForKey:uuid]; - if (object != nil) { - [self.objectToUUIDMap removeObjectForKey:object]; - [self.UUIDToObjectMap removeObjectForKey:uuid]; - } - } - } - return [BFTask taskWithResult:nil]; - }]; -} - -- (BFTask *)_deleteObjectsWithUUIDs:(NSArray *)uuids database:(PFSQLiteDatabase *)database { - if (uuids.count <= 0) { - return [BFTask taskWithResult:nil]; - } - - if (uuids.count > PFOfflineStoreMaximumSQLVariablesCount) { - NSRange range = NSMakeRange(0, PFOfflineStoreMaximumSQLVariablesCount); - return [[self _deleteObjectsWithUUIDs:[uuids subarrayWithRange:range] - database:database] continueWithSuccessBlock:^id(BFTask *task) { - unsigned long includedCount = uuids.count - PFOfflineStoreMaximumSQLVariablesCount; - NSRange range = NSMakeRange(PFOfflineStoreMaximumSQLVariablesCount, includedCount); - return [self _deleteObjectsWithUUIDs:[uuids subarrayWithRange:range] database:database]; - }]; - } - - NSMutableArray *placeholders = [NSMutableArray array]; - for (int i = 0; i < uuids.count; ++i) { - [placeholders addObject:@"?"]; - } - NSString *sql = [NSString stringWithFormat:@"DELETE FROM %@ WHERE %@ IN (%@);", - PFOfflineStoreTableOfObjects, PFOfflineStoreKeyOfUUID, - [placeholders componentsJoinedByString:@","]]; - return [database executeSQLAsync:sql withArgumentsInArray:uuids]; -} - -///-------------------------------------- -#pragma mark - Internal Helper Methods -///-------------------------------------- - -- (BFTask *)getOrCreateUUIDAsyncForObject:(PFObject *)object - database:(PFSQLiteDatabase *)database { - NSString *newUUID = [[NSUUID UUID] UUIDString]; - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - - @synchronized (self.lock) { - BFTask *uuidTask = [self.objectToUUIDMap objectForKey:object]; - if (uuidTask != nil) { - // Return existing task. - return uuidTask; - } - - // The object doesn't have UUID yet, so we're gonna have to make one - [self.objectToUUIDMap setObject:tcs.task forKey:object]; - [self.UUIDToObjectMap setObject:object forKey:newUUID]; - - __weak id weakObject = object; - [self.fetchedObjects setObject:[tcs.task continueWithSuccessBlock:^id(BFTask *task) { - return [PFWeakValue valueWithWeakObject:weakObject]; - }] forKey:object]; - } - - // We need to put a placeholder row in the database so that later on the save can be just - // an update. This could be a pointer to an object that itself never gets saved offline, - // in which case the consumer will just have to deal with that. - NSString *query = [NSString stringWithFormat:@"INSERT INTO %@(%@, %@) VALUES(?, ?);", - PFOfflineStoreTableOfObjects, PFOfflineStoreKeyOfUUID, PFOfflineStoreKeyOfClassName]; - [[database executeSQLAsync:query - withArgumentsInArray:@[ newUUID, [object parseClassName]]] continueWithSuccessBlock:^id(BFTask *task) { - [tcs setResult:newUUID]; - return [BFTask taskWithResult:nil]; - }]; - - return tcs.task; -} - -/*! - Gets an unfetched pointer to an object in the database, based on its uuid. The object may or may - not be in memory, but it must be in database. If it is already in memory, the instance will be - returned. Since this is only for creating pointers to objects that are referenced by other objects - in the datastore, it's a fair assumption. - - @param uuid The UUID of the object to retrieve. - @param database The database instance to retrieve from. - @returns The object with that UUID. - */ -- (BFTask *)_getPointerAsyncWithUUID:(NSString *)uuid - database:(PFSQLiteDatabase *)database { - @synchronized (self.lock) { - PFObject *existing = [self.UUIDToObjectMap objectForKey:uuid]; - if (existing != nil) { - return [BFTask taskWithResult:existing]; - } - } - - // We only want the pointer, but we have to look in the database to know if there's something - // with this classname and object id already. - NSString *query = [NSString stringWithFormat:@"SELECT %@, %@ FROM %@ WHERE %@ = ?;", - PFOfflineStoreKeyOfClassName, PFOfflineStoreKeyOfObjectId, - PFOfflineStoreTableOfObjects, PFOfflineStoreKeyOfUUID]; - return [[database executeQueryAsync:query - withArgumentsInArray:@[ uuid ]] continueWithSuccessBlock:^id(BFTask *task) { - PFSQLiteDatabaseResult *result = task.result; - if (![result next]) { - [result close]; - [NSException raise:NSInternalInconsistencyException - format:@"Attempted to find non-existent uuid %@", uuid]; - } - - @synchronized (self.lock) { - PFObject *existing = [self.UUIDToObjectMap objectForKey:uuid]; - if (existing != nil) { - [result close]; - return existing; - } - - NSString *className = [result stringForColumnIndex:0]; - NSString *objectId = [result stringForColumnIndex:1]; - [result close]; - - PFObject *pointer = [PFObject objectWithoutDataWithClassName:className objectId:objectId]; - - // If it doesn't have objectId, we don't really need the UUID, and this simplifies some - // other logic elsewhere if we only update the map for new objects. - if (objectId == nil) { - [self.UUIDToObjectMap setObject:pointer forKey:uuid]; - [self.objectToUUIDMap setObject:[BFTask taskWithResult:uuid] forKey:pointer]; - } - return pointer; - } - }]; -} - -- (PFObject *)getOrCreateObjectWithoutDataWithClassName:(NSString *)className - objectId:(NSString *)objectId { - PFParameterAssert(objectId, @"objectId cannot be nil."); - - PFObject *object = nil; - @synchronized (self.lock) { - NSString *key = [self _generateKeyForClassName:className objectId:objectId]; - object = [self.classNameAndObjectIdToObjectMap objectForKey:key]; - if (!object) { - object = [PFObject objectWithClassName:className objectId:objectId completeData:NO]; - [self updateObjectIdForObject:object oldObjectId:nil newObjectId:objectId]; - } - } - return object; -} - -- (void)updateObjectIdForObject:(PFObject *)object - oldObjectId:(NSString *)oldObjectId - newObjectId:(NSString *)newObjectId { - if (oldObjectId != nil) { - PFConsistencyAssert([oldObjectId isEqualToString:newObjectId], @"objectIds cannot be changed in offline mode."); - return; - } - - NSString *className = object.parseClassName; - NSString *key = [self _generateKeyForClassName:className objectId:newObjectId]; - - @synchronized (self.lock) { - // See if there's already an entry for new objectId. - PFObject *existing = [self.classNameAndObjectIdToObjectMap objectForKey:key]; - PFConsistencyAssert(existing == nil || existing == object, - @"Attempted to change an objectId to one that's already known to the OfflineStore."); - - // Okay, all clear to add the new reference. - [self.classNameAndObjectIdToObjectMap setObject:object forKey:key]; - } -} - -- (NSString *)_generateKeyForClassName:(NSString *)className - objectId:(NSString *)objectId { - return [NSString stringWithFormat:@"%@:%@", className, objectId]; -} - -// TODO (hallucinogen): is this the right way to store the schema? -+ (NSString *)PFOfflineStoreParseObjectsTableSchema { - return [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ (" - @"%@ TEXT PRIMARY KEY, " - @"%@ TEXT NOT NULL, " - @"%@ TEXT, " - @"%@ TEXT, " - @"%@ INTEGER DEFAULT 0, " - @"UNIQUE(%@, %@));", PFOfflineStoreTableOfObjects, PFOfflineStoreKeyOfUUID, - PFOfflineStoreKeyOfClassName, PFOfflineStoreKeyOfObjectId, PFOfflineStoreKeyOfJSON, - PFOfflineStoreKeyOfIsDeletingEventually, PFOfflineStoreKeyOfClassName, - PFOfflineStoreKeyOfObjectId]; -} - -+ (NSString *)PFOfflineStoreDependenciesTableSchema { - return [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ (" - @"%@ TEXT NOT NULL, " - @"%@ TEXT NOT NULL, " - @"PRIMARY KEY(%@, %@));", PFOfflineStoreTableOfDependencies, PFOfflineStoreKeyOfKey, - PFOfflineStoreKeyOfUUID, PFOfflineStoreKeyOfKey, PFOfflineStoreKeyOfUUID]; -} - -+ (BFTask *)_initializeTablesInBackgroundWithDatabaseController:(PFSQLiteDatabaseController *)databaseController { - return [[databaseController openDatabaseWithNameAsync:PFOfflineStoreDatabaseName] continueWithBlock:^id(BFTask *task) { - PFSQLiteDatabase *database = task.result; - return [[[[[database beginTransactionAsync] continueWithSuccessBlock:^id(BFTask *task) { - return [database executeSQLAsync:[self PFOfflineStoreParseObjectsTableSchema] withArgumentsInArray:nil]; - }] continueWithSuccessBlock:^id(BFTask *task) { - return [database executeSQLAsync:[self PFOfflineStoreDependenciesTableSchema] withArgumentsInArray:nil]; - }] continueWithSuccessBlock:^id(BFTask *task) { - return [database commitAsync]; - }] continueWithBlock:^id(BFTask *task) { - return [database closeAsync]; - }]; - }]; -} - -///-------------------------------------- -#pragma mark - Database Helpers -///-------------------------------------- - -- (BFTask *)_performDatabaseTransactionAsyncWithBlock:(PFOfflineStoreDatabaseExecutionBlock)block { - return [self _performDatabaseOperationAsyncWithBlock:^BFTask *(PFSQLiteDatabase *database) { - BFTask *task = [database beginTransactionAsync]; - task = [task continueWithSuccessBlock:^id(BFTask *task) { - return block(database); - }]; - return [task continueWithSuccessBlock:^id(BFTask *task) { - return [database commitAsync]; - }]; - }]; -} - -- (BFTask *)_performDatabaseOperationAsyncWithBlock:(PFOfflineStoreDatabaseExecutionBlock)block { - return [[self.databaseController openDatabaseWithNameAsync:PFOfflineStoreDatabaseName] continueWithBlock:^id(BFTask *task) { - PFSQLiteDatabase *database = task.result; - return [block(database) continueWithBlock:^id(BFTask *task) { - return [database closeAsync]; - }]; - }]; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (PFOfflineQueryLogic *)offlineQueryLogic { - @synchronized (self.lock) { - if (!_offlineQueryLogic) { - _offlineQueryLogic = [[PFOfflineQueryLogic alloc] initWithOfflineStore:self]; - } - return _offlineQueryLogic; - } -} - -///-------------------------------------- -#pragma mark - Unit Test helper -///-------------------------------------- - -- (void)simulateReboot { - @synchronized (self.lock) { - [self.UUIDToObjectMap removeAllObjects]; - [self.objectToUUIDMap removeAllObjects]; - [self.classNameAndObjectIdToObjectMap removeAllObjects]; - [self.fetchedObjects removeAllObjects]; - } -} - -- (void)clearDatabase { - // Delete DB file - NSString *filePath = [self.fileManager parseDataItemPathForPathComponent:PFOfflineStoreDatabaseName]; - [[PFFileManager removeItemAtPathAsync:filePath] waitForResult:nil withMainThreadWarning:NO]; - - // Reinitialize tables - [PFOfflineStore _initializeTablesInBackgroundWithDatabaseController:self.databaseController]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/Pin/PFPin.h b/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/Pin/PFPin.h deleted file mode 100644 index 745baf6..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/Pin/PFPin.h +++ /dev/null @@ -1,33 +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. - */ - -#import - -#import -#import - -extern NSString *const PFPinKeyName; -extern NSString *const PFPinKeyObjects; - -/*! - PFPin represent internal pin implementation of PFObject's `pin`. - */ -@interface PFPin : PFObject - -@property (nonatomic, copy) NSString *name; -@property (nonatomic, strong) NSMutableArray *objects; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)initWithName:(NSString *)name; -+ (instancetype)pinWithName:(NSString *)name; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/Pin/PFPin.m b/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/Pin/PFPin.m deleted file mode 100644 index 3519b47..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/Pin/PFPin.m +++ /dev/null @@ -1,81 +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. - */ - -#import "PFPin.h" - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFObject+Subclass.h" -#import "PFObjectPrivate.h" -#import "PFOfflineStore.h" -#import "PFQueryPrivate.h" -#import "Parse_Private.h" - -NSString *const PFPinKeyName = @"_name"; -NSString *const PFPinKeyObjects = @"_objects"; - -@implementation PFPin - -///-------------------------------------- -#pragma mark - PFSubclassing -///-------------------------------------- - -+ (NSString *)parseClassName { - return @"_Pin"; -} - -// Validates a class name. We override this to only allow the pin class name. -+ (void)_assertValidInstanceClassName:(NSString *)className { - PFParameterAssert([className isEqualToString:[self parseClassName]], - @"Cannot initialize a PFPin with a custom class name."); -} - -- (BOOL)needsDefaultACL { - return NO; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithName:(NSString *)name { - self = [super init]; - if (!self) return nil; - - // Use property accessor, as there is no ivar here for `name`. - self.name = name; - - return self; -} - -+ (instancetype)pinWithName:(NSString *)name { - return [[self alloc] initWithName:name]; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (NSString *)name { - return self[PFPinKeyName]; -} - -- (void)setName:(NSString *)name { - self[PFPinKeyName] = [name copy]; -} - -- (NSMutableArray *)objects { - return self[PFPinKeyObjects]; -} - -- (void)setObjects:(NSMutableArray *)objects { - self[PFPinKeyObjects] = [objects mutableCopy]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h b/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h deleted file mode 100644 index fc37993..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h +++ /dev/null @@ -1,115 +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. - */ - -#import - -#import - -#import "PFMacros.h" - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFFileManager; -@class PFSQLiteDatabaseResult; - -/*! - Argument count given in executeSQLAsync or executeQueryAsync is invalid. - */ -extern int const PFSQLiteDatabaseInvalidArgumenCountErrorCode; - -/*! - Method `executeSQL` cannot execute SELECT. Use `executeQuery` instead. - */ -extern int const PFSQLiteDatabaseInvalidSQL; - -/*! - Database is opened already. - */ -extern int const PFSQLiteDatabaseDatabaseAlreadyOpened; - -/*! - Database is closed already. - */ -extern int const PFSQLiteDatabaseDatabaseAlreadyClosed; - -NS_ASSUME_NONNULL_BEGIN - -@interface PFSQLiteDatabase : NSObject - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)initWithPath:(NSString *)path; - -///-------------------------------------- -/// @name Database Creation -///-------------------------------------- - -+ (instancetype)databaseWithPath:(NSString *)path; - -///-------------------------------------- -/// @name Connection -///-------------------------------------- - -/*! - @returns A `BFTask` that resolves to `YES` if the database is open. - */ -- (BFTask *)isOpenAsync; - -/*! - Opens database. Database is one time use. Open > Close > Open is forbidden. - */ -- (BFTask *)openAsync; - -/*! - Closes the database connection. - */ -- (BFTask *)closeAsync; - -///-------------------------------------- -/// @name Transaction -///-------------------------------------- - -/*! - Begins a database transaction in EXCLUSIVE mode. - */ -- (BFTask *)beginTransactionAsync; - -/*! - Commits running transaction. - */ -- (BFTask *)commitAsync; - -/*! - Rollbacks running transaction. - */ -- (BFTask *)rollbackAsync; - -///-------------------------------------- -/// @name Query Methods -///-------------------------------------- - -/*! - Runs a single SQL statement which return result (SELECT). - */ -- (BFTask *)executeQueryAsync:(NSString *)sql withArgumentsInArray:(nullable NSArray *)args; - -/*! - Runs a single SQL statement, while caching the resulting statement for future use. - */ -- (BFTask *)executeCachedQueryAsync:(NSString *)sql withArgumentsInArray:(nullable NSArray *)args; - -/*! - Runs a single SQL statement which doesn't return result (UPDATE/INSERT/DELETE). - */ -- (BFTask *)executeSQLAsync:(NSString *)sql withArgumentsInArray:(nullable NSArray *)args; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m b/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m deleted file mode 100644 index 9c46fa3..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m +++ /dev/null @@ -1,339 +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. - */ - -#import "PFSQLiteDatabase.h" -#import "PFSQLiteDatabase_Private.h" - -#import - -#import -#import - -#import "BFTask+Private.h" -#import "PFFileManager.h" -#import "PFInternalUtils.h" -#import "PFMacros.h" -#import "PFMultiProcessFileLockController.h" -#import "PFSQLiteDatabaseResult.h" -#import "PFSQLiteStatement.h" -#import "Parse_Private.h" - -NSString *const PFSQLiteDatabaseBeginExclusiveOperationCommand = @"BEGIN EXCLUSIVE"; -NSString *const PFSQLiteDatabaseCommitOperationCommand = @"COMMIT"; -NSString *const PFSQLiteDatabaseRollbackOperationCommand = @"ROLLBACK"; - -NSString *const PFSQLiteDatabaseErrorSQLiteDomain = @"SQLite"; -NSString *const PFSQLiteDatabaseErrorPFSQLiteDatabaseDomain = @"PFSQLiteDatabase"; - -int const PFSQLiteDatabaseInvalidArgumenCountErrorCode = 1; -int const PFSQLiteDatabaseInvalidSQL = 2; -int const PFSQLiteDatabaseDatabaseAlreadyOpened = 3; -int const PFSQLiteDatabaseDatabaseAlreadyClosed = 4; - -@interface PFSQLiteDatabase () { - BFTaskCompletionSource *_databaseClosedTaskCompletionSource; - dispatch_queue_t _databaseQueue; - BFExecutor *_databaseExecutor; - NSMutableDictionary *_cachedStatements; -} - -/*! - Database instance - */ -@property (nonatomic, assign) sqlite3 *database; - -/*! - Database path - */ -@property (nonatomic, copy) NSString *databasePath; - -@end - -@implementation PFSQLiteDatabase - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithPath:(NSString *)path { - self = [super init]; - if (!self) return nil; - - _databaseClosedTaskCompletionSource = [[BFTaskCompletionSource alloc] init]; - _databasePath = [path copy]; - _databaseQueue = dispatch_queue_create("com.parse.sqlite.db.queue", DISPATCH_QUEUE_SERIAL); - _databaseExecutor = [BFExecutor executorWithDispatchQueue:_databaseQueue]; - _cachedStatements = [[NSMutableDictionary alloc] init]; - - return self; -} - -+ (instancetype)databaseWithPath:(NSString *)path { - return [[self alloc] initWithPath:path]; -} - -///-------------------------------------- -#pragma mark - Connection -///-------------------------------------- - -- (BFTask *)isOpenAsync { - return [BFTask taskFromExecutor:_databaseExecutor withBlock:^id { - return @(self.database != nil); - }]; -} - -- (BFTask *)openAsync { - return [BFTask taskFromExecutor:_databaseExecutor withBlock:^id { - if (self.database) { - NSError *error = [self _errorWithErrorCode:PFSQLiteDatabaseDatabaseAlreadyOpened - errorMessage:@"Database is opened already." - domain:PFSQLiteDatabaseErrorPFSQLiteDatabaseDomain]; - return [BFTask taskWithError:error]; - } - - // Check if this database have already been opened before. - if (_databaseClosedTaskCompletionSource.task.completed) { - NSError *error = [self _errorWithErrorCode:PFSQLiteDatabaseDatabaseAlreadyClosed - errorMessage:@"Closed database cannot be reopen." - domain:PFSQLiteDatabaseErrorPFSQLiteDatabaseDomain]; - return [BFTask taskWithError:error]; - } - - // Lock the file to avoid multi-process access. - [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:self.databasePath]; - - sqlite3 *db; - int resultCode = sqlite3_open([self.databasePath UTF8String], &db); - if (resultCode != SQLITE_OK) { - return [BFTask taskWithError:[self _errorWithErrorCode:resultCode]]; - } - - self.database = db; - return [BFTask taskWithResult:nil]; - }]; -} - -- (BFTask *)closeAsync { - return [BFTask taskFromExecutor:_databaseExecutor withBlock:^id { - if (!self.database) { - NSError *error = [self _errorWithErrorCode:PFSQLiteDatabaseDatabaseAlreadyClosed - errorMessage:@"Database is closed already." - domain:PFSQLiteDatabaseErrorPFSQLiteDatabaseDomain]; - return [BFTask taskWithError:error]; - } - - [self _clearCachedStatements]; - int resultCode = sqlite3_close(self.database); - - [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:self.databasePath]; - - if (resultCode == SQLITE_OK) { - - self.database = nil; - [_databaseClosedTaskCompletionSource setResult:nil]; - } else { - // Returns error - [_databaseClosedTaskCompletionSource setError:[self _errorWithErrorCode:resultCode]]; - } - return _databaseClosedTaskCompletionSource.task; - }]; -} - -///-------------------------------------- -#pragma mark - Transaction -///-------------------------------------- - -- (BFTask *)beginTransactionAsync { - return [self executeSQLAsync:PFSQLiteDatabaseBeginExclusiveOperationCommand - withArgumentsInArray:nil]; -} - -- (BFTask *)commitAsync { - return [self executeSQLAsync:PFSQLiteDatabaseCommitOperationCommand - withArgumentsInArray:nil]; -} - -- (BFTask *)rollbackAsync { - return [self executeSQLAsync:PFSQLiteDatabaseRollbackOperationCommand - withArgumentsInArray:nil]; -} - -///-------------------------------------- -#pragma mark - Query Methods -///-------------------------------------- - -- (BFTask *)_executeQueryAsync:(NSString *)sql withArgumentsInArray:(NSArray *)args cachingEnabled:(BOOL)enableCaching { - int resultCode = 0; - PFSQLiteStatement *statement = enableCaching ? [self _cachedStatementForQuery:sql] : nil; - if (!statement) { - sqlite3_stmt *sqliteStatement = nil; - resultCode = sqlite3_prepare_v2(self.database, [sql UTF8String], -1, &sqliteStatement, 0); - if (resultCode != SQLITE_OK) { - sqlite3_finalize(sqliteStatement); - return [BFTask taskWithError:[self _errorWithErrorCode:resultCode]]; - } - statement = [[PFSQLiteStatement alloc] initWithStatement:sqliteStatement]; - - if (enableCaching) { - [self _cacheStatement:statement forQuery:sql]; - } - } else { - [statement reset]; - } - - // Make parameter - int queryCount = sqlite3_bind_parameter_count([statement sqliteStatement]); - int argumentCount = (int)[args count]; - if (queryCount != argumentCount) { - if (!enableCaching) { - [statement close]; - } - - NSError *error = [self _errorWithErrorCode:PFSQLiteDatabaseInvalidArgumenCountErrorCode - errorMessage:@"Statement arguments count doesn't match " - @"given arguments count." - domain:NSStringFromClass([self class])]; - return [BFTask taskWithError:error]; - } - - for (int idx = 0; idx < queryCount; ++idx) { - [self _bindObject:args[idx] toColumn:(idx + 1) inStatement:statement]; - } - - PFSQLiteDatabaseResult *result = [[PFSQLiteDatabaseResult alloc] initWithStatement:statement]; - return [BFTask taskWithResult:result]; -} - -- (BFTask *)executeCachedQueryAsync:(NSString *)sql withArgumentsInArray:(NSArray *)args { - return [BFTask taskFromExecutor:_databaseExecutor withBlock:^id { - return [self _executeQueryAsync:sql withArgumentsInArray:args cachingEnabled:YES]; - }]; -} - -- (BFTask *)executeQueryAsync:(NSString *)sql withArgumentsInArray:(NSArray *)args { - return [BFTask taskFromExecutor:_databaseExecutor withBlock:^id { - return [self _executeQueryAsync:sql withArgumentsInArray:args cachingEnabled:NO]; - }]; -} - -- (BFTask *)executeSQLAsync:(NSString *)sql withArgumentsInArray:(NSArray *)args { - return [BFTask taskFromExecutor:_databaseExecutor withBlock:^id { - return [[self _executeQueryAsync:sql - withArgumentsInArray:args - cachingEnabled:NO] continueWithExecutor:[BFExecutor immediateExecutor] withSuccessBlock:^id(BFTask *task) { - PFSQLiteDatabaseResult *databaseResult = task.result; - int sqliteResultCode = [databaseResult step]; - [databaseResult close]; - - switch (sqliteResultCode) { - case SQLITE_DONE: { - return [BFTask taskWithResult:nil]; - } - case SQLITE_ROW: { - NSError *error = [self _errorWithErrorCode:PFSQLiteDatabaseInvalidSQL - errorMessage:@"Cannot SELECT on executeSQLAsync." - @"Please use executeQueryAsync." - domain:NSStringFromClass([self class])]; - return [BFTask taskWithError:error]; - } - default: { - return [BFTask taskWithError:[self _errorWithErrorCode:sqliteResultCode]]; - } - } - }]; - }]; -} - -/*! - bindObject will bind any object supported by PFSQLiteDatabase to query statement. - Note: sqlite3 query index binding is one-based, while querying result is zero-based. - */ -- (void)_bindObject:(id)obj toColumn:(int)idx inStatement:(PFSQLiteStatement *)statement { - if ((!obj) || ((NSNull *)obj == [NSNull null])) { - sqlite3_bind_null([statement sqliteStatement], idx); - } else if ([obj isKindOfClass:[NSData class]]) { - const void *bytes = [obj bytes]; - if (!bytes) { - // It's an empty NSData object, aka [NSData data]. - // Don't pass a NULL pointer, or sqlite will bind a SQL null instead of a blob. - bytes = ""; - } - sqlite3_bind_blob([statement sqliteStatement], idx, bytes, (int)[obj length], SQLITE_TRANSIENT); - } else if ([obj isKindOfClass:[NSDate class]]) { - sqlite3_bind_double([statement sqliteStatement], idx, [obj timeIntervalSince1970]); - } else if ([obj isKindOfClass:[NSNumber class]]) { - if (CFNumberIsFloatType((__bridge CFNumberRef)obj)) { - sqlite3_bind_double([statement sqliteStatement], idx, [obj doubleValue]); - } else { - sqlite3_bind_int64([statement sqliteStatement], idx, [obj longLongValue]); - } - } else { - sqlite3_bind_text([statement sqliteStatement], idx, [[obj description] UTF8String], -1, SQLITE_TRANSIENT); - } -} - -///-------------------------------------- -#pragma mark - Cached Statements -///-------------------------------------- - -- (void)_clearCachedStatements { - for (PFSQLiteStatement *statement in [_cachedStatements allValues]) { - [statement close]; - } - - [_cachedStatements removeAllObjects]; -} - -- (PFSQLiteStatement *)_cachedStatementForQuery:(NSString *)query { - return _cachedStatements[query]; -} - -- (void)_cacheStatement:(PFSQLiteStatement *)statement forQuery:(NSString *)query { - _cachedStatements[query] = statement; -} - -///-------------------------------------- -#pragma mark - Errors -///-------------------------------------- - -/*! - Generates SQLite error. The details of the error code can be seen in: www.sqlite.org/c3ref/errcode.html - */ -- (NSError *)_errorWithErrorCode:(int)errorCode { - return [self _errorWithErrorCode:errorCode - errorMessage:[NSString stringWithUTF8String:sqlite3_errmsg(self.database)]]; -} - -- (NSError *)_errorWithErrorCode:(int)errorCode errorMessage:(NSString *)errorMessage { - return [self _errorWithErrorCode:errorCode - errorMessage:errorMessage - domain:PFSQLiteDatabaseErrorSQLiteDomain]; -} - -/*! - Generates SQLite/PFSQLiteDatabase error. - */ -- (NSError *)_errorWithErrorCode:(int)errorCode - errorMessage:(NSString *)errorMessage - domain:(NSString *)domain { - NSMutableDictionary *result = [NSMutableDictionary dictionary]; - result[@"code"] = @(errorCode); - result[@"error"] = errorMessage; - return [[NSError alloc] initWithDomain:domain code:errorCode userInfo:result]; -} - -///-------------------------------------- -#pragma mark - Private -///-------------------------------------- - -- (BFTask *)databaseClosedTask { - return _databaseClosedTaskCompletionSource.task; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h b/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h deleted file mode 100644 index d1a0f8c..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h +++ /dev/null @@ -1,49 +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. - */ - -#import - -#import - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFFileManager; -@class PFSQLiteDatabase; - -NS_ASSUME_NONNULL_BEGIN - -@interface PFSQLiteDatabaseController : NSObject - -@property (nonatomic, strong, readonly) PFFileManager *fileManager; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithFileManager:(PFFileManager *)fileManager NS_DESIGNATED_INITIALIZER; -+ (instancetype)controllerWithFileManager:(PFFileManager *)fileManager; - -///-------------------------------------- -/// @name Opening -///-------------------------------------- - -/*! - @abstract Asynchronously opens a database connection to the database with the name specified. - @note Only one database can be actively open at a time. - - @param name The name of the database to open. - - @return A task, which yields a `PFSQLiteDatabase`, with the open database. - When the database is closed, a new database connection can be opened. - */ -- (BFTask *)openDatabaseWithNameAsync:(NSString *)name; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m b/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m deleted file mode 100644 index d971ea4..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m +++ /dev/null @@ -1,79 +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. - */ - -#import "PFSQLiteDatabaseController.h" - -#import -#import - -#import "PFAssert.h" -#import "PFAsyncTaskQueue.h" -#import "PFFileManager.h" -#import "PFSQLiteDatabase_Private.h" - -@implementation PFSQLiteDatabaseController { - PFAsyncTaskQueue *_openDatabaseQueue; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithFileManager:(PFFileManager *)fileManager { - self = [super init]; - if (!self) return nil; - - _fileManager = fileManager; - _openDatabaseQueue = [[PFAsyncTaskQueue alloc] init]; - - return self; -} - -+ (instancetype)controllerWithFileManager:(PFFileManager *)fileManager { - return [[self alloc] initWithFileManager:fileManager]; -} - -///-------------------------------------- -#pragma mark - Opening -///-------------------------------------- - -// TODO: (richardross) Implement connection pooling using NSCache or similar mechanism. -- (BFTask *)openDatabaseWithNameAsync:(NSString *)name { - BFTaskCompletionSource *taskCompletionSource = [BFTaskCompletionSource taskCompletionSource]; - [_openDatabaseQueue enqueue:^id(BFTask *task) { - NSString *databasePath = [self.fileManager parseDataItemPathForPathComponent:name]; - PFSQLiteDatabase *sqliteDatabase = [PFSQLiteDatabase databaseWithPath:databasePath]; - [[sqliteDatabase openAsync] continueWithBlock:^id(BFTask *task) { - if (task.faulted) { - NSError *error = task.error; - if (error) { - [taskCompletionSource trySetError:error]; - } else { - [taskCompletionSource trySetException:task.exception]; - } - } else if (task.cancelled) { - [taskCompletionSource trySetCancelled]; - } else { - [taskCompletionSource trySetResult:sqliteDatabase]; - } - - return nil; - }]; - - return sqliteDatabase.databaseClosedTask; - }]; - - return taskCompletionSource.task; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h b/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h deleted file mode 100644 index d63d36f..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h +++ /dev/null @@ -1,70 +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. - */ - -#import - -@class PFSQLiteStatement; - -NS_ASSUME_NONNULL_BEGIN - -@interface PFSQLiteDatabaseResult : NSObject - -- (instancetype)initWithStatement:(PFSQLiteStatement *)statement; - -/*! - Move current result to next row. Returns true if next result exists. False if current result - is the end of result set. - */ -- (BOOL)next; - -/*! - Move the current result to next row, and returns the raw SQLite return code for the cursor. - Useful for detecting end of cursor vs. error. - */ -- (int)step; - -/*! - Closes the database result. - */ -- (BOOL)close; - -///-------------------------------------- -/// @name Get Column Value -///-------------------------------------- - -- (int)intForColumn:(NSString *)columnName; -- (int)intForColumnIndex:(int)columnIndex; - -- (long)longForColumn:(NSString *)columnName; -- (long)longForColumnIndex:(int)columnIndex; - -- (BOOL)boolForColumn:(NSString *)columnName; -- (BOOL)boolForColumnIndex:(int)columnIndex; - -- (double)doubleForColumn:(NSString *)columnName; -- (double)doubleForColumnIndex:(int)columnIndex; - -- (nullable NSString *)stringForColumn:(NSString *)columnName; -- (nullable NSString *)stringForColumnIndex:(int)columnIndex; - -- (nullable NSDate *)dateForColumn:(NSString *)columnName; -- (nullable NSDate *)dateForColumnIndex:(int)columnIndex; - -- (nullable NSData *)dataForColumn:(NSString *)columnName; -- (nullable NSData *)dataForColumnIndex:(int)columnIndex; - -- (nullable id)objectForColumn:(NSString *)columnName; -- (nullable id)objectForColumnIndex:(int)columnIndex; - -- (BOOL)columnIsNull:(NSString *)columnName; -- (BOOL)columnIndexIsNull:(int)columnIndex; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m b/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m deleted file mode 100644 index cdbeb0e..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m +++ /dev/null @@ -1,168 +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. - */ - -#import "PFSQLiteDatabaseResult.h" - -#import - -#import "PFSQLiteStatement.h" - -@interface PFSQLiteDatabaseResult () - -@property (nonatomic, copy, readonly) NSDictionary *columnNameToIndexMap; -@property (nonatomic, strong, readonly) PFSQLiteStatement *statement; - -@end - -@implementation PFSQLiteDatabaseResult - -@synthesize columnNameToIndexMap = _columnNameToIndexMap; - -- (instancetype)initWithStatement:(PFSQLiteStatement *)stmt { - if ((self = [super init])) { - _statement = stmt; - } - return self; -} - -- (BOOL)next { - return [self step] == SQLITE_ROW; -} - -- (int)step { - return sqlite3_step([self.statement sqliteStatement]); -} - -- (BOOL)close { - return [self.statement close]; -} - -- (int)intForColumn:(NSString *)columnName { - return [self intForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (int)intForColumnIndex:(int)columnIndex { - return sqlite3_column_int([self.statement sqliteStatement], columnIndex); -} - -- (long)longForColumn:(NSString *)columnName { - return [self longForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (long)longForColumnIndex:(int)columnIndex { - return (long)sqlite3_column_int64([self.statement sqliteStatement], columnIndex); -} - -- (BOOL)boolForColumn:(NSString *)columnName { - return [self boolForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (BOOL)boolForColumnIndex:(int)columnIndex { - return ([self intForColumnIndex:columnIndex] != 0); -} - -- (double)doubleForColumn:(NSString *)columnName { - return [self doubleForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (double)doubleForColumnIndex:(int)columnIndex { - return sqlite3_column_double([self.statement sqliteStatement], columnIndex); -} - -- (NSString *)stringForColumn:(NSString *)columnName { - return [self stringForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (NSString *)stringForColumnIndex:(int)columnIndex { - if ([self columnIndexIsNull:columnIndex]) { - return nil; - } - - const char *str = (const char *)sqlite3_column_text([self.statement sqliteStatement], columnIndex); - if (!str) { - return nil; - } - return [NSString stringWithUTF8String:str]; -} - -- (NSDate *)dateForColumn:(NSString *)columnName { - return [self dateForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (NSDate *)dateForColumnIndex:(int)columnIndex { - // TODO: (nlutsenko) probably use formatter - return [NSDate dateWithTimeIntervalSince1970:[self doubleForColumnIndex:columnIndex]]; -} - -- (NSData *)dataForColumn:(NSString *)columnName { - return [self dataForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (NSData *)dataForColumnIndex:(int)columnIndex { - if ([self columnIndexIsNull:columnIndex]) { - return nil; - } - - int size = sqlite3_column_bytes([self.statement sqliteStatement], columnIndex); - const char *buffer = sqlite3_column_blob([self.statement sqliteStatement], columnIndex); - if (buffer == nil) { - return nil; - } - return [NSData dataWithBytes:buffer length:size]; -} - -- (id)objectForColumn:(NSString *)columnName { - return [self objectForColumnIndex:[self columnIndexForName:columnName]]; -} - -- (id)objectForColumnIndex:(int)columnIndex { - int columnType = sqlite3_column_type([self.statement sqliteStatement], columnIndex); - switch (columnType) { - case SQLITE_INTEGER: - return @([self longForColumnIndex:columnIndex]); - case SQLITE_FLOAT: - return @([self doubleForColumnIndex:columnIndex]); - case SQLITE_BLOB: - return [self dataForColumnIndex:columnIndex]; - default: - return [self stringForColumnIndex:columnIndex]; - } -} - -- (BOOL)columnIsNull:(NSString *)columnName { - return [self columnIndexIsNull:[self columnIndexForName:columnName]]; -} - -- (BOOL)columnIndexIsNull:(int)columnIndex { - return (sqlite3_column_type([self.statement sqliteStatement], columnIndex) == SQLITE_NULL); -} - -- (int)columnIndexForName:(NSString *)columnName { - NSNumber *index = self.columnNameToIndexMap[[columnName lowercaseString]]; - if (index) { - return [index intValue]; - } - // not found - return -1; -} - -- (NSDictionary *)columnNameToIndexMap { - if (!_columnNameToIndexMap) { - int columnCount = sqlite3_column_count([self.statement sqliteStatement]); - NSMutableDictionary *mutableColumnNameToIndexMap = [[NSMutableDictionary alloc] initWithCapacity:columnCount]; - for (int i = 0; i < columnCount; ++i) { - NSString *key = [NSString stringWithUTF8String:sqlite3_column_name([self.statement sqliteStatement], i)]; - mutableColumnNameToIndexMap[[key lowercaseString]] = @(i); - } - _columnNameToIndexMap = mutableColumnNameToIndexMap; - } - return _columnNameToIndexMap; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h deleted file mode 100644 index 5db0366..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h +++ /dev/null @@ -1,20 +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. - */ - -#import "PFSQLiteDatabase.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFSQLiteDatabase () - -@property (nonatomic, strong, readonly) BFTask *databaseClosedTask; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h b/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h deleted file mode 100644 index 04e181c..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h +++ /dev/null @@ -1,30 +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. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - PFSQLiteStatement is sqlite3_stmt wrapper class. - */ -typedef struct sqlite3_stmt sqlite3_stmt; - -@interface PFSQLiteStatement : NSObject - -@property (atomic, assign, readonly) sqlite3_stmt *sqliteStatement; - -- (instancetype)initWithStatement:(sqlite3_stmt *)stmt; - -- (BOOL)close; -- (BOOL)reset; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m b/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m deleted file mode 100644 index 03f31b6..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m +++ /dev/null @@ -1,49 +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. - */ - -#import "PFSQLiteStatement.h" - -#import - -@implementation PFSQLiteStatement - -- (instancetype)initWithStatement:(sqlite3_stmt *)stmt { - self = [super init]; - if (!stmt || !self) return nil; - - _sqliteStatement = stmt; - - return self; -} - -- (void)dealloc { - [self close]; -} - -- (BOOL)close { - if (!_sqliteStatement) { - return YES; - } - - int resultCode = sqlite3_finalize(_sqliteStatement); - _sqliteStatement = nil; - - return (resultCode == SQLITE_OK || resultCode == SQLITE_DONE); -} - -- (BOOL)reset { - if (!_sqliteStatement) { - return YES; - } - - int resultCode = sqlite3_reset(_sqliteStatement); - return (resultCode == SQLITE_OK || resultCode == SQLITE_DONE); -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h b/FoodbLog/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h deleted file mode 100644 index da1ad89..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h +++ /dev/null @@ -1,26 +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. - */ - -#import - -//TODO: (nlutsenko) Add unit tests for this class. -@interface PFMultiProcessFileLock : NSObject - -@property (nonatomic, copy, readonly) NSString *filePath; -@property (nonatomic, copy, readonly) NSString *lockFilePath; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initForFileWithPath:(NSString *)path NS_DESIGNATED_INITIALIZER; -+ (instancetype)lockForFileWithPath:(NSString *)path; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m b/FoodbLog/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m deleted file mode 100644 index 2c02cea..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m +++ /dev/null @@ -1,105 +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. - */ - -#import "PFMultiProcessFileLock.h" - -#import "PFAssert.h" -#import "PFMacros.h" - -static const NSTimeInterval PFMultiProcessLockAttemptsDelay = 0.001; - -@interface PFMultiProcessFileLock () { - dispatch_queue_t _synchronizationQueue; - int _fileDescriptor; -} - -@property (nonatomic, copy, readwrite) NSString *filePath; -@property (nonatomic, copy, readwrite) NSString *lockFilePath; - -@end - -@implementation PFMultiProcessFileLock - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initForFileWithPath:(NSString *)path { - self = [super init]; - if (!self) return nil; - - _filePath = [path copy]; - _lockFilePath = [path stringByAppendingPathExtension:@"pflock"]; - - NSString *queueName = [NSString stringWithFormat:@"com.parse.multiprocess.%@", - [[path lastPathComponent] stringByDeletingPathExtension]]; - _synchronizationQueue = dispatch_queue_create([queueName UTF8String], DISPATCH_QUEUE_SERIAL); - - return self; -} - -+ (instancetype)lockForFileWithPath:(NSString *)path { - return [[self alloc] initForFileWithPath:path]; -} - -- (void)dealloc { - [self unlock]; -} - -///-------------------------------------- -#pragma mark - NSLocking -///-------------------------------------- - -- (void)lock { - dispatch_sync(_synchronizationQueue, ^{ - // Greater than zero means that the lock was already succesfully acquired. - if (_fileDescriptor > 0) { - return; - } - - BOOL locked = NO; - while (!locked) @autoreleasepool { - locked = [self _tryLock]; - if (!locked) { - [NSThread sleepForTimeInterval:PFMultiProcessLockAttemptsDelay]; - } - } - }); -} - -- (void)unlock { - dispatch_sync(_synchronizationQueue, ^{ - // Only descriptor that is greater than zero is going to be open. - if (_fileDescriptor <= 0) { - return; - } - - close(_fileDescriptor); - _fileDescriptor = 0; - }); -} - -///-------------------------------------- -#pragma mark - Private -///-------------------------------------- - -- (BOOL)_tryLock { - const char *filePath = [self.lockFilePath fileSystemRepresentation]; - - // Atomically create a lock file if it doesn't exist and acquire the lock. - _fileDescriptor = open(filePath, (O_RDWR | O_CREAT | O_EXLOCK), - ((S_IRUSR | S_IWUSR | S_IXUSR) | (S_IRGRP | S_IWGRP | S_IXGRP) | (S_IROTH | S_IWOTH | S_IXOTH))); - return (_fileDescriptor > 0); -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h b/FoodbLog/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h deleted file mode 100644 index 098b01a..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h +++ /dev/null @@ -1,36 +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. - */ - -#import - -//TODO: (nlutsenko) Add unit tests for this class. -@interface PFMultiProcessFileLockController : NSObject - -//TODO: (nlutsenko) Re-consider using singleton here. -+ (instancetype)sharedController; - -/*! - Increments the content access counter by 1. - If the count was 0 - this will try to acquire the file lock first. - - @param filePath Path to a file to lock access to. - */ -- (void)beginLockedContentAccessForFileAtPath:(NSString *)filePath; - -/*! - Decrements the content access counter by 1. - If the count reaches 0 - the lock is going to be released. - - @param filePath Path to a file to lock access to. - */ -- (void)endLockedContentAccessForFileAtPath:(NSString *)filePath; - -- (NSUInteger)lockedContentAccessCountForFileAtPath:(NSString *)filePath; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m b/FoodbLog/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m deleted file mode 100644 index be10da9..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m +++ /dev/null @@ -1,88 +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. - */ - -#import "PFMultiProcessFileLockController.h" - -#import "PFMultiProcessFileLock.h" - -@interface PFMultiProcessFileLockController () { - dispatch_queue_t _synchronizationQueue; - NSMutableDictionary *_locksDictionary; - NSMutableDictionary *_contentAccessDictionary; -} - -@end - -@implementation PFMultiProcessFileLockController - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _synchronizationQueue = dispatch_queue_create("com.parse.multiprocesslock.controller", DISPATCH_QUEUE_CONCURRENT); - - _locksDictionary = [NSMutableDictionary dictionary]; - _contentAccessDictionary = [NSMutableDictionary dictionary]; - - return self; -} - -+ (instancetype)sharedController { - static PFMultiProcessFileLockController *controller; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - controller = [[self alloc] init]; - }); - return controller; -} - -///-------------------------------------- -#pragma mark - Public -///-------------------------------------- - -- (void)beginLockedContentAccessForFileAtPath:(NSString *)filePath { - dispatch_barrier_sync(_synchronizationQueue, ^{ - PFMultiProcessFileLock *fileLock = _locksDictionary[filePath]; - if (!fileLock) { - fileLock = [PFMultiProcessFileLock lockForFileWithPath:filePath]; - _locksDictionary[filePath] = fileLock; - } - - [fileLock lock]; - - NSUInteger contentAccess = [_contentAccessDictionary[filePath] unsignedIntegerValue]; - _contentAccessDictionary[filePath] = @(contentAccess + 1); - }); -} - -- (void)endLockedContentAccessForFileAtPath:(NSString *)filePath { - dispatch_barrier_sync(_synchronizationQueue, ^{ - PFMultiProcessFileLock *fileLock = _locksDictionary[filePath]; - [fileLock unlock]; - - if (fileLock && [_contentAccessDictionary[filePath] unsignedIntegerValue] == 0) { - [_locksDictionary removeObjectForKey:filePath]; - [_contentAccessDictionary removeObjectForKey:filePath]; - } - }); -} - -- (NSUInteger)lockedContentAccessCountForFileAtPath:(NSString *)filePath { - __block NSUInteger value = 0; - dispatch_sync(_synchronizationQueue, ^{ - value = [_contentAccessDictionary[filePath] unsignedIntegerValue]; - }); - return value; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/BatchController/PFObjectBatchController.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/BatchController/PFObjectBatchController.h deleted file mode 100644 index a513f6d..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/BatchController/PFObjectBatchController.h +++ /dev/null @@ -1,55 +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. - */ - -#import - -#import - -#import "PFDataProvider.h" -#import "PFMacros.h" - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFObject; - -NS_ASSUME_NONNULL_BEGIN - -@interface PFObjectBatchController : NSObject - -@property (nonatomic, weak, readonly) id dataSource; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; -+ (instancetype)controllerWithDataSource:(id)dataSource; - -///-------------------------------------- -/// @name Fetch -///-------------------------------------- - -- (BFTask *)fetchObjectsAsync:(nullable NSArray *)objects withSessionToken:(nullable NSString *)sessionToken; - -///-------------------------------------- -/// @name Delete -///-------------------------------------- - -- (BFTask *)deleteObjectsAsync:(nullable NSArray *)objects withSessionToken:(nullable NSString *)sessionToken; - -///-------------------------------------- -/// @name Utilities -///-------------------------------------- - -+ (nullable NSArray *)uniqueObjectsArrayFromArray:(nullable NSArray *)objects omitObjectsWithData:(BOOL)omitFetched; -+ (NSArray *)uniqueObjectsArrayFromArray:(NSArray *)objects usingFilter:(BOOL (^)(PFObject *object))filter; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/BatchController/PFObjectBatchController.m b/FoodbLog/Pods/Parse/Parse/Internal/Object/BatchController/PFObjectBatchController.m deleted file mode 100644 index 5ad34ca..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/BatchController/PFObjectBatchController.m +++ /dev/null @@ -1,229 +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. - */ - -#import "PFObjectBatchController.h" - -#import - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFCommandResult.h" -#import "PFCommandRunning.h" -#import "PFErrorUtilities.h" -#import "PFMacros.h" -#import "PFObjectController.h" -#import "PFObjectPrivate.h" -#import "PFQueryPrivate.h" -#import "PFRESTQueryCommand.h" -#import "PFRESTObjectCommand.h" -#import "PFRESTObjectBatchCommand.h" - -@implementation PFObjectBatchController - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithDataSource:(id)dataSource { - self = [super init]; - if (!self) return nil; - - _dataSource = dataSource; - - return self; -} - -+ (instancetype)controllerWithDataSource:(id)dataSource { - return [[self alloc] initWithDataSource:dataSource]; -} - -///-------------------------------------- -#pragma mark - Fetch -///-------------------------------------- - -- (BFTask *)fetchObjectsAsync:(NSArray *)objects withSessionToken:(NSString *)sessionToken { - if (objects.count == 0) { - return [BFTask taskWithResult:objects]; - } - - @weakify(self); - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - PFRESTCommand *command = [self _fetchCommandForObjects:objects withSessionToken:sessionToken]; - return [self.dataSource.commandRunner runCommandAsync:command - withOptions:PFCommandRunningOptionRetryIfFailed]; - }] continueWithSuccessBlock:^id(BFTask *task) { - @strongify(self); - PFCommandResult *result = task.result; - return [self _processFetchResultAsync:result.result forObjects:objects]; - }]; -} - -- (PFRESTCommand *)_fetchCommandForObjects:(NSArray *)objects withSessionToken:(NSString *)sessionToken { - NSArray *objectIds = [objects valueForKey:@keypath(PFObject, objectId)]; - PFQuery *query = [PFQuery queryWithClassName:[objects.firstObject parseClassName]]; - [query whereKey:@keypath(PFObject, objectId) containedIn:objectIds]; - query.limit = objectIds.count; - return [PFRESTQueryCommand findCommandForQueryState:query.state withSessionToken:sessionToken]; -} - -- (BFTask *)_processFetchResultAsync:(NSDictionary *)result forObjects:(NSArray *)objects { - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - NSArray *results = result[@"results"]; // TODO: (nlutsenko) Move this logic into command itself? - NSArray *objectIds = [results valueForKey:@keypath(PFObject, objectId)]; - NSDictionary *objectResults = [NSDictionary dictionaryWithObjects:results forKeys:objectIds]; - - NSMutableArray *tasks = [NSMutableArray arrayWithCapacity:objects.count]; - for (PFObject *object in objects) { - PFObjectController *controller = [[object class] objectController]; - NSDictionary *objectResult = objectResults[object.objectId]; - - BFTask *task = nil; - if (objectResult) { - task = [controller processFetchResultAsync:objectResult forObject:object]; - } else { - NSError *error = [PFErrorUtilities errorWithCode:kPFErrorObjectNotFound - message:@"Object not found on the server."]; - task = [BFTask taskWithError:error]; - } - [tasks addObject:task]; - } - return [BFTask taskForCompletionOfAllTasks:tasks]; - }]; -} - -///-------------------------------------- -#pragma mark - Delete -///-------------------------------------- - -- (BFTask *)deleteObjectsAsync:(NSArray *)objects withSessionToken:(NSString *)sessionToken { - if (objects.count == 0) { - return [BFTask taskWithResult:objects]; - } - - @weakify(self); - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - NSArray *objectBatches = [PFInternalUtils arrayBySplittingArray:objects - withMaximumComponentsPerSegment:PFRESTObjectBatchCommandSubcommandsLimit]; - NSMutableArray *tasks = [NSMutableArray arrayWithCapacity:objectBatches.count]; - for (NSArray *batch in objectBatches) { - PFRESTCommand *command = [self _deleteCommandForObjects:batch withSessionToken:sessionToken]; - BFTask *task = [[self.dataSource.commandRunner runCommandAsync:command - withOptions:PFCommandRunningOptionRetryIfFailed] continueWithSuccessBlock:^id(BFTask *task) { - PFCommandResult *result = task.result; - return [self _processDeleteResultsAsync:[result result] forObjects:batch]; - }]; - [tasks addObject:task]; - } - return [[BFTask taskForCompletionOfAllTasks:tasks] continueWithBlock:^id(BFTask *task) { - NSError *taskError = task.error; - if (taskError && [taskError.domain isEqualToString:BFTaskErrorDomain]) { - NSArray *taskErrors = taskError.userInfo[@"errors"]; - NSMutableArray *errors = [NSMutableArray array]; - for (NSError *error in taskErrors) { - if ([error.domain isEqualToString:BFTaskErrorDomain]) { - [errors addObjectsFromArray:error.userInfo[@"errors"]]; - } else { - [errors addObject:error]; - } - } - return [BFTask taskWithError:[NSError errorWithDomain:BFTaskErrorDomain - code:kBFMultipleErrorsError - userInfo:@{ @"errors" : errors }]]; - } - return task; - }]; - }] continueWithSuccessResult:objects]; -} - -- (PFRESTCommand *)_deleteCommandForObjects:(NSArray *)objects withSessionToken:(NSString *)sessionToken { - NSMutableArray *commands = [NSMutableArray arrayWithCapacity:objects.count]; - for (PFObject *object in objects) { - PFRESTCommand *deleteCommand = [PFRESTObjectCommand deleteObjectCommandForObjectState:object._state - withSessionToken:sessionToken]; - [commands addObject:deleteCommand]; - } - return [PFRESTObjectBatchCommand batchCommandWithCommands:commands sessionToken:sessionToken]; -} - -- (BFTask *)_processDeleteResultsAsync:(NSArray *)results forObjects:(NSArray *)objects { - NSMutableArray *tasks = [NSMutableArray arrayWithCapacity:results.count]; - [results enumerateObjectsUsingBlock:^(NSDictionary *result, NSUInteger idx, BOOL *stop) { - PFObject *object = objects[idx]; - NSDictionary *errorResult = result[@"error"]; - NSDictionary *successResult = result[@"success"]; - - id controller = [[object class] objectController]; - BFTask *task = [controller processDeleteResultAsync:successResult forObject:object]; - if (errorResult) { - task = [task continueWithBlock:^id(BFTask *task) { - return [BFTask taskWithError:[PFErrorUtilities errorFromResult:errorResult]]; - }]; - } - [tasks addObject:task]; - }]; - return [BFTask taskForCompletionOfAllTasks:tasks]; -} - -///-------------------------------------- -#pragma mark - Utilities -///-------------------------------------- - -//TODO: (nlutsenko) Convert to use `uniqueObjectsArrayFromArray:usingFilter:` -+ (NSArray *)uniqueObjectsArrayFromArray:(NSArray *)objects omitObjectsWithData:(BOOL)omitFetched { - if (objects.count == 0) { - return objects; - } - - NSMutableSet *set = [NSMutableSet setWithCapacity:[objects count]]; - NSString *className = [objects.firstObject parseClassName]; - for (PFObject *object in objects) { - @synchronized (object.lock) { - if (omitFetched && [object isDataAvailable]) { - continue; - } - - //TODO: (nlutsenko) Convert to using errors instead of assertions. - PFParameterAssert([className isEqualToString:object.parseClassName], - @"All object should be in the same class."); - PFParameterAssert(object.objectId != nil, - @"All objects must exist on the server."); - - [set addObject:object]; - } - } - return [set allObjects]; -} - -+ (NSArray *)uniqueObjectsArrayFromArray:(NSArray *)objects usingFilter:(BOOL (^)(PFObject *object))filter { - if (objects.count == 0) { - return objects; - } - - NSMutableDictionary *uniqueObjects = [NSMutableDictionary dictionary]; - for (PFObject *object in objects) { - if (!filter(object)) { - continue; - } - - // Use stringWithFormat: in case objectId or parseClassName are nil. - NSString *objectIdentifier = [NSString stringWithFormat:@"%@%@", object.parseClassName, object.objectId]; - if (!uniqueObjects[objectIdentifier]) { - uniqueObjects[objectIdentifier] = object; - } - } - return [uniqueObjects allValues]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCoder.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCoder.h deleted file mode 100644 index 371acc1..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCoder.h +++ /dev/null @@ -1,38 +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. - */ - -#import - -@class PFDecoder; -@class PFEncoder; -@class PFObject; - -NS_ASSUME_NONNULL_BEGIN - -/*! - Handles encoding/decoding of `PFObject`s into a /2 JSON format. - /2 format is only used for persisting `currentUser`, `currentInstallation` to disk when LDS is not enabled. - */ -@interface PFObjectFileCoder : NSObject - -///-------------------------------------- -/// @name Encode -///-------------------------------------- - -+ (NSData *)dataFromObject:(PFObject *)object usingEncoder:(PFEncoder *)encoder; - -///-------------------------------------- -/// @name Decode -///-------------------------------------- - -+ (PFObject *)objectFromData:(NSData *)data usingDecoder:(PFDecoder *)decoder; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCoder.m b/FoodbLog/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCoder.m deleted file mode 100644 index 75bc197..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCoder.m +++ /dev/null @@ -1,44 +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. - */ - -#import "PFObjectFileCoder.h" - -#import "PFJSONSerialization.h" -#import "PFObjectFileCodingLogic.h" -#import "PFObjectPrivate.h" -#import "PFObjectState.h" - -@implementation PFObjectFileCoder - -///-------------------------------------- -#pragma mark - Encode -///-------------------------------------- - -+ (NSData *)dataFromObject:(PFObject *)object usingEncoder:(PFEncoder *)encoder { - NSMutableDictionary *result = [NSMutableDictionary dictionary]; - result[@"classname"] = object._state.parseClassName; - result[@"data"] = [object._state dictionaryRepresentationWithObjectEncoder:encoder]; - return [PFJSONSerialization dataFromJSONObject:result]; -} - -///-------------------------------------- -#pragma mark - Decode -///-------------------------------------- - -+ (PFObject *)objectFromData:(NSData *)data usingDecoder:(PFDecoder *)decoder { - NSDictionary *dictionary = [PFJSONSerialization JSONObjectFromData:data]; - NSString *className = dictionary[@"classname"] ?: dictionary[@"className"]; - NSString *objectId = dictionary[@"data"][@"objectId"] ?: dictionary[@"id"]; - - PFObject *object = [PFObject objectWithoutDataWithClassName:className objectId:objectId]; - [[[object class] objectFileCodingLogic] updateObject:object fromDictionary:dictionary usingDecoder:decoder]; - return object; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h deleted file mode 100644 index c9ce66c..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h +++ /dev/null @@ -1,33 +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. - */ - -#import - -@class PFDecoder; -@class PFObject; - -NS_ASSUME_NONNULL_BEGIN - -@interface PFObjectFileCodingLogic : NSObject - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -+ (instancetype)codingLogic; - -///-------------------------------------- -/// @name Logic -///-------------------------------------- - -- (void)updateObject:(PFObject *)object fromDictionary:(NSDictionary *)dictionary usingDecoder:(PFDecoder *)decoder; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m b/FoodbLog/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m deleted file mode 100644 index f5955f1..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m +++ /dev/null @@ -1,58 +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. - */ - -#import "PFObjectFileCodingLogic.h" - -#import "PFMutableObjectState.h" -#import "PFObjectPrivate.h" - -@implementation PFObjectFileCodingLogic - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -+ (instancetype)codingLogic { - return [[self alloc] init]; -} - -///-------------------------------------- -#pragma mark - Logic -///-------------------------------------- - -- (void)updateObject:(PFObject *)object fromDictionary:(NSDictionary *)dictionary usingDecoder:(PFDecoder *)decoder { - PFMutableObjectState *state = [object._state mutableCopy]; - NSString *newObjectId = dictionary[@"id"]; - if (newObjectId) { - state.objectId = newObjectId; - } - NSString *createdAtString = dictionary[@"created_at"]; - if (createdAtString) { - [state setCreatedAtFromString:createdAtString]; - } - NSString *updatedAtString = dictionary[@"updated_at"]; - if (updatedAtString) { - [state setUpdatedAtFromString:updatedAtString]; - } - object._state = state; - - NSDictionary *newPointers = dictionary[@"pointers"]; - NSMutableDictionary *pointersDictionary = [NSMutableDictionary dictionaryWithCapacity:newPointers.count]; - [newPointers enumerateKeysAndObjectsUsingBlock:^(id key, NSArray *pointerArray, BOOL *stop) { - PFObject *pointer = [PFObject objectWithoutDataWithClassName:[pointerArray firstObject] - objectId:[pointerArray lastObject]]; - pointersDictionary[key] = pointer; - }]; - - NSMutableDictionary *dataDictionary = [NSMutableDictionary dictionaryWithDictionary:dictionary[@"data"]]; - [dataDictionary addEntriesFromDictionary:pointersDictionary]; - [object _mergeAfterFetchWithResult:dataDictionary decoder:decoder completeData:YES]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/Constants/PFObjectConstants.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/Constants/PFObjectConstants.h deleted file mode 100644 index 524078c..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/Constants/PFObjectConstants.h +++ /dev/null @@ -1,23 +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. - */ - -#import - -// REST Key magic strings -extern NSString *const PFObjectCompleteRESTKey; -extern NSString *const PFObjectOperationsRESTKey; -extern NSString *const PFObjectTypeRESTKey; -extern NSString *const PFObjectObjectIdRESTKey; -extern NSString *const PFObjectUpdatedAtRESTKey; -extern NSString *const PFObjectCreatedAtRESTKey; -extern NSString *const PFObjectIsDeletingEventuallyRESTKey; -extern NSString *const PFObjectClassNameRESTKey; -extern NSString *const PFObjectACLRESTKey; - -extern NSString *const PFObjectDefaultPin; diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/Constants/PFObjectConstants.m b/FoodbLog/Pods/Parse/Parse/Internal/Object/Constants/PFObjectConstants.m deleted file mode 100644 index 76047ec..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/Constants/PFObjectConstants.m +++ /dev/null @@ -1,22 +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. - */ - -#import "PFObjectConstants.h" - -NSString *const PFObjectCompleteRESTKey = @"__complete"; -NSString *const PFObjectOperationsRESTKey = @"__operations"; -NSString *const PFObjectTypeRESTKey = @"__type"; -NSString *const PFObjectObjectIdRESTKey = @"objectId"; -NSString *const PFObjectUpdatedAtRESTKey = @"updatedAt"; -NSString *const PFObjectCreatedAtRESTKey = @"createdAt"; -NSString *const PFObjectIsDeletingEventuallyRESTKey = @"isDeletingEventually"; -NSString *const PFObjectClassNameRESTKey = @"className"; -NSString *const PFObjectACLRESTKey = @"ACL"; - -NSString *const PFObjectDefaultPin = @"_default"; diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h deleted file mode 100644 index 27dd6dd..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h +++ /dev/null @@ -1,27 +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. - */ - -#import "PFObjectController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFOfflineObjectController : PFObjectController - -@property (nonatomic, weak, readonly) id dataSource; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; -+ (instancetype)controllerWithDataSource:(id)dataSource; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m b/FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m deleted file mode 100644 index e9cefc3..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m +++ /dev/null @@ -1,86 +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. - */ - -#import "PFOfflineObjectController.h" - -#import "BFTask+Private.h" -#import "PFMacros.h" -#import "PFObjectController_Private.h" -#import "PFObjectPrivate.h" -#import "PFObjectState.h" -#import "PFOfflineStore.h" - -@interface PFOfflineObjectController () - -@property (nonatomic, strong, readonly) PFOfflineStore *offlineStore; - -@end - -@implementation PFOfflineObjectController - -@dynamic dataSource; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithDataSource:(id)dataSource { - return [super initWithDataSource:dataSource]; -} - -+ (instancetype)controllerWithDataSource:(id)dataSource { - return [super controllerWithDataSource:dataSource]; -} - -///-------------------------------------- -#pragma mark - PFObjectController -///-------------------------------------- - -- (BFTask *)processFetchResultAsync:(NSDictionary *)result forObject:(PFObject *)object { - return [[[[self.offlineStore fetchObjectLocallyAsync:object] continueWithBlock:^id(BFTask *task) { - // Catch CacheMiss error and ignore it. - if ([task.error.domain isEqualToString:PFParseErrorDomain] && - task.error.code == kPFErrorCacheMiss) { - return nil; - } - return task; - }] continueWithBlock:^id(BFTask *task) { - return [super processFetchResultAsync:result forObject:object]; - }] continueWithBlock:^id(BFTask *task) { - return [[self.offlineStore updateDataForObjectAsync:object] continueWithBlock:^id(BFTask *task) { - // Catch CACHE_MISS and ignore it. - if ([task.error.domain isEqualToString:PFParseErrorDomain] && - task.error.code == kPFErrorCacheMiss) { - return [BFTask taskWithResult:nil]; - } - return task; - }]; - }]; -} - -- (BFTask *)processDeleteResultAsync:(nullable NSDictionary *)result forObject:(PFObject *)object { - @weakify(self); - return [[super processDeleteResultAsync:result forObject:object] continueWithBlock:^id(BFTask *task) { - @strongify(self); - if (object._state.deleted) { - return [self.offlineStore deleteDataForObjectAsync:object]; - } - return [self.offlineStore updateDataForObjectAsync:object]; - }]; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (PFOfflineStore *)offlineStore { - return self.dataSource.offlineStore; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController.h deleted file mode 100644 index 44a8ac6..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController.h +++ /dev/null @@ -1,35 +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. - */ - -#import - -#import "PFDataProvider.h" -#import "PFObjectControlling.h" - - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFObject; - -NS_ASSUME_NONNULL_BEGIN - -@interface PFObjectController : NSObject - -@property (nonatomic, weak, readonly) id dataSource; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; -+ (instancetype)controllerWithDataSource:(id)dataSource; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController.m b/FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController.m deleted file mode 100644 index ec5d45b..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController.m +++ /dev/null @@ -1,126 +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. - */ - -#import "PFObjectController.h" -#import "PFObjectController_Private.h" - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFCommandResult.h" -#import "PFCommandRunning.h" -#import "PFErrorUtilities.h" -#import "PFMacros.h" -#import "PFObjectPrivate.h" -#import "PFObjectState.h" -#import "PFRESTObjectCommand.h" -#import "PFTaskQueue.h" - -@implementation PFObjectController - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithDataSource:(id)dataSource { - self = [super init]; - if (!self) return nil; - - _dataSource = dataSource; - - return self; -} - -+ (instancetype)controllerWithDataSource:(id)dataSource { - return [[self alloc] initWithDataSource:dataSource]; -} - -///-------------------------------------- -#pragma mark - PFObjectControlling -///-------------------------------------- - -#pragma mark Fetch - -- (BFTask *)fetchObjectAsync:(PFObject *)object withSessionToken:(NSString *)sessionToken { - @weakify(self); - return [[[[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - return [object _validateFetchAsync]; - }] continueWithSuccessBlock:^id(BFTask *task) { - @strongify(self); - PFRESTCommand *command = [PFRESTObjectCommand fetchObjectCommandForObjectState:[object._state copy] - withSessionToken:sessionToken]; - return [self _runFetchCommand:command forObject:object]; - }] continueWithSuccessBlock:^id(BFTask *task) { - @strongify(self); - PFCommandResult *result = task.result; - return [self processFetchResultAsync:result.result forObject:object]; - }] continueWithSuccessResult:object]; -} - -- (BFTask *)_runFetchCommand:(PFRESTCommand *)command forObject:(PFObject *)object { - return [self.dataSource.commandRunner runCommandAsync:command withOptions:PFCommandRunningOptionRetryIfFailed]; -} - -- (BFTask *)processFetchResultAsync:(NSDictionary *)result forObject:(PFObject *)object { - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - NSDictionary *fetchedObjects = [object _collectFetchedObjects]; - @synchronized (object.lock) { - PFKnownParseObjectDecoder *decoder = [PFKnownParseObjectDecoder decoderWithFetchedObjects:fetchedObjects]; - [object _mergeAfterFetchWithResult:result decoder:decoder completeData:YES]; - } - return nil; - }]; -} - -#pragma mark Delete - -- (BFTask *)deleteObjectAsync:(PFObject *)object withSessionToken:(nullable NSString *)sessionToken { - @weakify(self); - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - return [object _validateDeleteAsync]; - }] continueWithSuccessBlock:^id(BFTask *task) { - @strongify(self); - PFObjectState *state = [object._state copy]; - if (!state.objectId) { - return nil; - } - - PFRESTCommand *command = [PFRESTObjectCommand deleteObjectCommandForObjectState:state - withSessionToken:sessionToken]; - return [[self _runDeleteCommand:command forObject:object] continueWithBlock:^id(BFTask *fetchTask) { - @strongify(self); - PFCommandResult *result = fetchTask.result; - return [[self processDeleteResultAsync:result.result forObject:object] continueWithBlock:^id(BFTask *task) { - // Propagate the result of network task if it's faulted, cancelled. - if (fetchTask.faulted || fetchTask.cancelled) { - return fetchTask; - } - // Propagate the result of processDeleteResult otherwise. - return task; - }]; - }]; - }]; -} - -- (BFTask *)_runDeleteCommand:(PFRESTCommand *)command forObject:(PFObject *)object { - return [self.dataSource.commandRunner runCommandAsync:command withOptions:PFCommandRunningOptionRetryIfFailed]; -} - -- (BFTask *)processDeleteResultAsync:(NSDictionary *)result forObject:(PFObject *)object { - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - BOOL deleted = (result != nil); - [object _setDeleted:deleted]; - return nil; - }]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController_Private.h deleted file mode 100644 index 7ca5abc..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/PFObjectController_Private.h +++ /dev/null @@ -1,22 +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. - */ - -#import "PFObjectController.h" - -@class PFRESTCommand; - -@interface PFObjectController () - -///-------------------------------------- -/// @name Fetch -///-------------------------------------- - -- (BFTask *)_runFetchCommand:(PFRESTCommand *)command forObject:(PFObject *)object; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/PFObjectControlling.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/PFObjectControlling.h deleted file mode 100644 index e57a645..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/Controller/PFObjectControlling.h +++ /dev/null @@ -1,58 +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. - */ - -#import - -#import - -#import "PFMacros.h" - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFObject; - -NS_ASSUME_NONNULL_BEGIN - -@protocol PFObjectControlling - -///-------------------------------------- -/// @name Fetch -///-------------------------------------- - -/*! - Fetches an object asynchronously. - - @param object Object to fetch. - @param sessionToken Session token to use. - - @returns `BFTask` with result set to `PFObject`. - */ -- (BFTask *)fetchObjectAsync:(PFObject *)object withSessionToken:(nullable NSString *)sessionToken; - -- (BFTask *)processFetchResultAsync:(NSDictionary *)result forObject:(PFObject *)object; - -///-------------------------------------- -/// @name Delete -///-------------------------------------- - -/*! - Deletes an object asynchronously. - - @param object Object to fetch. - @param sessionToken Session token to use. - - @returns `BFTask` with result set to `nil`. - */ -- (BFTask *)deleteObjectAsync:(PFObject *)object withSessionToken:(nullable NSString *)sessionToken; - -//TODO: (nlutsenko) This needs removal, figure out how to kill it. -- (BFTask *)processDeleteResultAsync:(nullable NSDictionary *)result forObject:(PFObject *)object; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h deleted file mode 100644 index 9cbd1b0..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h +++ /dev/null @@ -1,37 +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. - */ - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFObject; - -typedef NS_ENUM(NSUInteger, PFCurrentObjectStorageType) { - PFCurrentObjectStorageTypeFile = 1, - PFCurrentObjectStorageTypeOfflineStore, -}; - -@protocol PFCurrentObjectControlling - -@property (nonatomic, assign, readonly) PFCurrentObjectStorageType storageType; - -///-------------------------------------- -/// @name Current -///-------------------------------------- - -- (BFTask *)getCurrentObjectAsync; -- (BFTask *)saveCurrentObjectAsync:(PFObject *)object; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h deleted file mode 100644 index b507e8a..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h +++ /dev/null @@ -1,44 +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. - */ - -#import - -@class PFFieldOperation; -@class PFOperationSet; - -@interface PFObjectEstimatedData : NSObject - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)initWithServerData:(NSDictionary *)serverData - operationSetQueue:(NSArray *)operationSetQueue; -+ (instancetype)estimatedDataFromServerData:(NSDictionary *)serverData - operationSetQueue:(NSArray *)operationSetQueue; - -///-------------------------------------- -/// @name Read -///-------------------------------------- - -- (id)objectForKey:(NSString *)key; -- (id)objectForKeyedSubscript:(NSString *)keyedSubscript; - -- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(NSString *key, id obj, BOOL *stop))block; - -@property (nonatomic, copy, readonly) NSArray *allKeys; -@property (nonatomic, copy, readonly) NSDictionary *dictionaryRepresentation; - -///-------------------------------------- -/// @name Write -///-------------------------------------- - -- (id)applyFieldOperation:(PFFieldOperation *)operation forKey:(NSString *)key; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m b/FoodbLog/Pods/Parse/Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m deleted file mode 100644 index 7fb5df5..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m +++ /dev/null @@ -1,86 +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. - */ - -#import "PFObjectEstimatedData.h" - -#import "PFObjectUtilities.h" - -@interface PFObjectEstimatedData () { - NSMutableDictionary *_dataDictionary; -} - -@end - -@implementation PFObjectEstimatedData - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _dataDictionary = [NSMutableDictionary dictionary]; - - return self; -} - -- (instancetype)initWithServerData:(NSDictionary *)serverData - operationSetQueue:(NSArray *)operationSetQueue { - self = [super init]; - if (!self) return nil; - - // Don't use mutableCopy to make sure we never initialize _dataDictionary to `nil`. - _dataDictionary = [NSMutableDictionary dictionaryWithDictionary:serverData]; - for (PFOperationSet *operationSet in operationSetQueue) { - [PFObjectUtilities applyOperationSet:operationSet toDictionary:_dataDictionary]; - } - - return self; -} - -+ (instancetype)estimatedDataFromServerData:(NSDictionary *)serverData - operationSetQueue:(NSArray *)operationSetQueue { - return [[self alloc] initWithServerData:serverData operationSetQueue:operationSetQueue]; -} - -///-------------------------------------- -#pragma mark - Read -///-------------------------------------- - -- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(NSString *key, id obj, BOOL *stop))block { - [_dataDictionary enumerateKeysAndObjectsUsingBlock:block]; -} - -- (id)objectForKey:(NSString *)key { - return [_dataDictionary objectForKey:key]; -} - -- (id)objectForKeyedSubscript:(NSString *)keyedSubscript { - return [_dataDictionary objectForKeyedSubscript:keyedSubscript]; -} - -- (NSArray *)allKeys { - return [_dataDictionary allKeys]; -} - -- (NSDictionary *)dictionaryRepresentation { - return [_dataDictionary copy]; -} - -///-------------------------------------- -#pragma mark - Write -///-------------------------------------- - -- (id)applyFieldOperation:(PFFieldOperation *)operation forKey:(NSString *)key { - return [PFObjectUtilities newValueByApplyingFieldOperation:operation toDictionary:_dataDictionary forKey:key]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h deleted file mode 100644 index 8537ddf..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h +++ /dev/null @@ -1,55 +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. - */ - -#import - -#import - -#import "PFDataProvider.h" -#import "PFMacros.h" - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFObject; - -@interface PFObjectFilePersistenceController : NSObject - -@property (nonatomic, weak, readonly) id dataSource; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; -+ (instancetype)controllerWithDataSource:(id)dataSource; - -///-------------------------------------- -/// @name Objects -///-------------------------------------- - -/*! - Loads and creates a PFObject from file. - - @param key File name to use. - - @returns `BFTask` with `PFObject` or `nil` result. - */ -- (BFTask *)loadPersistentObjectAsyncForKey:(NSString *)key; - -/*! - Saves a given object to a file with name. - - @param object Object to save. - @param key File name to use. - - @returns `BFTask` with `nil` result. - */ -- (BFTask *)persistObjectAsync:(PFObject *)object forKey:(NSString *)key; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m b/FoodbLog/Pods/Parse/Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m deleted file mode 100644 index 38fdcd1..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m +++ /dev/null @@ -1,98 +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. - */ - -#import "PFObjectFilePersistenceController.h" - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFFileManager.h" -#import "PFJSONSerialization.h" -#import "PFMacros.h" -#import "PFMultiProcessFileLockController.h" -#import "PFObjectFileCoder.h" -#import "PFObjectPrivate.h" - -@implementation PFObjectFilePersistenceController - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithDataSource:(id)dataSource { - self = [super init]; - if (!self) return nil; - - _dataSource = dataSource; - - return self; -} - -+ (instancetype)controllerWithDataSource:(id)dataSource { - return [[self alloc] initWithDataSource:dataSource]; -} - -///-------------------------------------- -#pragma mark - Objects -///-------------------------------------- - -- (BFTask *)loadPersistentObjectAsyncForKey:(NSString *)key { - @weakify(self); - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - - NSString *path = [self.dataSource.fileManager parseDataItemPathForPathComponent:key]; - [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:path]; - if (![[NSFileManager defaultManager] fileExistsAtPath:path]) { - [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:path]; - return nil; - } - - NSError *error = nil; - NSData *jsonData = [NSData dataWithContentsOfFile:path - options:NSDataReadingMappedIfSafe - error:&error]; - [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:path]; - - if (error) { - return [BFTask taskWithError:error]; - } - return jsonData; - }] continueWithSuccessBlock:^id(BFTask *task) { - NSData *jsonData = task.result; - if (jsonData) { - PFObject *object = [PFObjectFileCoder objectFromData:jsonData usingDecoder:[PFDecoder objectDecoder]]; - return object; - } - - return nil; - }]; -} - -- (BFTask *)persistObjectAsync:(PFObject *)object forKey:(NSString *)key { - @weakify(self); - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - - NSData *data = [PFObjectFileCoder dataFromObject:object usingEncoder:[PFPointerObjectEncoder objectEncoder]]; - - NSString *filePath = [self.dataSource.fileManager parseDataItemPathForPathComponent:key]; - [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:filePath]; - - return [[PFFileManager writeDataAsync:data toFile:filePath] continueWithBlock:^id(BFTask *task) { - [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:filePath]; - return nil; - }]; - }]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h deleted file mode 100644 index 541056b..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h +++ /dev/null @@ -1,49 +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. - */ - -#import - -#import "PFDataProvider.h" - -/*! - A disk-based map of local ids to global Parse objectIds. Every entry in this - map has a retain count, and the entry will be removed from the map if the - retain count reaches 0. Every time a localId is written out to disk, its retain - count should be incremented. When the reference on disk is deleted, it should - be decremented. Some entries in this map may not have an object id yet. - This class is thread-safe. - */ -@interface PFObjectLocalIdStore : NSObject - -@property (nonatomic, weak, readonly) id dataSource; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; -+ (instancetype)storeWithDataSource:(id)dataSource; - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (NSString *)createLocalId; -- (void)retainLocalIdOnDisk:(NSString *)localId; -- (void)releaseLocalIdOnDisk:(NSString *)localId; - -- (void)setObjectId:(NSString *)objectId forLocalId:(NSString *)localId; -- (NSString *)objectIdForLocalId:(NSString *)localId; - -// For testing only. -- (BOOL)clear; -- (void)clearInMemoryCache; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m b/FoodbLog/Pods/Parse/Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m deleted file mode 100644 index 7c88c3e..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m +++ /dev/null @@ -1,291 +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. - */ - -#import "PFObjectLocalIdStore.h" - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFFileManager.h" -#import "PFInternalUtils.h" -#import "PFJSONSerialization.h" -#import "PFLogging.h" -#import "Parse_Private.h" - -static NSString *const _PFObjectLocalIdStoreDiskFolderPath = @"LocalId"; - -///-------------------------------------- -#pragma mark - PFObjectLocalIdStoreMapEntry -///-------------------------------------- - -/*! - * Internal class representing all the information we know about a local id. - */ -@interface PFObjectLocalIdStoreMapEntry : NSObject - -@property (nonatomic, strong) NSString *objectId; -@property (atomic, assign) int referenceCount; - -- (instancetype)init NS_DESIGNATED_INITIALIZER; -- (instancetype)initWithFile:(NSString *)filePath; - -@end - -@implementation PFObjectLocalIdStoreMapEntry - -- (instancetype)init { - return [super init]; -} - -- (instancetype)initWithFile:(NSString *)filePath { - self = [self init]; - if (!self) return nil; - - NSData *jsonData = [NSData dataWithContentsOfFile:filePath]; - NSDictionary *dictionary = [PFJSONSerialization JSONObjectFromData:jsonData]; - - _objectId = [dictionary[@"objectId"] copy]; - _referenceCount = [dictionary[@"referenceCount"] intValue]; - - return self; -} - -- (void)writeToFile:(NSString *)filePath { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - dictionary[@"referenceCount"] = @(self.referenceCount); - if (self.objectId) { - dictionary[@"objectId"] = self.objectId; - } - - NSData *jsonData = [PFJSONSerialization dataFromJSONObject:dictionary]; - [[PFFileManager writeDataAsync:jsonData toFile:filePath] waitForResult:nil withMainThreadWarning:NO]; -} - -@end - -///-------------------------------------- -#pragma mark - PFObjectLocalIdStore -///-------------------------------------- - -@interface PFObjectLocalIdStore () { - NSString *_diskPath; - NSObject *_lock; - NSMutableDictionary *_inMemoryCache; -} - -@end - -@implementation PFObjectLocalIdStore - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -/*! - * Creates a new LocalIdManager with default options. - */ -- (instancetype)initWithDataSource:(id)dataSource { - self = [super init]; - if (!self) return nil; - - _dataSource = dataSource; - - _lock = [[NSObject alloc] init]; - _inMemoryCache = [NSMutableDictionary dictionary]; - - // Construct the path to the disk storage directory. - _diskPath = [[Parse _currentManager].fileManager parseDataItemPathForPathComponent:_PFObjectLocalIdStoreDiskFolderPath]; - - NSError *error = nil; - [[PFFileManager createDirectoryIfNeededAsyncAtPath:_diskPath] waitForResult:&error withMainThreadWarning:NO]; - if (error) { - PFLogError(PFLoggingTagCommon, @"Unable to create directories for local id storage with error: %@", error); - } - - return self; -} - -+ (instancetype)storeWithDataSource:(id)dataSource { - return [[self alloc] initWithDataSource:dataSource]; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -/*! - * Returns Yes if localId has the right basic format for a local id. - */ -+ (BOOL)isLocalId:(NSString *)localId { - if ([localId length] != 22U) { - return NO; - } - if (![localId hasPrefix:@"local_"]) { - return NO; - } - for (int i = 6; i < [localId length]; ++i) { - if (!ishexnumber([localId characterAtIndex:i])) { - return NO; - } - } - return YES; -} - -/*! - * Grabs one entry in the local id map off the disk. - */ -- (PFObjectLocalIdStoreMapEntry *)getMapEntry:(NSString *)localId { - PFConsistencyAssert([[self class] isLocalId:localId], @"Tried to get invalid local id: \"%@\".", localId); - - PFObjectLocalIdStoreMapEntry *entry = nil; - - NSString *file = [_diskPath stringByAppendingPathComponent:localId]; - if (![[NSFileManager defaultManager] isReadableFileAtPath:file]) { - entry = [[PFObjectLocalIdStoreMapEntry alloc] init]; - } else { - entry = [[PFObjectLocalIdStoreMapEntry alloc] initWithFile:file]; - } - - // If there's an objectId in memory, make sure it matches the one in the - // file. This is in case the id was retained on disk *after* it was resolved. - if (!entry.objectId) { - NSString *objectId = [_inMemoryCache objectForKey:localId]; - if (objectId) { - entry.objectId = objectId; - if (entry.referenceCount > 0) { - [self putMapEntry:entry forLocalId:localId]; - } - } - } - - return entry; -} - -/*! - * Writes one entry to the local id map on disk. - */ -- (void)putMapEntry:(PFObjectLocalIdStoreMapEntry *)entry forLocalId:(NSString *)localId { - PFConsistencyAssert([[self class] isLocalId:localId], @"Tried to get invalid local id: \"%@\".", localId); - - NSString *file = [_diskPath stringByAppendingPathComponent:localId]; - [entry writeToFile:file]; -} - -/*! - * Removes an entry from the local id map on disk. - */ -- (void)removeMapEntry:(NSString *)localId { - PFConsistencyAssert([[self class] isLocalId:localId], @"Tried to get invalid local id: \"%@\".", localId); - - NSString *file = [_diskPath stringByAppendingPathComponent:localId]; - [[NSFileManager defaultManager] removeItemAtPath:file error:nil]; -} - -/*! - * Creates a new local id in the map. - */ -- (NSString *)createLocalId { - @synchronized (_lock) { - // Generate a new random string of upper and lower case letters. - - // Start by generating a number. It will be the localId as a base-52 number. - // It has to be a uint64_t because log256(52^10) ~= 7.13 bytes. - uint64_t localIdNumber = (((uint64_t)arc4random()) << 32) | ((uint64_t)arc4random()); - NSString *localId = [NSString stringWithFormat:@"local_%016llx", localIdNumber]; - - PFConsistencyAssert([[self class] isLocalId:localId], @"Generated an invalid local id: \"%@\".", localId); - - return localId; - } -} - -/*! - * Increments the retain count of a local id on disk. - */ -- (void)retainLocalIdOnDisk:(NSString *)localId { - @synchronized (_lock) { - PFObjectLocalIdStoreMapEntry *entry = [self getMapEntry:localId]; - entry.referenceCount++; - [self putMapEntry:entry forLocalId:localId]; - } -} - -/*! - * Decrements the retain count of a local id on disk. - * If the retain count hits zero, the id is forgotten forever. - */ -- (void)releaseLocalIdOnDisk:(NSString *)localId { - @synchronized (_lock) { - PFObjectLocalIdStoreMapEntry *entry = [self getMapEntry:localId]; - if (--entry.referenceCount > 0) { - [self putMapEntry:entry forLocalId:localId]; - } else { - [self removeMapEntry:localId]; - } - } -} - -/*! - * Sets the objectId associated with a given local id. - */ -- (void)setObjectId:(NSString *)objectId forLocalId:(NSString *)localId { - @synchronized (_lock) { - PFObjectLocalIdStoreMapEntry *entry = [self getMapEntry:localId]; - if (entry.referenceCount > 0) { - entry.objectId = objectId; - [self putMapEntry:entry forLocalId:localId]; - } - [_inMemoryCache setObject:objectId forKey:localId]; - } -} - -/*! - * Returns the objectId associated with a given local id. - * Returns nil if no objectId is yet known for the lcoal id. - */ -- (NSString *)objectIdForLocalId:(NSString *)localId { - @synchronized (_lock) { - NSString *objectId = [_inMemoryCache objectForKey:localId]; - if (objectId) { - return objectId; - } - - PFObjectLocalIdStoreMapEntry *entry = [self getMapEntry:localId]; - return entry.objectId; - } -} - -/*! - * Removes all local ids from the disk and memory caches. - */ -- (BOOL)clear { - @synchronized (_lock) { - [self clearInMemoryCache]; - - BOOL empty = ([[[[NSFileManager defaultManager] enumeratorAtPath:_diskPath] allObjects] count] == 0); - - [[NSFileManager defaultManager] removeItemAtPath:_diskPath error:nil]; - - [[NSFileManager defaultManager] createDirectoryAtPath:_diskPath - withIntermediateDirectories:YES - attributes:nil - error:nil]; - return !empty; - } -} - -/*! - * Removes all local ids from the memory cache. - */ -- (void)clearInMemoryCache { - @synchronized (_lock) { - [_inMemoryCache removeAllObjects]; - } -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/OperationSet/PFOperationSet.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/OperationSet/PFOperationSet.h deleted file mode 100644 index 5456ffa..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/OperationSet/PFOperationSet.h +++ /dev/null @@ -1,70 +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. - */ - -#import - -@class PFDecoder; -@class PFEncoder; -@class PFFieldOperation; - -/*! - A set of field-level operations that can be performed on an object, corresponding to one - command. For example, all the data for a single call to save() will be packaged here. It is - assumed that the PFObject that owns the operations handles thread-safety. - */ -@interface PFOperationSet : NSObject - -/*! - Returns true if this set corresponds to a call to saveEventually. - */ -@property (nonatomic, assign, getter=isSaveEventually) BOOL saveEventually; - -/*! - A unique id for this operation set. - */ -@property (nonatomic, copy, readonly) NSString *uuid; - -@property (nonatomic, copy) NSDate *updatedAt; - -/*! - Merges the changes from the given operation set into this one. Most typically, this is what - happens when a save fails and changes need to be rolled into the next save. - */ -- (void)mergeOperationSet:(PFOperationSet *)other; - -/*! - Converts this operation set into its REST format for serializing to the pinning store - */ -- (NSDictionary *)RESTDictionaryUsingObjectEncoder:(PFEncoder *)objectEncoder - operationSetUUIDs:(NSArray **)operationSetUUIDs; - -/*! - The inverse of RESTDictionaryUsingObjectEncoder. - Creates a new OperationSet from the given NSDictionary - */ -+ (PFOperationSet *)operationSetFromRESTDictionary:(NSDictionary *)data - usingDecoder:(PFDecoder *)decoder; - -///-------------------------------------- -/// @name Accessors -///-------------------------------------- - -- (id)objectForKey:(id)aKey; -- (id)objectForKeyedSubscript:(id)aKey; -- (NSUInteger)count; -- (NSEnumerator *)keyEnumerator; - -- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(NSString *key, PFFieldOperation *operation, BOOL *stop))block; - -- (void)setObject:(id)anObject forKey:(id)aKey; -- (void)setObject:(id)anObject forKeyedSubscript:(id)aKey; -- (void)removeObjectForKey:(id)aKey; -- (void)removeAllObjects; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/OperationSet/PFOperationSet.m b/FoodbLog/Pods/Parse/Parse/Internal/Object/OperationSet/PFOperationSet.m deleted file mode 100644 index f1df813..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/OperationSet/PFOperationSet.m +++ /dev/null @@ -1,196 +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. - */ - -#import "PFOperationSet.h" - -#import "PFACL.h" -#import "PFACLPrivate.h" -#import "PFDecoder.h" -#import "PFEncoder.h" -#import "PFFieldOperation.h" -#import "PFInternalUtils.h" - -NSString *const PFOperationSetKeyUUID = @"__uuid"; -NSString *const PFOperationSetKeyIsSaveEventually = @"__isSaveEventually"; -NSString *const PFOperationSetKeyUpdatedAt = @"__updatedAt"; -NSString *const PFOperationSetKeyACL = @"ACL"; - -@interface PFOperationSet() - -@property (nonatomic, strong) NSMutableDictionary *dictionary; - -@end - -@implementation PFOperationSet - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - return [self initWithUUID:[[NSUUID UUID] UUIDString]]; -} - -- (instancetype)initWithUUID:(NSString *)uuid { - self = [super init]; - if (!self) return nil; - - _dictionary = [NSMutableDictionary dictionary]; - _uuid = [uuid copy]; - - _updatedAt = [NSDate date]; - - return self; -} - -///-------------------------------------- -#pragma mark - Merge -///-------------------------------------- - -- (void)mergeOperationSet:(PFOperationSet *)other { - [other.dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - PFFieldOperation *localOperation = self.dictionary[key]; - PFFieldOperation *remoteOperation = other.dictionary[key]; - if (localOperation != nil) { - localOperation = [localOperation mergeWithPrevious:remoteOperation]; - self.dictionary[key] = localOperation; - } else { - self.dictionary[key] = remoteOperation; - } - }]; - self.updatedAt = [NSDate date]; -} - -///-------------------------------------- -#pragma mark - Encoding -///-------------------------------------- - -- (NSDictionary *)RESTDictionaryUsingObjectEncoder:(PFEncoder *)objectEncoder - operationSetUUIDs:(NSArray **)operationSetUUIDs { - NSMutableDictionary *operationSetResult = [[NSMutableDictionary alloc] init]; - [self.dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - operationSetResult[key] = [obj encodeWithObjectEncoder:objectEncoder]; - }]; - - operationSetResult[PFOperationSetKeyUUID] = self.uuid; - operationSetResult[PFOperationSetKeyUpdatedAt] = [objectEncoder encodeObject:self.updatedAt]; - - if (self.saveEventually) { - operationSetResult[PFOperationSetKeyIsSaveEventually] = @YES; - } - *operationSetUUIDs = @[ self.uuid ]; - return operationSetResult; -} - -+ (PFOperationSet *)operationSetFromRESTDictionary:(NSDictionary *)data - usingDecoder:(PFDecoder *)decoder { - NSMutableDictionary *mutableData = [data mutableCopy]; - NSString *inputUUID = mutableData[PFOperationSetKeyUUID]; - [mutableData removeObjectForKey:PFOperationSetKeyUUID]; - PFOperationSet *operationSet = nil; - if (inputUUID == nil) { - operationSet = [[PFOperationSet alloc] init]; - } else { - operationSet = [[PFOperationSet alloc] initWithUUID:inputUUID]; - } - - NSNumber *saveEventuallyFlag = mutableData[PFOperationSetKeyIsSaveEventually]; - if (saveEventuallyFlag) { - operationSet.saveEventually = [saveEventuallyFlag boolValue]; - [mutableData removeObjectForKey:PFOperationSetKeyIsSaveEventually]; - } - - NSDate *updatedAt = mutableData[PFOperationSetKeyUpdatedAt]; - [mutableData removeObjectForKey:PFOperationSetKeyUpdatedAt]; - - [mutableData enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - id value = [decoder decodeObject:obj]; - PFFieldOperation *fieldOperation = nil; - if ([key isEqualToString:PFOperationSetKeyACL]) { - // TODO (hallucinogen): where to use the decoder? - value = [PFACL ACLWithDictionary:obj]; - } - if ([value isKindOfClass:[PFFieldOperation class]]) { - fieldOperation = value; - } else { - fieldOperation = [PFSetOperation setWithValue:value]; - } - operationSet[key] = fieldOperation; - }]; - operationSet.updatedAt = updatedAt ? [decoder decodeObject:updatedAt] : nil; - - return operationSet; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (id)objectForKey:(id)aKey { - return self.dictionary[aKey]; -} - -- (id)objectForKeyedSubscript:(id)aKey { - return [self objectForKey:aKey]; -} - -- (NSUInteger)count { - return [self.dictionary count]; -} - -- (NSEnumerator *)keyEnumerator { - return [self.dictionary keyEnumerator]; -} - -- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(NSString *key, PFFieldOperation *operation, BOOL *stop))block { - [self.dictionary enumerateKeysAndObjectsUsingBlock:block]; -} - -- (void)setObject:(id)anObject forKey:(id)aKey { - self.dictionary[aKey] = anObject; - self.updatedAt = [NSDate date]; -} - -- (void)setObject:(id)anObject forKeyedSubscript:(id)key { - [self setObject:anObject forKey:key]; -} - -- (void)removeObjectForKey:(id)key { - [self.dictionary removeObjectForKey:key]; - self.updatedAt = [NSDate date]; -} - -- (void)removeAllObjects { - [self.dictionary removeAllObjects]; - self.updatedAt = [NSDate date]; -} - -///-------------------------------------- -#pragma mark - NSFastEnumeration -///-------------------------------------- - -- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state - objects:(id __unsafe_unretained [])buffer - count:(NSUInteger)len { - return [self.dictionary countByEnumeratingWithState:state objects:buffer count:len]; -} - -///-------------------------------------- -#pragma mark - NSCopying -///-------------------------------------- - -- (instancetype)copyWithZone:(NSZone *)zone { - PFOperationSet *operationSet = [[[self class] allocWithZone:zone] initWithUUID:self.uuid]; - operationSet.dictionary = [self.dictionary mutableCopy]; - operationSet.updatedAt = [self.updatedAt copy]; - operationSet.saveEventually = self.saveEventually; - return operationSet; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/PFObjectPrivate.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/PFObjectPrivate.h deleted file mode 100644 index 949e589..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/PFObjectPrivate.h +++ /dev/null @@ -1,306 +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. - */ - -#import - -#import - -#import - -#import "PFDecoder.h" -#import "PFEncoder.h" -#import "PFMulticastDelegate.h" -#import "PFObjectControlling.h" - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFCurrentUserController; -@class PFFieldOperation; -@class PFJSONCacheItem; -@class PFMultiCommand; -@class PFObjectEstimatedData; -@class PFObjectFileCodingLogic; -@class PFObjectState; -@class PFObjectSubclassingController; -@class PFOperationSet; -@class PFPinningObjectStore; -@class PFRESTCommand; -@class PFTaskQueue; - -///-------------------------------------- -#pragma mark - PFObjectPrivateSubclass -///-------------------------------------- - -@protocol PFObjectPrivateSubclass - -@required - -///-------------------------------------- -/// @name State -///-------------------------------------- - -+ (PFObjectState *)_newObjectStateWithParseClassName:(NSString *)className - objectId:(NSString *)objectId - isComplete:(BOOL)complete; - -@optional - -///-------------------------------------- -/// @name Before Save -///-------------------------------------- - -/*! - Called before an object is going to be saved. Called in a context of object lock. - Subclasses can override this method to do any custom updates before an object gets saved. - */ -- (void)_objectWillSave; - -@end - -///-------------------------------------- -#pragma mark - PFObject -///-------------------------------------- - -// Extension for property methods. -@interface PFObject () - -/*! - @returns Current object state. - */ -@property (nonatomic, copy) PFObjectState *_state; -@property (nonatomic, copy) NSMutableSet *_availableKeys; - -- (instancetype)initWithObjectState:(PFObjectState *)state; -+ (instancetype)objectWithClassName:(NSString *)className - objectId:(NSString *)objectid - completeData:(BOOL)completeData; -+ (instancetype)objectWithoutDataWithClassName:(NSString *)className localId:(NSString *)localId; - -- (PFTaskQueue *)taskQueue; - -- (PFObjectEstimatedData *)_estimatedData; - -#if PARSE_OSX_ONLY -// Not available publicly, but available for testing - -- (instancetype)refresh; -- (instancetype)refresh:(NSError **)error; -- (void)refreshInBackgroundWithBlock:(PFObjectResultBlock)block; -- (void)refreshInBackgroundWithTarget:(id)target selector:(SEL)selector; - -#endif - -///-------------------------------------- -/// @name Validation -///-------------------------------------- - -- (BFTask PF_GENERIC(PFVoid) *)_validateFetchAsync NS_REQUIRES_SUPER; -- (BFTask PF_GENERIC(PFVoid) *)_validateDeleteAsync NS_REQUIRES_SUPER; - -/*! - Validate the save eventually operation with the current state. - The result of this task is ignored. The error/cancellation/exception will prevent `saveEventually`. - - @returns Task that encapsulates the validation. - */ -- (BFTask PF_GENERIC(PFVoid) *)_validateSaveEventuallyAsync NS_REQUIRES_SUPER; - -///-------------------------------------- -/// @name Pin -///-------------------------------------- -- (BFTask *)_pinInBackgroundWithName:(NSString *)name includeChildren:(BOOL)includeChildren; -+ (BFTask *)_pinAllInBackground:(NSArray *)objects withName:(NSString *)name includeChildren:(BOOL)includeChildren; - -+ (PFPinningObjectStore *)pinningObjectStore; -+ (id)objectController; -+ (PFObjectFileCodingLogic *)objectFileCodingLogic; -+ (PFCurrentUserController *)currentUserController; - -///-------------------------------------- -#pragma mark - Subclassing -///-------------------------------------- - -+ (PFObjectSubclassingController *)subclassingController; - -@end - -@interface PFObject (Private) - -/*! - Returns the object that should be used to synchronize all internal data access. - */ -- (NSObject *)lock; - -/*! - Blocks until all outstanding operations have completed. - */ -- (void)waitUntilFinished; - -- (NSDictionary *)_collectFetchedObjects; - -///-------------------------------------- -#pragma mark - Static methods for Subclassing -///-------------------------------------- - -/*! - Unregisters a class registered using registerSubclass: - If we ever expose thsi method publicly, we must change the underlying implementation - to have stack behavior. Currently unregistering a custom class for a built-in will - leave the built-in unregistered as well. - @param subclass the subclass - */ -+ (void)unregisterSubclass:(Class)subclass; - -///-------------------------------------- -#pragma mark - Children helpers -///-------------------------------------- -- (BFTask *)_saveChildrenInBackgroundWithCurrentUser:(PFUser *)currentUser sessionToken:(NSString *)sessionToken; - -///-------------------------------------- -#pragma mark - Dirtiness helpers -///-------------------------------------- -- (BOOL)isDirty:(BOOL)considerChildren; -- (void)_setDirty:(BOOL)dirty; - -- (void)performOperation:(PFFieldOperation *)operation forKey:(NSString *)key; -- (void)setHasBeenFetched:(BOOL)fetched; -- (void)_setDeleted:(BOOL)deleted; - -- (BOOL)isDataAvailableForKey:(NSString *)key; - -- (BOOL)_hasChanges; -- (BOOL)_hasOutstandingOperations; -- (PFOperationSet *)unsavedChanges; - -///-------------------------------------- -#pragma mark - Validations -///-------------------------------------- -- (void)_checkSaveParametersWithCurrentUser:(PFUser *)currentUser; -/*! - Checks if Parse class name could be used to initialize a given instance of PFObject or it's subclass. - */ -+ (void)_assertValidInstanceClassName:(NSString *)className; - -///-------------------------------------- -#pragma mark - Serialization helpers -///-------------------------------------- -- (NSString *)getOrCreateLocalId; -- (void)resolveLocalId; - -+ (id)_objectFromDictionary:(NSDictionary *)dictionary - defaultClassName:(NSString *)defaultClassName - completeData:(BOOL)completeData; - -+ (id)_objectFromDictionary:(NSDictionary *)dictionary - defaultClassName:(NSString *)defaultClassName - selectedKeys:(NSArray *)selectedKeys; - -+ (id)_objectFromDictionary:(NSDictionary *)dictionary - defaultClassName:(NSString *)defaultClassName - completeData:(BOOL)completeData - decoder:(PFDecoder *)decoder; -+ (BFTask *)_migrateObjectInBackgroundFromFile:(NSString *)fileName toPin:(NSString *)pinName; -+ (BFTask *)_migrateObjectInBackgroundFromFile:(NSString *)fileName - toPin:(NSString *)pinName - usingMigrationBlock:(BFContinuationBlock)block; - -- (NSMutableDictionary *)_convertToDictionaryForSaving:(PFOperationSet *)changes - withObjectEncoder:(PFEncoder *)encoder; - -///-------------------------------------- -#pragma mark - REST operations -///-------------------------------------- -- (NSDictionary *)RESTDictionaryWithObjectEncoder:(PFEncoder *)objectEncoder - operationSetUUIDs:(NSArray **)operationSetUUIDs; -- (NSDictionary *)RESTDictionaryWithObjectEncoder:(PFEncoder *)objectEncoder - operationSetUUIDs:(NSArray **)operationSetUUIDs - state:(PFObjectState *)state - operationSetQueue:(NSArray *)operationSetQueue; - -- (void)mergeFromRESTDictionary:(NSDictionary *)object - withDecoder:(PFDecoder *)decoder; - -///-------------------------------------- -#pragma mark - Data helpers -///-------------------------------------- -- (void)checkForChangesToMutableContainers; -- (void)rebuildEstimatedData; - -///-------------------------------------- -#pragma mark - Command handlers -///-------------------------------------- -- (PFObject *)mergeFromObject:(PFObject *)other; - -- (void)_mergeAfterSaveWithResult:(NSDictionary *)result decoder:(PFDecoder *)decoder; -- (void)_mergeAfterFetchWithResult:(NSDictionary *)result decoder:(PFDecoder *)decoder completeData:(BOOL)completeData; -- (void)_mergeFromServerWithResult:(NSDictionary *)result decoder:(PFDecoder *)decoder completeData:(BOOL)completeData; - -- (BFTask *)handleSaveResultAsync:(NSDictionary *)result; - -///-------------------------------------- -#pragma mark - Asynchronous operations -///-------------------------------------- -- (void)startSave; -- (BFTask *)_enqueueSaveEventuallyWithChildren:(BOOL)saveChildren; -- (BFTask *)saveAsync:(BFTask *)toAwait; -- (BFTask *)fetchAsync:(BFTask *)toAwait; -- (BFTask *)deleteAsync:(BFTask *)toAwait; - -///-------------------------------------- -#pragma mark - Command constructors -///-------------------------------------- -- (PFRESTCommand *)_constructSaveCommandForChanges:(PFOperationSet *)changes - sessionToken:(NSString *)sessionToken - objectEncoder:(PFEncoder *)encoder; -- (PFRESTCommand *)_currentDeleteCommandWithSessionToken:(NSString *)sessionToken; - -///-------------------------------------- -#pragma mark - Misc helpers -///-------------------------------------- -- (NSString *)displayClassName; -- (NSString *)displayObjectId; - -- (void)registerSaveListener:(void (^)(id result, NSError *error))callback; -- (void)unregisterSaveListener:(void (^)(id result, NSError *error))callback; -- (PFACL *)ACLWithoutCopying; - -///-------------------------------------- -#pragma mark - Get and set -///-------------------------------------- - -- (void)_setObject:(id)object - forKey:(NSString *)key - onlyIfDifferent:(BOOL)onlyIfDifferent; - -///-------------------------------------- -#pragma mark - Subclass Helpers -///-------------------------------------- - -/*! - This method is called by -[PFObject init]; changes made to the object during this - method will not mark the object as dirty. PFObject uses this method to to apply the - default ACL; subclasses which override this method shold be sure to call the super - implementation if they want to honor the default ACL. - */ -- (void)setDefaultValues; - -/*! - This method allows subclasses to determine whether a default ACL should be applied - to new instances. - */ -- (BOOL)needsDefaultACL; - -@end - -@interface PFObject () { - PFMulticastDelegate *saveDelegate; -} - -@property (nonatomic, strong) PFMulticastDelegate *saveDelegate; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/PinningStore/PFPinningObjectStore.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/PinningStore/PFPinningObjectStore.h deleted file mode 100644 index 66950c7..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/PinningStore/PFPinningObjectStore.h +++ /dev/null @@ -1,84 +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. - */ - -#import - -#import - -#import "PFDataProvider.h" - -NS_ASSUME_NONNULL_BEGIN - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFPin; - -@interface PFPinningObjectStore : NSObject - -@property (nonatomic, weak, readonly) id dataSource; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; -+ (instancetype)storeWithDataSource:(id)dataSource; - -///-------------------------------------- -/// @name Pin -///-------------------------------------- - -/*! - Gets pin with name equals to given name. - - @param name Pin Name. - - @returns `BFTask` with `PFPin` result if pinning succeeds. - */ -- (BFTask *)fetchPinAsyncWithName:(NSString *)name; - -/*! - Pins given objects to the pin. Creates new pin if the pin with such name is not found. - - @param objects Array of `PFObject`s to pin. - @param name Pin Name. - @param includeChildren Whether children of `objects` should be pinned as well. - - @returns `BFTask` with `@YES` result. - */ -- (BFTask *)pinObjectsAsync:(nullable NSArray *)objects - withPinName:(NSString *)name - includeChildren:(BOOL)includeChildren; - -///-------------------------------------- -/// @name Unpin -///-------------------------------------- - -/*! - Unpins given array of objects from the pin. - - @param objects Objects to unpin. - @param name Pin name. - - @returns `BFTask` with `@YES` result. - */ -- (BFTask *)unpinObjectsAsync:(nullable NSArray *)objects withPinName:(NSString *)name; - -/*! - Unpins all objects from the pin. - - @param name Pin name. - - @returns `BFTask` with `YES` result. - */ -- (BFTask *)unpinAllObjectsAsyncWithPinName:(NSString *)name; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/PinningStore/PFPinningObjectStore.m b/FoodbLog/Pods/Parse/Parse/Internal/Object/PinningStore/PFPinningObjectStore.m deleted file mode 100644 index b731df1..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/PinningStore/PFPinningObjectStore.m +++ /dev/null @@ -1,163 +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. - */ - -#import "PFPinningObjectStore.h" - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFMacros.h" -#import "PFOfflineStore.h" -#import "PFPin.h" -#import "PFQueryPrivate.h" - -@interface PFPinningObjectStore () { - NSMapTable *_pinCacheTable; - dispatch_queue_t _pinCacheAccessQueue; - BFExecutor *_pinCacheAccessExecutor; -} - -@end - -@implementation PFPinningObjectStore - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithDataSource:(id)dataSource { - self = [super init]; - if (!self) return nil; - - _pinCacheTable = [NSMapTable strongToWeakObjectsMapTable]; - _pinCacheAccessQueue = dispatch_queue_create("com.parse.object.pin.cache", DISPATCH_QUEUE_SERIAL); - _pinCacheAccessExecutor = [BFExecutor executorWithDispatchQueue:_pinCacheAccessQueue]; - - _dataSource = dataSource; - - return self; -} - -+ (instancetype)storeWithDataSource:(id)dataSource { - return [[self alloc] initWithDataSource:dataSource]; -} - -///-------------------------------------- -#pragma mark - Pin -///-------------------------------------- - -- (BFTask *)fetchPinAsyncWithName:(NSString *)name { - @weakify(self); - return [BFTask taskFromExecutor:_pinCacheAccessExecutor withBlock:^id{ - BFTask *cachedTask = [_pinCacheTable objectForKey:name] ?: [BFTask taskWithResult:nil]; - // We need to call directly to OfflineStore since we don't want/need a user to query for ParsePins - cachedTask = [cachedTask continueWithBlock:^id(BFTask *task) { - @strongify(self); - PFQuery *query = [[PFPin query] whereKey:PFPinKeyName equalTo:name]; - PFOfflineStore *store = self.dataSource.offlineStore; - return [[store findAsyncForQueryState:query.state - user:nil - pin:nil] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *result = task.result; - // TODO (hallucinogen): What do we do if there are more than 1 result? - PFPin *pin = (result.count != 0 ? result.firstObject : [PFPin pinWithName:name]); - return pin; - }]; - }]; - // Put the task back into the cache. - [_pinCacheTable setObject:cachedTask forKey:name]; - return cachedTask; - }]; -} - -- (BFTask *)pinObjectsAsync:(NSArray *)objects withPinName:(NSString *)name includeChildren:(BOOL)includeChildren { - if (objects.count == 0) { - return [BFTask taskWithResult:@YES]; - } - - @weakify(self); - return [[[self fetchPinAsyncWithName:name] continueWithSuccessBlock:^id(BFTask *task) { - @strongify(self); - PFPin *pin = task.result; - PFOfflineStore *store = self.dataSource.offlineStore; - //TODO (hallucinogen): some stuff @grantland mentioned can't be done maybe needs to be done here - //TODO (grantland): change to use relations. currently the related PO are only getting saved - //TODO (grantland): can't add and then remove - - // Hack to store collection in a pin - NSMutableArray *modified = pin.objects; - if (modified == nil) { - modified = [objects mutableCopy]; - } else { - for (PFObject *object in objects) { - if (![modified containsObject:object]) { - [modified addObject:object]; - } - } - } - pin.objects = modified; - - BFTask *saveTask = nil; - if (includeChildren) { - saveTask = [store saveObjectLocallyAsync:pin includeChildren:YES]; - } else { - saveTask = [store saveObjectLocallyAsync:pin withChildren:pin.objects]; - } - return saveTask; - }] continueWithSuccessResult:@YES]; -} - -///-------------------------------------- -#pragma mark - Unpin -///-------------------------------------- - -- (BFTask *)unpinObjectsAsync:(NSArray *)objects withPinName:(NSString *)name { - if (objects.count == 0) { - return [BFTask taskWithResult:@YES]; - } - - @weakify(self); - return [[[self fetchPinAsyncWithName:name] continueWithSuccessBlock:^id(BFTask *task) { - @strongify(self); - PFPin *pin = task.result; - NSMutableArray *modified = pin.objects; - if (!modified) { - // Nothing to unpin - return task; - } - - //TODO (hallucinogen): some stuff @grantland mentioned can't be done maybe needs to be done here - //TODO (grantland): change to use relations. currently the related PO are only getting saved - //TODO (grantland): can't add and then remove - - PFOfflineStore *store = self.dataSource.offlineStore; - - [modified removeObjectsInArray:objects]; - if (modified.count == 0) { - return [store unpinObjectAsync:pin]; - } - pin.objects = modified; - - return [store saveObjectLocallyAsync:pin includeChildren:YES]; - }] continueWithSuccessResult:@YES]; -} - -- (BFTask *)unpinAllObjectsAsyncWithPinName:(NSString *)name { - @weakify(self); - return [[self fetchPinAsyncWithName:name] continueWithSuccessBlock:^id(BFTask *task) { - @strongify(self); - PFPin *pin = task.result; - return [[self.dataSource.offlineStore unpinObjectAsync:pin] continueWithSuccessResult:@YES]; - }]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFMutableObjectState.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFMutableObjectState.h deleted file mode 100644 index 70cae09..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFMutableObjectState.h +++ /dev/null @@ -1,45 +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. - */ - -#import "PFObjectState.h" - -@class PFOperationSet; - -@interface PFMutableObjectState : PFObjectState - -@property (nonatomic, copy, readwrite) NSString *parseClassName; -@property (nonatomic, copy, readwrite) NSString *objectId; - -@property (nonatomic, strong, readwrite) NSDate *createdAt; -@property (nonatomic, strong, readwrite) NSDate *updatedAt; - -@property (nonatomic, copy, readwrite) NSDictionary *serverData; - -@property (nonatomic, assign, readwrite, getter=isComplete) BOOL complete; -@property (nonatomic, assign, readwrite, getter=isDeleted) BOOL deleted; - -///-------------------------------------- -/// @name Accessors -///-------------------------------------- - -- (void)setServerDataObject:(id)object forKey:(NSString *)key; -- (void)removeServerDataObjectForKey:(NSString *)key; -- (void)removeServerDataObjectsForKeys:(NSArray *)keys; - -- (void)setCreatedAtFromString:(NSString *)string; -- (void)setUpdatedAtFromString:(NSString *)string; - -///-------------------------------------- -/// @name Apply -///-------------------------------------- - -- (void)applyState:(PFObjectState *)state; -- (void)applyOperationSet:(PFOperationSet *)operationSet; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFMutableObjectState.m b/FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFMutableObjectState.m deleted file mode 100644 index edfd652..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFMutableObjectState.m +++ /dev/null @@ -1,61 +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. - */ - -#import "PFMutableObjectState.h" - -#import "PFDateFormatter.h" -#import "PFObjectState_Private.h" - -@implementation PFMutableObjectState - -@dynamic parseClassName; -@dynamic objectId; -@dynamic createdAt; -@dynamic updatedAt; -@dynamic serverData; -@dynamic complete; -@dynamic deleted; - -///-------------------------------------- -#pragma mark - PFMutableObjectState -///-------------------------------------- - -#pragma mark Accessors - -- (void)setServerDataObject:(id)object forKey:(NSString *)key { - [super setServerDataObject:object forKey:key]; -} - -- (void)removeServerDataObjectForKey:(NSString *)key { - [super removeServerDataObjectForKey:key]; -} - -- (void)removeServerDataObjectsForKeys:(NSArray *)keys { - [super removeServerDataObjectsForKeys:keys]; -} - -- (void)setCreatedAtFromString:(NSString *)string { - [super setCreatedAtFromString:string]; -} - -- (void)setUpdatedAtFromString:(NSString *)string { - [super setUpdatedAtFromString:string]; -} - -#pragma mark Apply - -- (void)applyState:(PFObjectState *)state { - [super applyState:state]; -} - -- (void)applyOperationSet:(PFOperationSet *)operationSet { - [super applyOperationSet:operationSet]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFObjectState.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFObjectState.h deleted file mode 100644 index a7d9744..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFObjectState.h +++ /dev/null @@ -1,60 +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. - */ - -#import - -@class PFEncoder; - -@interface PFObjectState : NSObject - -@property (nonatomic, copy, readonly) NSString *parseClassName; -@property (nonatomic, copy, readonly) NSString *objectId; - -@property (nonatomic, strong, readonly) NSDate *createdAt; -@property (nonatomic, strong, readonly) NSDate *updatedAt; - -@property (nonatomic, copy, readonly) NSDictionary *serverData; - -@property (nonatomic, assign, readonly, getter=isComplete) BOOL complete; -@property (nonatomic, assign, readonly, getter=isDeleted) BOOL deleted; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_DESIGNATED_INITIALIZER; - -- (instancetype)initWithState:(PFObjectState *)state NS_REQUIRES_SUPER; -- (instancetype)initWithParseClassName:(NSString *)parseClassName; -- (instancetype)initWithParseClassName:(NSString *)parseClassName - objectId:(NSString *)objectId - isComplete:(BOOL)complete; - -+ (instancetype)stateWithState:(PFObjectState *)state NS_REQUIRES_SUPER; -+ (instancetype)stateWithParseClassName:(NSString *)parseClassName; -+ (instancetype)stateWithParseClassName:(NSString *)parseClassName - objectId:(NSString *)objectId - isComplete:(BOOL)complete; - -///-------------------------------------- -/// @name Coding -///-------------------------------------- - -/*! - Encodes all fields in `serverData`, `objectId`, `createdAt` and `updatedAt` into objects suitable for JSON/Persistence. - - @note `parseClassName` isn't automatically added to the dictionary. - - @param objectEncoder Encoder to use to encode custom objects. - - @returns `NSDictionary` instance representing object state. - */ -- (NSDictionary *)dictionaryRepresentationWithObjectEncoder:(PFEncoder *)objectEncoder NS_REQUIRES_SUPER; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFObjectState.m b/FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFObjectState.m deleted file mode 100644 index fec73f4..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFObjectState.m +++ /dev/null @@ -1,179 +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. - */ - -#import "PFObjectState.h" -#import "PFObjectState_Private.h" - -#import "PFDateFormatter.h" -#import "PFEncoder.h" -#import "PFMutableObjectState.h" -#import "PFObjectConstants.h" -#import "PFObjectUtilities.h" - -@implementation PFObjectState - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _serverData = [NSMutableDictionary dictionary]; - - return [super init]; -} - -- (instancetype)initWithState:(PFObjectState *)state { - self = [self init]; - if (!self) return nil; - - _parseClassName = [state.parseClassName copy]; - _objectId = [state.objectId copy]; - - _updatedAt = state.updatedAt; - _createdAt = state.createdAt; - - _serverData = [state.serverData mutableCopy] ?: [NSMutableDictionary dictionary]; - - _complete = state.complete; - _deleted = state.deleted; - - return self; -} - -- (instancetype)initWithParseClassName:(NSString *)parseClassName { - return [self initWithParseClassName:parseClassName objectId:nil isComplete:NO]; -} - -- (instancetype)initWithParseClassName:(NSString *)parseClassName - objectId:(NSString *)objectId - isComplete:(BOOL)complete { - self = [self init]; - if (!self) return nil; - - _parseClassName = [parseClassName copy]; - _objectId = [objectId copy]; - _complete = complete; - - return self; -} - -+ (instancetype)stateWithState:(PFObjectState *)state { - return [[self alloc] initWithState:state]; -} - -+ (instancetype)stateWithParseClassName:(NSString *)parseClassName { - return [[self alloc] initWithParseClassName:parseClassName]; -} - -+ (instancetype)stateWithParseClassName:(NSString *)parseClassName - objectId:(NSString *)objectId - isComplete:(BOOL)complete { - return [[self alloc] initWithParseClassName:parseClassName - objectId:objectId - isComplete:complete]; -} - -///-------------------------------------- -#pragma mark - Accessors -///--------------------------------------s - -- (void)setServerData:(NSDictionary *)serverData { - if (self.serverData != serverData) { - _serverData = [serverData mutableCopy]; - } -} - -///-------------------------------------- -#pragma mark - Coding -///-------------------------------------- - -- (NSDictionary *)dictionaryRepresentationWithObjectEncoder:(PFEncoder *)objectEncoder { - NSMutableDictionary *result = [NSMutableDictionary dictionary]; - if (self.objectId) { - result[PFObjectObjectIdRESTKey] = self.objectId; - } - if (self.createdAt) { - result[PFObjectCreatedAtRESTKey] = [[PFDateFormatter sharedFormatter] preciseStringFromDate:self.createdAt]; - } - if (self.updatedAt) { - result[PFObjectUpdatedAtRESTKey] = [[PFDateFormatter sharedFormatter] preciseStringFromDate:self.updatedAt]; - } - [self.serverData enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - result[key] = [objectEncoder encodeObject:obj]; - }]; - return [result copy]; -} - -///-------------------------------------- -#pragma mark - PFObjectState (Mutable) -///-------------------------------------- - -#pragma mark Accessors - -- (void)setServerDataObject:(id)object forKey:(NSString *)key { - _serverData[key] = object; -} - -- (void)removeServerDataObjectForKey:(NSString *)key { - [_serverData removeObjectForKey:key]; -} - -- (void)removeServerDataObjectsForKeys:(NSArray *)keys { - [_serverData removeObjectsForKeys:keys]; -} - -- (void)setCreatedAtFromString:(NSString *)string { - self.createdAt = [[PFDateFormatter sharedFormatter] dateFromString:string]; -} - -- (void)setUpdatedAtFromString:(NSString *)string { - self.updatedAt = [[PFDateFormatter sharedFormatter] dateFromString:string]; -} - -#pragma mark Apply - -- (void)applyState:(PFObjectState *)state { - if (state.objectId) { - self.objectId = state.objectId; - } - if (state.createdAt) { - self.createdAt = state.createdAt; - } - if (state.updatedAt) { - self.updatedAt = state.updatedAt; - } - [_serverData addEntriesFromDictionary:state.serverData]; - - self.complete |= state.complete; -} - -- (void)applyOperationSet:(PFOperationSet *)operationSet { - [PFObjectUtilities applyOperationSet:operationSet toDictionary:_serverData]; -} - -///-------------------------------------- -#pragma mark - NSCopying -///-------------------------------------- - -- (id)copyWithZone:(NSZone *)zone { - return [[PFObjectState allocWithZone:zone] initWithState:self]; -} - -///-------------------------------------- -#pragma mark - NSMutableCopying -///-------------------------------------- - -- (id)mutableCopyWithZone:(NSZone *)zone { - return [[PFMutableObjectState allocWithZone:zone] initWithState:self]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFObjectState_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFObjectState_Private.h deleted file mode 100644 index d5f8d63..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/State/PFObjectState_Private.h +++ /dev/null @@ -1,57 +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. - */ - -#import "PFObjectState.h" - -@class PFOperationSet; - -@interface PFObjectState () { -@protected - NSString *_parseClassName; - NSString *_objectId; - NSDate *_createdAt; - NSDate *_updatedAt; - NSMutableDictionary *_serverData; - - BOOL _complete; - BOOL _deleted; -} - -@property (nonatomic, copy, readwrite) NSString *parseClassName; -@property (nonatomic, copy, readwrite) NSString *objectId; -@property (nonatomic, strong, readwrite) NSDate *createdAt; -@property (nonatomic, strong, readwrite) NSDate *updatedAt; -@property (nonatomic, copy, readwrite) NSMutableDictionary *serverData; - -@property (nonatomic, assign, readwrite, getter=isComplete) BOOL complete; -@property (nonatomic, assign, readwrite, getter=isDeleted) BOOL deleted; - -@end - -@interface PFObjectState (Mutable) - -///-------------------------------------- -/// @name Accessors -///-------------------------------------- - -- (void)setServerDataObject:(id)object forKey:(NSString *)key; -- (void)removeServerDataObjectForKey:(NSString *)key; -- (void)removeServerDataObjectsForKeys:(NSArray *)keys; - -- (void)setCreatedAtFromString:(NSString *)string; -- (void)setUpdatedAtFromString:(NSString *)string; - -///-------------------------------------- -/// @name Apply -///-------------------------------------- - -- (void)applyState:(PFObjectState *)state NS_REQUIRES_SUPER; -- (void)applyOperationSet:(PFOperationSet *)operationSet NS_REQUIRES_SUPER; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h deleted file mode 100644 index 3db23d7..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h +++ /dev/null @@ -1,25 +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. - */ - -#import - -@class PFPropertyInfo; - -@interface PFObjectSubclassInfo : NSObject - -@property (atomic, strong) Class subclass; - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithSubclass:(Class)kls NS_DESIGNATED_INITIALIZER; -+ (instancetype)subclassInfoWithSubclass:(Class)kls; - -- (PFPropertyInfo *)propertyInfoForSelector:(SEL)cmd isSetter:(BOOL *)isSetter; -- (NSMethodSignature *)forwardingMethodSignatureForSelector:(SEL)cmd; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m b/FoodbLog/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m deleted file mode 100644 index 8005b1a..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m +++ /dev/null @@ -1,203 +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. - */ - -#import "PFObjectSubclassInfo.h" - -#import - -#import "PFAssert.h" -#import "PFLogging.h" -#import "PFMacros.h" -#import "PFPropertyInfo_Private.h" - -///-------------------------------------- -#pragma mark - Helper -///-------------------------------------- - -static BOOL startsWith(const char *string, const char *prefix) { - // Keep iterating in lockstep. If we run out of prefix letters first, - // this is a valid prefix. - for (; *string && *prefix && *prefix == *string; ++string, ++prefix) - ; - return !*prefix; -} - -// This method helps us get our bearings regardless of whether we were passed -// setFoo: or foo. We'll always exit this method by setting outPair to -// [accessor, mutator] and returns the property they correspond to. If the -// property cannot be found, returns NULL and outPair is undefined. -// An objc_property_t is an opaque struct pointer containing a SEL name and char * -// type information which follows a DSL explained in the Objective-C Runtime Reference. -static objc_property_t getAccessorMutatorPair(Class klass, SEL sel, SEL outPair[2]) { - const char *selName = sel_getName(sel); - ptrdiff_t selNameByteLen = strlen(selName) + 1; - char temp[selNameByteLen + 4]; - - if (startsWith(selName, "set")) { - outPair[1] = sel; - memcpy(temp, selName + 3, selNameByteLen - 3); - temp[0] -= 'A' - 'a'; - - temp[selNameByteLen - 5] = 0; // drop ':' - outPair[0] = sel_registerName(temp); - } else { - outPair[0] = sel; - sprintf(temp, "set%s:", selName); - if (selName[0] >= 'a' && selName[0] <= 'z') { - temp[3] += 'A' - 'a'; - } - outPair[1] = sel_registerName(temp); - } - - const char *propName = sel_getName(outPair[0]); - objc_property_t property = class_getProperty(klass, propName); - if (!property) { - // The user could have broken convention and declared an upper case property. - memcpy(temp, propName, strlen(propName) + 1); - temp[0] += 'A' - 'a'; - outPair[0] = sel_registerName(temp); - property = class_getProperty(klass, temp); - } - return property; -} - -@implementation PFObjectSubclassInfo { - dispatch_queue_t _dataAccessQueue; - NSMutableDictionary *_knownProperties; - NSMutableDictionary *_knownMethodSignatures; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithSubclass:(Class)kls { - self = [super init]; - if (!self) return nil; - - _dataAccessQueue = dispatch_queue_create("com.parse.object.subclassing.data.access", DISPATCH_QUEUE_SERIAL); - _subclass = kls; - - _knownProperties = [NSMutableDictionary dictionary]; - _knownMethodSignatures = [NSMutableDictionary dictionary]; - - return self; -} - -+ (instancetype)subclassInfoWithSubclass:(Class)kls { - return [[self alloc] initWithSubclass:kls]; -} - -///-------------------------------------- -#pragma mark - Public -///-------------------------------------- - -- (PFPropertyInfo *)propertyInfoForSelector:(SEL)cmd isSetter:(BOOL *)isSetter { - __block PFPropertyInfo *result = nil; - dispatch_sync(_dataAccessQueue, ^{ - result = [self _rawPropertyInfoForSelector:cmd]; - }); - - if (isSetter) { - *isSetter = (cmd == result.setterSelector); - } - - return result; -} - -- (NSMethodSignature *)forwardingMethodSignatureForSelector:(SEL)cmd { - __block NSMethodSignature *result = nil; - NSString *selectorString = NSStringFromSelector(cmd); - - // NSMethodSignature can be fairly heavyweight, so let's agressively cache this here. - dispatch_sync(_dataAccessQueue, ^{ - result = _knownMethodSignatures[selectorString]; - if (result) { - return; - } - - PFPropertyInfo *propertyInfo = [self _rawPropertyInfoForSelector:cmd]; - if (!propertyInfo) { - return; - } - - BOOL isSetter = (cmd == propertyInfo.setterSelector); - NSString *typeEncoding = propertyInfo.typeEncoding; - - // Property type encoding includes the class name as well. - // This is fine, except for the fact that NSMethodSignature hates that. - NSUInteger startLocation = [typeEncoding rangeOfString:@"\"" options:0].location; - NSUInteger endLocation = [typeEncoding rangeOfString:@"\"" - options:NSBackwardsSearch | NSAnchoredSearch].location; - - if (startLocation != NSNotFound && endLocation != NSNotFound) { - typeEncoding = [typeEncoding substringToIndex:startLocation]; - } - - NSString *objcTypes = ([NSString stringWithFormat:(isSetter ? @"v@:%@" : @"%@@:"), typeEncoding]); - result = [NSMethodSignature signatureWithObjCTypes:[objcTypes UTF8String]]; - - _knownMethodSignatures[selectorString] = result; - }); - - return result; -} - -///-------------------------------------- -#pragma mark - Private -///-------------------------------------- - -- (PFPropertyInfo *)_rawPropertyInfoForSelector:(SEL)cmd { - PFPropertyInfo *result = nil; - NSString *selectorString = NSStringFromSelector(cmd); - result = _knownProperties[selectorString]; - if (result) { - return result; - } - - SEL propertySelectors[2]; - objc_property_t property = getAccessorMutatorPair(self.subclass, cmd, propertySelectors); - if (!property) { - return nil; - } - - // Check if we've registered this property with a different name. - NSString *propertyName = @(property_getName(property)); - result = _knownProperties[propertyName]; - if (result) { - // Re-register it with the name we just searched for for faster future lookup. - _knownProperties[selectorString] = result; - return result; - } - - const char *attributes = property_getAttributes(property); - if (strstr(attributes, "T@\"PFRelation\",") == attributes && !strstr(attributes, ",R")) { - PFLogWarning(PFLoggingTagCommon, - @"PFRelation properties are always readonly, but %@.%@ was declared otherwise.", - self.subclass, selectorString); - } - - result = [PFPropertyInfo propertyInfoWithClass:self.subclass name:propertyName]; - - _knownProperties[result.name] = result; - if (result.getterSelector) { - _knownProperties[NSStringFromSelector(result.getterSelector)] = result; - } - if (result.setterSelector) { - _knownProperties[NSStringFromSelector(result.setterSelector)] = result; - } - - return result; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h deleted file mode 100644 index ef7977b..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h +++ /dev/null @@ -1,40 +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. - */ - -#import - -@class PFObject; -@protocol PFSubclassing; - -@interface PFObjectSubclassingController : NSObject - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -//TODO: (nlutsenko, richardross) Make it not terrible aka don't have singletons. -+ (instancetype)defaultController; -+ (void)clearDefaultController; - -///-------------------------------------- -/// @name Registration -///-------------------------------------- - -- (Class)subclassForParseClassName:(NSString *)parseClassName; -- (void)registerSubclass:(Class)kls; -- (void)unregisterSubclass:(Class)kls; - -///-------------------------------------- -/// @name Forwarding -///-------------------------------------- - -- (NSMethodSignature *)forwardingMethodSignatureForSelector:(SEL)cmd ofClass:(Class)kls; -- (BOOL)forwardObjectInvocation:(NSInvocation *)invocation withObject:(PFObject *)object; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m b/FoodbLog/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m deleted file mode 100644 index 878a816..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m +++ /dev/null @@ -1,317 +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. - */ - -#import "PFObjectSubclassingController.h" - -#import - -#import "PFAssert.h" -#import "PFMacros.h" -#import "PFObject.h" -#import "PFObjectSubclassInfo.h" -#import "PFPropertyInfo_Private.h" -#import "PFPropertyInfo_Runtime.h" -#import "PFSubclassing.h" - -// CFNumber does not use number type 0, we take advantage of that here. -#define kCFNumberTypeUnknown 0 - -static CFNumberType PFNumberTypeForObjCType(const char *encodedType) { -// To save anyone in the future from some major headaches, sanity check here. -#if kCFNumberTypeMax > UINT8_MAX -#error kCFNumberTypeMax has been changed! This solution will no longer work. -#endif - - // Organizing the table this way makes it nicely fit into two cache lines. This makes lookups nearly free, even more - // so if repeated. - static uint8_t types[128] = { - // Core types. - ['c'] = kCFNumberCharType, - ['i'] = kCFNumberIntType, - ['s'] = kCFNumberShortType, - ['l'] = kCFNumberLongType, - ['q'] = kCFNumberLongLongType, - - // CFNumber (and NSNumber, actually) does not store unsigned types. - // This may cause some strange issues when dealing with values near the max for that type. - // We should investigate this if it becomes a problem. - ['C'] = kCFNumberCharType, - ['I'] = kCFNumberIntType, - ['S'] = kCFNumberShortType, - ['L'] = kCFNumberLongType, - ['Q'] = kCFNumberLongLongType, - - // Floating point - ['f'] = kCFNumberFloatType, - ['d'] = kCFNumberDoubleType, - - // C99 & CXX boolean. We are keeping this here for decoding, as you can safely use CFNumberGetBytes on a - // CFBoolean, and extract it into a char. - ['B'] = kCFNumberCharType, - }; - - return (CFNumberType)types[encodedType[0]]; -} - -static NSNumber *PFNumberCreateSafe(const char *typeEncoding, const void *bytes) { - // NOTE: This is required because NSJSONSerialization treats all NSNumbers with the 'char' type as numbers, not - // booleans. As such, we must treat any and all boolean type encodings as explicit booleans, otherwise we will - // send '1' and '0' to the api server rather than 'true' and 'false'. - // - // TODO (richardross): When we drop support for 10.9/iOS 7, remove the 'c' encoding and only use the new 'B' - // encoding. - if (typeEncoding[0] == 'B' || typeEncoding[0] == 'c') { - return [NSNumber numberWithBool:*(BOOL *)bytes]; - } - - CFNumberType numberType = PFNumberTypeForObjCType(typeEncoding); - PFConsistencyAssert(numberType != kCFNumberTypeUnknown, @"Unsupported type encoding %s!", typeEncoding); - return (__bridge_transfer NSNumber *)CFNumberCreate(NULL, numberType, bytes); -} - -@implementation PFObjectSubclassingController { - dispatch_queue_t _registeredSubclassesAccessQueue; - NSMutableDictionary *_registeredSubclasses; - NSMutableDictionary *_unregisteredSubclasses; -} - -static PFObjectSubclassingController *defaultController_; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _registeredSubclassesAccessQueue = dispatch_queue_create("com.parse.object.subclassing", DISPATCH_QUEUE_SERIAL); - _registeredSubclasses = [NSMutableDictionary dictionary]; - _unregisteredSubclasses = [NSMutableDictionary dictionary]; - - return self; -} - -+ (instancetype)defaultController { - if (!defaultController_) { - defaultController_ = [[PFObjectSubclassingController alloc] init]; - } - return defaultController_; -} - -+ (void)clearDefaultController { - defaultController_ = nil; -} - -///-------------------------------------- -#pragma mark - Public -///-------------------------------------- - -- (Class)subclassForParseClassName:(NSString *)parseClassName { - __block Class result = nil; - pf_sync_with_throw(_registeredSubclassesAccessQueue, ^{ - result = [_registeredSubclasses[parseClassName] subclass]; - }); - return result; -} - -- (void)registerSubclass:(Class)kls { - pf_sync_with_throw(_registeredSubclassesAccessQueue, ^{ - [self _rawRegisterSubclass:kls]; - }); -} - -- (void)unregisterSubclass:(Class)class { - pf_sync_with_throw(_registeredSubclassesAccessQueue, ^{ - NSString *parseClassName = [class parseClassName]; - Class registeredClass = [_registeredSubclasses[parseClassName] subclass]; - - // Make it a no-op if the class itself is not registered or - // if there is another class registered under the same name. - if (registeredClass == nil || - ![registeredClass isEqual:class]) { - return; - } - - [_registeredSubclasses removeObjectForKey:parseClassName]; - }); -} - -- (BOOL)forwardObjectInvocation:(NSInvocation *)invocation withObject:(PFObject *)object { - PFObjectSubclassInfo *subclassInfo = [self _subclassInfoForClass:[object class]]; - - BOOL isSetter = NO; - PFPropertyInfo *propertyInfo = [subclassInfo propertyInfoForSelector:invocation.selector isSetter:&isSetter]; - if (!propertyInfo) { - return NO; - } - - if (isSetter) { - [self _forwardSetterInvocation:invocation forProperty:propertyInfo withObject:object]; - } else { - [self _forwardGetterInvocation:invocation forProperty:propertyInfo withObject:object]; - } - return YES; -} - -- (NSMethodSignature *)forwardingMethodSignatureForSelector:(SEL)cmd ofClass:(Class)kls { - PFObjectSubclassInfo *subclassInfo = [self _subclassInfoForClass:kls]; - return [subclassInfo forwardingMethodSignatureForSelector:cmd]; -} - -///-------------------------------------- -#pragma mark - Private -///-------------------------------------- - -- (void)_forwardGetterInvocation:(NSInvocation *)invocation - forProperty:(PFPropertyInfo *)propertyInfo - withObject:(PFObject *)object { - PFConsistencyAssert(invocation.methodSignature.numberOfArguments == 2, @"Getter should take no arguments!"); - PFConsistencyAssert(invocation.methodSignature.methodReturnType[0] != 'v', @"A getter cannot return void!"); - - const char *methodReturnType = [invocation.methodSignature methodReturnType]; - void *returnValueBytes = alloca([invocation.methodSignature methodReturnLength]); - - if (propertyInfo.ivar) { - object_getIvarValue_safe(object, propertyInfo.ivar, returnValueBytes, propertyInfo.associationType); - } else { - __autoreleasing id dictionaryValue = nil; - if ([propertyInfo.typeEncoding isEqualToString:@"@\"PFRelation\""]) { - dictionaryValue = [object relationForKey:propertyInfo.name]; - } else { - dictionaryValue = object[propertyInfo.name]; - - // TODO: (richardross) Investigate why we were orignally copying the result of -objectForKey, - // as this doens't seem right. - if (propertyInfo.associationType == PFPropertyInfoAssociationTypeCopy) { - dictionaryValue = [dictionaryValue copy]; - } - } - - if (dictionaryValue == nil || [dictionaryValue isKindOfClass:[NSNull class]]) { - memset(returnValueBytes, 0, invocation.methodSignature.methodReturnLength); - } else if (methodReturnType[0] == '@') { - memcpy(returnValueBytes, (void *) &dictionaryValue, sizeof(id)); - } else if ([dictionaryValue isKindOfClass:[NSNumber class]]) { - CFNumberGetValue((__bridge CFNumberRef) dictionaryValue, - PFNumberTypeForObjCType(methodReturnType), - returnValueBytes); - } else { - // TODO:(richardross)Support C-style structs that automatically convert to JSON via NSValue? - PFConsistencyAssert(false, @"Unsupported type encoding %s!", methodReturnType); - } - } - - [invocation setReturnValue:returnValueBytes]; -} - -- (void)_forwardSetterInvocation:(NSInvocation *)invocation - forProperty:(PFPropertyInfo *)propertyInfo - withObject:(PFObject *)object { - PFConsistencyAssert(invocation.methodSignature.numberOfArguments == 3, @"Setter should only take 1 argument!"); - - PFObject *sourceObject = object; - const char *argumentType = [invocation.methodSignature getArgumentTypeAtIndex:2]; - - NSUInteger argumentValueSize = 0; - NSGetSizeAndAlignment(argumentType, &argumentValueSize, NULL); - - void *argumentValueBytes = alloca(argumentValueSize); - [invocation getArgument:argumentValueBytes atIndex:2]; - - if (propertyInfo.ivar) { - object_setIvarValue_safe(sourceObject, propertyInfo.ivar, argumentValueBytes, propertyInfo.associationType); - } else { - id dictionaryValue = nil; - - if (argumentType[0] == '@') { - dictionaryValue = *(__unsafe_unretained id *)argumentValueBytes; - - if (propertyInfo.associationType == PFPropertyInfoAssociationTypeCopy) { - dictionaryValue = [dictionaryValue copy]; - } - } else { - dictionaryValue = PFNumberCreateSafe(argumentType, argumentValueBytes); - } - - if (dictionaryValue == nil) { - [sourceObject removeObjectForKey:propertyInfo.name]; - } else { - sourceObject[propertyInfo.name] = dictionaryValue; - } - } -} - -- (PFObjectSubclassInfo *)_subclassInfoForClass:(Class)kls { - __block PFObjectSubclassInfo *result = nil; - pf_sync_with_throw(_registeredSubclassesAccessQueue, ^{ - if (class_respondsToSelector(object_getClass(kls), @selector(parseClassName))) { - result = _registeredSubclasses[[kls parseClassName]]; - } - - // TODO: (nlutsenko, richardross) Don't let unregistered subclasses have dynamic property resolution. - if (!result) { - result = [PFObjectSubclassInfo subclassInfoWithSubclass:kls]; - _unregisteredSubclasses[NSStringFromClass(kls)] = result; - } - }); - return result; -} - -// Reverse compatibility note: many people may have built PFObject subclasses before -// we officially supported them. Our implementation can do cool stuff, but requires -// the parseClassName class method. -- (void)_rawRegisterSubclass:(Class)kls { - PFConsistencyAssert([kls conformsToProtocol:@protocol(PFSubclassing)], - @"Can only call +registerSubclass on subclasses conforming to PFSubclassing."); - - NSString *parseClassName = [kls parseClassName]; - - // Bug detection: don't allow subclasses of subclasses (i.e. custom user classes) - // to change the value of +parseClassName - if ([kls superclass] != [PFObject class]) { - // We compare Method definitions against the PFObject version witout invoking it - // because that Method could throw on an intermediary class which is - // not meant for direct use. - Method baseImpl = class_getClassMethod([PFObject class], @selector(parseClassName)); - Method superImpl = class_getClassMethod([kls superclass], @selector(parseClassName)); - - PFConsistencyAssert(superImpl == baseImpl || - [parseClassName isEqualToString:[[kls superclass] parseClassName]], - @"Subclasses of subclasses may not have separate +parseClassName " - "definitions. %@ should inherit +parseClassName from %@.", - kls, [kls superclass]); - } - - Class current = [_registeredSubclasses[parseClassName] subclass]; - if (current && current != kls) { - // We've already registered a more specific subclass (i.e. we're calling - // registerSubclass:PFUser after MYUser - if ([current isSubclassOfClass:kls]) { - return; - } - - PFConsistencyAssert([kls isSubclassOfClass:current], - @"Tried to register both %@ and %@ as the native PFObject subclass " - "of %@. Cannot determine the right class to use because neither " - "inherits from the other.", current, kls, parseClassName); - } - - // Move the subclass info from unregisteredSubclasses dictionary to registered ones, or create if it doesn't exist. - NSString *className = NSStringFromClass(kls); - PFObjectSubclassInfo *subclassInfo = _unregisteredSubclasses[className]; - if (subclassInfo) { - [_unregisteredSubclasses removeObjectForKey:className]; - } else { - subclassInfo = [PFObjectSubclassInfo subclassInfoWithSubclass:kls]; - } - _registeredSubclasses[[kls parseClassName]] = subclassInfo; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/Utilities/PFObjectUtilities.h b/FoodbLog/Pods/Parse/Parse/Internal/Object/Utilities/PFObjectUtilities.h deleted file mode 100644 index a94952d..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/Utilities/PFObjectUtilities.h +++ /dev/null @@ -1,36 +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. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class PFFieldOperation; -@class PFOperationSet; - -@interface PFObjectUtilities : NSObject - -///-------------------------------------- -/// @name Operations -///-------------------------------------- - -+ (id)newValueByApplyingFieldOperation:(PFFieldOperation *)operation - toDictionary:(NSMutableDictionary *)dictionary - forKey:(NSString *)key; -+ (void)applyOperationSet:(PFOperationSet *)operationSet toDictionary:(NSMutableDictionary *)dictionary; - -///-------------------------------------- -/// @name Equality -///-------------------------------------- - -+ (BOOL)isObject:(nullable id)objectA equalToObject:(nullable id)objectB; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Object/Utilities/PFObjectUtilities.m b/FoodbLog/Pods/Parse/Parse/Internal/Object/Utilities/PFObjectUtilities.m deleted file mode 100644 index 9b5f1e1..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Object/Utilities/PFObjectUtilities.m +++ /dev/null @@ -1,48 +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. - */ - -#import "PFObjectUtilities.h" - -#import "PFFieldOperation.h" -#import "PFOperationSet.h" - -@implementation PFObjectUtilities - -///-------------------------------------- -#pragma mark - Operations -///-------------------------------------- - -+ (id)newValueByApplyingFieldOperation:(PFFieldOperation *)operation - toDictionary:(NSMutableDictionary *)dictionary - forKey:(NSString *)key { - id oldValue = dictionary[key]; - id newValue = [operation applyToValue:oldValue forKey:key]; - if (newValue) { - dictionary[key] = newValue; - } else { - [dictionary removeObjectForKey:key]; - } - return newValue; -} - -+ (void)applyOperationSet:(PFOperationSet *)operationSet toDictionary:(NSMutableDictionary *)dictionary { - [operationSet enumerateKeysAndObjectsUsingBlock:^(NSString *key, PFFieldOperation *obj, BOOL *stop) { - [self newValueByApplyingFieldOperation:obj toDictionary:dictionary forKey:key]; - }]; -} - -///-------------------------------------- -#pragma mark - Equality -///-------------------------------------- - -+ (BOOL)isObject:(id)objectA equalToObject:(id)objectB { - return (objectA == objectB || (objectA != nil && [objectA isEqual:objectB])); -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFAlertView.h b/FoodbLog/Pods/Parse/Parse/Internal/PFAlertView.h deleted file mode 100644 index bddaf30..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFAlertView.h +++ /dev/null @@ -1,23 +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. - */ - -#import -#import - -typedef void(^PFAlertViewCompletion)(NSUInteger selectedOtherButtonIndex); - -@interface PFAlertView : NSObject - -+ (void)showAlertWithTitle:(NSString *)title - message:(NSString *)message - cancelButtonTitle:(NSString *)cancelButtonTitle - otherButtonTitles:(NSArray *)otherButtonTitles - completion:(PFAlertViewCompletion)completion NS_EXTENSION_UNAVAILABLE_IOS(""); - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFAlertView.m b/FoodbLog/Pods/Parse/Parse/Internal/PFAlertView.m deleted file mode 100644 index e17fa6d..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFAlertView.m +++ /dev/null @@ -1,109 +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. - */ - -#import "PFAlertView.h" - -@interface PFAlertView () - -@property (nonatomic, copy) PFAlertViewCompletion completion; - -@end - -@implementation PFAlertView - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -+ (void)showAlertWithTitle:(NSString *)title - message:(NSString *)message - cancelButtonTitle:(NSString *)cancelButtonTitle - otherButtonTitles:(NSArray *)otherButtonTitles - completion:(PFAlertViewCompletion)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]]; - } - - UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow; - UIViewController *viewController = keyWindow.rootViewController; - while (viewController.presentedViewController) { - viewController = viewController.presentedViewController; - } - - [viewController presentViewController:alertController animated:YES completion:nil]; - } else { -#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0 - __block PFAlertView *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 - } -} - -#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/FoodbLog/Pods/Parse/Parse/Internal/PFApplication.h b/FoodbLog/Pods/Parse/Parse/Internal/PFApplication.h deleted file mode 100644 index 7bf1c24..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFApplication.h +++ /dev/null @@ -1,38 +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. - */ - -#import - -#import - -#if TARGET_OS_IOS -#import -#elif TARGET_OS_WATCH -@class UIApplication; -#elif TARGET_OS_MAC -#import -@compatibility_alias UIApplication NSApplication; -#endif - -/*! - `PFApplication` class provides a centralized way to get the information about the current application, - or the environment it's running in. Please note, that all device specific things - should go to . - */ -@interface PFApplication : NSObject - -@property (nonatomic, strong, readonly) UIApplication *systemApplication; - -@property (nonatomic, assign, readonly, getter=isAppStoreEnvironment) BOOL appStoreEnvironment; -@property (nonatomic, assign, readonly, getter=isExtensionEnvironment) BOOL extensionEnvironment; - -@property (nonatomic, assign) NSInteger iconBadgeNumber; - -+ (instancetype)currentApplication; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFApplication.m b/FoodbLog/Pods/Parse/Parse/Internal/PFApplication.m deleted file mode 100644 index a602fa1..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFApplication.m +++ /dev/null @@ -1,93 +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. - */ - -#import "PFApplication.h" - -#if TARGET_OS_IOS -#import -#elif !TARGET_OS_WATCH && TARGET_OS_MAC -#import -#endif - -@implementation PFApplication - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -+ (instancetype)currentApplication { - static PFApplication *application; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - application = [[self alloc] init]; - }); - return application; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (BOOL)isAppStoreEnvironment { -#if TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR - return ([[NSBundle mainBundle] pathForResource:@"embedded" ofType:@"mobileprovision"] == nil); -#endif - - return NO; -} - -- (BOOL)isExtensionEnvironment { - return [[[NSBundle mainBundle] bundlePath] hasSuffix:@".appex"]; -} - -- (NSInteger)iconBadgeNumber { -#if TARGET_OS_WATCH - return 0; -#elif TARGET_OS_IOS - return self.systemApplication.applicationIconBadgeNumber; -#elif TARGET_OS_MAC - // Make sure not to use `NSApp` here, because it doesn't work sometimes, - // `NSApplication +sharedApplication` does though. - NSString *badgeLabel = [[NSApplication sharedApplication] dockTile].badgeLabel; - if (badgeLabel.length == 0) { - return 0; - } - - NSScanner *scanner = [NSScanner localizedScannerWithString:badgeLabel]; - - NSInteger number = 0; - [scanner scanInteger:&number]; - if (scanner.scanLocation != badgeLabel.length) { - return 0; - } - - return number; -#endif -} - -- (void)setIconBadgeNumber:(NSInteger)iconBadgeNumber { - if (self.iconBadgeNumber != iconBadgeNumber) { -#if TARGET_OS_IOS - self.systemApplication.applicationIconBadgeNumber = iconBadgeNumber; -#elif !TARGET_OS_WATCH - [[NSApplication sharedApplication] dockTile].badgeLabel = [@(iconBadgeNumber) stringValue]; -#endif - } -} - -- (UIApplication *)systemApplication { -#if TARGET_OS_WATCH - return nil; -#else - // Workaround to make `sharedApplication` still be called even if compiling for App Extensions or WatchKit apps. - return [UIApplication performSelector:@selector(sharedApplication)]; -#endif -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFAssert.h b/FoodbLog/Pods/Parse/Parse/Internal/PFAssert.h deleted file mode 100644 index 35277e0..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFAssert.h +++ /dev/null @@ -1,94 +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. - */ - -#import "PFMacros.h" - -#ifndef Parse_PFAssert_h -#define Parse_PFAssert_h - -/*! - Raises an `NSInvalidArgumentException` if the `condition` does not pass. - Use `description` to supply the way to fix the exception. - */ -#define PFParameterAssert(condition, description, ...) \ - do {\ - if (!(condition)) { \ - [NSException raise:NSInvalidArgumentException \ - format:description, ##__VA_ARGS__]; \ - } \ - } while(0) - -/*! - Raises an `NSRangeException` if the `condition` does not pass. - Use `description` to supply the way to fix the exception. - */ -#define PFRangeAssert(condition, description, ...) \ - do {\ - if (!(condition)) { \ - [NSException raise:NSRangeException \ - format:description, ##__VA_ARGS__]; \ - } \ -} while(0) - -/*! - Raises an `NSInternalInconsistencyException` if the `condition` does not pass. - Use `description` to supply the way to fix the exception. - */ -#define PFConsistencyAssert(condition, description, ...) \ - do { \ - if (!(condition)) { \ - [NSException raise:NSInternalInconsistencyException \ - format:description, ##__VA_ARGS__]; \ - } \ - } while(0) - -/*! - Always raises `NSInternalInconsistencyException` with details - about the method used and class that received the message - */ -#define PFNotDesignatedInitializer() \ -do { \ - PFConsistencyAssert(NO, \ - @"%@ is not the designated initializer for instances of %@.", \ - NSStringFromSelector(_cmd), \ - NSStringFromClass([self class])); \ - return nil; \ -} while (0) - -/*! - Raises `NSInternalInconsistencyException` if current thread is not main thread. - */ -#define PFAssertMainThread() \ -do { \ - PFConsistencyAssert([NSThread isMainThread], @"This method must be called on the main thread."); \ -} while (0) - -/*! - Raises `NSInternalInconsistencyException` if current thread is not the required one. - */ -#define PFAssertIsOnThread(thread) \ -do { \ - PFConsistencyAssert([NSThread currentThread] == thread, \ - @"This method must be called only on thread: %@.", thread); \ -} while (0) - -/*! - Raises `NSInternalInconsistencyException` if the current queue - is not the same as the queue provided. - Make sure you mark the queue first via `PFMarkDispatchQueue` - */ -#define PFAssertIsOnDispatchQueue(queue) \ -do { \ - void *mark = PFOSObjectPointer(queue); \ - PFConsistencyAssert(dispatch_get_specific(mark) == mark, \ - @"%s must be executed on %s", \ - __PRETTY_FUNCTION__, dispatch_queue_get_label(queue)); \ -} while (0) - -#endif diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFAsyncTaskQueue.h b/FoodbLog/Pods/Parse/Parse/Internal/PFAsyncTaskQueue.h deleted file mode 100644 index 45da5dc..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFAsyncTaskQueue.h +++ /dev/null @@ -1,24 +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. - */ - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface PFAsyncTaskQueue : NSObject - -+ (instancetype)taskQueue; - -- (BFTask *)enqueue:(BFContinuationBlock)block; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFAsyncTaskQueue.m b/FoodbLog/Pods/Parse/Parse/Internal/PFAsyncTaskQueue.m deleted file mode 100644 index 2dae167..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFAsyncTaskQueue.m +++ /dev/null @@ -1,70 +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. - */ - -#import "PFAsyncTaskQueue.h" - -#import - -#import "BFTask+Private.h" - -@interface PFAsyncTaskQueue() - -@property (nonatomic, strong) dispatch_queue_t syncQueue; -@property (nonatomic, strong) BFTask *tail; - -@end - -@implementation PFAsyncTaskQueue - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _tail = [BFTask taskWithResult:nil]; - _syncQueue = dispatch_queue_create("com.parse.asynctaskqueue.sync", DISPATCH_QUEUE_SERIAL); - - return self; -} - -+ (instancetype)taskQueue { - return [[self alloc] init]; -} - -///-------------------------------------- -#pragma mark - Enqueue -///-------------------------------------- - -- (BFTask *)enqueue:(BFContinuationBlock)block { - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - dispatch_async(_syncQueue, ^{ - _tail = [_tail continueAsyncWithBlock:block]; - [_tail continueAsyncWithBlock:^id(BFTask *task) { - if (task.faulted) { - NSError *error = task.error; - if (error) { - [source trySetError:error]; - } else { - [source trySetException:task.exception]; - } - } else if (task.cancelled) { - [source trySetCancelled]; - } else { - [source trySetResult:task.result]; - } - return task; - }]; - }); - return source.task; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFBase64Encoder.h b/FoodbLog/Pods/Parse/Parse/Internal/PFBase64Encoder.h deleted file mode 100644 index 4a7d44f..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFBase64Encoder.h +++ /dev/null @@ -1,17 +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. - */ - -#import - -@interface PFBase64Encoder : NSObject - -+ (NSData *)dataFromBase64String:(NSString *)string; -+ (NSString *)base64StringFromData:(NSData *)data; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFBase64Encoder.m b/FoodbLog/Pods/Parse/Parse/Internal/PFBase64Encoder.m deleted file mode 100644 index 07fb5d0..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFBase64Encoder.m +++ /dev/null @@ -1,28 +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. - */ - -#import "PFBase64Encoder.h" - -@implementation PFBase64Encoder - -+ (NSData *)dataFromBase64String:(NSString *)string { - if (!string) { - return [NSData data]; - } - return [[NSData alloc] initWithBase64EncodedString:string options:NSDataBase64DecodingIgnoreUnknownCharacters]; -} - -+ (NSString *)base64StringFromData:(NSData *)data { - if (!data) { - return [NSString string]; - } - return [data base64EncodedStringWithOptions:0]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFBaseState.h b/FoodbLog/Pods/Parse/Parse/Internal/PFBaseState.h deleted file mode 100644 index 535403c..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFBaseState.h +++ /dev/null @@ -1,76 +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. - */ - -#import - -typedef NS_ENUM(uint8_t, PFPropertyInfoAssociationType) { - PFPropertyInfoAssociationTypeDefault, // Assign for c-types, strong for objc-types. - PFPropertyInfoAssociationTypeAssign, - PFPropertyInfoAssociationTypeStrong, - PFPropertyInfoAssociationTypeWeak, - PFPropertyInfoAssociationTypeCopy, - PFPropertyInfoAssociationTypeMutableCopy, -}; - -@interface PFPropertyAttributes : NSObject - -@property (nonatomic, assign, readonly) PFPropertyInfoAssociationType associationType; - -- (instancetype)initWithAssociationType:(PFPropertyInfoAssociationType)associationType NS_DESIGNATED_INITIALIZER; - -+ (instancetype)attributes; -+ (instancetype)attributesWithAssociationType:(PFPropertyInfoAssociationType)associationType; - -@end - -@protocol PFBaseStateSubclass - -/*! - This is the list of properties that should be used automatically for the methods implemented by PFBaseState. - - It should be a dictionary in the format of @{ @"<#property name#>": [PFPropertyAttributes attributes] } - This will be automatically cached by PFBaseState, no need for you to cache it yourself. - - @return a dictionary of property attributes - */ -+ (NSDictionary *)propertyAttributes; - -@end - -/*! - Shared base class for all state objects. - Implements -init, -description, -debugDescription, -hash, -isEqual:, -compareTo:, etc. for you. - */ -@interface PFBaseState : NSObject - -- (instancetype)initWithState:(PFBaseState *)otherState; -+ (instancetype)stateWithState:(PFBaseState *)otherState; - -- (NSComparisonResult)compare:(PFBaseState *)other; - -/*! - Returns a dictionary representation of this object. - - Essentially, it takes the values for the keys of this object, and stuffs them in the dictionary. - It will call -dictionaryRepresentation on any objects it contains, in order to handle base states - contained in this base state. - - If a value is `nil`, it will be replaced with [NSNull null], to ensure all keys exist in the dictionary. - - If you don't like this behavior, you can overwrite the method - -nilValueForProperty:(NSString *) property - to return either nil to skip the key, or a value to use in it's place. - - @return A dictionary representation of this object state. - */ -- (NSDictionary *)dictionaryRepresentation; - -- (id)debugQuickLookObject; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFBaseState.m b/FoodbLog/Pods/Parse/Parse/Internal/PFBaseState.m deleted file mode 100644 index dc6af22..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFBaseState.m +++ /dev/null @@ -1,267 +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. - */ - -#import "PFBaseState.h" - -#import -#import - -#import "PFAssert.h" -#import "PFHash.h" -#import "PFMacros.h" -#import "PFPropertyInfo.h" - -///-------------------------------------- -#pragma mark - Helpers -///-------------------------------------- - -@implementation PFPropertyAttributes - -- (instancetype)init { - return [self initWithAssociationType:PFPropertyInfoAssociationTypeDefault]; -} - -- (instancetype)initWithAssociationType:(PFPropertyInfoAssociationType)associationType { - self = [super init]; - if (!self) return nil; - - _associationType = associationType; - - return self; -} - -+ (instancetype)attributes { - return [[self alloc] init]; -} - -+ (instancetype)attributesWithAssociationType:(PFPropertyInfoAssociationType)associationType { - return [[self alloc] initWithAssociationType:associationType]; -} - -@end - -@interface PFBaseState () { - BOOL _initializing; -} - -@end - -@implementation PFBaseState - -///-------------------------------------- -#pragma mark - Property Info -///-------------------------------------- - -+ (NSSet *)_propertyInfo { - static void *_propertyMapKey = &_propertyMapKey; - static dispatch_queue_t queue; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - queue = dispatch_queue_create("com.parse.basestate.propertyinfo", DISPATCH_QUEUE_SERIAL); - }); - - __block NSMutableSet *results = nil; - dispatch_sync(queue, ^{ - results = objc_getAssociatedObject(self, _propertyMapKey); - if (results) { - return; - } - - NSDictionary *attributesMap = [(id)self propertyAttributes]; - results = [[NSMutableSet alloc] initWithCapacity:attributesMap.count]; - - [attributesMap enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - [results addObject:[PFPropertyInfo propertyInfoWithClass:self - name:key - associationType:[obj associationType]]]; - }]; - - objc_setAssociatedObject(self, _propertyMapKey, results, OBJC_ASSOCIATION_RETAIN); - }); - - return results; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - // To prevent a recursive init function. - if (_initializing) { - return [super init]; - } - - _initializing = YES; - return [self initWithState:nil]; -} - -- (instancetype)initWithState:(id)otherState { - if (!_initializing) { - _initializing = YES; - - self = [self init]; - if (!self) return nil; - } - - NSSet *ourProperties = [[self class] _propertyInfo]; - NSSet *theirProperties = [[otherState class] _propertyInfo]; - - NSMutableSet *shared = [ourProperties mutableCopy]; - [shared intersectSet:theirProperties]; - - for (PFPropertyInfo *property in shared) { - [property takeValueFrom:otherState toObject:self]; - } - - return self; -} - -+ (instancetype)stateWithState:(PFBaseState *)otherState { - return [[self alloc] initWithState:otherState]; -} - -///-------------------------------------- -#pragma mark - Hashing -///-------------------------------------- - -- (NSUInteger)hash { - NSUInteger result = 0; - - for (PFPropertyInfo *property in [[self class] _propertyInfo]) { - result = PFIntegerPairHash(result, [[property getWrappedValueFrom:self] hash]); - } - - return result; -} - -///-------------------------------------- -#pragma mark - Comparison -///-------------------------------------- - -- (NSComparisonResult)compare:(PFBaseState *)other { - PFParameterAssert([other isKindOfClass:[PFBaseState class]], - @"Cannot compatre to an object that isn't a PFBaseState"); - - NSSet *ourProperties = [[self class] _propertyInfo]; - NSSet *theirProperties = [[other class] _propertyInfo]; - - NSMutableSet *shared = [ourProperties mutableCopy]; - [shared intersectSet:theirProperties]; - - for (PFPropertyInfo *info in shared) { - id ourValue = [info getWrappedValueFrom:self]; - id theirValue = [info getWrappedValueFrom:other]; - - if (![ourValue respondsToSelector:@selector(compare:)]) { - continue; - } - - NSComparisonResult result = [ourValue compare:theirValue]; - if (result != NSOrderedSame) { - return result; - } - } - - return NSOrderedSame; -} - -///-------------------------------------- -#pragma mark - Equality -///-------------------------------------- - -- (BOOL)isEqual:(id)other { - if (self == other) { - return YES; - } - - if (![other isKindOfClass:[PFBaseState class]]) { - return NO; - } - - NSSet *ourProperties = [[self class] _propertyInfo]; - NSSet *theirProperties = [[other class] _propertyInfo]; - - NSMutableSet *shared = [ourProperties mutableCopy]; - [shared intersectSet:theirProperties]; - - for (PFPropertyInfo *info in shared) { - id ourValue = [info getWrappedValueFrom:self]; - id theirValue = [info getWrappedValueFrom:other]; - - if (ourValue != theirValue && ![ourValue isEqual:theirValue]) { - return NO; - } - } - - return YES; -} - -///-------------------------------------- -#pragma mark - Description -///-------------------------------------- - -// This allows us to easily use the same implementation for description and debugDescription -- (NSString *)descriptionWithValueSelector:(SEL)toPerform { - NSMutableString *results = [NSMutableString stringWithFormat:@"<%@: %p", [self class], self]; - - for (PFPropertyInfo *property in [[self class] _propertyInfo]) { - id propertyValue = [property getWrappedValueFrom:self]; - NSString *propertyDescription = objc_msgSend_safe(NSString *)(propertyValue, toPerform); - - [results appendFormat:@", %@: %@", property.name, propertyDescription]; - } - - [results appendString:@">"]; - return results; -} - -- (NSString *)description { - return [self descriptionWithValueSelector:_cmd]; -} - -- (NSString *)debugDescription { - return [self descriptionWithValueSelector:_cmd]; -} - -///-------------------------------------- -#pragma mark - Dictionary/QuickLook representation -///-------------------------------------- - -- (id)nilValueForProperty:(NSString *)propertyName { - return [NSNull null]; -} - -// Implementation detail - this returns a mutable dictionary with mutable leaves. -- (NSDictionary *)dictionaryRepresentation { - NSSet *properties = [[self class] _propertyInfo]; - NSMutableDictionary *results = [[NSMutableDictionary alloc] initWithCapacity:properties.count]; - - for (PFPropertyInfo *info in properties) { - id value = [info getWrappedValueFrom:self]; - - if (value == nil) { - value = [self nilValueForProperty:info.name]; - - if (value == nil) { - continue; - } - } - - results[info.name] = value; - } - - return results; -} - -- (id)debugQuickLookObject { - return [[self dictionaryRepresentation] description]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFCategoryLoader.h b/FoodbLog/Pods/Parse/Parse/Internal/PFCategoryLoader.h deleted file mode 100644 index 9c298e2..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFCategoryLoader.h +++ /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. - */ - -#import - -@interface PFCategoryLoader : NSObject - -+ (void)loadPrivateCategories; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFCategoryLoader.m b/FoodbLog/Pods/Parse/Parse/Internal/PFCategoryLoader.m deleted file mode 100644 index 1a38f40..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFCategoryLoader.m +++ /dev/null @@ -1,20 +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. - */ - -#import "PFCategoryLoader.h" - -#import "BFTask+Private.h" - -@implementation PFCategoryLoader - -+ (void)loadPrivateCategories { - forceLoadCategory_BFTask_Private(); -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFCommandCache.h b/FoodbLog/Pods/Parse/Parse/Internal/PFCommandCache.h deleted file mode 100644 index 4d780cf..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFCommandCache.h +++ /dev/null @@ -1,52 +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. - */ - -#import - -#import - -#import "PFEventuallyQueue.h" - -@class PFCommandCacheTestHelper; -@class PFObject; - -/*! - ParseCommandCache manages an on-disk cache of commands to be executed, and a thread with a standard run loop - that executes the commands. There should only ever be one instance of this class, because multiple instances - would be running separate threads trying to read and execute the same commands. - */ -@interface PFCommandCache : PFEventuallyQueue - -@property (nonatomic, copy, readonly) NSString *diskCachePath; -@property (nonatomic, assign, readonly) unsigned long long diskCacheSize; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -/*! - Creates the command cache object for all ParseObjects with default configuration. - This command cache is used to locally store save commands created by the [PFObject saveEventually]. - When a PFCommandCache is instantiated, it will begin running its run loop, - which will start by processing any commands already stored in the on-disk queue. - */ -+ (instancetype)newDefaultCommandCacheWithCommandRunner:(id)commandRunner - cacheFolderPath:(NSString *)cacheFolderPath; - -- (instancetype)initWithCommandRunner:(id)commandRunner - maxAttemptsCount:(NSUInteger)attemptsCount - retryInterval:(NSTimeInterval)retryInterval NS_UNAVAILABLE; - -- (instancetype)initWithCommandRunner:(id)commandRunner - maxAttemptsCount:(NSUInteger)attemptsCount - retryInterval:(NSTimeInterval)retryInterval - diskCachePath:(NSString *)diskCachePath - diskCacheSize:(unsigned long long)diskCacheSize NS_DESIGNATED_INITIALIZER; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFCommandCache.m b/FoodbLog/Pods/Parse/Parse/Internal/PFCommandCache.m deleted file mode 100644 index 6889964..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFCommandCache.m +++ /dev/null @@ -1,330 +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. - */ - -#import "PFCommandCache.h" - -#include -#include - -#import -#import - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFCommandResult.h" -#import "PFCoreManager.h" -#import "PFErrorUtilities.h" -#import "PFEventuallyQueue_Private.h" -#import "PFFileManager.h" -#import "PFLogging.h" -#import "PFMacros.h" -#import "PFMultiProcessFileLockController.h" -#import "PFObject.h" -#import "PFObjectLocalIdStore.h" -#import "PFObjectPrivate.h" -#import "PFRESTCommand.h" -#import "Parse_Private.h" - -static NSString *const _PFCommandCacheDiskCacheDirectoryName = @"Command Cache"; - -static const NSString *PFCommandCachePrefixString = @"Command"; -static unsigned long long const PFCommandCacheDefaultDiskCacheSize = 10 * 1024 * 1024; // 10 MB - -@interface PFCommandCache () { - unsigned int _fileCounter; -} - -@property (nonatomic, assign, readwrite, setter=_setDiskCacheSize:) unsigned long long diskCacheSize; - -@end - -@implementation PFCommandCache - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -+ (instancetype)newDefaultCommandCacheWithCommandRunner:(id)commandRunner - cacheFolderPath:(NSString *)cacheFolderPath { - NSString *diskCachePath = [cacheFolderPath stringByAppendingPathComponent:_PFCommandCacheDiskCacheDirectoryName]; - diskCachePath = [diskCachePath stringByStandardizingPath]; - PFCommandCache *cache = [[PFCommandCache alloc] initWithCommandRunner:commandRunner - maxAttemptsCount:PFEventuallyQueueDefaultMaxAttemptsCount - retryInterval:PFEventuallyQueueDefaultTimeoutRetryInterval - diskCachePath:diskCachePath - diskCacheSize:PFCommandCacheDefaultDiskCacheSize]; - [cache start]; - return cache; -} - -- (instancetype)initWithCommandRunner:(id)commandRunner - maxAttemptsCount:(NSUInteger)attemptsCount - retryInterval:(NSTimeInterval)retryInterval { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithCommandRunner:(id)commandRunner - maxAttemptsCount:(NSUInteger)attemptsCount - retryInterval:(NSTimeInterval)retryInterval - diskCachePath:(NSString *)diskCachePath - diskCacheSize:(unsigned long long)diskCacheSize { - self = [super initWithCommandRunner:commandRunner maxAttemptsCount:attemptsCount retryInterval:retryInterval]; - if (!self) return nil; - - _diskCachePath = diskCachePath; - _diskCacheSize = diskCacheSize; - _fileCounter = 0; - - [self _createDiskCachePathIfNeeded]; - - return self; -} - -///-------------------------------------- -#pragma mark - Controlling Queue -///-------------------------------------- - -- (void)removeAllCommands { - [self pause]; - - [super removeAllCommands]; - - NSArray *commandIdentifiers = [self _pendingCommandIdentifiers]; - NSMutableArray *tasks = [NSMutableArray arrayWithCapacity:[commandIdentifiers count]]; - - for (NSString *identifier in commandIdentifiers) { - BFTask *task = [self _removeFileForCommandWithIdentifier:identifier]; - [tasks addObject:task]; - } - - [[BFTask taskForCompletionOfAllTasks:tasks] waitUntilFinished]; - - [self resume]; -} - -///-------------------------------------- -#pragma mark - PFEventuallyQueue -///-------------------------------------- - -- (void)_simulateReboot { - [super _simulateReboot]; - [self _createDiskCachePathIfNeeded]; -} - -///-------------------------------------- -#pragma mark - PFEventuallyQueueSubclass -///-------------------------------------- - -- (NSString *)_newIdentifierForCommand:(id)command { - // Start with current time - so we can sort identifiers and get the oldest one first. - return [NSString stringWithFormat:@"%@-%016qx-%08x-%@", - PFCommandCachePrefixString, - (unsigned long long)[NSDate timeIntervalSinceReferenceDate], - _fileCounter++, - [[NSUUID UUID] UUIDString]]; -} - -- (NSArray *)_pendingCommandIdentifiers { - NSArray *result = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:self.diskCachePath error:nil]; - // Only accept files that starts with "Command" since sometimes the directory is filled with garbage - // e.g.: https://phab.parse.com/file/info/PHID-FILE-qgbwk7sm7kcyaks6n4j7/ - result = [result filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF BEGINSWITH %@", PFCommandCachePrefixString]]; - - return [result sortedArrayUsingSelector:@selector(compare:)]; -} - -- (id)_commandWithIdentifier:(NSString *)identifier error:(NSError **)error { - [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:self.diskCachePath]; - - NSError *innerError = nil; - NSData *jsonData = [NSData dataWithContentsOfFile:[self _filePathForCommandWithIdentifier:identifier] - options:NSDataReadingUncached - error:&innerError]; - - [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:self.diskCachePath]; - - if (innerError || !jsonData) { - NSString *message = [NSString stringWithFormat:@"Failed to read command from cache. %@", - innerError ? [innerError localizedDescription] : @""]; - innerError = [PFErrorUtilities errorWithCode:kPFErrorInternalServer - message:message]; - if (error) { - *error = innerError; - } - return nil; - } - - id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData - options:0 - error:&innerError]; - if (innerError) { - NSString *message = [NSString stringWithFormat:@"Failed to deserialiaze command from cache. %@", - [innerError localizedDescription]]; - innerError = [PFErrorUtilities errorWithCode:kPFErrorInternalServer - message:message]; - } else { - if ([PFRESTCommand isValidDictionaryRepresentation:jsonObject]) { - return [PFRESTCommand commandFromDictionaryRepresentation:jsonObject]; - } - innerError = [PFErrorUtilities errorWithCode:kPFErrorInternalServer - message:@"Failed to construct eventually command from cache." - shouldLog:NO]; - } - if (innerError && error) { - *error = innerError; - } - - return nil; -} - -- (BFTask *)_enqueueCommandInBackground:(id)command - object:(PFObject *)object - identifier:(NSString *)identifier { - return [self _saveCommandToCacheInBackground:command object:object identifier:identifier]; -} - -- (BFTask *)_didFinishRunningCommand:(id)command - withIdentifier:(NSString *)identifier - resultTask:(BFTask *)resultTask { - // Get the new objectId and mark the new localId so it can be resolved. - if (command.localId) { - NSDictionary *dictionaryResult = nil; - if ([resultTask.result isKindOfClass:[NSDictionary class]]) { - dictionaryResult = resultTask.result; - } else if ([resultTask.result isKindOfClass:[PFCommandResult class]]) { - PFCommandResult *commandResult = resultTask.result; - dictionaryResult = commandResult.result; - } - - if (dictionaryResult != nil) { - NSString *objectId = dictionaryResult[@"objectId"]; - if (objectId) { - [[Parse _currentManager].coreManager.objectLocalIdStore setObjectId:objectId forLocalId:command.localId]; - } - } - } - - [[self _removeFileForCommandWithIdentifier:identifier] waitUntilFinished]; - return [super _didFinishRunningCommand:command withIdentifier:identifier resultTask:resultTask]; -} - -- (BFTask *)_waitForOperationSet:(PFOperationSet *)operationSet eventuallyPin:(PFEventuallyPin *)eventuallyPin { - // Do nothing. This is only relevant in PFPinningEventuallyQueue. Looks super hacky you said? Yes it is! - return [BFTask taskWithResult:nil]; -} - -///-------------------------------------- -#pragma mark - Disk Cache -///-------------------------------------- - -- (BFTask *)_cleanupDiskCacheWithRequiredFreeSize:(NSUInteger)requiredSize { - return [BFTask taskFromExecutor:[BFExecutor defaultExecutor] withBlock:^id{ - NSUInteger size = requiredSize; - - NSMutableDictionary *commandSizes = [NSMutableDictionary dictionary]; - - [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:self.diskCachePath]; - NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtPath:self.diskCachePath]; - - NSString *identifier = nil; - while ((identifier = [enumerator nextObject])) { - NSNumber *fileSize = [enumerator fileAttributes][NSFileSize]; - if (fileSize) { - commandSizes[identifier] = fileSize; - size += [fileSize unsignedIntegerValue]; - } - } - - [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:self.diskCachePath]; - - if (size > self.diskCacheSize) { - // Get identifiers and sort them to remove oldest commands first - NSArray *identifiers = [[commandSizes allKeys] sortedArrayUsingSelector:@selector(compare:)]; - for (NSString *identifier in identifiers) @autoreleasepool { - [self _removeFileForCommandWithIdentifier:identifier]; - size -= [commandSizes[identifier] unsignedIntegerValue]; - - if (size <= self.diskCacheSize) { - break; - } - [commandSizes removeObjectForKey:identifier]; - } - } - - return [BFTask taskWithResult:nil]; - }]; -} - -- (void)_setDiskCacheSize:(unsigned long long)diskCacheSize { - _diskCacheSize = diskCacheSize; -} - -///-------------------------------------- -#pragma mark - Files -///-------------------------------------- - -- (BFTask *)_saveCommandToCacheInBackground:(id)command - object:(PFObject *)object - identifier:(NSString *)identifier { - if (object != nil && object.objectId == nil) { - command.localId = [object getOrCreateLocalId]; - } - - @weakify(self); - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - - NSError *error = nil; - NSData *data = [NSJSONSerialization dataWithJSONObject:[command dictionaryRepresentation] - options:0 - error:&error]; - NSUInteger commandSize = [data length]; - if (commandSize > self.diskCacheSize) { - error = [PFErrorUtilities errorWithCode:kPFErrorInternalServer - message:@"Failed to run command, because it's too big."]; - } else if (commandSize == 0) { - error = [PFErrorUtilities errorWithCode:kPFErrorInternalServer - message:@"Failed to run command, because it's empty."]; - } - - if (error) { - return [BFTask taskWithError:error]; - } - - [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:self.diskCachePath]; - return [[[self _cleanupDiskCacheWithRequiredFreeSize:commandSize] continueWithBlock:^id(BFTask *task) { - NSString *filePath = [self _filePathForCommandWithIdentifier:identifier]; - return [PFFileManager writeDataAsync:data toFile:filePath]; - }] continueWithBlock:^id(BFTask *task) { - [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:self.diskCachePath]; - return task; - }]; - }]; -} - -- (BFTask *)_removeFileForCommandWithIdentifier:(NSString *)identifier { - NSString *filePath = [self _filePathForCommandWithIdentifier:identifier]; - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:self.diskCachePath]; - return [PFFileManager removeItemAtPathAsync:filePath withFileLock:NO]; - }] continueWithBlock:^id(BFTask *task) { - [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:self.diskCachePath]; - return task; // Roll-forward the previous task. - }]; -} - -- (NSString *)_filePathForCommandWithIdentifier:(NSString *)identifier { - return [self.diskCachePath stringByAppendingPathComponent:identifier]; -} - -- (void)_createDiskCachePathIfNeeded { - [[PFFileManager createDirectoryIfNeededAsyncAtPath:_diskCachePath] waitForResult:nil withMainThreadWarning:NO]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFCommandCache_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/PFCommandCache_Private.h deleted file mode 100644 index 869ce66..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFCommandCache_Private.h +++ /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. - */ - -#import "PFCommandCache.h" - -@interface PFCommandCache () - -- (void)_setDiskCacheSize:(unsigned long long)diskCacheSize; - -@end; diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFCommandResult.h b/FoodbLog/Pods/Parse/Parse/Internal/PFCommandResult.h deleted file mode 100644 index a87d667..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFCommandResult.h +++ /dev/null @@ -1,34 +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. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface PFCommandResult : NSObject - -@property (nonatomic, strong, readonly) id result; -@property (nullable, nonatomic, copy, readonly) NSString *resultString; -@property (nullable, nonatomic, strong, readonly) NSHTTPURLResponse *httpResponse; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithResult:(NSDictionary *)result - resultString:(nullable NSString *)resultString - httpResponse:(nullable NSHTTPURLResponse *)response NS_DESIGNATED_INITIALIZER; -+ (instancetype)commandResultWithResult:(NSDictionary *)result - resultString:(nullable NSString *)resultString - httpResponse:(nullable NSHTTPURLResponse *)response; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFCommandResult.m b/FoodbLog/Pods/Parse/Parse/Internal/PFCommandResult.m deleted file mode 100644 index e83f2c3..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFCommandResult.m +++ /dev/null @@ -1,43 +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. - */ - -#import "PFCommandResult.h" - -#import "PFAssert.h" - -@implementation PFCommandResult - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithResult:(NSDictionary *)result - resultString:(NSString *)resultString - httpResponse:(NSHTTPURLResponse *)response { - self = [super init]; - if (!self) return nil; - - _result = result; - _resultString = [resultString copy]; - _httpResponse = response; - - return self; -} - -+ (instancetype)commandResultWithResult:(NSDictionary *)result - resultString:(NSString *)resultString - httpResponse:(NSHTTPURLResponse *)response { - return [[self alloc] initWithResult:result resultString:resultString httpResponse:response]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFCoreDataProvider.h b/FoodbLog/Pods/Parse/Parse/Internal/PFCoreDataProvider.h deleted file mode 100644 index 021e974..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFCoreDataProvider.h +++ /dev/null @@ -1,101 +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. - */ - -#ifndef Parse_PFCoreDataProvider_h -#define Parse_PFCoreDataProvider_h - -NS_ASSUME_NONNULL_BEGIN - -///-------------------------------------- -/// @name Object -///-------------------------------------- - -@class PFObjectController; - -@protocol PFObjectControllerProvider - -@property (nonatomic, strong) PFObjectController *objectController; - -@end - -@class PFObjectBatchController; - -@protocol PFObjectBatchController - -@property (nonatomic, strong, readonly) PFObjectBatchController *objectBatchController; - -@end - -@class PFObjectFilePersistenceController; - -@protocol PFObjectFilePersistenceControllerProvider - -@property (nonatomic, strong, readonly) PFObjectFilePersistenceController *objectFilePersistenceController; - -@end - -@class PFObjectLocalIdStore; - -@protocol PFObjectLocalIdStoreProvider - -@property (nonatomic, strong) PFObjectLocalIdStore *objectLocalIdStore; - -@end - -///-------------------------------------- -/// @name User -///-------------------------------------- - -@class PFUserAuthenticationController; - -@protocol PFUserAuthenticationControllerProvider - -@property (nonatomic, strong) PFUserAuthenticationController *userAuthenticationController; - -@end - -@class PFCurrentUserController; - -@protocol PFCurrentUserControllerProvider - -@property (nonatomic, strong) PFCurrentUserController *currentUserController; - -@end - -@class PFUserController; - -@protocol PFUserControllerProvider - -@property (nonatomic, strong) PFUserController *userController; - -@end - -///-------------------------------------- -/// @name Installation -///-------------------------------------- - -@class PFCurrentInstallationController; - -@protocol PFCurrentInstallationControllerProvider - -@property (nonatomic, strong) PFCurrentInstallationController *currentInstallationController; - -@end - -@class PFInstallationController; - -@protocol PFInstallationControllerProvider - -@property (nonatomic, strong) PFInstallationController *installationController; - -@end - -#endif - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFCoreManager.h b/FoodbLog/Pods/Parse/Parse/Internal/PFCoreManager.h deleted file mode 100644 index 19e2fca..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFCoreManager.h +++ /dev/null @@ -1,78 +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. - */ - -#import - -#import "PFCoreDataProvider.h" -#import "PFDataProvider.h" - -@class PFInstallationIdentifierStore; - -NS_ASSUME_NONNULL_BEGIN - -@protocol PFCoreManagerDataSource - - -@property (nonatomic, strong, readonly) PFInstallationIdentifierStore *installationIdentifierStore; - -@end - -@class PFCloudCodeController; -@class PFConfigController; -@class PFFileController; -@class PFObjectFilePersistenceController; -@class PFObjectSubclassingController; -@class PFPinningObjectStore; -@class PFQueryController; -@class PFSessionController; - -@interface PFCoreManager : NSObject - - -@property (nonatomic, weak, readonly) id dataSource; - -@property (nonatomic, strong) PFQueryController *queryController; -@property (nonatomic, strong) PFFileController *fileController; -@property (nonatomic, strong) PFCloudCodeController *cloudCodeController; -@property (nonatomic, strong) PFConfigController *configController; -@property (nonatomic, strong) PFSessionController *sessionController; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; - -+ (instancetype)managerWithDataSource:(id)dataSource; - -///-------------------------------------- -/// @name ObjectFilePersistenceController -///-------------------------------------- - -- (void)unloadObjectFilePersistenceController; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFCoreManager.m b/FoodbLog/Pods/Parse/Parse/Internal/PFCoreManager.m deleted file mode 100644 index c2b02dc..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFCoreManager.m +++ /dev/null @@ -1,447 +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. - */ - -#import "PFCoreManager.h" - -#import "PFAssert.h" -#import "PFCachedQueryController.h" -#import "PFCloudCodeController.h" -#import "PFConfigController.h" -#import "PFCurrentInstallationController.h" -#import "PFCurrentUserController.h" -#import "PFFileController.h" -#import "PFInstallationController.h" -#import "PFLocationManager.h" -#import "PFMacros.h" -#import "PFObjectBatchController.h" -#import "PFObjectController.h" -#import "PFObjectFilePersistenceController.h" -#import "PFObjectLocalIdStore.h" -#import "PFObjectSubclassingController.h" -#import "PFOfflineObjectController.h" -#import "PFOfflineQueryController.h" -#import "PFPinningObjectStore.h" -#import "PFSessionController.h" -#import "PFUserAuthenticationController.h" -#import "PFUserController.h" - -@interface PFCoreManager () { - dispatch_queue_t _locationManagerAccessQueue; - dispatch_queue_t _controllerAccessQueue; - dispatch_queue_t _objectLocalIdStoreAccessQueue; -} - -@end - -@implementation PFCoreManager - -@synthesize locationManager = _locationManager; - -@synthesize queryController = _queryController; -@synthesize fileController = _fileController; -@synthesize cloudCodeController = _cloudCodeController; -@synthesize configController = _configController; -@synthesize objectController = _objectController; -@synthesize objectBatchController = _objectBatchController; -@synthesize objectFilePersistenceController = _objectFilePersistenceController; -@synthesize objectLocalIdStore = _objectLocalIdStore; -@synthesize pinningObjectStore = _pinningObjectStore; -@synthesize userAuthenticationController = _userAuthenticationController; -@synthesize sessionController = _sessionController; -@synthesize currentInstallationController = _currentInstallationController; -@synthesize currentUserController = _currentUserController; -@synthesize userController = _userController; -@synthesize installationController = _installationController; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithDataSource:(id)dataSource { - self = [super init]; - if (!self) return nil; - - _dataSource = dataSource; - - _locationManagerAccessQueue = dispatch_queue_create("com.parse.core.locationManager", DISPATCH_QUEUE_SERIAL); - _controllerAccessQueue = dispatch_queue_create("com.parse.core.controller.accessQueue", DISPATCH_QUEUE_SERIAL); - _objectLocalIdStoreAccessQueue = dispatch_queue_create("com.parse.core.object.localIdStore", DISPATCH_QUEUE_SERIAL); - - return self; -} - -+ (instancetype)managerWithDataSource:(id)dataSource { - return [[self alloc] initWithDataSource:dataSource]; -} - -///-------------------------------------- -#pragma mark - LocationManager -///-------------------------------------- - -- (PFLocationManager *)locationManager { - __block PFLocationManager *manager; - dispatch_sync(_locationManagerAccessQueue, ^{ - if (!_locationManager) { - _locationManager = [[PFLocationManager alloc] init]; - } - manager = _locationManager; - }); - return manager; -} - -///-------------------------------------- -#pragma mark - QueryController -///-------------------------------------- - -- (PFQueryController *)queryController { - __block PFQueryController *queryController; - dispatch_sync(_controllerAccessQueue, ^{ - if (!_queryController) { - id dataSource = self.dataSource; - if (dataSource.offlineStoreLoaded) { - _queryController = [PFOfflineQueryController controllerWithCommonDataSource:dataSource - coreDataSource:self]; - } else { - _queryController = [PFCachedQueryController controllerWithCommonDataSource:dataSource]; - } - } - queryController = _queryController; - }); - return queryController; -} - -- (void)setQueryController:(PFQueryController *)queryController { - dispatch_sync(_controllerAccessQueue, ^{ - _queryController = queryController; - }); -} - -///-------------------------------------- -#pragma mark - FileController -///-------------------------------------- - -- (PFFileController *)fileController { - __block PFFileController *controller = nil; - dispatch_sync(_controllerAccessQueue, ^{ - if (!_fileController) { - _fileController = [PFFileController controllerWithDataSource:self.dataSource]; - } - controller = _fileController; - }); - return controller; -} - -- (void)setFileController:(PFFileController *)fileController { - dispatch_sync(_controllerAccessQueue, ^{ - _fileController = fileController; - }); -} - -///-------------------------------------- -#pragma mark - CloudCodeController -///-------------------------------------- - -- (PFCloudCodeController *)cloudCodeController { - __block PFCloudCodeController *controller = nil; - dispatch_sync(_controllerAccessQueue, ^{ - if (!_cloudCodeController) { - _cloudCodeController = [[PFCloudCodeController alloc] initWithCommandRunner:self.dataSource.commandRunner]; - } - controller = _cloudCodeController; - }); - return controller; -} - -- (void)setCloudCodeController:(PFCloudCodeController *)cloudCodeController { - dispatch_sync(_controllerAccessQueue, ^{ - _cloudCodeController = cloudCodeController; - }); -} - -///-------------------------------------- -#pragma mark - ConfigController -///-------------------------------------- - -- (PFConfigController *)configController { - __block PFConfigController *controller = nil; - dispatch_sync(_controllerAccessQueue, ^{ - if (!_configController) { - id dataSource = self.dataSource; - _configController = [[PFConfigController alloc] initWithFileManager:dataSource.fileManager - commandRunner:dataSource.commandRunner]; - } - controller = _configController; - }); - return controller; -} - -- (void)setConfigController:(PFConfigController *)configController { - dispatch_sync(_controllerAccessQueue, ^{ - _configController = configController; - }); -} - -///-------------------------------------- -#pragma mark - ObjectController -///-------------------------------------- - -- (PFObjectController *)objectController { - __block PFObjectController *controller = nil; - dispatch_sync(_controllerAccessQueue, ^{ - if (!_objectController) { - id dataSource = self.dataSource; - if (dataSource.offlineStoreLoaded) { - _objectController = [PFOfflineObjectController controllerWithDataSource:dataSource]; - } else { - _objectController = [PFObjectController controllerWithDataSource:dataSource]; - } - } - controller = _objectController; - }); - return controller; -} - -- (void)setObjectController:(PFObjectController *)controller { - dispatch_sync(_controllerAccessQueue, ^{ - _objectController = controller; - }); -} - -///-------------------------------------- -#pragma mark - ObjectBatchController -///-------------------------------------- - -- (PFObjectBatchController *)objectBatchController { - __block PFObjectBatchController *controller = nil; - dispatch_sync(_controllerAccessQueue, ^{ - if (!_objectBatchController) { - _objectBatchController = [PFObjectBatchController controllerWithDataSource:self.dataSource]; - } - controller = _objectBatchController; - }); - return controller; -} - -///-------------------------------------- -#pragma mark - ObjectFilePersistenceController -///-------------------------------------- - -- (PFObjectFilePersistenceController *)objectFilePersistenceController { - __block PFObjectFilePersistenceController *controller = nil; - dispatch_sync(_controllerAccessQueue, ^{ - if (!_objectFilePersistenceController) { - _objectFilePersistenceController = [PFObjectFilePersistenceController controllerWithDataSource:self.dataSource]; - } - controller = _objectFilePersistenceController; - }); - return controller; -} - -- (void)unloadObjectFilePersistenceController { - dispatch_sync(_controllerAccessQueue, ^{ - _objectFilePersistenceController = nil; - }); -} - -///-------------------------------------- -#pragma mark - Pinning Object Store -///-------------------------------------- - -- (PFPinningObjectStore *)pinningObjectStore { - __block PFPinningObjectStore *controller = nil; - dispatch_sync(_controllerAccessQueue, ^{ - if (!_pinningObjectStore) { - _pinningObjectStore = [PFPinningObjectStore storeWithDataSource:self.dataSource]; - } - controller = _pinningObjectStore; - }); - return controller; -} - -- (void)setPinningObjectStore:(PFPinningObjectStore *)pinningObjectStore { - dispatch_sync(_controllerAccessQueue, ^{ - _pinningObjectStore = pinningObjectStore; - }); -} - -///-------------------------------------- -#pragma mark - Object LocalId Store -///-------------------------------------- - -- (PFObjectLocalIdStore *)objectLocalIdStore { - __block PFObjectLocalIdStore *store = nil; - @weakify(self); - dispatch_sync(_objectLocalIdStoreAccessQueue, ^{ - @strongify(self); - if (!_objectLocalIdStore) { - _objectLocalIdStore = [[PFObjectLocalIdStore alloc] initWithDataSource:self.dataSource]; - } - store = _objectLocalIdStore; - }); - return store; -} - -- (void)setObjectLocalIdStore:(PFObjectLocalIdStore *)objectLocalIdStore { - dispatch_sync(_objectLocalIdStoreAccessQueue, ^{ - _objectLocalIdStore = objectLocalIdStore; - }); -} - -///-------------------------------------- -#pragma mark - UserAuthenticationController -///-------------------------------------- - -- (PFUserAuthenticationController *)userAuthenticationController { - __block PFUserAuthenticationController *controller = nil; - dispatch_sync(_controllerAccessQueue, ^{ - if (!_userAuthenticationController) { - _userAuthenticationController = [PFUserAuthenticationController controllerWithDataSource:self]; - } - controller = _userAuthenticationController; - }); - return controller; -} - -- (void)setUserAuthenticationController:(PFUserAuthenticationController *)userAuthenticationController { - dispatch_sync(_controllerAccessQueue, ^{ - _userAuthenticationController = userAuthenticationController; - }); -} - -///-------------------------------------- -#pragma mark - SessionController -///-------------------------------------- - -- (PFSessionController *)sessionController { - __block PFSessionController *controller = nil; - dispatch_sync(_controllerAccessQueue, ^{ - if (!_sessionController) { - _sessionController = [PFSessionController controllerWithDataSource:self.dataSource]; - } - controller = _sessionController; - }); - return controller; -} - -- (void)setSessionController:(PFSessionController *)sessionController { - dispatch_sync(_controllerAccessQueue, ^{ - _sessionController = sessionController; - }); -} - -#if !TARGET_OS_WATCH - -///-------------------------------------- -#pragma mark - Current Installation Controller -///-------------------------------------- - -- (PFCurrentInstallationController *)currentInstallationController { - __block PFCurrentInstallationController *controller = nil; - dispatch_sync(_controllerAccessQueue, ^{ - if (!_currentInstallationController) { - id dataSource = self.dataSource; - PFCurrentObjectStorageType storageType = (dataSource.offlineStore ? - PFCurrentObjectStorageTypeOfflineStore : - PFCurrentObjectStorageTypeFile); - _currentInstallationController = [PFCurrentInstallationController controllerWithStorageType:storageType - commonDataSource:dataSource - coreDataSource:self]; - } - controller = _currentInstallationController; - }); - return controller; -} - -- (void)setCurrentInstallationController:(PFCurrentInstallationController *)controller { - dispatch_sync(_controllerAccessQueue, ^{ - _currentInstallationController = controller; - }); -} - -#endif - -///-------------------------------------- -#pragma mark - Current User Controller -///-------------------------------------- - -- (PFCurrentUserController *)currentUserController { - __block PFCurrentUserController *controller = nil; - dispatch_sync(_controllerAccessQueue, ^{ - if (!_currentUserController) { - id dataSource = self.dataSource; - PFCurrentObjectStorageType storageType = (dataSource.offlineStore ? - PFCurrentObjectStorageTypeOfflineStore : - PFCurrentObjectStorageTypeFile); - _currentUserController = [PFCurrentUserController controllerWithStorageType:storageType - commonDataSource:dataSource - coreDataSource:self]; - } - controller = _currentUserController; - }); - return controller; -} - -- (void)setCurrentUserController:(PFCurrentUserController *)currentUserController { - dispatch_sync(_controllerAccessQueue, ^{ - _currentUserController = currentUserController; - }); -} - -#if !TARGET_OS_WATCH - -///-------------------------------------- -#pragma mark - Installation Controller -///-------------------------------------- - -- (PFInstallationController *)installationController { - __block PFInstallationController *controller = nil; - dispatch_sync(_controllerAccessQueue, ^{ - if (!_installationController) { - _installationController = [PFInstallationController controllerWithDataSource:self]; - } - controller = _installationController; - }); - return controller; -} - -- (void)setInstallationController:(PFInstallationController *)installationController { - dispatch_sync(_controllerAccessQueue, ^{ - _installationController = installationController; - }); -} - -#endif - -///-------------------------------------- -#pragma mark - User Controller -///-------------------------------------- - -- (PFUserController *)userController { - __block PFUserController *controller = nil; - dispatch_sync(_controllerAccessQueue, ^{ - if (!_userController) { - _userController = [PFUserController controllerWithCommonDataSource:self.dataSource - coreDataSource:self]; - } - controller = _userController; - }); - return controller; -} - -- (void)setUserController:(PFUserController *)userController { - dispatch_sync(_controllerAccessQueue, ^{ - _userController = userController; - }); -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFDataProvider.h b/FoodbLog/Pods/Parse/Parse/Internal/PFDataProvider.h deleted file mode 100644 index 3813c4d..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFDataProvider.h +++ /dev/null @@ -1,90 +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. - */ - -#ifndef Parse_PFDataProviders_h -#define Parse_PFDataProviders_h - -NS_ASSUME_NONNULL_BEGIN - -@protocol PFCommandRunning; - -@protocol PFCommandRunnerProvider - -@property (nonatomic, strong, readonly) id commandRunner; - -@end - -@class PFFileManager; - -@protocol PFFileManagerProvider - -@property (nonatomic, strong, readonly) PFFileManager *fileManager; - -@end - -@class PFOfflineStore; - -@protocol PFOfflineStoreProvider - -@property (nullable, nonatomic, strong) PFOfflineStore *offlineStore; -@property (nonatomic, assign, readonly, getter=isOfflineStoreLoaded) BOOL offlineStoreLoaded; - -@end - -@class PFEventuallyQueue; - -@protocol PFEventuallyQueueProvider - -@property (nonatomic, strong, readonly) PFEventuallyQueue *eventuallyQueue; - -@end - -@class PFKeychainStore; - -@protocol PFKeychainStoreProvider - -@property (nonatomic, strong, readonly) PFKeychainStore *keychainStore; - -@end - -@class PFKeyValueCache; - -@protocol PFKeyValueCacheProvider - -@property (nonatomic, strong, readonly) PFKeyValueCache *keyValueCache; - -@end - -@class PFLocationManager; - -@protocol PFLocationManagerProvider - -@property (nonatomic, strong, readonly) PFLocationManager *locationManager; - -@end - -@class PFPinningObjectStore; - -@protocol PFPinningObjectStoreProvider - -@property (nonatomic, strong) PFPinningObjectStore *pinningObjectStore; - -@end - -@class PFInstallationIdentifierStore; - -@protocol PFInstallationIdentifierStoreProvider - -@property (nonatomic, strong, readonly) PFInstallationIdentifierStore *installationIdentifierStore; - -@end - -#endif - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFDateFormatter.h b/FoodbLog/Pods/Parse/Parse/Internal/PFDateFormatter.h deleted file mode 100644 index d258e76..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFDateFormatter.h +++ /dev/null @@ -1,55 +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. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface PFDateFormatter : NSObject - -+ (instancetype)sharedFormatter; - -///-------------------------------------- -/// @name String from Date -///-------------------------------------- - -/*! - Converts `NSDate` into `NSString` representation using the following format: yyyy-MM-dd'T'HH:mm:ss.SSS'Z' - - @param date `NSDate` to convert. - - @returns Formatted `NSString` representation. - */ -- (NSString *)preciseStringFromDate:(NSDate *)date; - -///-------------------------------------- -/// @name Date from String -///-------------------------------------- - -/*! - Converts `NSString` representation of a date into `NSDate` object. - - @discussion Following date formats are supported: - YYYY-MM-DD - YYYY-MM-DD HH:MM'Z' - YYYY-MM-DD HH:MM:SS'Z' - YYYY-MM-DD HH:MM:SS.SSS'Z' - YYYY-MM-DDTHH:MM'Z' - YYYY-MM-DDTHH:MM:SS'Z' - YYYY-MM-DDTHH:MM:SS.SSS'Z' - - @param string `NSString` representation to convert. - - @returns `NSDate` incapsulating the date. - */ -- (NSDate *)dateFromString:(NSString *)string; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFDateFormatter.m b/FoodbLog/Pods/Parse/Parse/Internal/PFDateFormatter.m deleted file mode 100644 index c4a6ba2..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFDateFormatter.m +++ /dev/null @@ -1,118 +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. - */ - -#import "PFDateFormatter.h" - -#import - -@interface PFDateFormatter () { - dispatch_queue_t _synchronizationQueue; - - sqlite3 *_sqliteDatabase; - sqlite3_stmt *_stringToDateStatement; -} - -@property (nonatomic, strong, readonly) NSDateFormatter *preciseDateFormatter; - -@end - -@implementation PFDateFormatter - -@synthesize preciseDateFormatter = _preciseDateFormatter; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -+ (instancetype)sharedFormatter { - static PFDateFormatter *formatter; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - formatter = [[self alloc] init]; - }); - return formatter; -} - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _synchronizationQueue = dispatch_queue_create("com.parse.dateFormatter", DISPATCH_QUEUE_SERIAL); - - //TODO: (nlutsenko) Check for error here. - sqlite3_open(":memory:", &_sqliteDatabase); - sqlite3_prepare_v2(_sqliteDatabase, - "SELECT strftime('%s', ?), strftime('%f', ?);", - -1, - &_stringToDateStatement, - NULL); - - return self; -} - -- (void)dealloc { - sqlite3_finalize(_stringToDateStatement); - sqlite3_close(_sqliteDatabase); -} - -///-------------------------------------- -#pragma mark - Date Formatters -///-------------------------------------- - -- (NSDateFormatter *)preciseDateFormatter { - if (!_preciseDateFormatter) { - _preciseDateFormatter = [[NSDateFormatter alloc] init]; - _preciseDateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; - _preciseDateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; - _preciseDateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; - } - return _preciseDateFormatter; -} - -///-------------------------------------- -#pragma mark - String from Date -///-------------------------------------- - -- (NSString *)preciseStringFromDate:(NSDate *)date { - __block NSString *string = nil; - dispatch_sync(_synchronizationQueue, ^{ - string = [self.preciseDateFormatter stringFromDate:date]; - }); - return string; -} - -///-------------------------------------- -#pragma mark - Date from String -///-------------------------------------- - -- (NSDate *)dateFromString:(NSString *)string { - __block sqlite3_int64 interval = 0; - __block double seconds = 0.0; - dispatch_sync(_synchronizationQueue, ^{ - const char *utf8String = [string UTF8String]; - - sqlite3_bind_text(_stringToDateStatement, 1, utf8String, -1, SQLITE_STATIC); - sqlite3_bind_text(_stringToDateStatement, 2, utf8String, -1, SQLITE_STATIC); - - if (sqlite3_step(_stringToDateStatement) == SQLITE_ROW) { - interval = sqlite3_column_int64(_stringToDateStatement, 0); - seconds = sqlite3_column_double(_stringToDateStatement, 1); - } - - sqlite3_reset(_stringToDateStatement); - sqlite3_clear_bindings(_stringToDateStatement); - }); - // Extract the fraction component of the seconds - double sintegral = 0.0; - double sfraction = modf(seconds, &sintegral); - - return [NSDate dateWithTimeIntervalSince1970:(double)interval + sfraction]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFDecoder.h b/FoodbLog/Pods/Parse/Parse/Internal/PFDecoder.h deleted file mode 100644 index b0e5074..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFDecoder.h +++ /dev/null @@ -1,49 +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. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface PFDecoder : NSObject - -/*! - Globally available shared instance of PFDecoder. - */ -+ (PFDecoder *)objectDecoder; - -/*! - Takes a complex object that was deserialized and converts encoded - dictionaries into the proper Parse types. This is the inverse of - encodeObject:allowUnsaved:allowObjects:seenObjects:. - */ -- (nullable id)decodeObject:(nullable id)object; - -@end - -/*! - Extends the normal JSON to PFObject decoding to also deal with placeholders for new objects - that have been saved offline. - */ -@interface PFOfflineDecoder : PFDecoder - -+ (instancetype)decoderWithOfflineObjects:(nullable NSDictionary *)offlineObjects; - -@end - -/*! - A subclass of PFDecoder which can keep PFObject that has been fetched instead of creating a new instance. - */ -@interface PFKnownParseObjectDecoder : PFDecoder - -+ (instancetype)decoderWithFetchedObjects:(nullable NSDictionary *)fetchedObjects; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFDecoder.m b/FoodbLog/Pods/Parse/Parse/Internal/PFDecoder.m deleted file mode 100644 index 9cd045a..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFDecoder.m +++ /dev/null @@ -1,194 +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. - */ - -#import "PFDecoder.h" - -#import "PFBase64Encoder.h" -#import "PFDateFormatter.h" -#import "PFFieldOperation.h" -#import "PFFieldOperationDecoder.h" -#import "PFFile_Private.h" -#import "PFGeoPointPrivate.h" -#import "PFInternalUtils.h" -#import "PFMacros.h" -#import "PFObjectPrivate.h" -#import "PFRelationPrivate.h" - -///-------------------------------------- -#pragma mark - PFDecoder -///-------------------------------------- - -@implementation PFDecoder - -#pragma mark Init - -+ (PFDecoder *)objectDecoder { - static PFDecoder *decoder; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - decoder = [[PFDecoder alloc] init]; - }); - return decoder; -} - -#pragma mark Decode - -- (id)decodeDictionary:(NSDictionary *)dictionary { - NSString *op = dictionary[@"__op"]; - if (op) { - return [[PFFieldOperationDecoder defaultDecoder] decode:dictionary withDecoder:self]; - } - - NSString *type = dictionary[@"__type"]; - if (type) { - if ([type isEqualToString:@"Date"]) { - return [[PFDateFormatter sharedFormatter] dateFromString:dictionary[@"iso"]]; - - } else if ([type isEqualToString:@"Bytes"]) { - return [PFBase64Encoder dataFromBase64String:dictionary[@"base64"]]; - - } else if ([type isEqualToString:@"GeoPoint"]) { - return [PFGeoPoint geoPointWithDictionary:dictionary]; - - } else if ([type isEqualToString:@"Relation"]) { - return [PFRelation relationFromDictionary:dictionary withDecoder:self]; - - } else if ([type isEqualToString:@"File"]) { - return [PFFile fileWithName:dictionary[@"name"] - url:dictionary[@"url"]]; - - } else if ([type isEqualToString:@"Pointer"]) { - NSString *objectId = dictionary[@"objectId"]; - NSString *localId = dictionary[@"localId"]; - NSString *className = dictionary[@"className"]; - if (localId) { - // This is a PFObject deserialized off the local disk, which has a localId - // that will need to be resolved before the object can be sent over the network. - // Its localId should be known to PFObjectLocalIdStore. - return [self _decodePointerForClassName:className localId:localId]; - } else { - return [self _decodePointerForClassName:className objectId:objectId]; - } - - } else if ([type isEqualToString:@"Object"]) { - NSString *className = dictionary[@"className"]; - - NSMutableDictionary *data = [dictionary mutableCopy]; - [data removeObjectForKey:@"__type"]; - [data removeObjectForKey:@"className"]; - NSDictionary *result = [self decodeDictionary:data]; - - return [PFObject _objectFromDictionary:result - defaultClassName:className - completeData:YES - decoder:self]; - - } else { - // We don't know how to decode this, so just leave it as a dictionary. - return dictionary; - } - } - - NSMutableDictionary *newDictionary = [NSMutableDictionary dictionaryWithCapacity:[dictionary count]]; - [dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - newDictionary[key] = [self decodeObject:obj]; - }]; - return newDictionary; -} - -- (id)_decodePointerForClassName:(NSString *)className objectId:(NSString *)objectId { - return [PFObject objectWithoutDataWithClassName:className objectId:objectId]; -} - -- (id)_decodePointerForClassName:(NSString *)className localId:(NSString *)localId { - return [PFObject objectWithoutDataWithClassName:className localId:localId]; -} - -- (id)decodeArray:(NSArray *)array { - NSMutableArray *newArray = [NSMutableArray arrayWithCapacity:array.count]; - for (id value in array) { - [newArray addObject:[self decodeObject:value]]; - } - return newArray; -} - -- (id)decodeObject:(id)object { - if ([object isKindOfClass:[NSDictionary class]]) { - return [self decodeDictionary:object]; - } else if ([object isKindOfClass:[NSArray class]]) { - return [self decodeArray:object]; - } - return object; -} - -@end - -///-------------------------------------- -#pragma mark - PFOfflineDecoder -///-------------------------------------- - -@interface PFOfflineDecoder () - -/*! - A map of UUID to Task that will be finished once the given PFObject is loaded. - The Tasks should all be finished before decode is called. - */ -@property (nonatomic, copy) NSDictionary *offlineObjects; - -@end - -@implementation PFOfflineDecoder - -+ (instancetype)decoderWithOfflineObjects:(NSDictionary *)offlineObjects { - PFOfflineDecoder *decoder = [[self alloc] init]; - decoder.offlineObjects = offlineObjects; - return decoder; -} - -#pragma mark PFDecoder - -- (id)decodeObject:(id)object { - if ([object isKindOfClass:[NSDictionary class]] && - [((NSDictionary *)object)[@"__type"] isEqualToString:@"OfflineObject"]) { - NSString *uuid = ((NSDictionary *)object)[@"uuid"]; - return ((BFTask *)self.offlineObjects[uuid]).result; - } - - // Embedded objects can't show up here, because we never stored them that way offline. - return [super decodeObject:object]; -} - -@end - -///-------------------------------------- -#pragma mark - PFKnownParseObjectDecoder -///-------------------------------------- - -@interface PFKnownParseObjectDecoder () - -@property (nonatomic, copy) NSDictionary *fetchedObjects; - -@end - -@implementation PFKnownParseObjectDecoder - -+ (instancetype)decoderWithFetchedObjects:(NSDictionary *)fetchedObjects { - PFKnownParseObjectDecoder *decoder = [[self alloc] init]; - decoder.fetchedObjects = fetchedObjects; - return decoder; -} - -- (id)_decodePointerForClassName:(NSString *)className objectId:(NSString *)objectId { - if (_fetchedObjects != nil && _fetchedObjects[objectId]) { - return _fetchedObjects[objectId]; - } - return [super _decodePointerForClassName:className objectId:objectId]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFDevice.h b/FoodbLog/Pods/Parse/Parse/Internal/PFDevice.h deleted file mode 100644 index 6e62a3c..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFDevice.h +++ /dev/null @@ -1,24 +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. - */ - -#import - -@interface PFDevice : NSObject - -@property (nonatomic, copy, readonly) NSString *detailedModel; - -@property (nonatomic, copy, readonly) NSString *operatingSystemFullVersion; -@property (nonatomic, copy, readonly) NSString *operatingSystemVersion; -@property (nonatomic, copy, readonly) NSString *operatingSystemBuild; - -@property (nonatomic, assign, readonly, getter=isJailbroken) BOOL jailbroken; - -+ (instancetype)currentDevice; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFDevice.m b/FoodbLog/Pods/Parse/Parse/Internal/PFDevice.m deleted file mode 100644 index b918012..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFDevice.m +++ /dev/null @@ -1,134 +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. - */ - -#import "PFDevice.h" - -#import - -#if TARGET_OS_WATCH -#import -#elif TARGET_OS_IOS -#import -#elif TARGET_OS_MAC -#import -#endif - -#include -#include -#include - -static NSString *PFDeviceSysctlByName(NSString *name) { - const char *charName = [name UTF8String]; - - size_t size; - sysctlbyname(charName, NULL, &size, NULL, 0); - char *answer = (char*)malloc(size); - - if (answer == NULL) { - return nil; - } - - sysctlbyname(charName, answer, &size, NULL, 0); - NSString *string = [NSString stringWithUTF8String:answer]; - free(answer); - - return string; -} - -@implementation PFDevice - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -+ (instancetype)currentDevice { - static PFDevice *device; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - device = [[self alloc] init]; - }); - return device; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (NSString *)detailedModel { - NSString *name = PFDeviceSysctlByName(@"hw.machine"); - if (!name) { -#if TARGET_OS_WATCH - name = [WKInterfaceDevice currentDevice].model; -#elif TARGET_OS_IOS - name = [UIDevice currentDevice].model; -#elif TARGET_OS_MAC - name = @"Mac"; -#endif - } - return name; -} - -- (NSString *)operatingSystemFullVersion { - NSString *version = self.operatingSystemVersion; - NSString *build = self.operatingSystemBuild; - if (build.length) { - version = [version stringByAppendingFormat:@" (%@)", build]; - } - return version; -} -- (NSString *)operatingSystemVersion { -#if TARGET_OS_IOS - return [UIDevice currentDevice].systemVersion; -#elif TARGET_OS_WATCH - NSOperatingSystemVersion version = [NSProcessInfo processInfo].operatingSystemVersion; - return [NSString stringWithFormat:@"%d.%d.%d", - (int)version.majorVersion, - (int)version.minorVersion, - (int)version.patchVersion]; -#elif TARGET_OS_MAC - NSProcessInfo *info = [NSProcessInfo processInfo]; - if ([info respondsToSelector:@selector(operatingSystemVersion)]) { - NSOperatingSystemVersion version = info.operatingSystemVersion; - return [NSString stringWithFormat:@"%d.%d.%d", - (int)version.majorVersion, - (int)version.minorVersion, - (int)version.patchVersion]; - } else { - // TODO: (nlutsenko) Remove usage of this method, when we drop support for OSX 10.9 -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - SInt32 major, minor, bugfix; - if (Gestalt(gestaltSystemVersionMajor, &major) == noErr && - Gestalt(gestaltSystemVersionMinor, &minor) == noErr && - Gestalt(gestaltSystemVersionBugFix, &bugfix) == noErr) { - return [NSString stringWithFormat:@"%d.%d.%d", major, minor, bugfix]; - } -#pragma clang diagnostic pop - return [[NSProcessInfo processInfo] operatingSystemVersionString]; - } -#endif -} - -- (NSString *)operatingSystemBuild { - return PFDeviceSysctlByName(@"kern.osversion"); -} - -- (BOOL)isJailbroken { - BOOL jailbroken = NO; -#if TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR - DIR *dir = opendir("/"); - if (dir != NULL) { - jailbroken = YES; - closedir(dir); - } -#endif - return jailbroken; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFEncoder.h b/FoodbLog/Pods/Parse/Parse/Internal/PFEncoder.h deleted file mode 100644 index 9482755..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFEncoder.h +++ /dev/null @@ -1,67 +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. - */ - -#import - -#import - -#import "PFMacros.h" - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFObject; -@class PFOfflineStore; -@class PFSQLiteDatabase; - -///-------------------------------------- -/// @name Encoders -///-------------------------------------- - -@interface PFEncoder : NSObject - -+ (instancetype)objectEncoder; - -- (id)encodeObject:(id)object; -- (id)encodeParseObject:(PFObject *)object; - -@end - -/*! - Encoding strategy that rejects PFObject. - */ -@interface PFNoObjectEncoder : PFEncoder - -@end - -/*! - Encoding strategy that encodes PFObject to PFPointer with objectId or with localId. - */ -@interface PFPointerOrLocalIdObjectEncoder : PFEncoder - -@end - -/*! - Encoding strategy that encodes PFObject to PFPointer with objectId and rejects - unsaved PFObject. - */ -@interface PFPointerObjectEncoder : PFPointerOrLocalIdObjectEncoder - -@end - -/*! - Encoding strategy that can encode objects that are available offline. After using this encoder, - you must call encodeFinished and wait for its result to be finished before the results of the - encoding will be valid. - */ -@interface PFOfflineObjectEncoder : PFEncoder - -+ (instancetype)objectEncoderWithOfflineStore:(PFOfflineStore *)store database:(PFSQLiteDatabase *)database; - -- (BFTask *)encodeFinished; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFEncoder.m b/FoodbLog/Pods/Parse/Parse/Internal/PFEncoder.m deleted file mode 100644 index 6f9ce64..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFEncoder.m +++ /dev/null @@ -1,250 +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. - */ - -#import "PFEncoder.h" - -#import "PFACLPrivate.h" -#import "PFAssert.h" -#import "PFBase64Encoder.h" -#import "PFDateFormatter.h" -#import "PFFieldOperation.h" -#import "PFFile_Private.h" -#import "PFGeoPointPrivate.h" -#import "PFObjectPrivate.h" -#import "PFOfflineStore.h" -#import "PFRelationPrivate.h" - -@implementation PFEncoder - -+ (instancetype)objectEncoder { - static PFEncoder *encoder; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - encoder = [[PFEncoder alloc] init]; - }); - return encoder; -} - -- (id)encodeObject:(id)object { - if ([object isKindOfClass:[PFObject class]]) { - return [self encodeParseObject:object]; - } else if ([object isKindOfClass:[NSData class]]) { - return @{ - @"__type" : @"Bytes", - @"base64" : [PFBase64Encoder base64StringFromData:object] - }; - - } else if ([object isKindOfClass:[NSDate class]]) { - return @{ - @"__type" : @"Date", - @"iso" : [[PFDateFormatter sharedFormatter] preciseStringFromDate:object] - }; - - } else if ([object isKindOfClass:[PFFile class]]) { - if (((PFFile *)object).isDirty) { - // TODO: (nlutsenko) Figure out what to do with things like an unsaved file - // in a mutable container, where we don't normally want to allow serializing - // such a thing inside an object. - // - // Returning this empty object is strictly wrong, but we have to have *something* - // to put into an object's mutable container cache, and this is just about the - // best we can do right now. - // - // [NSException raise:NSInternalInconsistencyException - // format:@"Tried to serialize an unsaved file."]; - return @{ @"__type" : @"File" }; - } - return @{ - @"__type" : @"File", - @"url" : ((PFFile *)object).state.urlString, - @"name" : ((PFFile *)object).name - }; - - } else if ([object isKindOfClass:[PFFieldOperation class]]) { - // Always encode PFFieldOperation with PFPointerOrLocalId - return [object encodeWithObjectEncoder:[PFPointerOrLocalIdObjectEncoder objectEncoder]]; - } else if ([object isKindOfClass:[PFACL class]]) { - // TODO (hallucinogen): pass object encoder here - return [object encodeIntoDictionary]; - - } else if ([object isKindOfClass:[PFGeoPoint class]]) { - // TODO (hallucinogen): pass object encoder here - return [object encodeIntoDictionary]; - - } else if ([object isKindOfClass:[PFRelation class]]) { - // TODO (hallucinogen): pass object encoder here - return [object encodeIntoDictionary]; - - } else if ([object isKindOfClass:[NSArray class]]) { - NSMutableArray *newArray = [NSMutableArray arrayWithCapacity:[object count]]; - for (id elem in object) { - [newArray addObject:[self encodeObject:elem]]; - } - return newArray; - - } else if ([object isKindOfClass:[NSDictionary class]]) { - NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:[object count]]; - [object enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - dict[key] = [self encodeObject:obj]; - }]; - return dict; - } - - return object; -} - -- (id)encodeParseObject:(PFObject *)object { - // Do nothing here - return nil; -} - -@end - -///-------------------------------------- -#pragma mark - PFNoObjectEncoder -///-------------------------------------- - -@implementation PFNoObjectEncoder - -+ (instancetype)objectEncoder { - static PFNoObjectEncoder *encoder; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - encoder = [[PFNoObjectEncoder alloc] init]; - }); - return encoder; -} - -- (id)encodeParseObject:(PFObject *)object { - [NSException raise:NSInternalInconsistencyException format:@"PFObjects are not allowed here."]; - return nil; -} - -@end - -///-------------------------------------- -#pragma mark - PFPointerOrLocalIdObjectEncoder -///-------------------------------------- - -@implementation PFPointerOrLocalIdObjectEncoder - -+ (instancetype)objectEncoder { - static PFPointerOrLocalIdObjectEncoder *instance = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - instance = [[PFPointerOrLocalIdObjectEncoder alloc] init]; - }); - return instance; -} - -- (id)encodeParseObject:(PFObject *)object { - if (object.objectId) { - return @{ - @"__type" : @"Pointer", - @"objectId" : object.objectId, - @"className" : object.parseClassName - }; - } - return @{ - @"__type" : @"Pointer", - @"localId" : [object getOrCreateLocalId], - @"className" : object.parseClassName - }; -} - -@end - -///-------------------------------------- -#pragma mark - PFPointerObjectEncoder -///-------------------------------------- - -@implementation PFPointerObjectEncoder - -+ (instancetype)objectEncoder { - static PFPointerObjectEncoder *encoder; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - encoder = [[self alloc] init]; - }); - return encoder; -} - -- (id)encodeParseObject:(PFObject *)object { - PFConsistencyAssert(object.objectId, @"Tried to save an object with a new, unsaved child."); - return [super encodeParseObject:object]; -} - -@end - -///-------------------------------------- -#pragma mark - PFOfflineObjectEncoder -///-------------------------------------- - -@interface PFOfflineObjectEncoder () - -@property (nonatomic, assign) PFOfflineStore *store; -@property (nonatomic, assign) PFSQLiteDatabase *database; -@property (nonatomic, strong) NSMutableArray *tasks; -@property (nonatomic, strong) NSObject *tasksLock; // TODO: (nlutsenko) Avoid using @synchronized - -@end - -@implementation PFOfflineObjectEncoder - -+ (instancetype)objectEncoder { - PFNotDesignatedInitializer(); - return nil; -} - -+ (instancetype)objectEncoderWithOfflineStore:(PFOfflineStore *)store database:(PFSQLiteDatabase *)database { - PFOfflineObjectEncoder *encoder = [[self alloc] init]; - encoder.store = store; - encoder.database = database; - encoder.tasks = [NSMutableArray array]; - encoder.tasksLock = [[NSObject alloc] init]; - return encoder; -} - -- (id)encodeParseObject:(PFObject *)object { - if (object.objectId) { - return @{ - @"__type" : @"Pointer", - @"objectId" : object.objectId, - @"className" : object.parseClassName - }; - } else { - NSMutableDictionary *result = [@{ @"__type" : @"OfflineObject" } mutableCopy]; - @synchronized(self.tasksLock) { - BFTask *uuidTask = [self.store getOrCreateUUIDAsyncForObject:object database:self.database]; - [uuidTask continueWithSuccessBlock:^id(BFTask *task) { - result[@"uuid"] = task.result; - return nil; - }]; - [self.tasks addObject:uuidTask]; - } - return result; - } -} - -- (BFTask *)encodeFinished { - return [[BFTask taskForCompletionOfAllTasks:self.tasks] continueWithBlock:^id(BFTask *ignore) { - @synchronized (self.tasksLock) { - // TODO (hallucinogen) It might be better to return an aggregate error here - for (BFTask *task in self.tasks) { - if (task.cancelled || task.error != nil) { - return task; - } - } - [self.tasks removeAllObjects]; - return [BFTask taskWithResult:nil]; - } - }]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFErrorUtilities.h b/FoodbLog/Pods/Parse/Parse/Internal/PFErrorUtilities.h deleted file mode 100644 index a5656f6..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFErrorUtilities.h +++ /dev/null @@ -1,45 +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. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface PFErrorUtilities : NSObject - -/*! - Construct an error object from a code and a message. - - @description Note that this logs all errors given to it. - You should use `errorWithCode:message:shouldLog:` to explicitly control whether it logs. - - @param code Parse Error Code - @param message Error description - - @return Instance of `NSError` or `nil`. - */ -+ (nullable NSError *)errorWithCode:(NSInteger)code message:(NSString *)message; -+ (nullable NSError *)errorWithCode:(NSInteger)code message:(NSString *)message shouldLog:(BOOL)shouldLog; - -/*! - Construct an error object from a result dictionary the API returned. - - @description Note that this logs all errors given to it. - You should use `errorFromResult:shouldLog:` to explicitly control whether it logs. - - @param result Network command result. - - @return Instance of `NSError` or `nil`. - */ -+ (nullable NSError *)errorFromResult:(NSDictionary *)result; -+ (nullable NSError *)errorFromResult:(NSDictionary *)result shouldLog:(BOOL)shouldLog; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFErrorUtilities.m b/FoodbLog/Pods/Parse/Parse/Internal/PFErrorUtilities.m deleted file mode 100644 index a3f060d..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFErrorUtilities.m +++ /dev/null @@ -1,48 +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. - */ - -#import "PFErrorUtilities.h" - -#import "PFConstants.h" -#import "PFLogging.h" - -@implementation PFErrorUtilities - -+ (NSError *)errorWithCode:(NSInteger)code message:(NSString *)message { - return [self errorWithCode:code message:message shouldLog:YES]; -} - -+ (NSError *)errorWithCode:(NSInteger)code message:(NSString *)message shouldLog:(BOOL)shouldLog { - NSDictionary *result = @{ @"code" : @(code), - @"error" : message }; - return [self errorFromResult:result shouldLog:shouldLog]; -} - -+ (NSError *)errorFromResult:(NSDictionary *)result { - return [self errorFromResult:result shouldLog:YES]; -} - -+ (NSError *)errorFromResult:(NSDictionary *)result shouldLog:(BOOL)shouldLog { - NSInteger errorCode = [[result objectForKey:@"code"] integerValue]; - - NSString *errorExplanation = [result objectForKey:@"error"]; - - if (shouldLog) { - PFLogError(PFLoggingTagCommon, - @"%@ (Code: %ld, Version: %@)", errorExplanation, (long)errorCode, PARSE_VERSION); - } - - NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithDictionary:result]; - if (errorExplanation) { - userInfo[NSLocalizedDescriptionKey] = errorExplanation; - } - return [NSError errorWithDomain:PFParseErrorDomain code:errorCode userInfo:userInfo]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyPin.h b/FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyPin.h deleted file mode 100644 index de6e754..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyPin.h +++ /dev/null @@ -1,76 +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. - */ - -#import - -#import - -#import "PFObject.h" -#import "PFSubclassing.h" - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@protocol PFNetworkCommand; - -extern NSString *const PFEventuallyPinPinName; - -// Cache policies -typedef NS_ENUM(NSUInteger, PFEventuallyPinType) { - PFEventuallyPinTypeSave = 1, - PFEventuallyPinTypeDelete, - PFEventuallyPinTypeCommand -}; - -/*! - PFEventuallyPin represents PFCommand that's save locally so that it can be executed eventually. - - Properties of PFEventuallyPin: - - time - Used for sort order when querying for all EventuallyPins. - - type - PFEventuallyPinTypeSave or PFEventuallyPinTypeDelete. - - object - The object the operation should notify when complete. - - operationSetUUID - The operationSet to be completed. - - sessionToken - The user that instantiated the operation. - */ -@interface PFEventuallyPin : PFObject - -@property (nonatomic, copy, readonly) NSString *uuid; - -@property (nonatomic, assign, readonly) PFEventuallyPinType type; - -@property (nonatomic, strong, readonly) PFObject *object; - -@property (nonatomic, copy, readonly) NSString *operationSetUUID; - -@property (nonatomic, copy, readonly) NSString *sessionToken; - -@property (nonatomic, strong, readonly) id command; - -///-------------------------------------- -#pragma mark - Eventually Pin -///-------------------------------------- - -/*! - Wrap given PFObject and PFCommand in a PFEventuallyPin with auto-generated UUID. - */ -+ (BFTask *)pinEventually:(PFObject *)object forCommand:(id)command; - -/*! - Wrap given PFObject and PFCommand in a PFEventuallyPin with given UUID. - */ -+ (BFTask *)pinEventually:(PFObject *)object forCommand:(id)command withUUID:(NSString *)uuid; - -+ (BFTask *)findAllEventuallyPin; - -+ (BFTask *)findAllEventuallyPinWithExcludeUUIDs:(NSArray *)excludeUUIDs; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyPin.m b/FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyPin.m deleted file mode 100644 index aa9e0d4..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyPin.m +++ /dev/null @@ -1,188 +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. - */ - -#import "PFEventuallyPin.h" - -#import - -#import "PFAssert.h" -#import "PFHTTPRequest.h" -#import "PFInternalUtils.h" -#import "PFObject+Subclass.h" -#import "PFObjectPrivate.h" -#import "PFOfflineStore.h" -#import "PFQuery.h" -#import "PFRESTCommand.h" - -NSString *const PFEventuallyPinPinName = @"_eventuallyPin"; - -NSString *const PFEventuallyPinKeyUUID = @"uuid"; -NSString *const PFEventuallyPinKeyTime = @"time"; -NSString *const PFEventuallyPinKeyType = @"type"; -NSString *const PFEventuallyPinKeyObject = @"object"; -NSString *const PFEventuallyPinKeyOperationSetUUID = @"operationSetUUID"; -NSString *const PFEventuallyPinKeySessionToken = @"sessionToken"; -NSString *const PFEventuallyPinKeyCommand = @"command"; - -@implementation PFEventuallyPin - -///-------------------------------------- -#pragma mark - PFSubclassing -///-------------------------------------- - -+ (NSString *)parseClassName { - return @"_EventuallyPin"; -} - -// Validates a class name. We override this to only allow the pin class name. -+ (void)_assertValidInstanceClassName:(NSString *)className { - PFParameterAssert([className isEqualToString:[self parseClassName]], - @"Cannot initialize a PFEventuallyPin with a custom class name."); -} - -- (BOOL)needsDefaultACL { - return NO; -} - -///-------------------------------------- -#pragma mark - Getter -///-------------------------------------- - -- (NSString *)uuid { - return self[PFEventuallyPinKeyUUID]; -} - -- (PFEventuallyPinType)type { - return [self[PFEventuallyPinKeyType] intValue]; -} - -- (PFObject *)object { - return self[PFEventuallyPinKeyObject]; -} - -- (NSString *)operationSetUUID { - return self[PFEventuallyPinKeyOperationSetUUID]; -} - -- (NSString *)sessionToken { - return self[PFEventuallyPinKeySessionToken]; -} - -- (id)command { - NSDictionary *dictionary = self[PFEventuallyPinKeyCommand]; - if ([PFRESTCommand isValidDictionaryRepresentation:dictionary]) { - return [PFRESTCommand commandFromDictionaryRepresentation:dictionary]; - } - return nil; -} - -///-------------------------------------- -#pragma mark - Eventually Pin -///-------------------------------------- - -+ (BFTask *)pinEventually:(PFObject *)object forCommand:(id)command { - return [self pinEventually:object forCommand:command withUUID:[[NSUUID UUID] UUIDString]]; -} - -+ (BFTask *)pinEventually:(PFObject *)object forCommand:(id)command withUUID:(NSString *)uuid { - PFEventuallyPinType type = [self _pinTypeForCommand:command]; - NSDictionary *commandDictionary = (type == PFEventuallyPinTypeCommand ? [command dictionaryRepresentation] : nil); - return [self _pinEventually:object - type:type - uuid:uuid - operationSetUUID:command.operationSetUUID - sessionToken:command.sessionToken - commandDictionary:commandDictionary]; -} - -+ (BFTask *)findAllEventuallyPin { - return [self findAllEventuallyPinWithExcludeUUIDs:nil]; -} - -+ (BFTask *)findAllEventuallyPinWithExcludeUUIDs:(NSArray *)excludeUUIDs { - PFQuery *query = [PFQuery queryWithClassName:self.parseClassName]; - [query fromPinWithName:PFEventuallyPinPinName]; - [query orderByAscending:PFEventuallyPinKeyTime]; - - if (excludeUUIDs != nil) { - [query whereKey:PFEventuallyPinKeyUUID notContainedIn:excludeUUIDs]; - } - - return [[query findObjectsInBackground] continueWithBlock:^id(BFTask *task) { - NSArray *pins = task.result; - NSMutableArray *fetchTasks = [NSMutableArray array]; - - for (PFEventuallyPin *pin in pins) { - PFObject *object = pin.object; - if (object != nil) { - [fetchTasks addObject:[object fetchFromLocalDatastoreInBackground]]; - } - } - - return [[BFTask taskForCompletionOfAllTasks:fetchTasks] continueWithBlock:^id(BFTask *task) { - return [BFTask taskWithResult:pins]; - }]; - }]; -} - -///-------------------------------------- -#pragma mark - Private -///-------------------------------------- - -+ (BFTask *)_pinEventually:(PFObject *)object - type:(PFEventuallyPinType)type - uuid:(NSString *)uuid - operationSetUUID:(NSString *)operationSetUUID - sessionToken:(NSString *)sessionToken - commandDictionary:(NSDictionary *)commandDictionary { - PFEventuallyPin *pin = [[PFEventuallyPin alloc] init]; - pin[PFEventuallyPinKeyUUID] = uuid; - pin[PFEventuallyPinKeyTime] = [NSDate date]; - pin[PFEventuallyPinKeyType] = @(type); - if (object != nil) { - pin[PFEventuallyPinKeyObject] = object; - } - if (operationSetUUID != nil) { - pin[PFEventuallyPinKeyOperationSetUUID] = operationSetUUID; - } - if (sessionToken != nil) { - pin[PFEventuallyPinKeySessionToken] = sessionToken; - } - if (commandDictionary != nil) { - pin[PFEventuallyPinKeyCommand] = commandDictionary; - } - - // NOTE: This is needed otherwise ARC releases the pins before we have a chance to persist the new ones to disk, - // Which means we'd lose any columns on objects in eventually pins not currently in memory. - __block NSArray *existingPins = nil; - return [[[self findAllEventuallyPin] continueWithSuccessBlock:^id(BFTask *task) { - existingPins = task.result; - return [pin pinInBackgroundWithName:PFEventuallyPinPinName]; - }] continueWithSuccessBlock:^id(BFTask *task) { - existingPins = nil; - return pin; - }]; -} - -+ (PFEventuallyPinType)_pinTypeForCommand:(id)command { - PFEventuallyPinType type = PFEventuallyPinTypeCommand; - NSString *path = [(PFRESTCommand *)command httpPath]; - NSString *method = [(PFRESTCommand *)command httpMethod]; - if ([path hasPrefix:@"classes"]) { - if ([method isEqualToString:PFHTTPRequestMethodPOST] || - [method isEqualToString:PFHTTPRequestMethodPUT]) { - type = PFEventuallyPinTypeSave; - } else if ([method isEqualToString:PFHTTPRequestMethodDELETE]) { - type = PFEventuallyPinTypeDelete; - } - } - return type; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyQueue.h b/FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyQueue.h deleted file mode 100644 index 0ac4ea1..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyQueue.h +++ /dev/null @@ -1,94 +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. - */ - -#import - -#import - -#import "PFMacros.h" -#import "PFNetworkCommand.h" - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFEventuallyPin; -@class PFEventuallyQueueTestHelper; -@class PFObject; -@protocol PFCommandRunning; - -extern NSUInteger const PFEventuallyQueueDefaultMaxAttemptsCount; -extern NSTimeInterval const PFEventuallyQueueDefaultTimeoutRetryInterval; - -@interface PFEventuallyQueue : NSObject - -@property (nonatomic, strong, readonly) id commandRunner; - -@property (nonatomic, assign, readonly) NSUInteger maxAttemptsCount; -@property (nonatomic, assign, readonly) NSTimeInterval retryInterval; - -@property (nonatomic, assign, readonly) NSUInteger commandCount; - -/*! - Controls whether the queue should monitor network reachability and pause itself when there is no connection. - Default: `YES`. - */ -@property (atomic, assign, readonly) BOOL monitorsReachability PF_WATCH_UNAVAILABLE; -@property (nonatomic, assign, readonly, getter=isConnected) BOOL connected; - -// Gets notifications of various events happening in the command cache, so that tests can be synchronized. -@property (nonatomic, strong, readonly) PFEventuallyQueueTestHelper *testHelper; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithCommandRunner:(id)commandRunner - maxAttemptsCount:(NSUInteger)attemptsCount - retryInterval:(NSTimeInterval)retryInterval NS_DESIGNATED_INITIALIZER; - -///-------------------------------------- -/// @name Running Commands -///-------------------------------------- - -- (BFTask *)enqueueCommandInBackground:(id)command; -- (BFTask *)enqueueCommandInBackground:(id)command withObject:(PFObject *)object; - -///-------------------------------------- -/// @name Controlling Queue -///-------------------------------------- - -- (void)start NS_REQUIRES_SUPER; -- (void)resume NS_REQUIRES_SUPER; -- (void)pause NS_REQUIRES_SUPER; - -- (void)removeAllCommands NS_REQUIRES_SUPER; - -@end - -typedef enum { - PFEventuallyQueueEventCommandEnqueued, // A command was placed into the queue. - PFEventuallyQueueEventCommandNotEnqueued, // A command could not be placed into the queue. - - PFEventuallyQueueEventCommandSucceded, // A command has successfully running on the server. - PFEventuallyQueueEventCommandFailed, // A command has failed on the server. - - PFEventuallyQueueEventObjectUpdated, // An object's data was updated after a command completed. - PFEventuallyQueueEventObjectRemoved, // An object was removed because it was deleted before creation. - - PFEventuallyQueueEventCount // The total number of items in this enum. -} PFEventuallyQueueTestHelperEvent; - -@interface PFEventuallyQueueTestHelper : NSObject { - dispatch_semaphore_t events[PFEventuallyQueueEventCount]; -} - -- (void)clear; -- (void)notify:(PFEventuallyQueueTestHelperEvent)event; -- (BOOL)waitFor:(PFEventuallyQueueTestHelperEvent)event; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyQueue.m b/FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyQueue.m deleted file mode 100644 index 80e025d..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyQueue.m +++ /dev/null @@ -1,503 +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. - */ - -#import "PFEventuallyQueue.h" -#import "PFEventuallyQueue_Private.h" - -#import -#import - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFCommandResult.h" -#import "PFCommandRunning.h" -#import "PFErrorUtilities.h" -#import "PFLogging.h" -#import "PFMacros.h" -#import "PFRESTCommand.h" -#import "PFReachability.h" -#import "PFTaskQueue.h" - -NSUInteger const PFEventuallyQueueDefaultMaxAttemptsCount = 5; -NSTimeInterval const PFEventuallyQueueDefaultTimeoutRetryInterval = 600.0f; - -@interface PFEventuallyQueue () -#if !TARGET_OS_WATCH - -#endif - -@property (atomic, assign, readwrite) BOOL monitorsReachability; -@property (atomic, assign, getter=isRunning) BOOL running; - -@end - -@implementation PFEventuallyQueue - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithCommandRunner:(id)commandRunner - maxAttemptsCount:(NSUInteger)attemptsCount - retryInterval:(NSTimeInterval)retryInterval { - self = [super init]; - if (!self) return nil; - - _commandRunner = commandRunner; - _maxAttemptsCount = attemptsCount; - _retryInterval = retryInterval; - - // Set up all the queues - NSString *queueBaseLabel = [NSString stringWithFormat:@"com.parse.%@", NSStringFromClass([self class])]; - - _synchronizationQueue = dispatch_queue_create([[NSString stringWithFormat:@"%@.synchronization", - queueBaseLabel] UTF8String], - DISPATCH_QUEUE_SERIAL); - PFMarkDispatchQueue(_synchronizationQueue); - _synchronizationExecutor = [BFExecutor executorWithDispatchQueue:_synchronizationQueue]; - - _processingQueue = dispatch_queue_create([[NSString stringWithFormat:@"%@.processing", - queueBaseLabel] UTF8String], - DISPATCH_QUEUE_SERIAL); - PFMarkDispatchQueue(_processingQueue); - - _processingQueueSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_DATA_ADD, 0, 0, _processingQueue); - - _commandEnqueueTaskQueue = [[PFTaskQueue alloc] init]; - - _taskCompletionSources = [NSMutableDictionary dictionary]; - _testHelper = [[PFEventuallyQueueTestHelper alloc] init]; - - [self _startMonitoringNetworkReachability]; - - return self; -} - -- (void)dealloc { - [self _stopMonitoringNetworkReachability]; -} - -///-------------------------------------- -#pragma mark - Enqueueing Commands -///-------------------------------------- - -- (BFTask *)enqueueCommandInBackground:(id)command { - return [self enqueueCommandInBackground:command withObject:nil]; -} - -- (BFTask *)enqueueCommandInBackground:(id)command withObject:(PFObject *)object { - PFParameterAssert(command, @"Cannot enqueue nil command."); - - BFTaskCompletionSource *taskCompletionSource = [BFTaskCompletionSource taskCompletionSource]; - - @weakify(self); - [_commandEnqueueTaskQueue enqueue:^BFTask *(BFTask *toAwait) { - return [toAwait continueAsyncWithBlock:^id(BFTask *task) { - @strongify(self); - - NSString *identifier = [self _newIdentifierForCommand:command]; - return [[[self _enqueueCommandInBackground:command - object:object - identifier:identifier] continueWithBlock:^id(BFTask *task) { - if (task.error || task.exception || task.cancelled) { - [self.testHelper notify:PFEventuallyQueueEventCommandNotEnqueued]; - if (task.error) { - taskCompletionSource.error = task.error; - } else if (task.exception) { - taskCompletionSource.exception = task.exception; - } else if (task.cancelled) { - [taskCompletionSource cancel]; - } - } else { - [self.testHelper notify:PFEventuallyQueueEventCommandEnqueued]; - } - - return task; - }] continueWithExecutor:_synchronizationExecutor withSuccessBlock:^id(BFTask *task) { - [self _didEnqueueCommand:command withIdentifier:identifier taskCompletionSource:taskCompletionSource]; - return nil; - }]; - }]; - }]; - - return taskCompletionSource.task; -} - -- (BFTask *)_enqueueCommandInBackground:(id)command - object:(PFObject *)object - identifier:(NSString *)identifier { - // This enforces implementing this method in subclasses - [self doesNotRecognizeSelector:_cmd]; - return nil; -} - -- (void)_didEnqueueCommand:(id)command - withIdentifier:(NSString *)identifier - taskCompletionSource:(BFTaskCompletionSource *)taskCompletionSource { - PFAssertIsOnDispatchQueue(_synchronizationQueue); - - _taskCompletionSources[identifier] = taskCompletionSource; - dispatch_source_merge_data(_processingQueueSource, 1); - - if (_retryingSemaphore) { - dispatch_semaphore_signal(_retryingSemaphore); - } -} - -///-------------------------------------- -#pragma mark - Pending Commands -///-------------------------------------- - -- (NSArray *)_pendingCommandIdentifiers { - return nil; -} - -- (id)_commandWithIdentifier:(NSString *)identifier error:(NSError **)error { - return nil; -} - -- (NSString *)_newIdentifierForCommand:(id)command { - return nil; -} - -- (NSUInteger)commandCount { - return [[self _pendingCommandIdentifiers] count]; -} - -///-------------------------------------- -#pragma mark - Controlling Queue -///-------------------------------------- - -- (void)start { - dispatch_source_set_event_handler(_processingQueueSource, ^{ - [self _runCommands]; - }); - [self resume]; -} - -- (void)resume { - if (self.running) { - return; - } - self.running = YES; - dispatch_resume(_processingQueueSource); - dispatch_source_merge_data(_processingQueueSource, 1); -} - -- (void)pause { - if (!self.running) { - return; - } - self.running = NO; - dispatch_suspend(_processingQueueSource); -} - -- (void)removeAllCommands { - dispatch_sync(_synchronizationQueue, ^{ - [_taskCompletionSources removeAllObjects]; - }); -} - -///-------------------------------------- -#pragma mark - Running Commands -///-------------------------------------- - -- (void)_runCommands { - PFAssertIsOnDispatchQueue(_processingQueue); - - [self _runCommandsWithRetriesCount:self.maxAttemptsCount]; -} - -- (void)_runCommandsWithRetriesCount:(NSUInteger)retriesCount { - PFAssertIsOnDispatchQueue(_processingQueue); - - if (!self.running || !self.connected) { - return; - } - - // Expect sorted result from _pendingCommandIdentifiers - NSArray *commandIdentifiers = [self _pendingCommandIdentifiers]; - BOOL shouldRetry = NO; - for (NSString *identifier in commandIdentifiers) { - NSError *error = nil; - id command = [self _commandWithIdentifier:identifier error:&error]; - if (!command || error) { - if (!error) { - error = [PFErrorUtilities errorWithCode:kPFErrorInternalServer - message:@"Failed to dequeue an eventually command." - shouldLog:NO]; - } - BFTask *task = [BFTask taskWithError:error]; - [self _didFinishRunningCommand:command withIdentifier:identifier resultTask:task]; - continue; - } - - __block BFTaskCompletionSource *taskCompletionSource = nil; - dispatch_sync(_synchronizationQueue, ^{ - taskCompletionSource = _taskCompletionSources[identifier]; - }); - - BFTask *resultTask = nil; - PFCommandResult *result = nil; - @try { - resultTask = [self _runCommand:command withIdentifier:identifier]; - result = [resultTask waitForResult:&error]; - } - @catch (NSException *exception) { - error = [NSError errorWithDomain:PFParseErrorDomain - code:kPFErrorInvalidPointer - userInfo:@{ @"message" : @"Failed to run an eventually command.", - @"exception" : exception }]; - resultTask = [BFTask taskWithError:error]; - } - - if (error) { - BOOL permanent = (![error.userInfo[@"temporary"] boolValue] && - ([[error domain] isEqualToString:PFParseErrorDomain] || - [error code] != kPFErrorConnectionFailed)); - - if (!permanent) { - PFLogWarning(PFLoggingTagCommon, - @"Attempt at runEventually command timed out. Waiting %f seconds. %d retries remaining.", - self.retryInterval, - (int)retriesCount); - - __block dispatch_semaphore_t semaphore = NULL; - dispatch_sync(_synchronizationQueue, ^{ - _retryingSemaphore = dispatch_semaphore_create(0); - semaphore = _retryingSemaphore; - }); - - dispatch_time_t timeoutTime = dispatch_time(DISPATCH_TIME_NOW, - (int64_t)(self.retryInterval * NSEC_PER_SEC)); - - long waitResult = dispatch_semaphore_wait(semaphore, timeoutTime); - dispatch_sync(_synchronizationQueue, ^{ - _retryingSemaphore = NULL; - }); - - if (waitResult == 0) { - // We haven't waited long enough, but if we lost the connection, or should stop, just quit. - return; - } - - // We need to go out of the loop. - if (retriesCount > 0) { - shouldRetry = YES; - break; - } - } - - PFLogError(PFLoggingTagCommon, @"Failed to run command eventually with error: %@", error); - } - - // Post processing shouldn't make the queue retry the command. - resultTask = [self _didFinishRunningCommand:command withIdentifier:identifier resultTask:resultTask]; - [resultTask waitForResult:nil]; - - // Notify anyone waiting that the operation is completed. - if (resultTask.error) { - taskCompletionSource.error = resultTask.error; - } else if (resultTask.exception) { - taskCompletionSource.exception = resultTask.exception; - } else if (resultTask.cancelled) { - [taskCompletionSource cancel]; - } else { - taskCompletionSource.result = resultTask.result; - } - } - - // Retry here so that we're in cleaner state. - if (shouldRetry) { - return [self _runCommandsWithRetriesCount:(retriesCount - 1)]; - } -} - -- (BFTask *)_runCommand:(id)command withIdentifier:(NSString *)identifier { - if ([command isKindOfClass:[PFRESTCommand class]]) { - return [self.commandRunner runCommandAsync:(PFRESTCommand *)command withOptions:0]; - } - - NSString *reason = [NSString stringWithFormat:@"Can't find a compatible runner for command %@.", command]; - NSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException - reason:reason - userInfo:nil]; - return [BFTask taskWithException:exception]; -} - -- (BFTask *)_didFinishRunningCommand:(id)command - withIdentifier:(NSString *)identifier - resultTask:(BFTask *)resultTask { - PFConsistencyAssert(resultTask.completed, @"Task should be completed."); - - dispatch_sync(_synchronizationQueue, ^{ - [_taskCompletionSources removeObjectForKey:identifier]; - }); - - if (resultTask.exception || resultTask.error || resultTask.cancelled) { - [self.testHelper notify:PFEventuallyQueueEventCommandFailed]; - } else { - [self.testHelper notify:PFEventuallyQueueEventCommandSucceded]; - } - - return resultTask; -} - -- (BFTask *)_waitForOperationSet:(PFOperationSet *)operationSet - eventuallyPin:(PFEventuallyPin *)eventuallyPin { - return [BFTask taskWithResult:nil]; -} - -///-------------------------------------- -#pragma mark - Reachability -///-------------------------------------- - -- (void)_startMonitoringNetworkReachability { -#if TARGET_OS_WATCH - self.connected = YES; -#else - if (self.monitorsReachability) { - return; - } - self.monitorsReachability = YES; - - [[PFReachability sharedParseReachability] addListener:self]; - - // Set the initial connected status - self.connected = ([PFReachability sharedParseReachability].currentState != PFReachabilityStateNotReachable); -#endif -} - -- (void)_stopMonitoringNetworkReachability { -#if !TARGET_OS_WATCH - if (!self.monitorsReachability) { - return; - } - - [[PFReachability sharedParseReachability] removeListener:self]; - - self.monitorsReachability = NO; - self.connected = YES; -#endif -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -/*! Manually sets the network connection status. */ -- (void)setConnected:(BOOL)connected { - BFTaskCompletionSource *barrier = [BFTaskCompletionSource taskCompletionSource]; - dispatch_async(_processingQueue, ^{ - dispatch_sync(_synchronizationQueue, ^{ - if (self.connected != connected) { - _connected = connected; - if (connected) { - dispatch_source_merge_data(_processingQueueSource, 1); - } - } - }); - barrier.result = nil; - }); - if (connected) { - dispatch_async(_synchronizationQueue, ^{ - if (_retryingSemaphore) { - dispatch_semaphore_signal(_retryingSemaphore); - } - }); - } - [barrier.task waitForResult:nil]; -} - -///-------------------------------------- -#pragma mark - Test Helper Method -///-------------------------------------- - -/*! Makes this command cache forget all the state it keeps during a single run of the app. */ -- (void)_simulateReboot { - // Make sure there is no command pending enqueuing - [[[[_commandEnqueueTaskQueue enqueue:^BFTask *(BFTask *toAwait) { - return toAwait; - }] continueWithExecutor:_synchronizationExecutor withBlock:^id(BFTask *task) { - // Remove all state task completion sources - [_taskCompletionSources removeAllObjects]; - return nil; - }] continueWithExecutor:[BFExecutor executorWithDispatchQueue:_processingQueue] withBlock:^id(BFTask *task) { - // Let all operations in the queue run at least once - return nil; - }] waitUntilFinished]; -} - -/*! Test helper to return how many commands are being retained in memory by the cache. */ -- (int)_commandsInMemory { - return (int)[_taskCompletionSources count]; -} - -/*! Called by PFObject whenever an object has been updated after a saveEventually. */ -- (void)_notifyTestHelperObjectUpdated { - [self.testHelper notify:PFEventuallyQueueEventObjectUpdated]; -} - -- (void)_setMaxAttemptsCount:(NSUInteger)attemptsCount { - _maxAttemptsCount = attemptsCount; -} - -- (void)_setRetryInterval:(NSTimeInterval)retryInterval { - _retryInterval = retryInterval; -} - -#if !TARGET_OS_WATCH - -///-------------------------------------- -#pragma mark - Reachability -///-------------------------------------- - -- (void)reachability:(PFReachability *)reachability didChangeReachabilityState:(PFReachabilityState)state { - if (self.monitorsReachability) { - self.connected = (state != PFReachabilityStateNotReachable); - } -} - -#endif - -@end - -// PFEventuallyQueueTestHelper gets notifications of various events happening in the command cache, -// so that tests can be synchronized. See CommandTests.m for examples of how to use this. - -@implementation PFEventuallyQueueTestHelper - -- (instancetype)init { - self = [super init]; - if (self) { - [self clear]; - } - return self; -} - -- (void)clear { - for (int i = 0; i < PFEventuallyQueueEventCount; ++i) { - events[i] = dispatch_semaphore_create(0); - } -} - -- (void)notify:(PFEventuallyQueueTestHelperEvent)event { - dispatch_semaphore_signal(events[event]); -} - -- (BOOL)waitFor:(PFEventuallyQueueTestHelperEvent)event { - // Wait 1 second for a permit from the semaphore. - return (dispatch_semaphore_wait(events[event], dispatch_time(DISPATCH_TIME_NOW, 10LL * NSEC_PER_SEC)) == 0); -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyQueue_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyQueue_Private.h deleted file mode 100644 index 3e576f3..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFEventuallyQueue_Private.h +++ /dev/null @@ -1,133 +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. - */ - -#import "PFEventuallyQueue.h" - -@class BFExecutor; -@class PFEventuallyPin; -@class PFObject; -@class PFOperationSet; -@class PFTaskQueue; - -extern NSUInteger const PFEventuallyQueueDefaultMaxAttemptsCount; -extern NSTimeInterval const PFEventuallyQueueDefaultTimeoutRetryInterval; - -@class BFTaskCompletionSource; - -@interface PFEventuallyQueue () -{ -@protected - BFExecutor *_synchronizationExecutor; - dispatch_queue_t _synchronizationQueue; - -@private - dispatch_queue_t _processingQueue; - dispatch_source_t _processingQueueSource; - - dispatch_semaphore_t _retryingSemaphore; - - NSMutableDictionary *_taskCompletionSources; - - /*! - Task queue that will enqueue command enqueueing task so that we enqueue the command - one at a time. - */ - PFTaskQueue *_commandEnqueueTaskQueue; -} - -@property (nonatomic, assign, readwrite, getter=isConnected) BOOL connected; - -/*! - This method is used to do some work after the command is finished running and - either succeeded or dropped from queue with error/exception. - - @param command Command that was run. - @param identifier Unique identifier of the command - @param resultTask Task that represents the result of running a command. - @returns A continuation task in case the EventuallyQueue need to do something. - Typically this will return back given resultTask. - */ -- (BFTask *)_didFinishRunningCommand:(id)command - withIdentifier:(NSString *)identifier - resultTask:(BFTask *)resultTask; - -///-------------------------------------- -/// @name Reachability -///-------------------------------------- - -- (void)_startMonitoringNetworkReachability; -- (void)_stopMonitoringNetworkReachability; - -///-------------------------------------- -/// @name Test Helper -///-------------------------------------- - -- (void)_setMaxAttemptsCount:(NSUInteger)attemptsCount; - -- (void)_setRetryInterval:(NSTimeInterval)retryInterval; - -- (void)_simulateReboot NS_REQUIRES_SUPER; - -- (int)_commandsInMemory; - -- (void)_notifyTestHelperObjectUpdated; - -@end - -@protocol PFEventuallyQueueSubclass - -///-------------------------------------- -/// @name Pending Commands -///-------------------------------------- - - -/*! - Generates a new identifier for a command so that it can be sorted later by this identifier. - */ -- (NSString *)_newIdentifierForCommand:(id)command; - -/*! - This method is triggered on batch processing of the queue. - It will capture the identifiers and use them to execute commands. - - @returns An array of identifiers of all commands that are pending sorted by the order they're enqueued. - */ -- (NSArray *)_pendingCommandIdentifiers; - -/*! - This method should return a command for a given identifier. - - @param identifier An identifier of a command, that was in array returned by <_pendingCommandIdentifiers> - @param error Pointer to `NSError *` that should be set if the method failed to construct/retrieve a command. - - @returns A command that needs to be run, or `nil` if there was an error. - */ -- (id)_commandWithIdentifier:(NSString *)identifier error:(NSError **)error; - -///-------------------------------------- -/// @name Running Commands -///-------------------------------------- - -/*! - This method serves as a way to do any kind of work to enqueue a command properly. - If the task fails with an error/exception or is cancelled - execution won't start. - - @param command Command that needs to be enqueued - @param object The object on which the command is run against. - @param identifier Unique identifier used to represent a command. - @returns Task that is resolved when the command is complete enqueueing. - */ -- (BFTask *)_enqueueCommandInBackground:(id)command - object:(PFObject *)object - identifier:(NSString *)identifier; - -- (BFTask *)_waitForOperationSet:(PFOperationSet *)operationSet - eventuallyPin:(PFEventuallyPin *)eventuallyPin; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFFileManager.h b/FoodbLog/Pods/Parse/Parse/Internal/PFFileManager.h deleted file mode 100644 index 91e5700..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFFileManager.h +++ /dev/null @@ -1,77 +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. - */ - -#import - -#import - -#import "PFMacros.h" - -@class BFExecutor; -@class BFTask PF_GENERIC(__covariant BFGenericType); - -typedef NS_OPTIONS(uint8_t, PFFileManagerOptions) { - PFFileManagerOptionSkipBackup = 1 << 0, -}; - -@interface PFFileManager : NSObject - -///-------------------------------------- -/// @name Class -///-------------------------------------- - -+ (BOOL)isApplicationGroupContainerReachableForGroupIdentifier:(NSString *)applicationGroup; - -+ (BFTask *)createDirectoryIfNeededAsyncAtPath:(NSString *)path; -+ (BFTask *)createDirectoryIfNeededAsyncAtPath:(NSString *)path - withOptions:(PFFileManagerOptions)options - executor:(BFExecutor *)executor; - -+ (BFTask *)writeStringAsync:(NSString *)string toFile:(NSString *)filePath; -+ (BFTask *)writeDataAsync:(NSData *)data toFile:(NSString *)filePath; - -+ (BFTask *)copyItemAsyncAtPath:(NSString *)fromPath toPath:(NSString *)toPath; -+ (BFTask *)moveItemAsyncAtPath:(NSString *)fromPath toPath:(NSString *)toPath; - -+ (BFTask *)moveContentsOfDirectoryAsyncAtPath:(NSString *)fromPath - toDirectoryAtPath:(NSString *)toPath - executor:(BFExecutor *)executor; - -+ (BFTask *)removeItemAtPathAsync:(NSString *)path; -+ (BFTask *)removeItemAtPathAsync:(NSString *)path withFileLock:(BOOL)useFileLock; -+ (BFTask *)removeDirectoryContentsAsyncAtPath:(NSString *)path; - -///-------------------------------------- -/// @name Instance -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithApplicationIdentifier:(NSString *)applicationIdentifier - applicationGroupIdentifier:(NSString *)applicationGroupIdentifier NS_DESIGNATED_INITIALIZER; - -/*! - Returns /Library/Private Documents/Parse - for non-user generated data that shouldn't be deleted by iOS, such as "offline data". - - See https://developer.apple.com/library/ios/#qa/qa1699/_index.html - */ -- (NSString *)parseDefaultDataDirectoryPath; -- (NSString *)parseLocalSandboxDataDirectoryPath; -- (NSString *)parseDataDirectoryPath_DEPRECATED; - -/*! - The path including directories that we save data to for a given filename. - If the file isn't found in the new "Private Documents" location, but is in the old "Documents" location, - moves it and returns the new location. - */ -- (NSString *)parseDataItemPathForPathComponent:(NSString *)pathComponent; - -- (NSString *)parseCacheItemPathForPathComponent:(NSString *)component; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFFileManager.m b/FoodbLog/Pods/Parse/Parse/Internal/PFFileManager.m deleted file mode 100644 index a48a6c8..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFFileManager.m +++ /dev/null @@ -1,367 +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. - */ - -#import "PFFileManager.h" - -#import - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFLogging.h" -#import "PFMultiProcessFileLockController.h" - -static NSString *const _PFFileManagerParseDirectoryName = @"Parse"; - -static NSDictionary *_PFFileManagerDefaultDirectoryFileAttributes() { -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR - return @{ NSFileProtectionKey : NSFileProtectionCompleteUntilFirstUserAuthentication }; -#else - return nil; -#endif -} - -static NSDataWritingOptions _PFFileManagerDefaultDataWritingOptions() { - NSDataWritingOptions options = NSDataWritingAtomic; -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR - options |= NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication; -#endif - return options; -} - -@interface PFFileManager () - -@property (nonatomic, copy) NSString *applicationIdentifier; -@property (nonatomic, copy) NSString *applicationGroupIdentifier; - -@end - -@implementation PFFileManager - -///-------------------------------------- -#pragma mark - Class -///-------------------------------------- - -+ (BOOL)isApplicationGroupContainerReachableForGroupIdentifier:(NSString *)applicationGroup { - return ([[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:applicationGroup] != nil); -} - -+ (BFTask *)writeStringAsync:(NSString *)string toFile:(NSString *)filePath { - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; - return [self writeDataAsync:data toFile:filePath]; - }]; -} - -+ (BFTask *)writeDataAsync:(NSData *)data toFile:(NSString *)filePath { - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - NSError *error = nil; - [data writeToFile:filePath - options:_PFFileManagerDefaultDataWritingOptions() - error:&error]; - if (error) { - return [BFTask taskWithError:error]; - } - return nil; - }]; -} - -+ (BFTask *)createDirectoryIfNeededAsyncAtPath:(NSString *)path { - return [self createDirectoryIfNeededAsyncAtPath:path - withOptions:PFFileManagerOptionSkipBackup - executor:[BFExecutor defaultPriorityBackgroundExecutor]]; -} - -+ (BFTask *)createDirectoryIfNeededAsyncAtPath:(NSString *)path - withOptions:(PFFileManagerOptions)options - executor:(BFExecutor *)executor { - return [BFTask taskFromExecutor:executor withBlock:^id{ - if (![[NSFileManager defaultManager] fileExistsAtPath:path]) { - NSError *error = nil; - [[NSFileManager defaultManager] createDirectoryAtPath:path - withIntermediateDirectories:YES - attributes:_PFFileManagerDefaultDirectoryFileAttributes() - error:&error]; - if (error) { - return [BFTask taskWithError:error]; - } - } - -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR - if (options & PFFileManagerOptionSkipBackup) { - [self _skipBackupOnPath:path]; - } -#endif - return nil; - }]; -} - -+ (BFTask *)copyItemAsyncAtPath:(NSString *)fromPath toPath:(NSString *)toPath { - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - NSError *error = nil; - [[NSFileManager defaultManager] copyItemAtPath:fromPath toPath:toPath error:&error]; - if (error) { - return [BFTask taskWithError:error]; - } - return nil; - }]; -} - -+ (BFTask *)moveItemAsyncAtPath:(NSString *)fromPath toPath:(NSString *)toPath { - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - NSError *error = nil; - [[NSFileManager defaultManager] moveItemAtPath:fromPath toPath:toPath error:&error]; - if (error) { - return [BFTask taskWithError:error]; - } - return nil; - }]; -} - -+ (BFTask *)moveContentsOfDirectoryAsyncAtPath:(NSString *)fromPath - toDirectoryAtPath:(NSString *)toPath - executor:(BFExecutor *)executor { - if ([fromPath isEqualToString:toPath]) { - return [BFTask taskWithResult:nil]; - } - - return [[[self createDirectoryIfNeededAsyncAtPath:toPath - withOptions:PFFileManagerOptionSkipBackup - executor:executor] continueWithSuccessBlock:^id(BFTask *task) { - NSError *error = nil; - NSArray *contents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:fromPath - error:&error]; - if (error) { - return [BFTask taskWithError:error]; - } - return contents; - }] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *contents = task.result; - if ([contents count] == 0) { - return nil; - } - - NSMutableArray *tasks = [NSMutableArray arrayWithCapacity:[contents count]]; - for (NSString *path in contents) { - BFTask *task = [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - NSError *error = nil; - NSString *fromFilePath = [fromPath stringByAppendingPathComponent:path]; - NSString *toFilePath = [toPath stringByAppendingPathComponent:path]; - [[NSFileManager defaultManager] moveItemAtPath:fromFilePath - toPath:toFilePath - error:&error]; - if (error) { - return [BFTask taskWithError:error]; - } - return nil; - }]; - [tasks addObject:task]; - } - return [BFTask taskForCompletionOfAllTasks:tasks]; - }]; -} - -+ (BFTask *)removeDirectoryContentsAsyncAtPath:(NSString *)path { - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:path]; - - NSFileManager *fileManager = [NSFileManager defaultManager]; - - NSError *error = nil; - NSArray *fileNames = [fileManager contentsOfDirectoryAtPath:path error:&error]; - if (error) { - PFLogError(PFLoggingTagCommon, @"Failed to list directory: %@", path); - return [BFTask taskWithError:error]; - } - - NSMutableArray *fileTasks = [NSMutableArray array]; - for (NSString *fileName in fileNames) { - NSString *filePath = [path stringByAppendingPathComponent:fileName]; - BFTask *fileTask = [[self removeItemAtPathAsync:filePath withFileLock:NO] continueWithBlock:^id(BFTask *task) { - if (task.faulted) { - PFLogError(PFLoggingTagCommon, @"Failed to delete file: %@ with error: %@", filePath, task.error); - } - return task; - }]; - [fileTasks addObject:fileTask]; - } - return [BFTask taskForCompletionOfAllTasks:fileTasks]; - }] continueWithBlock:^id(BFTask *task) { - [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:path]; - return task; - }]; -} - -+ (BFTask *)removeItemAtPathAsync:(NSString *)path { - return [self removeItemAtPathAsync:path withFileLock:YES]; -} - -+ (BFTask *)removeItemAtPathAsync:(NSString *)path withFileLock:(BOOL)useFileLock { - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - if (useFileLock) { - [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:path]; - } - NSFileManager *fileManager = [NSFileManager defaultManager]; - if ([fileManager fileExistsAtPath:path]) { - NSError *error = nil; - [[NSFileManager defaultManager] removeItemAtPath:path error:&error]; - if (error) { - if (useFileLock) { - [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:path]; - } - return [BFTask taskWithError:error]; - } - } - if (useFileLock) { - [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:path]; - } - return nil; - }]; -} - -///-------------------------------------- -#pragma mark - Instance -///-------------------------------------- - -#pragma mark Init - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithApplicationIdentifier:(NSString *)applicationIdentifier - applicationGroupIdentifier:(NSString *)applicationGroupIdentifier { - self = [super init]; - if (!self) return nil; - - _applicationIdentifier = [applicationIdentifier copy]; - _applicationGroupIdentifier = [applicationGroupIdentifier copy]; - - return self; -} - -#pragma mark Public - -- (NSString *)parseDefaultDataDirectoryPath { - // NSHomeDirectory: Returns the path to either the user's or application's - // home directory, depending on the platform. Sandboxed by default on iOS. -#if PARSE_IOS_ONLY - NSString *directoryPath = nil; - if (self.applicationGroupIdentifier) { - NSURL *containerPath = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:self.applicationGroupIdentifier]; - directoryPath = [[containerPath path] stringByAppendingPathComponent:_PFFileManagerParseDirectoryName]; - directoryPath = [directoryPath stringByAppendingPathComponent:self.applicationIdentifier]; - } else { - return [self parseLocalSandboxDataDirectoryPath]; - } -#else - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); - NSString *directoryPath = [paths firstObject]; - directoryPath = [directoryPath stringByAppendingPathComponent:_PFFileManagerParseDirectoryName]; - directoryPath = [directoryPath stringByAppendingPathComponent:self.applicationIdentifier]; -#endif - - BFTask *createDirectoryTask = [[self class] createDirectoryIfNeededAsyncAtPath:directoryPath - withOptions:PFFileManagerOptionSkipBackup - executor:[BFExecutor immediateExecutor]]; - [createDirectoryTask waitForResult:nil withMainThreadWarning:NO]; - - return directoryPath; -} - -- (NSString *)parseLocalSandboxDataDirectoryPath { -#if TARGET_OS_IPHONE - NSString *library = [NSHomeDirectory() stringByAppendingPathComponent:@"Library"]; - NSString *privateDocuments = [library stringByAppendingPathComponent:@"Private Documents"]; - NSString *directoryPath = [privateDocuments stringByAppendingPathComponent:_PFFileManagerParseDirectoryName]; - BFTask *createDirectoryTask = [[self class] createDirectoryIfNeededAsyncAtPath:directoryPath - withOptions:PFFileManagerOptionSkipBackup - executor:[BFExecutor immediateExecutor]]; - [createDirectoryTask waitForResult:nil withMainThreadWarning:NO]; - - return directoryPath; -#else - return [self parseDefaultDataDirectoryPath]; -#endif -} - -- (NSString *)parseDataDirectoryPath_DEPRECATED { - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); - NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder - NSString *parseDirPath = [documentsDirectory stringByAppendingPathComponent:_PFFileManagerParseDirectoryName]; - - // If this old directory is still on disk, but empty, delete it. - if ([[NSFileManager defaultManager] fileExistsAtPath:parseDirPath]) { - NSError *error = nil; - NSArray *contents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:parseDirPath error:&error]; - if (error == nil && [contents count] == 0) { - [[NSFileManager defaultManager] removeItemAtPath:parseDirPath error:nil]; - } - } - - return parseDirPath; -} - -- (NSString *)parseDataItemPathForPathComponent:(NSString *)pathComponent { - NSFileManager *fileManager = [NSFileManager defaultManager]; - - NSString *currentLocation = [[self parseDefaultDataDirectoryPath] stringByAppendingPathComponent:pathComponent]; - if (![fileManager fileExistsAtPath:currentLocation]) { - NSString *deprecatedDir = [self parseDataDirectoryPath_DEPRECATED]; - NSString *deprecatedLocation = [deprecatedDir stringByAppendingPathComponent:pathComponent]; - if ([fileManager fileExistsAtPath:deprecatedLocation]) { - [fileManager moveItemAtPath:deprecatedLocation toPath:currentLocation error:nil]; - // If the deprecated dir is still on disk, delete it. - if ([fileManager fileExistsAtPath:deprecatedDir]) { - NSError *error = nil; - NSArray *contents = [fileManager contentsOfDirectoryAtPath:deprecatedDir error:&error]; - if (!error && [contents count] == 0) { - [fileManager removeItemAtPath:deprecatedDir error:nil]; - } - } - } - } - return currentLocation; -} - -- (NSString *)parseCacheItemPathForPathComponent:(NSString *)component { - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); - NSString *folderPath = [paths firstObject]; - folderPath = [folderPath stringByAppendingPathComponent:_PFFileManagerParseDirectoryName]; -#if !TARGET_OS_IPHONE - // We append the applicationId in case the OS X application isn't sandboxed, - // to avoid collisions in the generic ~/Library/Caches/Parse/------ dir. - folderPath = [folderPath stringByAppendingPathComponent:self.applicationIdentifier]; -#endif - folderPath = [folderPath stringByAppendingPathComponent:component]; - return [folderPath stringByStandardizingPath]; -} - -///-------------------------------------- -#pragma mark - Private -///-------------------------------------- - -// Skips all backups on the provided path. -+ (BOOL)_skipBackupOnPath:(NSString *)path { - if (path == nil) { - return NO; - } - - NSError *error = nil; - - NSURL *url = [NSURL fileURLWithPath:path]; - BOOL success = [url setResourceValue:@YES forKey:NSURLIsExcludedFromBackupKey error:&error]; - if (!success) { - PFLogError(PFLoggingTagCommon, - @"Unable to exclude %@ from backup with error: %@", [url lastPathComponent], error); - } - - return success; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFGeoPointPrivate.h b/FoodbLog/Pods/Parse/Parse/Internal/PFGeoPointPrivate.h deleted file mode 100644 index 7883ef9..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFGeoPointPrivate.h +++ /dev/null @@ -1,33 +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. - */ - -#import - -# import - -extern const double EARTH_RADIUS_MILES; -extern const double EARTH_RADIUS_KILOMETERS; - -@class PFGeoPoint; - -@interface PFGeoPoint (Private) - -// Internal commands - -/* - Gets the encoded format for an GeoPoint. - */ -- (NSDictionary *)encodeIntoDictionary; - -/*! - Creates an GeoPoint from its encoded format. - */ -+ (instancetype)geoPointWithDictionary:(NSDictionary *)dictionary; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFHash.h b/FoodbLog/Pods/Parse/Parse/Internal/PFHash.h deleted file mode 100644 index e97af69..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFHash.h +++ /dev/null @@ -1,21 +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. - */ - -#import - -extern NSUInteger PFIntegerPairHash(NSUInteger a, NSUInteger b); - -extern NSUInteger PFDoublePairHash(double a, double b); - -extern NSUInteger PFDoubleHash(double d); - -extern NSUInteger PFLongHash(unsigned long long l); - -extern NSString *PFMD5HashFromData(NSData *data); -extern NSString *PFMD5HashFromString(NSString *string); diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFHash.m b/FoodbLog/Pods/Parse/Parse/Internal/PFHash.m deleted file mode 100644 index 4fb33f8..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFHash.m +++ /dev/null @@ -1,76 +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. - */ - -#import "PFHash.h" - -#import - -// -// Thank you Thomas Wang for 32/64 bit mix hash -// http://www.concentric.net/~Ttwang/tech/inthash.htm -// -// Above link is now dead, please visit -// http://web.archive.org/web/20121102023700/http://www.concentric.net/~Ttwang/tech/inthash.htm -// - -extern NSUInteger PFIntegerPairHash(NSUInteger a, NSUInteger b) { - return PFLongHash(((unsigned long long)a) << 32 | b); -} - -extern NSUInteger PFDoublePairHash(double a, double b) { - return PFIntegerPairHash(PFDoubleHash(a), PFDoubleHash(b)); -} - -extern NSUInteger PFDoubleHash(double d) { - union { - double key; - uint64_t bits; - } u; - u.key = d; - return PFLongHash(u.bits); -} - -extern NSUInteger PFLongHash(unsigned long long l) { - l = (~l) + (l << 18); // key = (key << 18) - key - 1; - l ^= (l >> 31); - l *= 21; // key = (key + (key << 2)) + (key << 4); - l ^= (l >> 11); - l += (l << 6); - l ^= (l >> 22); - return (NSUInteger)l; -} - -extern NSString *PFMD5HashFromData(NSData *data) { - unsigned char md[CC_MD5_DIGEST_LENGTH]; - - // NOTE: `__block` variables of a struct type seem to be bugged. The compiler emits instructions to read - // from the stack past where they're supposed to exist. This fixes that, by only using a traditional pointer. - CC_MD5_CTX ctx_val = { 0 }; - CC_MD5_CTX *ctx_ptr = &ctx_val; - CC_MD5_Init(ctx_ptr); - [data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) { - CC_MD5_Update(ctx_ptr , bytes, (CC_LONG)byteRange.length); - }]; - CC_MD5_Final(md, ctx_ptr); - - NSString *string = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", - md[0], md[1], - md[2], md[3], - md[4], md[5], - md[6], md[7], - md[8], md[9], - md[10], md[11], - md[12], md[13], - md[14], md[15]]; - return string; -} - -extern NSString *PFMD5HashFromString(NSString *string) { - return PFMD5HashFromData([string dataUsingEncoding:NSUTF8StringEncoding]); -} diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFInternalUtils.h b/FoodbLog/Pods/Parse/Parse/Internal/PFInternalUtils.h deleted file mode 100644 index eedf09e..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFInternalUtils.h +++ /dev/null @@ -1,76 +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. - */ - -#import - -#import - -#import "PFEncoder.h" - -@class PFFileManager; -@class PFKeychainStore; -@class PFNetworkCommand; - -@interface PFInternalUtils : NSObject - -+ (NSString *)parseServerURLString; -+ (void)setParseServer:(NSString *)server; - -+ (NSNumber *)fileSizeOfFileAtPath:(NSString *)filePath error:(NSError **)error; - -/** - Clears system time zone cache, gets the name of the time zone - and caches it. This method is completely thread-safe. - */ -+ (NSString *)currentSystemTimeZoneName; - -/** - * Performs selector on the target, only if the target and selector are non-nil, - * as well as target responds to selector - */ -+ (void)safePerformSelector:(SEL)selector withTarget:(id)target object:(id)object object:(id)anotherObject; - -+ (NSNumber *)addNumber:(NSNumber *)first withNumber:(NSNumber *)second; - -// -// Given an NSDictionary/NSArray/NSNumber/NSString even nested ones -// Generates a cache key that can be used to identify this object -+ (NSString *)cacheKeyForObject:(id)object; - -/**! - * Does a deep traversal of every item in object, calling block on every one. - * @param object The object or array to traverse deeply. - * @param block The block to call for every item. It will be passed the item - * as an argument. If it returns a truthy value, that value will replace the - * item in its parent container. - * @return The result of calling block on the top-level object itself. - **/ -+ (id)traverseObject:(id)object usingBlock:(id (^)(id object))block; - -/*! - This method will split an array into multiple arrays, each with up to maximum components count. - - @param array Array to split. - @param components Number of components that should be used as a max per each subarray. - - @return Array of arrays constructed by splitting the array. - */ -+ (NSArray *)arrayBySplittingArray:(NSArray *)array withMaximumComponentsPerSegment:(NSUInteger)components; - -+ (id)_stringWithFormat:(NSString *)format arguments:(NSArray *)arguments; -@end - -@interface PFJSONCacheItem : NSObject - -@property (nonatomic, copy, readonly) NSString *hashValue; - -- (instancetype)initWithObject:(id)object; -+ (PFJSONCacheItem *)cacheFromObject:(id)object; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFInternalUtils.m b/FoodbLog/Pods/Parse/Parse/Internal/PFInternalUtils.m deleted file mode 100644 index 0b585bb..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFInternalUtils.m +++ /dev/null @@ -1,298 +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. - */ - -#import "PFInternalUtils.h" - -#include -#include - -#import - -#import "PFACLPrivate.h" -#import "PFAssert.h" -#import "PFDateFormatter.h" -#import "BFTask+Private.h" -#import "PFFieldOperation.h" -#import "PFFile_Private.h" -#import "PFGeoPointPrivate.h" -#import "PFKeyValueCache.h" -#import "PFKeychainStore.h" -#import "PFLogging.h" -#import "PFEncoder.h" -#import "PFObjectPrivate.h" -#import "PFRelationPrivate.h" -#import "PFUserPrivate.h" -#import "Parse.h" -#import "PFFileManager.h" -#import "PFJSONSerialization.h" -#import "PFMultiProcessFileLockController.h" -#import "PFHash.h" - -#if TARGET_OS_IOS -#import "PFProduct.h" -#endif - -static NSString *parseServer_; - -@implementation PFInternalUtils - -+ (void)initialize { - if (self == [PFInternalUtils class]) { - [self setParseServer:kPFParseServer]; - } -} - -+ (NSString *)parseServerURLString { - return parseServer_; -} - -// Useful for testing. -// Beware of race conditions if you call setParseServer while something else may be using -// httpClient. -+ (void)setParseServer:(NSString *)server { - parseServer_ = [server copy]; -} - -+ (NSString *)currentSystemTimeZoneName { - static NSLock *methodLock; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - methodLock = [[NSLock alloc] init]; - }); - - [methodLock lock]; - [NSTimeZone resetSystemTimeZone]; - NSString *systemTimeZoneName = [[NSTimeZone systemTimeZone].name copy]; - [methodLock unlock]; - - return systemTimeZoneName; -} - -+ (void)safePerformSelector:(SEL)selector withTarget:(id)target object:(id)object object:(id)anotherObject { - if (target == nil || selector == nil || ![target respondsToSelector:selector]) { - return; - } - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - [target performSelector:selector withObject:object withObject:anotherObject]; -#pragma clang diagnostic pop -} - -+ (NSNumber *)fileSizeOfFileAtPath:(NSString *)filePath error:(NSError **)error { - NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath - error:error]; - return attributes[NSFileSize]; -} - -///-------------------------------------- -#pragma mark - Serialization -///-------------------------------------- - -+ (NSNumber *)addNumber:(NSNumber *)first withNumber:(NSNumber *)second { - const char *objcType = [first objCType]; - - if (strcmp(objcType, @encode(BOOL)) == 0) { - return @([first boolValue] + [second boolValue]); - } else if (strcmp(objcType, @encode(char)) == 0) { - return @([first charValue] + [second charValue]); - } else if (strcmp(objcType, @encode(double)) == 0) { - return @([first doubleValue] + [second doubleValue]); - } else if (strcmp(objcType, @encode(float)) == 0) { - return @([first floatValue] + [second floatValue]); - } else if (strcmp(objcType, @encode(int)) == 0) { - return @([first intValue] + [second intValue]); - } else if (strcmp(objcType, @encode(long)) == 0) { - return @([first longValue] + [second longValue]); - } else if (strcmp(objcType, @encode(long long)) == 0) { - return @([first longLongValue] + [second longLongValue]); - } else if (strcmp(objcType, @encode(short)) == 0) { - return @([first shortValue] + [second shortValue]); - } else if (strcmp(objcType, @encode(unsigned char)) == 0) { - return @([first unsignedCharValue] + [second unsignedCharValue]); - } else if (strcmp(objcType, @encode(unsigned int)) == 0) { - return @([first unsignedIntValue] + [second unsignedIntValue]); - } else if (strcmp(objcType, @encode(unsigned long)) == 0) { - return @([first unsignedLongValue] + [second unsignedLongValue]); - } else if (strcmp(objcType, @encode(unsigned long long)) == 0) { - return @([first unsignedLongLongValue] + [second unsignedLongLongValue]); - } else if (strcmp(objcType, @encode(unsigned short)) == 0) { - return @([first unsignedShortValue] + [second unsignedShortValue]); - } - - // Fall back to int? - return @([first intValue] + [second intValue]); -} - -///-------------------------------------- -#pragma mark - CacheKey -///-------------------------------------- - -#pragma mark Public - -+ (NSString *)cacheKeyForObject:(id)object { - NSMutableString *string = [NSMutableString string]; - [self appendObject:object toString:string]; - return string; -} - -#pragma mark Private - -+ (void)appendObject:(id)object toString:(NSMutableString *)string { - if ([object isKindOfClass:[NSDictionary class]]) { - [self appendDictionary:object toString:string]; - } else if ([object isKindOfClass:[NSArray class]]) { - [self appendArray:object toString:string]; - } else if ([object isKindOfClass:[NSString class]]) { - [string appendFormat:@"\"%@\"", object]; - } else if ([object isKindOfClass:[NSNumber class]]) { - [self appendNumber:object toString:string]; - } else if ([object isKindOfClass:[NSNull class]]) { - [self appendNullToString:string]; - } else { - [NSException raise:NSInvalidArgumentException - format:@"Couldn't create cache key from %@", object]; - } -} - -+ (void)appendDictionary:(NSDictionary *)dictionary toString:(NSMutableString *)string { - [string appendString:@"{"]; - - NSArray *keys = [[dictionary allKeys] sortedArrayUsingSelector:@selector(compare:)]; - for (NSString *key in keys) { - [string appendFormat:@"%@:", key]; - - id value = [dictionary objectForKey:key]; - [self appendObject:value toString:string]; - - [string appendString:@","]; - } - - [string appendString:@"}"]; -} - -+ (void)appendArray:(NSArray *)array toString:(NSMutableString *)string { - [string appendString:@"["]; - for (id object in array) { - [self appendObject:object toString:string]; - [string appendString:@","]; - } - [string appendString:@"]"]; -} - -+ (void)appendNumber:(NSNumber *)number toString:(NSMutableString *)string { - [string appendFormat:@"%@", [number stringValue]]; -} - -+ (void)appendNullToString:(NSMutableString *)string { - [string appendString:@"null"]; -} - -+ (id)traverseObject:(id)object usingBlock:(id (^)(id object))block seenObjects:(NSMutableSet *)seen { - if ([object isKindOfClass:[PFObject class]]) { - if ([seen containsObject:object]) { - // We've already visited this object in this call. - return object; - } - [seen addObject:object]; - - for (NSString *key in [(PFObject *)object allKeys]) { - [self traverseObject:object[key] usingBlock:block seenObjects:seen]; - } - - return block(object); - } else if ([object isKindOfClass:[NSArray class]]) { - NSMutableArray *newArray = [object mutableCopy]; - [object enumerateObjectsUsingBlock:^(id child, NSUInteger idx, BOOL *stop) { - id newChild = [self traverseObject:child usingBlock:block seenObjects:seen]; - if (newChild) { - newArray[idx] = newChild; - } - }]; - return block(newArray); - } else if ([object isKindOfClass:[NSDictionary class]]) { - NSMutableDictionary *newDictionary = [object mutableCopy]; - [object enumerateKeysAndObjectsUsingBlock:^(id key, id child, BOOL *stop) { - id newChild = [self traverseObject:child usingBlock:block seenObjects:seen]; - if (newChild) { - newDictionary[key] = newChild; - } - }]; - return block(newDictionary); - } - - return block(object); -} - -+ (id)traverseObject:(id)object usingBlock:(id (^)(id object))block { - NSMutableSet *seen = [[NSMutableSet alloc] init]; - id result = [self traverseObject:object usingBlock:block seenObjects:seen]; - return result; -} - -+ (NSArray *)arrayBySplittingArray:(NSArray *)array withMaximumComponentsPerSegment:(NSUInteger)components { - if ([array count] <= components) { - return @[ array ]; - } - - NSMutableArray *splitArray = [NSMutableArray array]; - NSInteger index = 0; - - while (index < [array count]) { - NSInteger length = MIN([array count] - index, components); - - NSArray *subarray = [array subarrayWithRange:NSMakeRange(index, length)]; - [splitArray addObject:subarray]; - - index += length; - } - - return splitArray; -} - -+ (id)_stringWithFormat:(NSString *)format arguments:(NSArray *)arguments { - // We cannot reliably construct a va_list for 64-bit, so hard code up to N args. - const int maxNumArgs = 10; - PFRangeAssert(arguments.count <= maxNumArgs, @"Maximum of %d format args allowed", maxNumArgs); - NSMutableArray *args = [arguments mutableCopy]; - for (NSUInteger i = arguments.count; i < maxNumArgs; i++) { - [args addObject:@""]; - } - return [NSString stringWithFormat:format, - args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]]; -} - -@end - -// A PFJSONCacheItem is a pairing of a json string with its hash value. -// This is used by our mutable container checking. -@implementation PFJSONCacheItem - -- (instancetype)initWithObject:(id)object { - if (self = [super init]) { - NSObject *encoded = [[PFPointerOrLocalIdObjectEncoder objectEncoder] encodeObject:object]; - NSData *jsonData = [PFJSONSerialization dataFromJSONObject:encoded]; - _hashValue = PFMD5HashFromData(jsonData); - } - return self; -} - -- (BOOL)isEqual:(id)otherCache { - if (![otherCache isKindOfClass:[PFJSONCacheItem class]]) { - return NO; - } - - return [self.hashValue isEqualToString:[otherCache hashValue]]; -} - -+ (PFJSONCacheItem *)cacheFromObject:(id)object { - return [[PFJSONCacheItem alloc] initWithObject:object]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFJSONSerialization.h b/FoodbLog/Pods/Parse/Parse/Internal/PFJSONSerialization.h deleted file mode 100644 index e6fb16c..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFJSONSerialization.h +++ /dev/null @@ -1,65 +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. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface PFJSONSerialization : NSObject - -/*! - The object passed in must be one of: - * NSString - * NSNumber - * NSDictionary - * NSArray - * NSNull - - @returns NSData of JSON representing the passed in object. - */ -+ (nullable NSData *)dataFromJSONObject:(id)object; - -/*! - The object passed in must be one of: - * NSString - * NSNumber - * NSDictionary - * NSArray - * NSNull - - @returns NSString of JSON representing the passed in object. - */ -+ (nullable NSString *)stringFromJSONObject:(id)object; - -/*! - Takes a JSON string and returns the NSDictionaries and NSArrays in it. - You should still call decodeObject if you want Parse types. - */ -+ (nullable id)JSONObjectFromData:(NSData *)data; - -/*! - Takes a JSON string and returns the NSDictionaries and NSArrays in it. - You should still call decodeObject if you want Parse types. - */ -+ (nullable id)JSONObjectFromString:(NSString *)string; - -/*! - @abstract Takes a file path to json file and returns the NSDictionaries and NSArrays in it. - - @description You should still call decodeObject if you want Parse types. - - @param filePath File path to a file. - - @return Decoded object. - */ -+ (nullable id)JSONObjectFromFileAtPath:(NSString *)filePath; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFJSONSerialization.m b/FoodbLog/Pods/Parse/Parse/Internal/PFJSONSerialization.m deleted file mode 100644 index c2c72fe..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFJSONSerialization.m +++ /dev/null @@ -1,72 +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. - */ - -#import "PFJSONSerialization.h" - -#import "PFAssert.h" -#import "PFLogging.h" - -@implementation PFJSONSerialization - -+ (NSData *)dataFromJSONObject:(id)object { - NSError *error = nil; - NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:&error]; - PFParameterAssert(data && !error, @"PFObject values must be serializable to JSON"); - - return data; -} - -+ (NSString *)stringFromJSONObject:(id)object { - NSData *data = [self dataFromJSONObject:object]; - return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; -} - -+ (id)JSONObjectFromData:(NSData *)data { - NSError *error = nil; - id object = [NSJSONSerialization JSONObjectWithData:data - options:0 - error:&error]; - if (!object || error != nil) { - PFLogError(PFLoggingTagCommon, @"JSON deserialization failed with error: %@", [error description]); - } - - return object; -} - -+ (id)JSONObjectFromString:(NSString *)string { - return [self JSONObjectFromData:[string dataUsingEncoding:NSUTF8StringEncoding]]; -} - -+ (id)JSONObjectFromFileAtPath:(NSString *)filePath { - NSInputStream *stream = [NSInputStream inputStreamWithFileAtPath:filePath]; - if (!stream) { - return nil; - } - - [stream open]; - - NSError *streamError = stream.streamError; - // Check if stream failed to open, because there is no such file. - if (streamError && [streamError.domain isEqualToString:NSPOSIXErrorDomain] && streamError.code == ENOENT) { - [stream close]; // Still close the stream. - return nil; - } - - NSError *error = nil; - id object = [NSJSONSerialization JSONObjectWithStream:stream options:0 error:&error]; - if (!object || error) { - PFLogError(PFLoggingTagCommon, @"JSON deserialization failed with error: %@", error.description); - } - - [stream close]; - - return object; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFKeychainStore.h b/FoodbLog/Pods/Parse/Parse/Internal/PFKeychainStore.h deleted file mode 100644 index 3d7c06e..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFKeychainStore.h +++ /dev/null @@ -1,37 +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. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -extern NSString *const PFKeychainStoreDefaultService; - -/*! - PFKeychainStore is NSUserDefaults-like wrapper on top of Keychain. - It supports any object, with NSCoding support. Every object is serialized using NSKeyedArchiver. - - All objects are available after the first device unlock and are not backed up. - */ -@interface PFKeychainStore : NSObject - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithService:(NSString *)service NS_DESIGNATED_INITIALIZER; - -- (nullable id)objectForKey:(NSString *)key; -- (nullable id)objectForKeyedSubscript:(NSString *)key; - -- (BOOL)setObject:(nullable id)object forKey:(NSString *)key; -- (BOOL)setObject:(nullable id)object forKeyedSubscript:(NSString *)key; -- (BOOL)removeObjectForKey:(NSString *)key; -- (BOOL)removeAllObjects; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFKeychainStore.m b/FoodbLog/Pods/Parse/Parse/Internal/PFKeychainStore.m deleted file mode 100644 index 747ff10..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFKeychainStore.m +++ /dev/null @@ -1,200 +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. - */ - -#import "PFKeychainStore.h" - -#import "PFAssert.h" -#import "PFLogging.h" -#import "PFMacros.h" -#import "Parse.h" - -NSString *const PFKeychainStoreDefaultService = @"com.parse.sdk"; - -@interface PFKeychainStore () { - dispatch_queue_t _synchronizationQueue; -} - -@property (nonatomic, copy, readonly) NSString *service; -@property (nonatomic, copy, readonly) NSDictionary *keychainQueryTemplate; - -@end - -@implementation PFKeychainStore - -///-------------------------------------- -#pragma mark - Class -///-------------------------------------- - -+ (NSDictionary *)_keychainQueryTemplateForService:(NSString *)service { - NSMutableDictionary *query = [NSMutableDictionary dictionary]; - if ([service length]) { - query[(__bridge NSString *)kSecAttrService] = service; - } - query[(__bridge NSString *)kSecClass] = (__bridge id)kSecClassGenericPassword; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wtautological-pointer-compare" - if (&kSecAttrAccessible != nil) { - query[(__bridge id)kSecAttrAccessible] = (__bridge id)kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly; - } -#pragma clang diagnostic pop - - return [query copy]; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithService:(NSString *)service { - self = [super init]; - if (!self) return nil; - - _service = service; - _keychainQueryTemplate = [[self class] _keychainQueryTemplateForService:service]; - - NSString *queueLabel = [NSString stringWithFormat:@"com.parse.keychain.%@", service]; - _synchronizationQueue = dispatch_queue_create([queueLabel UTF8String], DISPATCH_QUEUE_CONCURRENT); - PFMarkDispatchQueue(_synchronizationQueue); - - return self; -} - -///-------------------------------------- -#pragma mark - Read -///-------------------------------------- - -- (id)objectForKey:(NSString *)key { - __block NSData *data = nil; - dispatch_sync(_synchronizationQueue, ^{ - data = [self _dataForKey:key]; - }); - - if (data) { - id object = nil; - @try { - object = [NSKeyedUnarchiver unarchiveObjectWithData:data]; - } - @catch (NSException *exception) {} - - return object; - } - return nil; -} - -- (id)objectForKeyedSubscript:(NSString *)key { - return [self objectForKey:key]; -} - -- (NSData *)_dataForKey:(NSString *)key { - NSMutableDictionary *query = [self.keychainQueryTemplate mutableCopy]; - - query[(__bridge NSString *)kSecAttrAccount] = key; - query[(__bridge NSString *)kSecMatchLimit] = (__bridge id)kSecMatchLimitOne; - query[(__bridge NSString *)kSecReturnData] = (__bridge id)kCFBooleanTrue; - - //recover data - CFDataRef data = NULL; - OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&data); - if (status != errSecSuccess && status != errSecItemNotFound) { - PFLogError(PFLoggingTagCommon, - @"PFKeychainStore failed to get object for key '%@', with error: %ld", key, (long)status); - } - return CFBridgingRelease(data); -} - -///-------------------------------------- -#pragma mark - Write -///-------------------------------------- - -- (BOOL)setObject:(id)object forKey:(NSString *)key { - NSParameterAssert(key != nil); - - if (!object) { - return [self removeObjectForKey:key]; - } - - NSData *data = [NSKeyedArchiver archivedDataWithRootObject:object]; - if (!data) { - return NO; - } - - NSMutableDictionary *query = [self.keychainQueryTemplate mutableCopy]; - query[(__bridge NSString *)kSecAttrAccount] = key; - - NSDictionary *update = @{ (__bridge NSString *)kSecValueData : data }; - - __block OSStatus status = errSecSuccess; - dispatch_barrier_sync(_synchronizationQueue,^{ - if ([self _dataForKey:key]) { - status = SecItemUpdate((__bridge CFDictionaryRef)query, (__bridge CFDictionaryRef)update); - } else { - [query addEntriesFromDictionary:update]; - status = SecItemAdd((__bridge CFDictionaryRef)query, NULL); - } - }); - - if (status != errSecSuccess) { - PFLogError(PFLoggingTagCommon, - @"PFKeychainStore failed to set object for key '%@', with error: %ld", key, (long)status); - } - - return (status == errSecSuccess); -} - -- (BOOL)setObject:(id)object forKeyedSubscript:(NSString *)key { - return [self setObject:object forKey:key]; -} - -- (BOOL)removeObjectForKey:(NSString *)key { - __block BOOL value = NO; - dispatch_barrier_sync(_synchronizationQueue, ^{ - value = [self _removeObjectForKey:key]; - }); - return value; -} - -- (BOOL)_removeObjectForKey:(NSString *)key { - PFAssertIsOnDispatchQueue(_synchronizationQueue); - NSMutableDictionary *query = [self.keychainQueryTemplate mutableCopy]; - query[(__bridge NSString *)kSecAttrAccount] = key; - - OSStatus status = SecItemDelete((__bridge CFDictionaryRef)query); - return (status == errSecSuccess); -} - -- (BOOL)removeAllObjects { - NSMutableDictionary *query = [self.keychainQueryTemplate mutableCopy]; - query[(__bridge id)kSecReturnAttributes] = (__bridge id)kCFBooleanTrue; - query[(__bridge id)kSecMatchLimit] = (__bridge id)kSecMatchLimitAll; - - __block BOOL value = YES; - dispatch_barrier_sync(_synchronizationQueue, ^{ - CFArrayRef result = NULL; - OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&result); - if (status != errSecSuccess) { - return; - } - - for (NSDictionary *item in CFBridgingRelease(result)) { - NSString *key = item[(__bridge id)kSecAttrAccount]; - value = [self _removeObjectForKey:key]; - if (!value) { - return; - } - } - }); - return value; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFLocationManager.h b/FoodbLog/Pods/Parse/Parse/Internal/PFLocationManager.h deleted file mode 100644 index b1f115c..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFLocationManager.h +++ /dev/null @@ -1,56 +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. - */ - -#import - -@class CLLocation; -@class CLLocationManager; - -#if TARGET_OS_IPHONE - -@class UIApplication; - -#endif - -typedef void(^PFLocationManagerLocationUpdateBlock)(CLLocation *location, NSError *error); - -/*! - PFLocationManager is an internal class which wraps a CLLocationManager and - returns an updated CLLocation via the provided block. - - When -addBlockForCurrentLocation is called, the CLLocationManager's - -startUpdatingLocations is called, and upon CLLocationManagerDelegate callback - (either success or failure), any handlers that were passed to this class will - be called _once_ with the updated location, then removed. The CLLocationManager - stopsUpdatingLocation upon a single failure or success case, so that the next - location request is guaranteed a speedily returned CLLocation. - */ -@interface PFLocationManager : NSObject - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithSystemLocationManager:(CLLocationManager *)manager; - -#if TARGET_OS_IPHONE - -- (instancetype)initWithSystemLocationManager:(CLLocationManager *)manager - application:(UIApplication *)application - bundle:(NSBundle *)bundle NS_DESIGNATED_INITIALIZER; - -#endif - -///-------------------------------------- -#pragma mark - Current Location -///-------------------------------------- - -- (void)addBlockForCurrentLocation:(PFLocationManagerLocationUpdateBlock)handler; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFLocationManager.m b/FoodbLog/Pods/Parse/Parse/Internal/PFLocationManager.m deleted file mode 100644 index 82286bc..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFLocationManager.m +++ /dev/null @@ -1,153 +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. - */ - -#import "PFLocationManager.h" - -#import - -#import "PFConstants.h" -#import "PFGeoPoint.h" -#import "PFApplication.h" - -@interface PFLocationManager () - -@property (nonatomic, strong) CLLocationManager *locationManager; -@property (nonatomic, strong) NSBundle *bundle; -@property (nonatomic, strong) UIApplication *application; - -// We use blocks and not BFTasks because Tasks don't gain us much - we still -// have to manually hold onto them so that they can be resolved in the -// CLLocationManager callback. -@property (nonatomic, strong) NSMutableSet *blockSet; - -@end - -@implementation PFLocationManager - -///-------------------------------------- -#pragma mark - CLLocationManager -///-------------------------------------- - -+ (CLLocationManager *)_newSystemLocationManager { - __block CLLocationManager *manager = nil; - - // CLLocationManager should be created only on main thread, as it needs a run loop to serve delegate callbacks - dispatch_block_t block = ^{ - manager = [[CLLocationManager alloc] init]; - }; - if ([[NSThread currentThread] isMainThread]) { - block(); - } else { - dispatch_sync(dispatch_get_main_queue(), block); - } - return manager; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - CLLocationManager *manager = [[self class] _newSystemLocationManager]; - return [self initWithSystemLocationManager:manager]; -} - -- (instancetype)initWithSystemLocationManager:(CLLocationManager *)manager { - return [self initWithSystemLocationManager:manager - application:[PFApplication currentApplication].systemApplication - bundle:[NSBundle mainBundle]]; -} - -- (instancetype)initWithSystemLocationManager:(CLLocationManager *)manager - application:(UIApplication *)application - bundle:(NSBundle *)bundle { - self = [super init]; - if (!self) return nil; - - _blockSet = [NSMutableSet setWithCapacity:1]; - _locationManager = manager; - _locationManager.delegate = self; - _bundle = bundle; - _application = application; - - return self; -} - -///-------------------------------------- -#pragma mark - Dealloc -///-------------------------------------- - -- (void)dealloc { - _locationManager.delegate = nil; -} - -///-------------------------------------- -#pragma mark - Public -///-------------------------------------- - -- (void)addBlockForCurrentLocation:(PFLocationManagerLocationUpdateBlock)handler { - @synchronized (self.blockSet) { - [self.blockSet addObject:[handler copy]]; - } - -#if TARGET_OS_WATCH - if ([self.bundle objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"] != nil) { - [self.locationManager requestWhenInUseAuthorization]; - } else { - [self.locationManager requestAlwaysAuthorization]; - } - [self.locationManager requestLocation]; -#elif TARGET_OS_IOS - if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { - if (self.application.applicationState != UIApplicationStateBackground && - [self.bundle objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"] != nil) { - [self.locationManager requestWhenInUseAuthorization]; - } else { - [self.locationManager requestAlwaysAuthorization]; - } - } - [self.locationManager startUpdatingLocation]; -#elif TARGET_OS_MAC - [self.locationManager startUpdatingLocation]; -#endif -} - -///-------------------------------------- -#pragma mark - CLLocationManagerDelegate -///-------------------------------------- - -- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { - CLLocation *location = [locations lastObject]; - - [manager stopUpdatingLocation]; - - NSMutableSet *callbacks = [NSMutableSet setWithCapacity:1]; - @synchronized (self.blockSet) { - [callbacks setSet:self.blockSet]; - [self.blockSet removeAllObjects]; - } - for (PFLocationManagerLocationUpdateBlock block in callbacks) { - block(location, nil); - } -} - -- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { - [manager stopUpdatingLocation]; - - NSMutableSet *callbacks = nil; - @synchronized (self.blockSet) { - callbacks = [self.blockSet copy]; - [self.blockSet removeAllObjects]; - } - for (PFLocationManagerLocationUpdateBlock block in callbacks) { - block(nil, error); - } -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFLogger.h b/FoodbLog/Pods/Parse/Parse/Internal/PFLogger.h deleted file mode 100644 index 2a8858e..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFLogger.h +++ /dev/null @@ -1,47 +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. - */ - -#import - -# import - -typedef uint8_t PFLoggingTag; - -@interface PFLogger : NSObject - -@property (atomic, assign) PFLogLevel logLevel; - -///-------------------------------------- -/// @name Shared Logger -///-------------------------------------- - -/*! -A shared instance of `PFLogger` that should be used for all logging. - -@returns An shared singleton instance of `PFLogger`. -*/ -+ (instancetype)sharedLogger; //TODO: (nlutsenko) Convert to use an instance everywhere instead of a shared singleton. - -///-------------------------------------- -/// @name Logging Messages -///-------------------------------------- - -/*! - Logs a message at a specific level for a tag. - If current logging level doesn't include this level - this method does nothing. - - @param level Logging Level - @param tag Logging Tag - @param format Format to use for the log message. - */ -- (void)logMessageWithLevel:(PFLogLevel)level - tag:(PFLoggingTag)tag - format:(NSString *)format, ... NS_FORMAT_FUNCTION(3, 4); - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFLogger.m b/FoodbLog/Pods/Parse/Parse/Internal/PFLogger.m deleted file mode 100644 index d309096..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFLogger.m +++ /dev/null @@ -1,105 +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. - */ - -#import "PFLogger.h" - -#import "PFApplication.h" -#import "PFLogging.h" - -@implementation PFLogger - -///-------------------------------------- -#pragma mark - Class -///-------------------------------------- - -+ (NSString *)_descriptionForLoggingTag:(PFLoggingTag)tag { - NSString *description = nil; - switch (tag) { - case PFLoggingTagCommon: - break; - case PFLoggingTagCrashReporting: - description = @"Crash Reporting"; - break; - default: - break; - } - return description; -} - -+ (NSString *)_descriptionForLogLevel:(PFLogLevel)logLevel { - NSString *description = nil; - switch (logLevel) { - case PFLogLevelNone: - break; - case PFLogLevelError: - description = @"Error"; - break; - case PFLogLevelWarning: - description = @"Warning"; - break; - case PFLogLevelInfo: - description = @"Info"; - break; - default: - break; - } - return description; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -+ (instancetype)sharedLogger { - static PFLogger *logger; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - logger = [[PFLogger alloc] init]; - }); - return logger; -} - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _logLevel = ([PFApplication currentApplication].appStoreEnvironment ? PFLogLevelNone : PFLogLevelWarning); - - return self; -} - -///-------------------------------------- -#pragma mark - Logging Messages -///-------------------------------------- - -- (void)logMessageWithLevel:(PFLogLevel)level - tag:(PFLoggingTag)tag - format:(NSString *)format, ... NS_FORMAT_FUNCTION(3, 4) { - if (level > self.logLevel || level == PFLogLevelNone || !format) { - return; - } - - va_list args; - va_start(args, format); - - NSMutableString *message = [NSMutableString stringWithFormat:@"[%@]", [[self class] _descriptionForLogLevel:level]]; - - NSString *tagDescription = [[self class] _descriptionForLoggingTag:tag]; - if (tagDescription) { - [message appendFormat:@"[%@]", tagDescription]; - } - - [message appendFormat:@": %@", format]; - - NSLogv(message, args); - - va_end(args); -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFLogging.h b/FoodbLog/Pods/Parse/Parse/Internal/PFLogging.h deleted file mode 100644 index 90a4410..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFLogging.h +++ /dev/null @@ -1,40 +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. - */ - -#ifndef Parse_PFLogging_h -#define Parse_PFLogging_h - -# import - -#import "PFLogger.h" - -static const PFLoggingTag PFLoggingTagCommon = 0; -static const PFLoggingTag PFLoggingTagCrashReporting = 100; - -#define PFLog(level, loggingTag, frmt, ...) \ -[[PFLogger sharedLogger] logMessageWithLevel:level tag:loggingTag format:(frmt), ##__VA_ARGS__] - -#define PFLogError(tag, frmt, ...) \ -PFLog(PFLogLevelError, (tag), (frmt), ##__VA_ARGS__) - -#define PFLogWarning(tag, frmt, ...) \ -PFLog(PFLogLevelWarning, (tag), (frmt), ##__VA_ARGS__) - -#define PFLogInfo(tag, frmt, ...) \ -PFLog(PFLogLevelInfo, (tag), (frmt), ##__VA_ARGS__) - -#define PFLogDebug(tag, frmt, ...) \ -PFLog(PFLogLevelDebug, (tag), (frmt), ##__VA_ARGS__) - -#define PFLogException(exception) \ -PFLogError(PFLoggingTagCommon, @"Caught \"%@\" with reason \"%@\"%@", \ -exception.name, exception, \ -[exception callStackSymbols] ? [NSString stringWithFormat:@":\n%@.", [exception callStackSymbols]] : @"") - -#endif diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFMacros.h b/FoodbLog/Pods/Parse/Parse/Internal/PFMacros.h deleted file mode 100644 index 4f53214..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFMacros.h +++ /dev/null @@ -1,137 +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. - */ - -#import -#import - -#ifndef Parse_PFMacros_h -#define Parse_PFMacros_h - -/*! - This macro allows to create NSSet via subscript. - */ -#define PF_SET(...) [NSSet setWithObjects:__VA_ARGS__, nil] - -/*! - This macro is a handy thing for converting libSystem objects to (void *) pointers. - If you are targeting OSX 10.8+ and iOS 6.0+ - this is no longer required. - */ -#if OS_OBJECT_USE_OBJC - #define PFOSObjectPointer(object) \ - (__bridge void *)(object) -#else - #define PFOSObjectPointer(object) \ - (void *)(object) -#endif - -/*! - Mark a queue in order to be able to check PFAssertIsOnMarkedQueue. - */ -#define PFMarkDispatchQueue(queue) \ -dispatch_queue_set_specific((queue), \ - PFOSObjectPointer(queue), \ - PFOSObjectPointer(queue), \ - NULL) - -///-------------------------------------- -/// @name Memory Management -/// -/// The following macros are influenced and include portions of libextobjc. -///-------------------------------------- - -/*! - Creates a __weak version of the variable provided, - which can later be safely used or converted into strong variable via @strongify. - */ -#define weakify(var) \ -try {} @catch (...) {} \ -__weak __typeof__(var) var ## _weak = var; - -/*! - Creates a strong shadow reference of the variable provided. - Variable must have previously been passed to @weakify. - */ -#define strongify(var) \ -try {} @catch (...) {} \ -__strong __typeof__(var) var = var ## _weak; - -///-------------------------------------- -/// @name KVC -///-------------------------------------- - -/*! - This macro ensures that object.key exists at compile time. - It can accept a chained key path. - */ -#define keypath(TYPE, PATH) \ -(((void)(NO && ((void)((TYPE *)(nil)).PATH, NO)), # PATH)) - -///-------------------------------------- -/// @name Runtime -///-------------------------------------- - -/*! - Using objc_msgSend directly is bad, very bad. Doing so without casting could result in stack-smashing on architectures - (*cough* x86 *cough*) that use strange methods of returning values of different types. - - The objc_msgSend_safe macro ensures that we properly cast the function call to use the right conventions when passing - parameters and getting return values. This also fixes some issues with ARC and objc_msgSend directly, though strange - things can happen when receiving values from NS_RETURNS_RETAINED methods. - */ -#define objc_msgSend(...) _Pragma("GCC error \"Use objc_msgSend_safe() instead!\"") -#define objc_msgSend_safe(returnType, argTypes...) ((returnType (*)(id, SEL, ##argTypes))(objc_msgSend)) - -/*! - This exists because if we throw an exception from dispatch_sync, it doesn't 'bubble up' to the calling thread. - This simply wraps dispatch_sync and properly throws the exception back to the calling thread, not the thread that - the exception was originally raised on. - - @param queue The queue to execute on - @param block The block to execute - - @see dispatch_sync - */ -#define pf_sync_with_throw(queue, block) \ - do { \ - __block NSException *caught = nil; \ - dispatch_sync(queue, ^{ \ - @try { block(); } \ - @catch (NSException *ex) { \ - caught = ex; \ - } \ - }); \ - if (caught) @throw caught; \ - } while (0) - -/*! - To prevent retain cycles by OCMock, this macro allows us to capture a weak reference to return from a stubbed method. - */ -#define andReturnWeak(variable) _andDo( \ - ({ \ - __weak typeof(variable) variable ## _weak = (variable); \ - ^(NSInvocation *invocation) { \ - __autoreleasing typeof(variable) variable ## _block = variable ## _weak; \ - [invocation setReturnValue:&(variable ## _block)]; \ - }; \ - }) \ -) - -/*! - This exists to use along with bolts generic tasks. Instead of returning a BFTask with no generic type, or a generic - type of 'NSNull' when there is no usable result from a task, we use the type 'PFVoid', which will always have a value - of 'nil'. - - This allows us to more easily descern between methods that have not yet updated the return type of their tasks, as well - as provide a more enforced API contract to the caller (as sending any message to PFVoid will result in a compile time - error). - */ -@class _PFVoid_Nonexistant; -typedef _PFVoid_Nonexistant *PFVoid; - -#endif diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFMulticastDelegate.h b/FoodbLog/Pods/Parse/Parse/Internal/PFMulticastDelegate.h deleted file mode 100644 index 7a54dc3..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFMulticastDelegate.h +++ /dev/null @@ -1,31 +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. - */ - -#import - -/*! - Represents an event that can be subscribed to by multiple observers. - */ -@interface PFMulticastDelegate : NSObject { -@private - NSMutableArray *callbacks; -} - -/*! - Subscribes a block for callback. - - Important: if you ever plan to be able to unsubscribe the block, you must copy the block - before passing it to subscribe, and use the same instance for unsubscribe. - */ -- (void)subscribe:(void(^)(id result, NSError *error))block; -- (void)unsubscribe:(void(^)(id result, NSError *error))block; -- (void)invoke:(id)result error:(NSError *)error; -- (void)clear; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFMulticastDelegate.m b/FoodbLog/Pods/Parse/Parse/Internal/PFMulticastDelegate.m deleted file mode 100644 index 9d49fa8..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFMulticastDelegate.m +++ /dev/null @@ -1,39 +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. - */ - -#import "PFMulticastDelegate.h" - -@implementation PFMulticastDelegate - -- (instancetype)init { - if (self = [super init]) { - callbacks = [[NSMutableArray alloc] init]; - } - return self; -} - -- (void)subscribe:(void(^)(id result, NSError *error))block { - [callbacks addObject:block]; -} - -- (void)unsubscribe:(void(^)(id result, NSError *error))block { - [callbacks removeObject:block]; -} - -- (void)invoke:(id)result error:(NSError *)error { - NSArray *callbackCopy = [callbacks copy]; - for (void (^block)(id result, NSError *error) in callbackCopy) { - block(result, error); - } -} -- (void)clear { - [callbacks removeAllObjects]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFNetworkCommand.h b/FoodbLog/Pods/Parse/Parse/Internal/PFNetworkCommand.h deleted file mode 100644 index 6502923..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFNetworkCommand.h +++ /dev/null @@ -1,47 +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. - */ - -#import - -@protocol PFNetworkCommand - -///-------------------------------------- -/// @name Properties -///-------------------------------------- - -@property (nonatomic, copy, readonly) NSString *sessionToken; -@property (nonatomic, copy, readonly) NSString *operationSetUUID; - -// If this command creates an object that is referenced by some other command, -// then this localId will be updated with the new objectId that is returned. -@property (nonatomic, copy) NSString *localId; - -///-------------------------------------- -/// @name Encoding/Decoding -///-------------------------------------- - -+ (instancetype)commandFromDictionaryRepresentation:(NSDictionary *)dictionary; -- (NSDictionary *)dictionaryRepresentation; - -+ (BOOL)isValidDictionaryRepresentation:(NSDictionary *)dictionary; - -///-------------------------------------- -/// @name Local Identifiers -///-------------------------------------- - -/*! - Replaces all local ids in this command with the correct objectId for that object. - This should be called before sending the command over the network, so that there - are no local ids sent to the Parse Cloud. If any local id refers to an object that - has not yet been saved, and thus has no objectId, then this method raises an - exception. - */ -- (void)resolveLocalIds; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFPinningEventuallyQueue.h b/FoodbLog/Pods/Parse/Parse/Internal/PFPinningEventuallyQueue.h deleted file mode 100644 index 17a0499..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFPinningEventuallyQueue.h +++ /dev/null @@ -1,22 +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. - */ - -#import - -#import "PFEventuallyQueue.h" - -@interface PFPinningEventuallyQueue : PFEventuallyQueue - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -+ (instancetype)newDefaultPinningEventuallyQueueWithCommandRunner:(id)commandRunner; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFPinningEventuallyQueue.m b/FoodbLog/Pods/Parse/Parse/Internal/PFPinningEventuallyQueue.m deleted file mode 100644 index 0d039d2..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFPinningEventuallyQueue.m +++ /dev/null @@ -1,327 +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. - */ - -#import "PFPinningEventuallyQueue.h" - -#import -#import - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFCommandResult.h" -#import "PFErrorUtilities.h" -#import "PFEventuallyPin.h" -#import "PFEventuallyQueue_Private.h" -#import "PFMacros.h" -#import "PFObjectPrivate.h" -#import "PFOperationSet.h" -#import "PFRESTCommand.h" -#import "PFTaskQueue.h" - -@interface PFPinningEventuallyQueue () { - /*! - Queue for reading/writing eventually operations from LDS. Makes all reads/writes atomic - operations. - */ - PFTaskQueue *_taskQueue; - - /*! - List of `PFEventuallyPin.uuid` that are currently queued in `_processingQueue`. This contains - uuid of PFEventuallyPin that's enqueued. - */ - NSMutableArray *_eventuallyPinUUIDQueue; - - /*! - Map of eventually operation UUID to matching PFEventuallyPin. This contains PFEventuallyPin - that's enqueued. - */ - NSMutableDictionary *_uuidToEventuallyPin; - - /*! - Map OperationSetUUID to PFOperationSet - */ - NSMutableDictionary *_operationSetUUIDToOperationSet; - - /*! - Map OperationSetUUID to PFEventuallyPin - */ - NSMutableDictionary *_operationSetUUIDToEventuallyPin; -} - -@end - -@implementation PFPinningEventuallyQueue - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -+ (instancetype)newDefaultPinningEventuallyQueueWithCommandRunner:(id)commandRunner { - PFPinningEventuallyQueue *queue = [[self alloc] initWithCommandRunner:commandRunner - maxAttemptsCount:PFEventuallyQueueDefaultMaxAttemptsCount - retryInterval:PFEventuallyQueueDefaultTimeoutRetryInterval]; - [queue start]; - return queue; -} - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithCommandRunner:(id)commandRunner - maxAttemptsCount:(NSUInteger)attemptsCount - retryInterval:(NSTimeInterval)retryInterval { - self = [super initWithCommandRunner:commandRunner maxAttemptsCount:attemptsCount retryInterval:retryInterval]; - if (!self) return nil; - - _taskQueue = [[PFTaskQueue alloc] init]; - - dispatch_sync(_synchronizationQueue, ^{ - _eventuallyPinUUIDQueue = [NSMutableArray array]; - _uuidToEventuallyPin = [NSMutableDictionary dictionary]; - _operationSetUUIDToOperationSet = [NSMutableDictionary dictionary]; - _operationSetUUIDToEventuallyPin = [NSMutableDictionary dictionary]; - }); - - // Populate Eventually Pin to make sure we pre-loaded any existing data. - [self _populateEventuallyPinAsync]; - - return self; -} - -///-------------------------------------- -#pragma mark - Controlling Queue -///-------------------------------------- - -- (void)removeAllCommands { - [super removeAllCommands]; - - BFTask *removeTask = [_taskQueue enqueue:^BFTask *(BFTask *toAwait) { - return [toAwait continueWithBlock:^id(BFTask *task) { - return [[PFEventuallyPin findAllEventuallyPin] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *eventuallyPins = task.result; - NSMutableArray *unpinTasks = [NSMutableArray array]; - - for (PFEventuallyPin *eventuallyPin in eventuallyPins) { - [unpinTasks addObject:[eventuallyPin unpinInBackgroundWithName:PFEventuallyPinPinName]]; - } - - return [BFTask taskForCompletionOfAllTasks:unpinTasks]; - }]; - }]; - }]; - - [removeTask waitForResult:nil]; - // Clear in-memory data - dispatch_sync(_synchronizationQueue, ^{ - [_eventuallyPinUUIDQueue removeAllObjects]; - [_uuidToEventuallyPin removeAllObjects]; - [_operationSetUUIDToEventuallyPin removeAllObjects]; - [_operationSetUUIDToOperationSet removeAllObjects]; - }); -} - -- (void)_simulateReboot { - [super _simulateReboot]; - - [_eventuallyPinUUIDQueue removeAllObjects]; - [_uuidToEventuallyPin removeAllObjects]; - [_operationSetUUIDToEventuallyPin removeAllObjects]; - [_operationSetUUIDToOperationSet removeAllObjects]; - - [self _populateEventuallyPinAsync]; -} - -///-------------------------------------- -#pragma mark - PFEventuallyQueueSubclass -///-------------------------------------- - -- (NSString *)_newIdentifierForCommand:(id)command { - return [[NSUUID UUID] UUIDString]; -} - -- (NSArray *)_pendingCommandIdentifiers { - [[self _populateEventuallyPinAsync] waitForResult:nil]; - - NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { - PFEventuallyPin *pin = _uuidToEventuallyPin[evaluatedObject]; - // Filter out all pins that don't have `operationSet` data ready yet - // to make sure we send the command with all the changes. - if (pin.operationSetUUID) { - return (_operationSetUUIDToEventuallyPin[pin.operationSetUUID] != nil); - } - return YES; - }]; - return [_eventuallyPinUUIDQueue filteredArrayUsingPredicate:predicate]; -} - -- (id)_commandWithIdentifier:(NSString *)identifier error:(NSError **)error { - // Should be populated by `_pendingCommandIdentifiers` - PFEventuallyPin *eventuallyPin = _uuidToEventuallyPin[identifier]; - - // TODO (hallucinogen): this is a temporary hack. We need to change this to match the Android one. - // We need to construct the command just right when we want to execute it. Or else it will ask for localId - // when there's unsaved child. - switch (eventuallyPin.type) { - case PFEventuallyPinTypeSave: { - PFOperationSet *operationSet = _operationSetUUIDToOperationSet[eventuallyPin.operationSetUUID]; - return [eventuallyPin.object _constructSaveCommandForChanges:operationSet - sessionToken:eventuallyPin.sessionToken - objectEncoder:[PFPointerObjectEncoder objectEncoder]]; - } - case PFEventuallyPinTypeDelete: - return [eventuallyPin.object _currentDeleteCommandWithSessionToken:eventuallyPin.sessionToken]; - default: - break; - } - - id command = eventuallyPin.command; - if (!command && error) { - *error = [PFErrorUtilities errorWithCode:kPFErrorInternalServer - message:@"Failed to construct eventually command from cache." - shouldLog:NO]; - } - return command; -} - -- (BFTask *)_enqueueCommandInBackground:(id)command - object:(PFObject *)object - identifier:(NSString *)identifier { - return [_taskQueue enqueue:^BFTask *(BFTask *toAwait) { - return [toAwait continueAsyncWithBlock:^id(BFTask *task){ - return [PFEventuallyPin pinEventually:object forCommand:command withUUID:identifier]; - }]; - }]; -} - -- (BFTask *)_didFinishRunningCommand:(id)command - withIdentifier:(NSString *)identifier - resultTask:(BFTask *)resultTask { - // Delete the commands regardless, even if it failed. Otherwise we'll just keep trying it forever. - // We don't need to wait for taskQueue since it will not be queued again since this - // PFEventuallyPin is still in `_eventuallyPinUUIDQueue` - PFEventuallyPin *eventuallyPin = _uuidToEventuallyPin[identifier]; - BFTask *unpinTask = [eventuallyPin unpinInBackgroundWithName:PFEventuallyPinPinName]; - unpinTask = [unpinTask continueWithBlock:^id(BFTask *task) { - // Remove data from memory. - dispatch_sync(_synchronizationQueue, ^{ - [_uuidToEventuallyPin removeObjectForKey:identifier]; - [_eventuallyPinUUIDQueue removeObject:identifier]; - }); - - if (resultTask.cancelled || resultTask.exception || resultTask.error) { - return resultTask; - } - - if (eventuallyPin.operationSetUUID) { - // Remove only if the operation succeeded - dispatch_sync(_synchronizationQueue, ^{ - [_operationSetUUIDToOperationSet removeObjectForKey:eventuallyPin.operationSetUUID]; - [_operationSetUUIDToEventuallyPin removeObjectForKey:eventuallyPin.operationSetUUID]; - }); - } - - PFCommandResult *commandResult = resultTask.result; - switch (eventuallyPin.type) { - case PFEventuallyPinTypeSave: { - - task = [task continueWithBlock:^id(BFTask *task) { - return [eventuallyPin.object handleSaveResultAsync:commandResult.result]; - }]; - break; - } - - case PFEventuallyPinTypeDelete: { - task = [task continueWithBlock:^id(BFTask *task) { - PFObject *object = eventuallyPin.object; - id controller = [[object class] objectController]; - return [controller processDeleteResultAsync:commandResult.result forObject:object]; - }]; - break; - } - - default:break; - } - - return task; - }]; - - // Notify event listener that we finished running. - return [[super _didFinishRunningCommand:command - withIdentifier:identifier - resultTask:resultTask] continueWithBlock:^id(BFTask *task) { - return unpinTask; - }]; -} - -/*! - Synchronizes PFObject taskQueue (Many) and PFPinningEventuallyQueue taskQueue (None). Each queue will be held - until both are ready, matched on operationSetUUID. Once both are ready, the eventually task will run. - */ -- (BFTask *)_waitForOperationSet:(PFOperationSet *)operationSet eventuallyPin:(PFEventuallyPin *)eventuallyPin { - if (eventuallyPin != nil && eventuallyPin.type != PFEventuallyPinTypeSave) { - // If not save, then we don't have to do anything special. - return [BFTask taskWithResult:nil]; - } - - // TODO (hallucinogen): actually wait for PFObject taskQueue and PFPinningEventually taskQueue - - __block NSString *uuid = nil; - dispatch_sync(_synchronizationQueue, ^{ - if (operationSet != nil) { - uuid = operationSet.uuid; - _operationSetUUIDToOperationSet[uuid] = operationSet; - } - if (eventuallyPin != nil) { - uuid = eventuallyPin.operationSetUUID; - _operationSetUUIDToEventuallyPin[uuid] = eventuallyPin; - } - }); - if (uuid == nil) { - NSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException - reason:@"Either operationSet or eventuallyPin must be set" - userInfo:nil]; - return [BFTask taskWithException:exception]; - } - return [BFTask taskWithResult:nil]; -} - -///-------------------------------------- -#pragma mark - Eventually Pin -///-------------------------------------- - -- (BFTask *)_populateEventuallyPinAsync { - return [_taskQueue enqueue:^BFTask *(BFTask *toAwait) { - return [[toAwait continueWithBlock:^id(BFTask *task) { - return [PFEventuallyPin findAllEventuallyPinWithExcludeUUIDs:_eventuallyPinUUIDQueue]; - }] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *eventuallyPins = task.result; - - for (PFEventuallyPin *eventuallyPin in eventuallyPins) { - // If it's enqueued already, we don't need to run it again. - if ([_eventuallyPinUUIDQueue containsObject:eventuallyPin.operationSetUUID]) { - continue; - } - - // Make sure the data is in memory. - dispatch_sync(_synchronizationQueue, ^{ - [_eventuallyPinUUIDQueue addObject:eventuallyPin.uuid]; - _uuidToEventuallyPin[eventuallyPin.uuid] = eventuallyPin; - }); - - // For now we don't care whether this will fail or not. - [[self _waitForOperationSet:nil eventuallyPin:eventuallyPin] waitForResult:nil]; - } - - return task; - }]; - }]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFReachability.h b/FoodbLog/Pods/Parse/Parse/Internal/PFReachability.h deleted file mode 100644 index 8e6242a..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFReachability.h +++ /dev/null @@ -1,61 +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. - */ - -#import - -#import - -@class PFReachability; - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(uint8_t, PFReachabilityState) { - PFReachabilityStateNotReachable, - PFReachabilityStateReachableViaWiFi, - PFReachabilityStateReachableViaCell, -}; - -@protocol PFReachabilityListener - -- (void)reachability:(PFReachability *)reachability didChangeReachabilityState:(PFReachabilityState)state; - -@end - -PF_WATCH_UNAVAILABLE @interface PFReachability : NSObject - -@property (nonatomic, assign, readonly) PFReachabilityState currentState; - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithURL:(NSURL *)url NS_DESIGNATED_INITIALIZER; - -/* - Returns a shared singleton instance, - that could be used to check if Parse is reachable - */ -+ (instancetype)sharedParseReachability; - -/* - Adds a weak reference to the listener, - callbacks are executed on the main thread when status or flags change. - */ -- (void)addListener:(id)listener; - -/* - Removes weak reference to the listener. - */ -- (void)removeListener:(id)listener; - -/* - Removes all references to all listener objects. - */ -- (void)removeAllListeners; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFReachability.m b/FoodbLog/Pods/Parse/Parse/Internal/PFReachability.m deleted file mode 100644 index b14c7e0..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFReachability.m +++ /dev/null @@ -1,213 +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. - */ - -#import "PFReachability.h" - -#import - -#import "PFAssert.h" -#import "PFConstants.h" -#import "PFLogging.h" -#import "PFMacros.h" -#import "PFWeakValue.h" - -@interface PFReachability () { - dispatch_queue_t _synchronizationQueue; - NSMutableArray *_listenersArray; - - SCNetworkReachabilityRef _networkReachability; -} - -@property (nonatomic, assign, readwrite) SCNetworkReachabilityFlags flags; - -@end - -static void _reachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void *info) { - NSCAssert(info != NULL, @"info was NULL in ReachabilityCallback"); - PFReachability *reachability = (__bridge PFReachability *)info; - reachability.flags = flags; -} - -@implementation PFReachability - -@synthesize flags = _flags; - -///-------------------------------------- -#pragma mark - Class -///-------------------------------------- - -+ (BOOL)_reachabilityStateForFlags:(SCNetworkConnectionFlags)flags { - PFReachabilityState reachabilityState = PFReachabilityStateNotReachable; - - if ((flags & kSCNetworkReachabilityFlagsReachable) == 0) { - // if target host is not reachable - return reachabilityState; - } - - if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0) { - // if target host is reachable and no connection is required - // then we'll assume (for now) that your on Wi-Fi - reachabilityState = PFReachabilityStateReachableViaWiFi; - } - if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || - (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)) { - // ... and the connection is on-demand (or on-traffic) if the - // calling application is using the CFSocketStream or higher APIs - if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0) { - // ... and no [user] intervention is needed - reachabilityState = PFReachabilityStateReachableViaWiFi; - } - } - -#if TARGET_OS_IPHONE - if (((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) && - ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0)) { - // ... but WWAN connections are OK if the calling application - // is using the CFNetwork (CFSocketStream?) APIs. - // ... and a network connection is not required (kSCNetworkReachabilityFlagsConnectionRequired) - // which could be et w/connection flag (e.g. IsWWAN) indicating type of connection required. - reachabilityState = PFReachabilityStateReachableViaCell; - } -#endif - - return reachabilityState; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithURL:(NSURL *)url { - self = [super init]; - if (!self) return nil; - - _synchronizationQueue = dispatch_queue_create("com.parse.reachability", DISPATCH_QUEUE_CONCURRENT); - _listenersArray = [NSMutableArray array]; - [self _startMonitoringReachabilityWithURL:url]; - - return self; -} - -+ (instancetype)sharedParseReachability { - static PFReachability *reachability; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSString *serverUrlAsString = [NSString stringWithFormat:@"%@/%ld", kPFParseServer, (long)PARSE_API_VERSION]; - NSURL *serverUrl = [NSURL URLWithString:serverUrlAsString]; - reachability = [[self alloc] initWithURL:serverUrl]; - }); - return reachability; -} - -///-------------------------------------- -#pragma mark - Dealloc -///-------------------------------------- - -- (void)dealloc { - if (_networkReachability != NULL) { - SCNetworkReachabilitySetCallback(_networkReachability, NULL, NULL); - SCNetworkReachabilitySetDispatchQueue(_networkReachability, NULL); - CFRelease(_networkReachability); - _networkReachability = NULL; - } -} - -///-------------------------------------- -#pragma mark - Listeners -///-------------------------------------- - -- (void)addListener:(id)listener { - PFWeakValue *value = [PFWeakValue valueWithWeakObject:listener]; - dispatch_barrier_sync(_synchronizationQueue, ^{ - [_listenersArray addObject:value]; - }); -} - -- (void)removeListener:(id)listener { - dispatch_barrier_sync(_synchronizationQueue, ^{ - [_listenersArray filterUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { - id weakObject = [evaluatedObject weakObject]; - return (weakObject == nil || weakObject == listener); - }]]; - }); -} - -- (void)removeAllListeners { - dispatch_barrier_sync(_synchronizationQueue, ^{ - [_listenersArray removeAllObjects]; - }); -} - -- (void)_notifyAllListeners { - @weakify(self); - dispatch_async(_synchronizationQueue, ^{ - @strongify(self); - PFReachabilityState state = [[self class] _reachabilityStateForFlags:_flags]; - for (PFWeakValue *value in _listenersArray) { - [value.weakObject reachability:self didChangeReachabilityState:state]; - } - - dispatch_barrier_async(_synchronizationQueue, ^{ - [_listenersArray filterUsingPredicate:[NSPredicate predicateWithFormat:@"SELf.weakObject != nil"]]; - }); - }); -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (void)setFlags:(SCNetworkReachabilityFlags)flags { - dispatch_barrier_async(_synchronizationQueue, ^{ - _flags = flags; - [self _notifyAllListeners]; - }); -} - -- (SCNetworkReachabilityFlags)flags { - __block SCNetworkReachabilityFlags flags; - dispatch_sync(_synchronizationQueue, ^{ - flags = _flags; - }); - return flags; -} - -- (PFReachabilityState)currentState { - return [[self class] _reachabilityStateForFlags:self.flags]; -} - -///-------------------------------------- -#pragma mark - Reachability -///-------------------------------------- - -- (void)_startMonitoringReachabilityWithURL:(NSURL *)url { - dispatch_barrier_async(_synchronizationQueue, ^{ - _networkReachability = SCNetworkReachabilityCreateWithName(NULL, [[url host] UTF8String]); - if (_networkReachability != NULL) { - // Set the initial flags - SCNetworkReachabilityFlags flags; - SCNetworkReachabilityGetFlags(_networkReachability, &flags); - self.flags = flags; - - // Set up notification for changes in reachability. - SCNetworkReachabilityContext context = {0, (__bridge void *)(self), NULL, NULL, NULL}; - if (SCNetworkReachabilitySetCallback(_networkReachability, _reachabilityCallback, &context)) { - if (!SCNetworkReachabilitySetDispatchQueue(_networkReachability, _synchronizationQueue)) { - PFLogError(PFLoggingTagCommon, @"Unable to start listening for network connectivity status."); - } - } - } - }); -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFTaskQueue.h b/FoodbLog/Pods/Parse/Parse/Internal/PFTaskQueue.h deleted file mode 100644 index c2a9a3e..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFTaskQueue.h +++ /dev/null @@ -1,29 +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. - */ - -#import - -#import - -@class BFTask PF_GENERIC(__covariant BFGenericType); - -@interface PFTaskQueue : NSObject - -// The lock for this task queue. -@property (nonatomic, strong, readonly) NSObject *mutex; - -/*! - Enqueues a task created by the given block. Then block is given a task to - await once state is snapshotted (e.g. after capturing session tokens at the - time of the save call. Awaiting this task will wait for the created task's - turn in the queue. - */ -- (BFTask *)enqueue:(BFTask *(^)(BFTask *toAwait))taskStart; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFTaskQueue.m b/FoodbLog/Pods/Parse/Parse/Internal/PFTaskQueue.m deleted file mode 100644 index fb6d111..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFTaskQueue.m +++ /dev/null @@ -1,50 +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. - */ - -#import "PFTaskQueue.h" - -#import - -@interface PFTaskQueue () - -@property (nonatomic, strong, readwrite) BFTask *tail; -@property (nonatomic, strong, readwrite) NSObject *mutex; - -@end - -@implementation PFTaskQueue - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - self.mutex = [[NSObject alloc] init]; - - return self; -} - -- (BFTask *)enqueue:(BFTask *(^)(BFTask *toAwait))taskStart { - @synchronized (self.mutex) { - BFTask *oldTail = self.tail ?: [BFTask taskWithResult:nil]; - - // The task created by taskStart is responsible for waiting on the - // task passed to it before doing its work. This gives it an opportunity - // to do startup work or save state before waiting for its turn in the queue. - BFTask *task = taskStart(oldTail); - - // The tail task should be dependent on the old tail as well as the newly-created - // task. This prevents cancellation of the new task from causing the queue to run - // out of order. - self.tail = [BFTask taskForCompletionOfAllTasks:@[oldTail, task]]; - - return task; - } -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFWeakValue.h b/FoodbLog/Pods/Parse/Parse/Internal/PFWeakValue.h deleted file mode 100644 index 2ff1e47..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFWeakValue.h +++ /dev/null @@ -1,18 +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. - */ - -#import - -@interface PFWeakValue : NSObject - -@property (nonatomic, weak, readonly) id weakObject; - -+ (instancetype)valueWithWeakObject:(id)object; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PFWeakValue.m b/FoodbLog/Pods/Parse/Parse/Internal/PFWeakValue.m deleted file mode 100644 index a129202..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PFWeakValue.m +++ /dev/null @@ -1,26 +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. - */ - -#import "PFWeakValue.h" - -@interface PFWeakValue () - -@property (nonatomic, weak, readwrite) id weakObject; - -@end - -@implementation PFWeakValue - -+ (instancetype)valueWithWeakObject:(id)object { - PFWeakValue *value = [[self alloc] init]; - value.weakObject = object; - return value; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/ParseInternal.h b/FoodbLog/Pods/Parse/Parse/Internal/ParseInternal.h deleted file mode 100644 index 58e17fc..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/ParseInternal.h +++ /dev/null @@ -1,31 +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. - */ - -#import - -# import - -#import "PFAssert.h" -#import "PFCommandCache.h" -#import "PFEventuallyQueue.h" -#import "PFFieldOperation.h" -#import "PFGeoPointPrivate.h" -#import "PFInternalUtils.h" -#import "PFKeyValueCache.h" -#import "PFObjectPrivate.h" -#import "PFUserPrivate.h" -#import "ParseModule.h" - -@interface Parse (ParseModules) - -+ (void)enableParseModule:(id)module; -+ (void)disableParseModule:(id)module; -+ (BOOL)isModuleEnabled:(id)module; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/ParseManager.h b/FoodbLog/Pods/Parse/Parse/Internal/ParseManager.h deleted file mode 100644 index 67328ab..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/ParseManager.h +++ /dev/null @@ -1,101 +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. - */ - -#import - -#import - -#import "PFDataProvider.h" -#import "PFOfflineStore.h" -#import "PFMacros.h" - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFAnalyticsController; -@class PFCoreManager; -@class PFInstallationIdentifierStore; -@class PFKeychainStore; -@class PFPurchaseController; -@class PFPushManager; - -@interface ParseManager : NSObject - -@property (nonatomic, copy, readonly) NSString *applicationId; -@property (nonatomic, copy, readonly) NSString *clientKey; - -@property (nonatomic, copy, readonly) NSString *applicationGroupIdentifier; -@property (nonatomic, copy, readonly) NSString *containingApplicationIdentifier; - -@property (nonatomic, strong, readonly) PFCoreManager *coreManager; -@property (nonatomic, strong) PFPushManager *pushManager; - -@property (nonatomic, strong) PFAnalyticsController *analyticsController; - -#if TARGET_OS_IOS -@property (nonatomic, strong) PFPurchaseController *purchaseController; -#endif - -///-------------------------------------- -/// @name Initialization -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; - -/*! - Initializes an instance of ParseManager class. - - @param applicationId ApplicationId of Parse app. - @param clientKey ClientKey of Parse app. - - @returns `ParseManager` instance. - */ -- (instancetype)initWithApplicationId:(NSString *)applicationId - clientKey:(NSString *)clientKey NS_DESIGNATED_INITIALIZER; - -/*! - Configures ParseManager with specified properties. - - @param applicationGroupIdentifier Shared AppGroup container identifier. - @param containingApplicationIdentifier Containg application bundle identifier (for extensions). - @param localDataStoreEnabled `BOOL` flag to enable local datastore or not. - */ -- (void)configureWithApplicationGroupIdentifier:(NSString *)applicationGroupIdentifier - containingApplicationIdentifier:(NSString *)containingApplicationIdentifier - enabledLocalDataStore:(BOOL)localDataStoreEnabled; - -///-------------------------------------- -/// @name Offline Store -///-------------------------------------- - -- (void)loadOfflineStoreWithOptions:(PFOfflineStoreOptions)options; - -///-------------------------------------- -/// @name Eventually Queue -///-------------------------------------- - -- (void)clearEventuallyQueue; - -///-------------------------------------- -/// @name Core Manager -///-------------------------------------- - -- (void)unloadCoreManager; - -///-------------------------------------- -/// @name Preloading -///-------------------------------------- - -- (BFTask *)preloadDiskObjectsToMemoryAsync; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/ParseManager.m b/FoodbLog/Pods/Parse/Parse/Internal/ParseManager.m deleted file mode 100644 index 74756c3..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/ParseManager.m +++ /dev/null @@ -1,466 +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. - */ - -#import "ParseManager.h" - -#import - -#import "BFTask+Private.h" -#import "PFAnalyticsController.h" -#import "PFAssert.h" -#import "PFCommandCache.h" -#import "PFConfig.h" -#import "PFCoreManager.h" -#import "PFFileManager.h" -#import "PFInstallationIdentifierStore.h" -#import "PFKeyValueCache.h" -#import "PFKeychainStore.h" -#import "PFLogging.h" -#import "PFMultiProcessFileLockController.h" -#import "PFPinningEventuallyQueue.h" -#import "PFPushManager.h" -#import "PFUser.h" -#import "PFURLSessionCommandRunner.h" - -#if !TARGET_OS_WATCH -#import "PFInstallation.h" -#endif - -#if TARGET_OS_IOS -#import "PFPurchaseController.h" -#import "PFProduct.h" -#endif - -static NSString *const _ParseApplicationIdFileName = @"applicationId"; - -@interface ParseManager () -{ - dispatch_queue_t _offlineStoreAccessQueue; - dispatch_queue_t _eventuallyQueueAccessQueue; - dispatch_queue_t _keychainStoreAccessQueue; - dispatch_queue_t _fileManagerAccessQueue; - dispatch_queue_t _installationIdentifierStoreAccessQueue; - dispatch_queue_t _commandRunnerAccessQueue; - dispatch_queue_t _keyValueCacheAccessQueue; - dispatch_queue_t _coreManagerAccessQueue; - dispatch_queue_t _pushManagerAccessQueue; - dispatch_queue_t _controllerAccessQueue; - - dispatch_queue_t _preloadQueue; -} - -@end - -@implementation ParseManager - -@synthesize keychainStore = _keychainStore; -@synthesize fileManager = _fileManager; -@synthesize offlineStore = _offlineStore; -@synthesize eventuallyQueue = _eventuallyQueue; -@synthesize installationIdentifierStore = _installationIdentifierStore; -@synthesize commandRunner = _commandRunner; -@synthesize keyValueCache = _keyValueCache; -@synthesize coreManager = _coreManager; -@synthesize analyticsController = _analyticsController; -@synthesize pushManager = _pushManager; -#if TARGET_OS_IOS -@synthesize purchaseController = _purchaseController; -#endif - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithApplicationId:(NSString *)applicationId clientKey:(NSString *)clientKey { - self = [super init]; - if (!self) return nil; - - _offlineStoreAccessQueue = dispatch_queue_create("com.parse.offlinestore.access", DISPATCH_QUEUE_CONCURRENT); - _eventuallyQueueAccessQueue = dispatch_queue_create("com.parse.eventuallyqueue.access", DISPATCH_QUEUE_SERIAL); - _keychainStoreAccessQueue = dispatch_queue_create("com.parse.keychainstore.access", DISPATCH_QUEUE_SERIAL); - _fileManagerAccessQueue = dispatch_queue_create("com.parse.filemanager.access", DISPATCH_QUEUE_SERIAL); - _installationIdentifierStoreAccessQueue = dispatch_queue_create("com.parse.installationidentifierstore.access", - DISPATCH_QUEUE_SERIAL); - _commandRunnerAccessQueue = dispatch_queue_create("com.parse.commandrunner.access", DISPATCH_QUEUE_SERIAL); - _keyValueCacheAccessQueue = dispatch_queue_create("com.parse.keyvaluecache.access", DISPATCH_QUEUE_SERIAL); - _coreManagerAccessQueue = dispatch_queue_create("com.parse.coreManager.access", DISPATCH_QUEUE_SERIAL); - _pushManagerAccessQueue = dispatch_queue_create("com.parse.pushManager.access", DISPATCH_QUEUE_SERIAL); - _controllerAccessQueue = dispatch_queue_create("com.parse.controller.access", DISPATCH_QUEUE_SERIAL); - _preloadQueue = dispatch_queue_create("com.parse.preload", DISPATCH_QUEUE_SERIAL); - - _applicationId = [applicationId copy]; - _clientKey = [clientKey copy]; - - return self; -} - -- (void)configureWithApplicationGroupIdentifier:(NSString *)applicationGroupIdentifier - containingApplicationIdentifier:(NSString *)containingApplicationIdentifier - enabledLocalDataStore:(BOOL)localDataStoreEnabled { - _applicationGroupIdentifier = [applicationGroupIdentifier copy]; - _containingApplicationIdentifier = [containingApplicationIdentifier copy]; - - // Migrate any data if it's required. - [self _migrateSandboxDataToApplicationGroupContainerIfNeeded]; - - // Make sure the data on disk for Parse is for the current application. - [self _checkApplicationId]; - - if (localDataStoreEnabled) { - PFOfflineStoreOptions options = (_applicationGroupIdentifier ? - PFOfflineStoreOptionAlwaysFetchFromSQLite : 0); - [self loadOfflineStoreWithOptions:options]; - } -} - -///-------------------------------------- -#pragma mark - Offline Store -///-------------------------------------- - -- (void)loadOfflineStoreWithOptions:(PFOfflineStoreOptions)options { - PFConsistencyAssert(!_offlineStore, @"Can't load offline store more than once."); - dispatch_barrier_sync(_offlineStoreAccessQueue, ^{ - _offlineStore = [[PFOfflineStore alloc] initWithFileManager:self.fileManager options:options]; - }); -} - -- (void)setOfflineStore:(PFOfflineStore *)offlineStore { - dispatch_barrier_sync(_offlineStoreAccessQueue, ^{ - _offlineStore = offlineStore; - }); -} - -- (PFOfflineStore *)offlineStore { - __block PFOfflineStore *offlineStore = nil; - dispatch_sync(_offlineStoreAccessQueue, ^{ - offlineStore = _offlineStore; - }); - return offlineStore; -} - -- (BOOL)isOfflineStoreLoaded { - return (self.offlineStore != nil); -} - -///-------------------------------------- -#pragma mark - Eventually Queue -///-------------------------------------- - -- (PFEventuallyQueue *)eventuallyQueue { - __block PFEventuallyQueue *queue = nil; - dispatch_sync(_eventuallyQueueAccessQueue, ^{ - if (!_eventuallyQueue || - (self.offlineStoreLoaded && [_eventuallyQueue isKindOfClass:[PFCommandCache class]]) || - (!self.offlineStoreLoaded && [_eventuallyQueue isKindOfClass:[PFPinningEventuallyQueue class]])) { - - id commandRunner = self.commandRunner; - - PFCommandCache *commandCache = [self _newCommandCache]; - _eventuallyQueue = (self.offlineStoreLoaded ? - [PFPinningEventuallyQueue newDefaultPinningEventuallyQueueWithCommandRunner:commandRunner] - : - commandCache); - - // We still need to clear out the old command cache even if we're using Pinning in case - // anything is left over when the user upgraded. Checking number of pending and then - // clearing should be enough. - if (self.offlineStoreLoaded && commandCache.commandCount > 0) { - [commandCache removeAllCommands]; - } - } - queue = _eventuallyQueue; - }); - return queue; -} - -- (PFCommandCache *)_newCommandCache { - // Construct the path to the cache directory in /Library/Private Documents/Parse/Command Cache - // This isn't in the "Library/Caches" directory because we don't want the OS clearing it for us. - // It falls under the category of "offline data". - // See https://developer.apple.com/library/ios/#qa/qa1699/_index.html - NSString *folderPath = [self.fileManager parseDefaultDataDirectoryPath]; - return [PFCommandCache newDefaultCommandCacheWithCommandRunner:self.commandRunner cacheFolderPath:folderPath]; -} - -- (void)clearEventuallyQueue { - dispatch_sync(_preloadQueue, ^{ - dispatch_sync(_eventuallyQueueAccessQueue, ^{ - [_eventuallyQueue removeAllCommands]; - [_eventuallyQueue pause]; - _eventuallyQueue = nil; - }); - }); -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -#pragma mark KeychainStore - -- (PFKeychainStore *)keychainStore { - __block PFKeychainStore *store = nil; - dispatch_sync(_keychainStoreAccessQueue, ^{ - if (!_keychainStore) { - NSString *bundleIdentifier = (_containingApplicationIdentifier ?: [[NSBundle mainBundle] bundleIdentifier]); - NSString *service = [NSString stringWithFormat:@"%@.%@", bundleIdentifier, PFKeychainStoreDefaultService]; - _keychainStore = [[PFKeychainStore alloc] initWithService:service]; - } - store = _keychainStore; - }); - return store; -} - -#pragma mark FileManager - -- (PFFileManager *)fileManager { - __block PFFileManager *fileManager = nil; - dispatch_sync(_fileManagerAccessQueue, ^{ - if (!_fileManager) { - _fileManager = [[PFFileManager alloc] initWithApplicationIdentifier:self.applicationId - applicationGroupIdentifier:self.applicationGroupIdentifier]; - } - fileManager = _fileManager; - }); - return fileManager; -} - -#pragma mark InstallationIdentifierStore - -- (PFInstallationIdentifierStore *)installationIdentifierStore { - __block PFInstallationIdentifierStore *store = nil; - dispatch_sync(_installationIdentifierStoreAccessQueue, ^{ - if (!_installationIdentifierStore) { - _installationIdentifierStore = [[PFInstallationIdentifierStore alloc] initWithFileManager:self.fileManager]; - } - store = _installationIdentifierStore; - }); - return store; -} - -#pragma mark CommandRunner - -- (id)commandRunner { - __block id runner = nil; - dispatch_sync(_commandRunnerAccessQueue, ^{ - if (!_commandRunner) { - _commandRunner = [PFURLSessionCommandRunner commandRunnerWithDataSource:self - applicationId:self.applicationId - clientKey:self.clientKey]; - } - runner = _commandRunner; - }); - return runner; -} - -#pragma mark KeyValueCache - -- (PFKeyValueCache *)keyValueCache { - __block PFKeyValueCache *cache = nil; - dispatch_sync(_keyValueCacheAccessQueue, ^{ - if (!_keyValueCache) { - NSString *path = [self.fileManager parseCacheItemPathForPathComponent:@"../ParseKeyValueCache/"]; - _keyValueCache = [[PFKeyValueCache alloc] initWithCacheDirectoryPath:path]; - } - cache = _keyValueCache; - }); - return cache; -} - -#pragma mark CoreManager - -- (PFCoreManager *)coreManager { - __block PFCoreManager *manager = nil; - dispatch_sync(_coreManagerAccessQueue, ^{ - if (!_coreManager) { - _coreManager = [PFCoreManager managerWithDataSource:self]; - } - manager = _coreManager; - }); - return manager; -} - -- (void)unloadCoreManager { - dispatch_sync(_coreManagerAccessQueue, ^{ - _coreManager = nil; - }); -} - -#if !TARGET_OS_WATCH - -#pragma mark PushManager - -- (PFPushManager *)pushManager { - __block PFPushManager *manager = nil; - dispatch_sync(_pushManagerAccessQueue, ^{ - if (!_pushManager) { - _pushManager = [PFPushManager managerWithCommonDataSource:self coreDataSource:self.coreManager]; - } - manager = _pushManager; - }); - return manager; -} - -- (void)setPushManager:(PFPushManager *)pushManager { - dispatch_sync(_pushManagerAccessQueue, ^{ - _pushManager = pushManager; - }); -} - -#endif - -#pragma mark AnalyticsController - -- (PFAnalyticsController *)analyticsController { - __block PFAnalyticsController *controller = nil; - dispatch_sync(_controllerAccessQueue, ^{ - if (!_analyticsController) { - _analyticsController = [[PFAnalyticsController alloc] initWithDataSource:self]; - } - controller = _analyticsController; - }); - return controller; -} - -- (void)setAnalyticsController:(PFAnalyticsController *)analyticsController { - dispatch_sync(_controllerAccessQueue, ^{ - if (_analyticsController != analyticsController) { - _analyticsController = analyticsController; - } - }); -} - -#if TARGET_OS_IOS - -#pragma mark PurchaseController - -- (PFPurchaseController *)purchaseController { - __block PFPurchaseController *controller = nil; - dispatch_sync(_controllerAccessQueue, ^{ - if (!_purchaseController) { - _purchaseController = [PFPurchaseController controllerWithCommandRunner:self.commandRunner - fileManager:self.fileManager - bundle:[NSBundle mainBundle]]; - } - controller = _purchaseController; - }); - return controller; -} - -- (void)setPurchaseController:(PFPurchaseController *)purchaseController { - dispatch_sync(_controllerAccessQueue, ^{ - _purchaseController = purchaseController; - }); -} - -#endif - -///-------------------------------------- -#pragma mark - Preloading -///-------------------------------------- - -- (BFTask *)preloadDiskObjectsToMemoryAsync { - @weakify(self); - return [BFTask taskFromExecutor:[BFExecutor executorWithDispatchQueue:_preloadQueue] withBlock:^id{ - @strongify(self); - [PFUser currentUser]; - [PFConfig currentConfig]; -#if !TARGET_OS_WATCH - [PFInstallation currentInstallation]; -#endif - - [self eventuallyQueue]; - - return nil; - }]; -} - -///-------------------------------------- -#pragma mark - ApplicationId -///-------------------------------------- - -/*! - Verifies that the data stored on disk for Parse was generated using the same application that is running now. - */ -- (void)_checkApplicationId { - NSFileManager *systemFileManager = [NSFileManager defaultManager]; - - // Make sure the current version of the cache is for this application id. - NSString *applicationIdFile = [self.fileManager parseDataItemPathForPathComponent:_ParseApplicationIdFileName]; - [[PFMultiProcessFileLockController sharedController] beginLockedContentAccessForFileAtPath:applicationIdFile]; - - if ([systemFileManager fileExistsAtPath:applicationIdFile]) { - NSError *error = nil; - NSString *applicationId = [NSString stringWithContentsOfFile:applicationIdFile - encoding:NSUTF8StringEncoding - error:&error]; - if (!error && ![applicationId isEqualToString:self.applicationId]) { - // The application id has changed, so everything on disk is invalid. - [self.keychainStore removeAllObjects]; - [self.keyValueCache removeAllObjects]; - - NSArray *tasks = @[ - // Remove the contents only, but don't delete the folder. - [PFFileManager removeDirectoryContentsAsyncAtPath:[self.fileManager parseDefaultDataDirectoryPath]], - // Completely remove everything in deprecated folder. - [PFFileManager removeItemAtPathAsync:[self.fileManager parseDataDirectoryPath_DEPRECATED]] - ]; - [[BFTask taskForCompletionOfAllTasks:tasks] waitForResult:nil withMainThreadWarning:NO]; - } - } - - if (![systemFileManager fileExistsAtPath:applicationIdFile]) { - NSError *error = nil; - BFTask *writeTask = [PFFileManager writeStringAsync:self.applicationId toFile:applicationIdFile]; - [writeTask waitForResult:&error withMainThreadWarning:NO]; - if (error) { - PFLogError(PFLoggingTagCommon, @"Unable to create applicationId file with error: %@", error); - } - } - - [[PFMultiProcessFileLockController sharedController] endLockedContentAccessForFileAtPath:applicationIdFile]; -} - -///-------------------------------------- -#pragma mark - Data Sharing -///-------------------------------------- - -- (void)_migrateSandboxDataToApplicationGroupContainerIfNeeded { - // There is no need to migrate anything on OSX, since we are using globally available folder. -#if TARGET_OS_IOS - // Do nothing if there is no application group container or containing application is specified. - if (!self.applicationGroupIdentifier || self.containingApplicationIdentifier) { - return; - } - - NSString *localSandboxDataPath = [self.fileManager parseLocalSandboxDataDirectoryPath]; - NSString *dataPath = [self.fileManager parseDefaultDataDirectoryPath]; - NSArray *contents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:localSandboxDataPath error:nil]; - if ([contents count] != 0) { - // If moving files fails - just log the error, but don't fail. - NSError *error = nil; - [[PFFileManager moveContentsOfDirectoryAsyncAtPath:localSandboxDataPath - toDirectoryAtPath:dataPath - executor:[BFExecutor immediateExecutor]] waitForResult:&error]; - if (error) { - PFLogError(PFLoggingTagCommon, - @"Failed to migrate local sandbox data to shared container with error %@", - [error localizedDescription]); - } else { - [[PFFileManager removeItemAtPathAsync:localSandboxDataPath withFileLock:NO] waitForResult:nil]; - } - } -#endif -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/ParseModule.h b/FoodbLog/Pods/Parse/Parse/Internal/ParseModule.h deleted file mode 100644 index a9a1a49..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/ParseModule.h +++ /dev/null @@ -1,26 +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. - */ - -#import - -@protocol ParseModule - -- (void)parseDidInitializeWithApplicationId:(NSString *)applicationId clientKey:(NSString *)clientKey; - -@end - -@interface ParseModuleCollection : NSObject - -- (void)addParseModule:(id)module; -- (void)removeParseModule:(id)module; - -- (BOOL)containsModule:(id)module; -- (NSUInteger)modulesCount; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/ParseModule.m b/FoodbLog/Pods/Parse/Parse/Internal/ParseModule.m deleted file mode 100644 index 5167762..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/ParseModule.m +++ /dev/null @@ -1,134 +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. - */ - -#import "ParseModule.h" - -///-------------------------------------- -#pragma mark - ParseModuleCollection -///-------------------------------------- - -typedef void (^ParseModuleEnumerationBlock)(id module, BOOL *stop, BOOL *remove); - -@interface ParseModuleCollection () - -@property (atomic, strong) dispatch_queue_t collectionQueue; -@property (atomic, strong) NSPointerArray *modules; - -@end - -@implementation ParseModuleCollection - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - self = [super init]; - if (self) { - _collectionQueue = dispatch_queue_create("com.parse.ParseModuleCollection", DISPATCH_QUEUE_SERIAL); - _modules = [NSPointerArray weakObjectsPointerArray]; - } - return self; -} - -///-------------------------------------- -#pragma mark - Collection -///-------------------------------------- - -- (void)addParseModule:(id)module { - if (module == nil) { - return; - } - - [self performCollectionAccessBlock:^{ - [self.modules addPointer:(__bridge void *)module]; - }]; -} - -- (void)removeParseModule:(id)module { - if (module == nil) { - return; - } - - [self enumerateModulesWithBlock:^(id enumeratedModule, BOOL *stop, BOOL *remove) { - *remove = (module == enumeratedModule); - }]; -} - -- (BOOL)containsModule:(id)module { - __block BOOL retValue = NO; - [self enumerateModulesWithBlock:^(id enumeratedModule, BOOL *stop, BOOL *remove) { - if (module == enumeratedModule) { - retValue = YES; - *stop = YES; - } - }]; - return retValue; -} - -- (NSUInteger)modulesCount { - return [self.modules count]; -} - -///-------------------------------------- -#pragma mark - ParseModule -///-------------------------------------- - -- (void)parseDidInitializeWithApplicationId:(NSString *)applicationId clientKey:(NSString *)clientKey { - [self enumerateModulesWithBlock:^(id module, BOOL *stop, BOOL *remove) { - dispatch_async(dispatch_get_main_queue(), ^{ - [module parseDidInitializeWithApplicationId:applicationId clientKey:clientKey]; - }); - }]; -} - -///-------------------------------------- -#pragma mark - Private -///-------------------------------------- - -- (void)performCollectionAccessBlock:(dispatch_block_t)block { - dispatch_sync(self.collectionQueue, block); -} - -/*! - Enumerates all existing modules in this collection. - - NOTE: This **will modify the contents of the collection** if any of the modules were deallocated since last loop. - - @param block the block to enumerate with. - */ -- (void)enumerateModulesWithBlock:(ParseModuleEnumerationBlock)block { - [self performCollectionAccessBlock:^{ - NSMutableIndexSet *toRemove = [[NSMutableIndexSet alloc] init]; - - NSUInteger index = 0; - BOOL stop = NO; - - for (__strong id module in self.modules) { - BOOL remove = module == nil; - if (!remove) { - block(module, &stop, &remove); - } - - if (remove) { - [toRemove addIndex:index]; - } - - if (stop) break; - index++; - } - - // NSPointerArray doesn't have a -removeObjectsAtIndexes:... WHY!?!? - for (index = toRemove.firstIndex; index != NSNotFound; index = [toRemove indexGreaterThanIndex:index]) { - [self.modules removePointerAtIndex:index]; - } - }]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Parse_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/Parse_Private.h deleted file mode 100644 index 176dd1f..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Parse_Private.h +++ /dev/null @@ -1,25 +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. - */ - -#import - -#import - -#import "ParseManager.h" - -@class PFEventuallyQueue; - -@interface Parse () - -+ (void)_resetDataSharingIdentifiers; - -+ (ParseManager *)_currentManager; -+ (void)_clearCurrentManager; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Product/PFProduct+Private.h b/FoodbLog/Pods/Parse/Parse/Internal/Product/PFProduct+Private.h deleted file mode 100644 index af69e41..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Product/PFProduct+Private.h +++ /dev/null @@ -1,46 +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. - */ - -#import "PFProduct.h" - -typedef enum { - PFProductDownloadStateStart, - PFProductDownloadStateDownloading, - PFProductDownloadStateDownloaded -} PFProductDownloadState; - -@interface PFProduct () { - NSDecimalNumber *price; - NSLocale *priceLocale; - NSInteger progress; - NSString *contentPath; -} - -/// The properties below are transient properties, not stored on Parse's server. -/*! - The price of the product, discovered via iTunes Connect. - */ -@property (nonatomic, strong) NSDecimalNumber *price; - -/*! - The price locale of the product. - */ -@property (nonatomic, strong) NSLocale *priceLocale; - -/*! - The progress of the download, if one is in progress. It's an integer between 0 and 100. - */ -@property (nonatomic, assign) NSInteger progress; - -/*! - The content path of the download. - */ -@property (nonatomic, strong) NSString *contentPath; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h b/FoodbLog/Pods/Parse/Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h deleted file mode 100644 index 2c9c3da..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h +++ /dev/null @@ -1,37 +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. - */ - -#import -#import - -#import - -@class BFTask PF_GENERIC(__covariant BFGenericType); - -PF_WATCH_UNAVAILABLE @interface PFProductsRequestResult : NSObject - -@property (nonatomic, copy, readonly) NSSet *validProducts; -@property (nonatomic, copy, readonly) NSSet *invalidProductIdentifiers; - -- (instancetype)initWithProductsResponse:(SKProductsResponse *)response; - -@end - -/*! - * This class is responsible for handling the first part of an IAP handshake. - * It sends a request to iTunes Connect with a set of product identifiers, and iTunes returns - * with a list of valid and invalid products. The class then proceeds to call the completion block passed in. - */ -@interface PFProductsRequestHandler : NSObject - -- (instancetype)initWithProductsRequest:(SKProductsRequest *)request; - -- (BFTask *)findProductsAsync; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m b/FoodbLog/Pods/Parse/Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m deleted file mode 100644 index 4dbce94..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m +++ /dev/null @@ -1,92 +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. - */ - -#import "PFProductsRequestHandler.h" - -#import -#import - -@implementation PFProductsRequestResult - -- (instancetype)initWithProductsResponse:(SKProductsResponse *)response { - self = [super init]; - if (!self) return nil; - - _validProducts = [NSSet setWithArray:response.products]; - _invalidProductIdentifiers = [NSSet setWithArray:response.invalidProductIdentifiers]; - - return self; -} - -@end - -@interface PFProductsRequestHandler () - -@property (nonatomic, strong) BFTaskCompletionSource *taskCompletionSource; -@property (nonatomic, strong) SKProductsRequest *productsRequest; - -@end - -@implementation PFProductsRequestHandler - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithProductsRequest:(SKProductsRequest *)request { - self = [super init]; - if (!self) return nil; - - _productsRequest = request; - _productsRequest.delegate = self; - - return self; -} - -///-------------------------------------- -#pragma mark - Dealloc -///-------------------------------------- - -- (void)dealloc { - // Clear the delegate, as it's still an `assign`, instead of `weak` - _productsRequest.delegate = nil; -} - -///-------------------------------------- -#pragma mark - Find -///-------------------------------------- - -- (BFTask *)findProductsAsync { - _taskCompletionSource = [BFTaskCompletionSource taskCompletionSource]; - [_productsRequest start]; - return _taskCompletionSource.task; -} - -///-------------------------------------- -#pragma mark - SKProductsRequestDelegate -///-------------------------------------- - -- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { - PFProductsRequestResult *result = [[PFProductsRequestResult alloc] initWithProductsResponse:response]; - [self.taskCompletionSource trySetResult:result]; -} - -- (void)request:(SKRequest *)request didFailWithError:(NSError *)error { - [self.taskCompletionSource trySetError:error]; - - // according to documentation, this method does not call requestDidFinish - request.delegate = nil; -} - -- (void)requestDidFinish:(SKRequest *)request { - // the documentation assures that this is the point safe to get rid of the request - request.delegate = nil; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo.h b/FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo.h deleted file mode 100644 index efd4c17..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo.h +++ /dev/null @@ -1,50 +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. - */ - -#import - -#import "PFBaseState.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFPropertyInfo : NSObject - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithClass:(Class)kls - name:(NSString *)propertyName; - -- (instancetype)initWithClass:(Class)kls - name:(NSString *)propertyName - associationType:(PFPropertyInfoAssociationType)associationType NS_DESIGNATED_INITIALIZER; - -+ (instancetype)propertyInfoWithClass:(Class)kls - name:(NSString *)propertyName; - -+ (instancetype)propertyInfoWithClass:(Class)kls - name:(NSString *)propertyName - associationType:(PFPropertyInfoAssociationType)associationType; - -@property (nonatomic, copy, readonly) NSString *name; -@property (nonatomic, readonly) PFPropertyInfoAssociationType associationType; - -/*! - Returns the value of this property, - properly wrapped from the target object. - When possible, just invokes the property. - When not, uses -valueForKey:. - */ -- (nullable id)getWrappedValueFrom:(id)object; -- (void)setWrappedValue:(nullable id)value forObject:(id)object; - -// Moves the value from one object to the other, based on the association type given. -- (void)takeValueFrom:(id)one toObject:(id)two; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo.m b/FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo.m deleted file mode 100644 index 9d1273c..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo.m +++ /dev/null @@ -1,212 +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. - */ - -#import "PFPropertyInfo_Private.h" - -#import - -#import "PFAssert.h" -#import "PFMacros.h" -#import "PFPropertyInfo_Runtime.h" - -static inline NSString *safeStringWithPropertyAttributeValue(objc_property_t property, const char *attribute) { - char *value = property_copyAttributeValue(property, attribute); - if (!value) - return nil; - - // NSString initWithBytesNoCopy doesn't seem to work, so fall back to the CF counterpart. - return (__bridge_transfer NSString *)CFStringCreateWithCStringNoCopy(NULL, - value, - kCFStringEncodingUTF8, - kCFAllocatorMalloc); -} - -static inline NSString *stringByCapitalizingFirstCharacter(NSString *string) { - return [NSString stringWithFormat:@"%C%@", - (unichar)toupper([string characterAtIndex:0]), - [string substringFromIndex:1]]; -} - -@implementation PFPropertyInfo - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithClass:(Class)kls name:(NSString *)propertyName { - return [self initWithClass:kls name:propertyName associationType:_associationType]; -} - -- (instancetype)initWithClass:(Class)kls name:(NSString *)propertyName - associationType:(PFPropertyInfoAssociationType)associationType { - self = [super init]; - if (!self) return nil; - - _sourceClass = kls; - _name = [propertyName copy]; - _associationType = associationType; - - objc_property_t objcProperty = class_getProperty(kls, [_name UTF8String]); - - do { - _ivar = class_getInstanceVariable(kls, [safeStringWithPropertyAttributeValue(objcProperty, "V") UTF8String]); - if (_ivar) break; - - // Walk the superclass heirarchy for the property definition. Because property attributes are not inherited - // (but property definitions *are*), we must be careful to ensure that the variable was never actually - // implemented and synthesized in a superclass. Note if the same property is synthesized in multiple classes - // with different iVars, we take the class furthest from the root class as the 'source of truth'. - Class superClass = class_getSuperclass(kls); - while (superClass) { - objc_property_t superProperty = class_getProperty(superClass, [_name UTF8String]); - if (!superProperty) break; - - _ivar = class_getInstanceVariable(superClass, [safeStringWithPropertyAttributeValue(superProperty, "V") UTF8String]); - if (_ivar) break; - - superClass = class_getSuperclass(superClass); - } - - if (_ivar) break; - - // Attempt to infer the variable name. - _ivar = class_getInstanceVariable(kls, [[@"_" stringByAppendingString:_name] UTF8String]); - if (_ivar) break; - - _ivar = class_getInstanceVariable(kls, [_name UTF8String]); - } while (0); - - _typeEncoding = safeStringWithPropertyAttributeValue(objcProperty, "T"); - _object = [_typeEncoding hasPrefix:@"@"]; - - NSString *propertyGetter = safeStringWithPropertyAttributeValue(objcProperty, "G") ?: _name; - _getterSelector = NSSelectorFromString(propertyGetter); - - BOOL readonly = safeStringWithPropertyAttributeValue(objcProperty, "R") != nil; - NSString *propertySetter = safeStringWithPropertyAttributeValue(objcProperty, "S"); - if (propertySetter == nil && !readonly) { - propertySetter = [NSString stringWithFormat:@"set%@:", stringByCapitalizingFirstCharacter(_name)]; - } - - _setterSelector = NSSelectorFromString(propertySetter); - - if (_associationType == PFPropertyInfoAssociationTypeDefault) { - BOOL isCopy = safeStringWithPropertyAttributeValue(objcProperty, "C") != nil; - BOOL isWeak = safeStringWithPropertyAttributeValue(objcProperty, "W") != nil; - BOOL isRetain = safeStringWithPropertyAttributeValue(objcProperty, "&") != nil; - - if (isWeak) { - _associationType = PFPropertyInfoAssociationTypeWeak; - } else if (isCopy) { - _associationType = PFPropertyInfoAssociationTypeCopy; - } else if (isRetain) { - _associationType = PFPropertyInfoAssociationTypeStrong; - } else { - _associationType = PFPropertyInfoAssociationTypeAssign; - } - } - - return self; -} - -+ (instancetype)propertyInfoWithClass:(Class)kls name:(NSString *)propertyName { - return [[self alloc] initWithClass:kls name:propertyName]; -} - -+ (instancetype)propertyInfoWithClass:(Class)kls name:(NSString *)propertyName - associationType:(PFPropertyInfoAssociationType)associationType { - return [[self alloc] initWithClass:kls name:propertyName associationType:associationType]; -} - -///-------------------------------------- -#pragma mark - Wrapping -///-------------------------------------- - -- (id)getWrappedValueFrom:(id)object { - if (self.object) { - return objc_msgSend_safe(id)(object, self.getterSelector); - } - - return [object valueForKey:self.name]; -} - -- (void)setWrappedValue:(id)value forObject:(id)object { - if (self.object && self.setterSelector) { - objc_msgSend_safe(void, id)(object, self.setterSelector, value); - return; - } - - [object setValue:value forKey:self.name]; -} - -///-------------------------------------- -#pragma mark - Taking -///-------------------------------------- - -- (void)takeValueFrom:(id)one toObject:(id)two { - if (!self.ivar) { - id wrappedValue = [self getWrappedValueFrom:one]; - [self setWrappedValue:wrappedValue forObject:two]; - - return; - } - - NSUInteger size = 0; - NSGetSizeAndAlignment(ivar_getTypeEncoding(self.ivar), &size, NULL); - - char valuePtr[size]; - bzero(valuePtr, size); - - NSInvocation *invocation = nil; - - // TODO: (richardross) Cache the method signatures, as those are fairly slow to calculate. - if (one && [one respondsToSelector:self.getterSelector]) { - NSMethodSignature *methodSignature = [one methodSignatureForSelector:self.getterSelector]; - invocation = [NSInvocation invocationWithMethodSignature:methodSignature]; - - [invocation setTarget:one]; - [invocation setSelector:self.getterSelector]; - } - - [invocation invoke]; - [invocation getReturnValue:valuePtr]; - - object_setIvarValue_safe(two, self.ivar, valuePtr, self.associationType); -} - -///-------------------------------------- -#pragma mark - Equality -///-------------------------------------- - -- (NSUInteger)hash { - return 0; -} - -- (BOOL)isEqual:(id)object { - if (self == object) { - return YES; - } - - if (![object isKindOfClass:[self class]]) { - return NO; - } - - PFPropertyInfo *other = object; - - // If they're the same property and one of them subclasses the other, do no further checking. - return [self.name isEqual:other.name] && - ([self.sourceClass isSubclassOfClass:other.sourceClass] || - [other.sourceClass isSubclassOfClass:self.sourceClass]); -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h deleted file mode 100644 index db9ebea..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h +++ /dev/null @@ -1,25 +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. - */ - -#import - -#import "PFPropertyInfo.h" - -@interface PFPropertyInfo () - -@property (atomic, assign, readonly) Class sourceClass; -@property (atomic, assign, readonly, getter=isObject) BOOL object; - -@property (atomic, copy, readonly) NSString *typeEncoding; -@property (atomic, assign, readonly) Ivar ivar; - -@property (atomic, assign, readonly) SEL getterSelector; -@property (atomic, assign, readonly) SEL setterSelector; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h b/FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h deleted file mode 100644 index bc1b59e..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h +++ /dev/null @@ -1,44 +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. - */ - -#import "PFPropertyInfo.h" - -#import - -/*! - @abstract Safely sets an object's instance variable to the variable in the specified address. - @discussion The Objective-C runtime's built-in methods for setting instance variables (`object_setIvar`) and - (`object_setInstanceVariable`), are both terrible. They never read any more than a single pointer, so they - fail for structs, as well as 64 bit numbers on 32 bit platforms. Because of this, we need a solution to allow us to - safely set instance variable values whose sizes may be significantly more than a pointer. - - @note Like most Objective-C runtime methods, this WILL fail if you try and set a bitfield, so please don't do that. - - @param obj The object to operate on. - @param ivar The ivar to set the new value for. - @param fromMemory The **address** of the new value to set. - @param associationType The association type of the new value. One of PFPropertyInfoAssociationType. - */ -extern void object_setIvarValue_safe(__unsafe_unretained id obj, Ivar ivar, void *fromMemory, uint8_t associationType); - -/*! - @abstract Safely gets an object's instance variable and puts it into the specified address. - @discussion The Objective-C runtime's built-in methods for getting instance variables (`object_getIvar`) and - (`object_getInstanceVariable`), are both terrible. They never read any more than a single pointer, so they - fail for structs, as well as 64 bit numbers on 32 bit platforms. Because of this, we need a solution to allow us to - safely get instance variable values whose sizes may be significantly more than a pointer. - - @note Like most Objective-C runtime methods, this WILL fail if you try and set a bitfield, so please don't do that. - - @param obj The object to operate on. - @param ivar The ivar to get the value from. - @param toMemory The address to copy the value into. - @param associationType The assocation type of the new value. One of PFPrropertyInfoAssocationType. - */ -extern void object_getIvarValue_safe(__unsafe_unretained id obj, Ivar ivar, void *toMemory, uint8_t associationType); diff --git a/FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m b/FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m deleted file mode 100644 index a2071f1..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m +++ /dev/null @@ -1,122 +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. - */ - -#import "PFPropertyInfo_Runtime.h" - -#import -#import - -/*! - This macro is really interesting. Because ARC will insert implicit retains, releases and other memory managment code - that we don't want here, we have to basically trick ARC into treating the functions we want as functions with type - `void *`. The way we do that is actually via the linker - instead of coming up with some crazy macro to forward all - arguments along to the correct function, especially when some of these functions aren't in any public headers. - - They are, however, well defined, according to the clang official ARC runtime support document: - http://clang.llvm.org/docs/AutomaticReferenceCounting.html#id55 - - That means this is unlikely to ever break. - - The weakref attribute is documented here: - https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#Common-Function-Attributes - - And we use this to make sure our type-invariant functions actually call the proper underlying ones. - */ -#define NO_TYPECHECK_SYMBOL(ret, fn, args...) static ret fn ## _noTypeCheck (args) __attribute__((weakref(#fn))); -#define OBJECT_GETOFFSET_PTR(obj, offset) (void *) ((uintptr_t)obj + offset) - -NO_TYPECHECK_SYMBOL(void *, objc_loadWeak, void **); - -NO_TYPECHECK_SYMBOL(void *, objc_storeWeak, void **, void *); -NO_TYPECHECK_SYMBOL(void *, objc_storeStrong, void **, void *); - -NO_TYPECHECK_SYMBOL(void *, objc_autorelease, void *); -NO_TYPECHECK_SYMBOL(void *, objc_retainAutorelease, void *); - -void object_getIvarValue_safe(__unsafe_unretained id obj, Ivar ivar, void *toMemory, uint8_t associationType) { - ptrdiff_t offset = ivar_getOffset(ivar); - void *location = OBJECT_GETOFFSET_PTR(obj, offset); - - switch (associationType) { - case PFPropertyInfoAssociationTypeDefault: - [NSException raise:NSInvalidArgumentException format:@"Invalid association type Default!"]; - break; - - case PFPropertyInfoAssociationTypeAssign: { - NSUInteger size = 0; - NSGetSizeAndAlignment(ivar_getTypeEncoding(ivar), &size, NULL); - - memcpy(toMemory, location, size); - break; - } - - case PFPropertyInfoAssociationTypeWeak: { - void *results = objc_loadWeak_noTypeCheck(location); - - memcpy(toMemory, &results, sizeof(id)); - break; - } - - case PFPropertyInfoAssociationTypeStrong: - case PFPropertyInfoAssociationTypeCopy: - case PFPropertyInfoAssociationTypeMutableCopy: { - void *objectValue = *(void **)location; - objectValue = objc_retainAutorelease_noTypeCheck(objectValue); - - memcpy(toMemory, &objectValue, sizeof(id)); - break; - } - } -} - -void object_setIvarValue_safe(__unsafe_unretained id obj, Ivar ivar, void *fromMemory, uint8_t associationType) { - ptrdiff_t offset = ivar_getOffset(ivar); - void *location = OBJECT_GETOFFSET_PTR(obj, offset); - - NSUInteger size = 0; - NSGetSizeAndAlignment(ivar_getTypeEncoding(ivar), &size, NULL); - - void *newValue = NULL; - - switch (associationType) { - case PFPropertyInfoAssociationTypeDefault: - [NSException raise:NSInvalidArgumentException format:@"Invalid association type Default!"]; - return; - - case PFPropertyInfoAssociationTypeAssign: { - memcpy(location, fromMemory, size); - return; - } - - case PFPropertyInfoAssociationTypeWeak: { - objc_storeWeak_noTypeCheck(location, *(void **)fromMemory); - return; - } - - case PFPropertyInfoAssociationTypeStrong: - newValue = *(void **)fromMemory; - break; - - case PFPropertyInfoAssociationTypeCopy: - case PFPropertyInfoAssociationTypeMutableCopy: { - SEL command = (associationType == PFPropertyInfoAssociationTypeCopy) ? @selector(copy) - : @selector(mutableCopy); - - - void *(*objc_msgSend_casted)(void *, SEL) = (void *)objc_msgSend; - void *oldValue = *(void **)fromMemory; - - newValue = objc_msgSend_casted(oldValue, command); - newValue = objc_autorelease_noTypeCheck(newValue); - break; - } - } - - objc_storeStrong_noTypeCheck(location, newValue); -} diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Purchase/Controller/PFPurchaseController.h b/FoodbLog/Pods/Parse/Parse/Internal/Purchase/Controller/PFPurchaseController.h deleted file mode 100644 index dcd1e04..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Purchase/Controller/PFPurchaseController.h +++ /dev/null @@ -1,62 +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. - */ - -#import - -#import - -#import "PFMacros.h" - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFFileManager; -@class PFPaymentTransactionObserver; -@class PFProductsRequestResult; - -@protocol PFCommandRunning; -@class SKPaymentQueue; -@class SKPaymentTransaction; - -PF_WATCH_UNAVAILABLE @interface PFPurchaseController : NSObject - -@property (nonatomic, strong, readonly) id commandRunner; -@property (nonatomic, strong, readonly) PFFileManager *fileManager; -@property (nonatomic, strong, readonly) NSBundle *bundle; - -@property (nonatomic, strong) SKPaymentQueue *paymentQueue; -@property (nonatomic, strong, readonly) PFPaymentTransactionObserver *transactionObserver; - -@property (nonatomic, assign) Class productsRequestClass; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithCommandRunner:(id)commandRunner - fileManager:(PFFileManager *)fileManager - bundle:(NSBundle *)bundle NS_DESIGNATED_INITIALIZER; - -+ (instancetype)controllerWithCommandRunner:(id)commandRunner - fileManager:(PFFileManager *)fileManager - bundle:(NSBundle *)bundle; - -///-------------------------------------- -/// @name Products -///-------------------------------------- - -- (BFTask *)findProductsAsyncWithIdentifiers:(NSSet *)productIdentifiers; -- (BFTask *)buyProductAsyncWithIdentifier:(NSString *)productIdentifier; -- (BFTask *)downloadAssetAsyncForTransaction:(SKPaymentTransaction *)transaction - withProgressBlock:(PFProgressBlock)progressBlock - sessionToken:(NSString *)sessionToken; - -- (NSString *)assetContentPathForProductWithIdentifier:(NSString *)identifier fileName:(NSString *)fileName; -- (BOOL)canPurchase; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Purchase/Controller/PFPurchaseController.m b/FoodbLog/Pods/Parse/Parse/Internal/Purchase/Controller/PFPurchaseController.m deleted file mode 100644 index 58f2110..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Purchase/Controller/PFPurchaseController.m +++ /dev/null @@ -1,241 +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. - */ - -#import "PFPurchaseController.h" - -#import - -#import - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFCommandResult.h" -#import "PFCommandRunning.h" -#import "PFConstants.h" -#import "PFDecoder.h" -#import "PFFileManager.h" -#import "PFFile_Private.h" -#import "PFHTTPRequest.h" -#import "PFMacros.h" -#import "PFPaymentTransactionObserver.h" -#import "PFProductsRequestHandler.h" -#import "PFRESTCommand.h" - -@interface PFPurchaseController () { - PFProductsRequestHandler *_currentProductsRequestHandler; -} - -@end - -@implementation PFPurchaseController - -@synthesize paymentQueue = _paymentQueue; -@synthesize transactionObserver = _transactionObserver; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithCommandRunner:(id)commandRunner - fileManager:(PFFileManager *)fileManager - bundle:(NSBundle *)bundle { - self = [super init]; - if (!self) return nil; - - _commandRunner = commandRunner; - _fileManager = fileManager; - _bundle = bundle; - - return self; -} - -+ (instancetype)controllerWithCommandRunner:(id)commandRunner - fileManager:(PFFileManager *)fileManager - bundle:(NSBundle *)bundle { - return [[self alloc] initWithCommandRunner:commandRunner fileManager:fileManager bundle:bundle]; -} - -///-------------------------------------- -#pragma mark - Dealloc -///-------------------------------------- - -- (void)dealloc { - if (_paymentQueue && _transactionObserver) { - [_paymentQueue removeTransactionObserver:_transactionObserver]; - } -} - -///-------------------------------------- -#pragma mark - Products -///-------------------------------------- - -- (BFTask *)findProductsAsyncWithIdentifiers:(NSSet *)productIdentifiers { - @weakify(self); - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id { - @strongify(self); - Class requestClass = self.productsRequestClass ?: [SKProductsRequest class]; - SKProductsRequest *request = [[requestClass alloc] initWithProductIdentifiers:productIdentifiers]; - _currentProductsRequestHandler = [[PFProductsRequestHandler alloc] initWithProductsRequest:request]; - return [_currentProductsRequestHandler findProductsAsync]; - }] continueWithSuccessBlock:^id(BFTask *task) { - _currentProductsRequestHandler = nil; - return task; - }]; -} - -- (BFTask *)buyProductAsyncWithIdentifier:(NSString *)productIdentifier { - PFParameterAssert(productIdentifier, @"You must pass in a valid product identifier."); - - if (![self canPurchase]) { - NSError *error = [NSError errorWithDomain:PFParseErrorDomain - code:kPFErrorPaymentDisabled - userInfo:nil]; - return [BFTask taskWithError:error]; - } - NSSet *identifiers = PF_SET(productIdentifier); - @weakify(self); - return [[self findProductsAsyncWithIdentifiers:identifiers] continueWithSuccessBlock:^id(BFTask *task) { - PFProductsRequestResult *result = task.result; - @strongify(self); - - for (NSString *invalidIdentifier in result.invalidProductIdentifiers) { - if ([invalidIdentifier isEqualToString:productIdentifier]) { - return [BFTask taskWithError:[NSError errorWithDomain:PFParseErrorDomain - code:kPFErrorInvalidProductIdentifier - userInfo:nil]]; - } - } - - for (SKProduct *product in result.validProducts) { - if ([product.productIdentifier isEqualToString:productIdentifier]) { - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - [self.transactionObserver handle:productIdentifier runOnceBlock:^(NSError *error) { - if (error) { - [source trySetError:error]; - } else { - [source trySetResult:nil]; - } - }]; - SKPayment *payment = [SKPayment paymentWithProduct:product]; - [self.paymentQueue addPayment:payment]; - return source.task; - } - } - - return [BFTask taskWithError:[NSError errorWithDomain:PFParseErrorDomain - code:kPFErrorProductNotFoundInAppStore - userInfo:nil]]; - }]; -} - -- (BFTask *)downloadAssetAsyncForTransaction:(SKPaymentTransaction *)transaction - withProgressBlock:(PFProgressBlock)progressBlock - sessionToken:(NSString *)sessionToken { - NSString *productIdentifier = transaction.payment.productIdentifier; - NSURL *appStoreReceiptURL = [self.bundle appStoreReceiptURL]; - if (!productIdentifier || !appStoreReceiptURL) { - return [BFTask taskWithError:[NSError errorWithDomain:PFParseErrorDomain - code:kPFErrorReceiptMissing - userInfo:nil]]; - } - - NSError *error = nil; - NSData *appStoreReceipt = [NSData dataWithContentsOfURL:appStoreReceiptURL - options:NSDataReadingMappedIfSafe - error:&error]; - if (!appStoreReceipt || error) { - NSDictionary *userInfo = nil; - if (error) { - userInfo = @{ NSUnderlyingErrorKey : error }; - } - return [BFTask taskWithError:[NSError errorWithDomain:PFParseErrorDomain - code:kPFErrorReceiptMissing - userInfo:userInfo]]; - } - - NSDictionary *params = [[PFEncoder objectEncoder] encodeObject:@{ @"receipt" : appStoreReceipt, - @"productIdentifier" : productIdentifier }]; - PFRESTCommand *command = [PFRESTCommand commandWithHTTPPath:@"validate_purchase" - httpMethod:PFHTTPRequestMethodPOST - parameters:params - sessionToken:sessionToken]; - BFTask *task = [self.commandRunner runCommandAsync:command withOptions:PFCommandRunningOptionRetryIfFailed]; - @weakify(self); - return [task continueWithSuccessBlock:^id(BFTask *task) { - @strongify(self); - - PFCommandResult *result = task.result; - PFFile *file = [[PFDecoder objectDecoder] decodeObject:result.result]; - if (![file isKindOfClass:[PFFile class]]) { - return [BFTask taskWithError:[NSError errorWithDomain:PFParseErrorDomain - code:kPFErrorInvalidPurchaseReceipt - userInfo:result.result]]; - } - - NSString *finalFilePath = [self assetContentPathForProductWithIdentifier:transaction.payment.productIdentifier - fileName:file.name]; - NSString *directoryPath = [finalFilePath stringByDeletingLastPathComponent]; - return [[[[[PFFileManager createDirectoryIfNeededAsyncAtPath:directoryPath] continueWithBlock:^id(BFTask *task) { - if (task.faulted) { - return [BFTask taskWithError:[NSError errorWithDomain:PFParseErrorDomain - code:kPFErrorProductDownloadFileSystemFailure - userInfo:nil]]; - } - return file; - }] continueWithSuccessBlock:^id(BFTask *task) { - return [file getDataStreamInBackgroundWithProgressBlock:progressBlock]; - }] continueWithSuccessBlock:^id(BFTask *task) { - NSString *cachedFilePath = [file _cachedFilePath]; - return [[PFFileManager copyItemAsyncAtPath:cachedFilePath - toPath:finalFilePath] continueWithBlock:^id(BFTask *task) { - // No-op file exists error. - if (task.error.code == NSFileWriteFileExistsError) { - return nil; - } - return task; - }]; - }] continueWithSuccessResult:finalFilePath]; - }]; -} - -- (NSString *)assetContentPathForProductWithIdentifier:(NSString *)identifier fileName:(NSString *)fileName { - // We store files locally at (ParsePrivateDir)/(ProductIdentifier)/filename - NSString *filePath = [self.fileManager parseDataItemPathForPathComponent:identifier]; - filePath = [filePath stringByAppendingPathComponent:fileName]; - return filePath; -} - -- (BOOL)canPurchase { - return [[self.paymentQueue class] canMakePayments]; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (SKPaymentQueue *)paymentQueue { - if (!_paymentQueue) { - _paymentQueue = [SKPaymentQueue defaultQueue]; - } - return _paymentQueue; -} - -- (PFPaymentTransactionObserver *)transactionObserver { - if (!_transactionObserver) { - _transactionObserver = [[PFPaymentTransactionObserver alloc] init]; - [self.paymentQueue addTransactionObserver:_transactionObserver]; - } - return _transactionObserver; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h b/FoodbLog/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h deleted file mode 100644 index db0e43c..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h +++ /dev/null @@ -1,29 +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. - */ - -#import -#import - -#import - -/*! - * The PFPaymentTransactionObserver listens to the payment queue, processes a payment by running business logic, - * and completes the transaction. It's a complex interaction and best explained as follows: - * 1) an observer object is created and added to the payment queue, typically before IAP happens (but not necessarily), - * 2) PFPurchase creates a payment and adds it to the payment queue, - * 3) when the observer sees this payment, it runs the business logic associated with this payment, - * 4) when the business logic finishes, the observer completes the transaction. If the business logic does not finish, the transaction is not completed, which means the user does not get charged, - * 5) after the transaction finishes, custom UI logic is run. - */ -PF_WATCH_UNAVAILABLE @interface PFPaymentTransactionObserver : NSObject - -- (void)handle:(NSString *)productIdentifier block:(void (^)(SKPaymentTransaction *))block; -- (void)handle:(NSString *)productIdentifier runOnceBlock:(void (^)(NSError *))block; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m b/FoodbLog/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m deleted file mode 100644 index 100750d..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m +++ /dev/null @@ -1,105 +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. - */ - -#import "PFPaymentTransactionObserver_Private.h" - -#import "PFAssert.h" - -@implementation PFPaymentTransactionObserver - -@synthesize blocks; -@synthesize runOnceBlocks; -@synthesize lockObj; -@synthesize runOnceLockObj; - -///-------------------------------------- -#pragma mark - NSObject -///-------------------------------------- - -- (instancetype)init { - if (self = [super init]) { - blocks = [[NSMutableDictionary alloc] init]; - runOnceBlocks = [[NSMutableDictionary alloc] init]; - lockObj = [[NSObject alloc] init]; - runOnceLockObj = [[NSObject alloc] init]; - } - return self; -} - -///-------------------------------------- -#pragma mark - SKPaymentTransactionObserver -///-------------------------------------- - -- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { - for (SKPaymentTransaction *transaction in transactions) { - switch (transaction.transactionState) { - case SKPaymentTransactionStatePurchased: - case SKPaymentTransactionStateFailed: - case SKPaymentTransactionStateRestored: - [self completeTransaction:transaction fromPaymentQueue:queue]; - break; - default: - break; - } - } -} - -///-------------------------------------- -#pragma mark - PFPaymentTransactionObserver -///-------------------------------------- - -- (void)completeTransaction:(SKPaymentTransaction *)transaction fromPaymentQueue:(SKPaymentQueue *)queue { - NSString *productIdentifier = transaction.payment.productIdentifier; - - @synchronized(lockObj) { - void(^completion)(SKPaymentTransaction *) = self.blocks[productIdentifier]; - if (!transaction.error && completion) { - completion(transaction); - } - } - - @synchronized(runOnceLockObj) { - void(^runOnceBlock)(NSError *) = (void(^)(NSError *))[self.runOnceBlocks objectForKey:productIdentifier]; - if (runOnceBlock) { - runOnceBlock(transaction.error); - [self.runOnceBlocks removeObjectForKey:productIdentifier]; - } - } - - // Calling finish:transaction here prevents the user from registering another observer to handle this transaction. - [queue finishTransaction:transaction]; -} - -///-------------------------------------- -#pragma mark - Public -///-------------------------------------- - -- (void)handle:(NSString *)productIdentifier block:(void(^)(SKPaymentTransaction *))block { - @synchronized(lockObj) { - self.blocks[productIdentifier] = block; - } -} - -- (void)handle:(NSString *)productIdentifier runOnceBlock:(void(^)(NSError *))block { - @synchronized(runOnceLockObj) { - PFConsistencyAssert(self.runOnceBlocks[productIdentifier] == nil, - @"You cannot purchase a product that is in the process of being purchased."); - - if (!block) { - // Create a no-op action so that we can store it in the dictionary, - // this is useful because we use the existence of this block to test if - // the same product is being purchased at the time. - block = ^(NSError *error) { - }; - } - self.runOnceBlocks[productIdentifier] = block; - } -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h deleted file mode 100644 index 268af07..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h +++ /dev/null @@ -1,19 +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. - */ - -#import "PFPaymentTransactionObserver.h" - -@interface PFPaymentTransactionObserver () - -@property (nonatomic, strong) NSMutableDictionary *blocks; -@property (nonatomic, strong) NSMutableDictionary *runOnceBlocks; -@property (nonatomic, strong) NSObject *lockObj; -@property (nonatomic, strong) NSObject *runOnceLockObj; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Push/ChannelsController/PFPushChannelsController.h b/FoodbLog/Pods/Parse/Parse/Internal/Push/ChannelsController/PFPushChannelsController.h deleted file mode 100644 index 95bea76..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Push/ChannelsController/PFPushChannelsController.h +++ /dev/null @@ -1,47 +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. - */ - -#import - -#import - -#import "PFCoreDataProvider.h" - -@class BFTask PF_GENERIC(__covariant BFGenericType); - -NS_ASSUME_NONNULL_BEGIN - -PF_WATCH_UNAVAILABLE @interface PFPushChannelsController : NSObject - -@property (nonatomic, weak, readonly) id dataSource; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; -+ (instancetype)controllerWithDataSource:(id)dataSource; - -///-------------------------------------- -/// @name Get -///-------------------------------------- - -- (BFTask *)getSubscribedChannelsAsync; - -///-------------------------------------- -/// @name Subscribe -///-------------------------------------- - -- (BFTask *)subscribeToChannelAsyncWithName:(NSString *)name; -- (BFTask *)unsubscribeFromChannelAsyncWithName:(NSString *)name; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Push/ChannelsController/PFPushChannelsController.m b/FoodbLog/Pods/Parse/Parse/Internal/Push/ChannelsController/PFPushChannelsController.m deleted file mode 100644 index e8d3d8e..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Push/ChannelsController/PFPushChannelsController.m +++ /dev/null @@ -1,120 +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. - */ - -#import "PFPushChannelsController.h" - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFCurrentInstallationController.h" -#import "PFErrorUtilities.h" -#import "PFInstallation.h" - -@interface PFPushChannelsController () - -@property (nonatomic, strong, readonly) PFCurrentInstallationController *currentInstallationController; - -@end - -@implementation PFPushChannelsController - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithDataSource:(nonnull id)dataSource { - self = [super init]; - if (!self) return nil; - - _dataSource = dataSource; - - return self; -} - -+ (instancetype)controllerWithDataSource:(nonnull id)dataSource { - return [[self alloc] initWithDataSource:dataSource]; -} - -///-------------------------------------- -#pragma mark - Get -///-------------------------------------- - -- (BFTask *)getSubscribedChannelsAsync { - return [[self _getCurrentObjectAsync] continueWithSuccessBlock:^id(BFTask *task) { - PFInstallation *installation = task.result; - - BFTask *installationTask = (installation.objectId - ? (BFTask *)[installation fetchInBackground] - : (BFTask *)[installation saveInBackground]); - - return [installationTask continueWithSuccessBlock:^id(BFTask *task) { - return [NSSet setWithArray:installation.channels]; - }]; - }]; -} - -///-------------------------------------- -#pragma mark - Subscribe -///-------------------------------------- - -- (BFTask *)subscribeToChannelAsyncWithName:(nonnull NSString *)name { - return [[self _getCurrentObjectAsync] continueWithSuccessBlock:^id(BFTask *task) { - PFInstallation *installation = task.result; - if ([installation.channels containsObject:name] && - ![installation isDirtyForKey:@"channels"]) { - return @YES; - } - - [installation addUniqueObject:name forKey:@"channels"]; - return [installation saveInBackground]; - }]; -} - -- (BFTask *)unsubscribeFromChannelAsyncWithName:(nonnull NSString *)name { - return [[self _getCurrentObjectAsync] continueWithSuccessBlock:^id(BFTask *task) { - PFInstallation *installation = task.result; - if (name.length != 0 && - ![installation.channels containsObject:name] && - ![installation isDirtyForKey:@"channels"]) { - return @YES; - } - [installation removeObject:name forKey:@"channels"]; - return [installation saveInBackground]; - }]; -} - -///-------------------------------------- -#pragma mark - Private -///-------------------------------------- - -- (BFTask *)_getCurrentObjectAsync { - return [[self.currentInstallationController getCurrentObjectAsync] continueWithSuccessBlock:^id(BFTask *task) { - PFInstallation *installation = task.result; - if (!installation.deviceToken) { - NSError *error = [PFErrorUtilities errorWithCode:kPFErrorPushMisconfigured - message:@"There is no device token stored yet."]; - return [BFTask taskWithError:error]; - } - - return task; - }]; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (PFCurrentInstallationController *)currentInstallationController { - return self.dataSource.currentInstallationController; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Push/Controller/PFPushController.h b/FoodbLog/Pods/Parse/Parse/Internal/Push/Controller/PFPushController.h deleted file mode 100644 index 0f66b42..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Push/Controller/PFPushController.h +++ /dev/null @@ -1,49 +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. - */ - -#import - -#import - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFPushState; -@protocol PFCommandRunning; - -NS_ASSUME_NONNULL_BEGIN - -PF_WATCH_UNAVAILABLE @interface PFPushController : NSObject - -@property (nonatomic, strong, readonly) id commandRunner; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithCommandRunner:(id)commandRunner NS_DESIGNATED_INITIALIZER; - -+ (instancetype)controllerWithCommandRunner:(id)commandRunner; - -///-------------------------------------- -/// @name Sending Push -///-------------------------------------- - -/*! - Requests push notification to be sent for a given state. - - @param state State to use to send notifications. - @param sessionToken Current user session token. - - @returns `BFTask` with result set to `NSNumber` with `BOOL` identifying whether the request succeeded. - */ -- (BFTask *)sendPushNotificationAsyncWithState:(PFPushState *)state sessionToken:(nullable NSString *)sessionToken; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Push/Controller/PFPushController.m b/FoodbLog/Pods/Parse/Parse/Internal/Push/Controller/PFPushController.m deleted file mode 100644 index 36472de..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Push/Controller/PFPushController.m +++ /dev/null @@ -1,57 +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. - */ - -#import "PFPushController.h" - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFCommandRunning.h" -#import "PFMacros.h" -#import "PFRESTPushCommand.h" - -@implementation PFPushController - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithCommandRunner:(id)commandRunner { - self = [super init]; - if (!self) return nil; - - _commandRunner = commandRunner; - - return self; -} - -+ (instancetype)controllerWithCommandRunner:(id)commandRunner { - return [[self alloc] initWithCommandRunner:commandRunner]; -} - -///-------------------------------------- -#pragma mark - Sending Push -///-------------------------------------- - -- (BFTask *)sendPushNotificationAsyncWithState:(PFPushState *)state - sessionToken:(NSString *)sessionToken { - @weakify(self); - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - PFRESTCommand *command = [PFRESTPushCommand sendPushCommandWithPushState:state sessionToken:sessionToken]; - return [self.commandRunner runCommandAsync:command withOptions:PFCommandRunningOptionRetryIfFailed]; - }] continueWithSuccessBlock:^id(BFTask *task) { - return @(task.result != nil); - }]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Push/Manager/PFPushManager.h b/FoodbLog/Pods/Parse/Parse/Internal/Push/Manager/PFPushManager.h deleted file mode 100644 index 9d2878a..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Push/Manager/PFPushManager.h +++ /dev/null @@ -1,43 +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. - */ - -#import - -#import - -#import "PFCoreDataProvider.h" -#import "PFDataProvider.h" - -@class PFPushChannelsController; -@class PFPushController; - -NS_ASSUME_NONNULL_BEGIN - -PF_WATCH_UNAVAILABLE @interface PFPushManager : NSObject - -@property (nonatomic, weak, readonly) id commonDataSource; -@property (nonatomic, weak, readonly) id coreDataSource; - -@property (nonatomic, strong) PFPushController *pushController; -@property (nonatomic, strong) PFPushChannelsController *channelsController; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithCommonDataSource:(id)commonDataSource - coreDataSource:(id)coreDataSource NS_DESIGNATED_INITIALIZER; - -+ (instancetype)managerWithCommonDataSource:(id)commonDataSource - coreDataSource:(id)coreDataSource; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Push/Manager/PFPushManager.m b/FoodbLog/Pods/Parse/Parse/Internal/Push/Manager/PFPushManager.m deleted file mode 100644 index d02f681..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Push/Manager/PFPushManager.m +++ /dev/null @@ -1,95 +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. - */ - -#import "PFPushManager.h" - -#import "PFAssert.h" -#import "PFMacros.h" -#import "PFPushChannelsController.h" -#import "PFPushController.h" - -@interface PFPushManager () { - dispatch_queue_t _controllerAccessQueue; -} - -@end - -@implementation PFPushManager - -@synthesize pushController = _pushController; -@synthesize channelsController = _channelsController; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithCommonDataSource:(id)commonDataSource - coreDataSource:(id)coreDataSource { - self = [super init]; - if (!self) return nil; - - _commonDataSource = commonDataSource; - _coreDataSource = coreDataSource; - _controllerAccessQueue = dispatch_queue_create("com.parse.push.controller.accessQueue", DISPATCH_QUEUE_SERIAL); - - return self; -} - -+ (instancetype)managerWithCommonDataSource:(id)commonDataSource - coreDataSource:(id)coreDataSource { - return [[self alloc] initWithCommonDataSource:commonDataSource coreDataSource:coreDataSource]; -} - -///-------------------------------------- -#pragma mark - PushController -///-------------------------------------- - -- (PFPushController *)pushController { - __block PFPushController *controller; - dispatch_sync(_controllerAccessQueue, ^{ - if (!_pushController) { - _pushController = [PFPushController controllerWithCommandRunner:self.commonDataSource.commandRunner]; - } - controller = _pushController; - }); - return controller; -} - -- (void)setPushController:(PFPushController *)pushController { - dispatch_sync(_controllerAccessQueue, ^{ - _pushController = pushController; - }); -} - -///-------------------------------------- -#pragma mark - Channels Controller -///-------------------------------------- - -- (PFPushChannelsController *)channelsController { - __block PFPushChannelsController *controller; - dispatch_sync(_controllerAccessQueue, ^{ - if (!_channelsController) { - _channelsController = [PFPushChannelsController controllerWithDataSource:self.coreDataSource]; - } - controller = _channelsController; - }); - return controller; -} - -- (void)setChannelsController:(PFPushChannelsController *)channelsController { - dispatch_sync(_controllerAccessQueue, ^{ - _channelsController = channelsController; - }); -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Push/PFPushPrivate.h b/FoodbLog/Pods/Parse/Parse/Internal/Push/PFPushPrivate.h deleted file mode 100644 index d45d114..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Push/PFPushPrivate.h +++ /dev/null @@ -1,43 +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. - */ - -#import - -#import - -#import "PFMacros.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol PFPushInternalUtils - -@optional -+ (NSString *)convertDeviceTokenToString:(id)deviceToken; -+ (nullable NSString *)getDeviceTokenFromKeychain; -+ (void)clearDeviceToken; - -#if TARGET_OS_IPHONE - -+ (void)showAlertViewWithTitle:(nullable NSString *)title message:(nullable NSString *)message NS_EXTENSION_UNAVAILABLE_IOS(""); -+ (void)playVibrate; -+ (void)playAudioWithName:(nullable NSString *)audioName; - -#endif - -@end - -@interface PFPush (Private) - -// For unit testability -+ (Class)pushInternalUtilClass; -+ (void)setPushInternalUtilClass:(nullable Class)utilClass; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFMutablePushState.h b/FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFMutablePushState.h deleted file mode 100644 index 3adab09..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFMutablePushState.h +++ /dev/null @@ -1,32 +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. - */ - -#import "PFPushState.h" - -NS_ASSUME_NONNULL_BEGIN - -PF_WATCH_UNAVAILABLE @interface PFMutablePushState : PFPushState - -@property (nullable, nonatomic, copy, readwrite) NSSet *channels; -@property (nullable, nonatomic, copy, readwrite) PFQueryState *queryState; - -@property (nullable, nonatomic, strong, readwrite) NSDate *expirationDate; -@property (nullable, nonatomic, copy, readwrite) NSNumber *expirationTimeInterval; - -@property (nullable, nonatomic, copy, readwrite) NSDictionary *payload; - -///-------------------------------------- -/// @name Payload -///-------------------------------------- - -- (void)setPayloadWithMessage:(nullable NSString *)message; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFMutablePushState.m b/FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFMutablePushState.m deleted file mode 100644 index 998f75b..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFMutablePushState.m +++ /dev/null @@ -1,34 +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. - */ - -#import "PFMutablePushState.h" - -#import "PFPushState_Private.h" - -@implementation PFMutablePushState - -@dynamic channels; -@dynamic queryState; -@dynamic expirationDate; -@dynamic expirationTimeInterval; -@dynamic payload; - -///-------------------------------------- -#pragma mark - Payload -///-------------------------------------- - -- (void)setPayloadWithMessage:(NSString *)message { - if (!message) { - self.payload = nil; - } else { - self.payload = @{ @"alert" : [message copy] }; - } -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFPushState.h b/FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFPushState.h deleted file mode 100644 index 147756f..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFPushState.h +++ /dev/null @@ -1,39 +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. - */ - -#import - -#import - -#import "PFBaseState.h" - -@class PFQueryState; - -NS_ASSUME_NONNULL_BEGIN - -PF_WATCH_UNAVAILABLE @interface PFPushState : PFBaseState - -@property (nullable, nonatomic, copy, readonly) NSSet *channels; -@property (nullable, nonatomic, copy, readonly) PFQueryState *queryState; - -@property (nullable, nonatomic, strong, readonly) NSDate *expirationDate; -@property (nullable, nonatomic, copy, readonly) NSNumber *expirationTimeInterval; - -@property (nullable, nonatomic, copy, readonly) NSDictionary *payload; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)initWithState:(nullable PFPushState *)state; -+ (instancetype)stateWithState:(nullable PFPushState *)state; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFPushState.m b/FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFPushState.m deleted file mode 100644 index 6eaa245..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFPushState.m +++ /dev/null @@ -1,60 +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. - */ - -#import "PFPushState.h" -#import "PFPushState_Private.h" - -#import "PFMutablePushState.h" -#import "PFQueryState.h" - -@implementation PFPushState - -///-------------------------------------- -#pragma mark - PFBaseStateSubclass -///-------------------------------------- - -+ (NSDictionary *)propertyAttributes { - return @{ - @"channels": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], - @"queryState": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], - @"expirationDate": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeStrong], - @"expirationTimeInterval": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeStrong], - @"payload": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy] - }; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithState:(PFPushState *)state { - return [super initWithState:state]; -} - -+ (instancetype)stateWithState:(PFPushState *)state { - return [super stateWithState:state]; -} - -///-------------------------------------- -#pragma mark - NSCopying -///-------------------------------------- - -- (id)copyWithZone:(NSZone *)zone { - return [[PFPushState allocWithZone:zone] initWithState:self]; -} - -///-------------------------------------- -#pragma mark - NSMutableCopying -///-------------------------------------- - -- (id)mutableCopyWithZone:(NSZone *)zone { - return [[PFMutablePushState allocWithZone:zone] initWithState:self]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFPushState_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFPushState_Private.h deleted file mode 100644 index 33e1570..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Push/State/PFPushState_Private.h +++ /dev/null @@ -1,26 +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. - */ - -#import "PFPushState.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFPushState () - -@property (nullable, nonatomic, copy, readwrite) NSSet *channels; -@property (nullable, nonatomic, copy, readwrite) PFQueryState *queryState; - -@property (nullable, nonatomic, strong, readwrite) NSDate *expirationDate; -@property (nullable, nonatomic, copy, readwrite) NSNumber *expirationTimeInterval; - -@property (nullable, nonatomic, copy, readwrite) NSDictionary *payload; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Push/Utilites/PFPushUtilities.h b/FoodbLog/Pods/Parse/Parse/Internal/Push/Utilites/PFPushUtilities.h deleted file mode 100644 index e47c90e..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Push/Utilites/PFPushUtilities.h +++ /dev/null @@ -1,20 +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. - */ - -#import - -#import "PFPushPrivate.h" - -NS_ASSUME_NONNULL_BEGIN - -PF_WATCH_UNAVAILABLE @interface PFPushUtilities : NSObject - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Push/Utilites/PFPushUtilities.m b/FoodbLog/Pods/Parse/Parse/Internal/Push/Utilites/PFPushUtilities.m deleted file mode 100644 index 39b3ba7..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Push/Utilites/PFPushUtilities.m +++ /dev/null @@ -1,91 +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. - */ - -#import "PFPushUtilities.h" - -#import - -#if TARGET_OS_IOS -#import - -#import "PFAlertView.h" -#endif - -#import "PFInstallationPrivate.h" -#import "PFKeychainStore.h" -#import "PFLogging.h" -#import "PFMacros.h" - -@implementation PFPushUtilities - -///-------------------------------------- -#pragma mark - PFPushInternalUtils -///-------------------------------------- - -+ (NSString *)convertDeviceTokenToString:(id)deviceToken { - if ([deviceToken isKindOfClass:[NSString class]]) { - return deviceToken; - } else { - NSMutableString *hexString = [NSMutableString string]; - const unsigned char *bytes = [deviceToken bytes]; - for (int i = 0; i < [deviceToken length]; i++) { - [hexString appendFormat:@"%02x", bytes[i]]; - } - return [NSString stringWithString:hexString]; - } -} - -+ (NSString *)getDeviceTokenFromKeychain { - // Used the first time we construct the currentInstallation, - // for backward compability with older SDKs. - PFKeychainStore *store = [[PFKeychainStore alloc] initWithService:@"ParsePush"]; - return store[@"ParsePush"]; -} - -+ (void)clearDeviceToken { - // Used in test case setup. - [[PFInstallation currentInstallation] _clearDeviceToken]; - [[[PFKeychainStore alloc] initWithService:@"ParsePush"] removeObjectForKey:@"ParsePush"]; -} - -#if TARGET_OS_IPHONE - -+ (void)showAlertViewWithTitle:(NSString *)title message:(NSString *)message { - NSString *cancelButtonTitle = NSLocalizedStringFromTableInBundle(@"OK", @"Parse", - [NSBundle bundleForClass:[self class]], - @"Default alert view cancel button title."); - [PFAlertView showAlertWithTitle:title - message:message - cancelButtonTitle:cancelButtonTitle - otherButtonTitles:nil - completion:nil]; -} - -+ (void)playAudioWithName:(NSString *)audioFileName { - SystemSoundID soundId = -1; - - if (audioFileName) { - NSURL *bundlePath = [[NSBundle mainBundle] URLForResource:[audioFileName stringByDeletingPathExtension] - withExtension:[audioFileName pathExtension]]; - - AudioServicesCreateSystemSoundID((__bridge CFURLRef)bundlePath, &soundId); - } - - if (soundId != -1) { - AudioServicesPlaySystemSound(soundId); - } -} - -+ (void)playVibrate { - AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); -} - -#endif - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFCachedQueryController.h b/FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFCachedQueryController.h deleted file mode 100644 index db0c057..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFCachedQueryController.h +++ /dev/null @@ -1,25 +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. - */ - -#import - -#import "PFQueryController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFCachedQueryController : PFQueryController - -@property (nonatomic, weak, readonly) id commonDataSource; - -- (instancetype)initWithCommonDataSource:(id)dataSource; -+ (instancetype)controllerWithCommonDataSource:(id)dataSource; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFCachedQueryController.m b/FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFCachedQueryController.m deleted file mode 100644 index d89a928..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFCachedQueryController.m +++ /dev/null @@ -1,208 +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. - */ - -#import "PFCachedQueryController.h" - -#import - -#import "PFAssert.h" -#import "PFCommandResult.h" -#import "PFCommandRunning.h" -#import "PFDecoder.h" -#import "PFErrorUtilities.h" -#import "PFJSONSerialization.h" -#import "PFKeyValueCache.h" -#import "PFMacros.h" -#import "PFQueryState.h" -#import "PFRESTCommand.h" -#import "PFRESTQueryCommand.h" -#import "PFUser.h" - -@implementation PFCachedQueryController - -@dynamic commonDataSource; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithCommonDataSource:(id)dataSource { - return [super initWithCommonDataSource:dataSource]; -} - -+ (instancetype)controllerWithCommonDataSource:(id)dataSource { - return [super controllerWithCommonDataSource:dataSource]; -} - -///-------------------------------------- -#pragma mark - PFQueryControllerSubclass -///-------------------------------------- - -- (BFTask *)runNetworkCommandAsync:(PFRESTCommand *)command - withCancellationToken:(BFCancellationToken *)cancellationToken - forQueryState:(PFQueryState *)queryState { - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - - switch (queryState.cachePolicy) { - case kPFCachePolicyIgnoreCache: - { - return [self _runNetworkCommandAsync:command - withCancellationToken:cancellationToken - forQueryState:queryState]; - } - break; - case kPFCachePolicyNetworkOnly: - { - return [[self _runNetworkCommandAsync:command - withCancellationToken:cancellationToken - forQueryState:queryState] continueWithSuccessBlock:^id(BFTask *task) { - return [self _saveCommandResultAsync:task.result forCommandCacheKey:command.cacheKey]; - } cancellationToken:cancellationToken]; - } - break; - case kPFCachePolicyCacheOnly: - { - return [self _runNetworkCommandAsyncFromCache:command - withCancellationToken:cancellationToken - forQueryState:queryState]; - } - break; - case kPFCachePolicyNetworkElseCache: { - // Don't retry for network-else-cache, because it just slows things down. - BFTask *networkTask = [self _runNetworkCommandAsync:command - withCancellationToken:cancellationToken - forQueryState:queryState]; - @weakify(self); - return [networkTask continueWithBlock:^id(BFTask *task) { - @strongify(self); - if (task.cancelled || task.exception) { - return task; - } else if (task.error) { - return [self _runNetworkCommandAsyncFromCache:command - withCancellationToken:cancellationToken - forQueryState:queryState]; - } - return [self _saveCommandResultAsync:task.result forCommandCacheKey:command.cacheKey]; - } cancellationToken:cancellationToken]; - } - break; - case kPFCachePolicyCacheElseNetwork: - { - BFTask *cacheTask = [self _runNetworkCommandAsyncFromCache:command - withCancellationToken:cancellationToken - forQueryState:queryState]; - @weakify(self); - return [cacheTask continueWithBlock:^id(BFTask *task) { - @strongify(self); - if (task.error) { - return [self _runNetworkCommandAsync:command - withCancellationToken:cancellationToken - forQueryState:queryState]; - } - return task; - } cancellationToken:cancellationToken]; - } - break; - case kPFCachePolicyCacheThenNetwork: - PFConsistencyAssert(NO, @"kPFCachePolicyCacheThenNetwork is not implemented as a runner."); - break; - default: - PFConsistencyAssert(NO, @"Unrecognized cache policy: %d", queryState.cachePolicy); - break; - } - return nil; -} - -- (BFTask *)_runNetworkCommandAsync:(PFRESTCommand *)command - withCancellationToken:(BFCancellationToken *)cancellationToken - forQueryState:(PFQueryState *)queryState { - PFCommandRunningOptions options = 0; - // We don't want retries on NetworkElseCache, but rather instantly back-off to cache. - if (queryState.cachePolicy != kPFCachePolicyNetworkElseCache) { - options = PFCommandRunningOptionRetryIfFailed; - } - BFTask *networkTask = [self.commonDataSource.commandRunner runCommandAsync:command - withOptions:options - cancellationToken:cancellationToken]; - return [networkTask continueWithSuccessBlock:^id(BFTask *task) { - if (queryState.cachePolicy == kPFCachePolicyNetworkOnly || - queryState.cachePolicy == kPFCachePolicyNetworkElseCache || - queryState.cachePolicy == kPFCachePolicyCacheElseNetwork) { - return [self _saveCommandResultAsync:task.result forCommandCacheKey:command.cacheKey]; - } - // Roll-forward the original result. - return task; - } cancellationToken:cancellationToken]; -} - -///-------------------------------------- -#pragma mark - Cache -///-------------------------------------- - -- (NSString *)cacheKeyForQueryState:(PFQueryState *)queryState sessionToken:(NSString *)sessionToken { - return [PFRESTQueryCommand findCommandForQueryState:queryState withSessionToken:sessionToken].cacheKey; -} - -- (BOOL)hasCachedResultForQueryState:(PFQueryState *)queryState sessionToken:(NSString *)sessionToken { - // TODO: (nlutsenko) Once there is caching for `count`, the results for that command should also be checked. - // TODO: (nlutsenko) We should cache this result. - - NSString *cacheKey = [self cacheKeyForQueryState:queryState sessionToken:sessionToken]; - return ([self.commonDataSource.keyValueCache objectForKey:cacheKey maxAge:queryState.maxCacheAge] != nil); -} - -- (void)clearCachedResultForQueryState:(PFQueryState *)queryState sessionToken:(NSString *)sessionToken { - // TODO: (nlutsenko) Once there is caching for `count`, the results for that command should also be cleared. - NSString *cacheKey = [self cacheKeyForQueryState:queryState sessionToken:sessionToken]; - [self.commonDataSource.keyValueCache removeObjectForKey:cacheKey]; -} - -- (void)clearAllCachedResults { - [self.commonDataSource.keyValueCache removeAllObjects]; -} - -- (BFTask *)_runNetworkCommandAsyncFromCache:(PFRESTCommand *)command - withCancellationToken:(BFCancellationToken *)cancellationToken - forQueryState:(PFQueryState *)queryState { - NSString *jsonString = [self.commonDataSource.keyValueCache objectForKey:command.cacheKey - maxAge:queryState.maxCacheAge]; - if (!jsonString) { - NSError *error = [PFErrorUtilities errorWithCode:kPFErrorCacheMiss - message:@"Cache miss." - shouldLog:NO]; - return [BFTask taskWithError:error]; - } - - NSDictionary *object = [PFJSONSerialization JSONObjectFromString:jsonString]; - if (!object) { - NSError *error = [PFErrorUtilities errorWithCode:kPFErrorCacheMiss - message:@"Cache contains corrupted JSON."]; - return [BFTask taskWithError:error]; - } - - NSDictionary *decodedObject = [[PFDecoder objectDecoder] decodeObject:object]; - - PFCommandResult *result = [PFCommandResult commandResultWithResult:decodedObject - resultString:jsonString - httpResponse:nil]; - return [BFTask taskWithResult:result]; -} - -- (BFTask *)_saveCommandResultAsync:(PFCommandResult *)result forCommandCacheKey:(NSString *)cacheKey { - NSString *resultString = result.resultString; - if (resultString) { - [self.commonDataSource.keyValueCache setObject:resultString forKey:cacheKey]; - } - // Roll-forward the original result. - return [BFTask taskWithResult:result]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFOfflineQueryController.h b/FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFOfflineQueryController.h deleted file mode 100644 index a7f0241..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFOfflineQueryController.h +++ /dev/null @@ -1,31 +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. - */ - -#import - -#import "PFQueryController.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFOfflineQueryController : PFQueryController - -@property (nonatomic, weak, readonly) id commonDataSource; -@property (nonatomic, weak, readonly) id coreDataSource; - -- (instancetype)initWithCommonDataSource:(id)dataSource NS_UNAVAILABLE; -+ (instancetype)controllerWithCommonDataSource:(id)dataSource NS_UNAVAILABLE; - -- (instancetype)initWithCommonDataSource:(id)dataSource - coreDataSource:(id)coreDataSource NS_DESIGNATED_INITIALIZER; -+ (instancetype)controllerWithCommonDataSource:(id)dataSource - coreDataSource:(id)coreDataSource; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFOfflineQueryController.m b/FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFOfflineQueryController.m deleted file mode 100644 index edca5d5..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFOfflineQueryController.m +++ /dev/null @@ -1,180 +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. - */ - -#import "PFOfflineQueryController.h" - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFCommandRunning.h" -#import "PFObjectPrivate.h" -#import "PFOfflineStore.h" -#import "PFPin.h" -#import "PFPinningObjectStore.h" -#import "PFQueryState.h" -#import "PFRESTCommand.h" -#import "PFRelationPrivate.h" - -@interface PFOfflineQueryController () { - PFOfflineStore *_offlineStore; // TODO: (nlutsenko) Lazy-load this via self.dataSource. -} - -@end - -@implementation PFOfflineQueryController - -@dynamic commonDataSource; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithCommonDataSource:(id)dataSource { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithCommonDataSource:(id)dataSource - coreDataSource:(id)coreDataSource { - self = [super initWithCommonDataSource:dataSource]; - if (!self) return nil; - - _offlineStore = dataSource.offlineStore; - _coreDataSource = coreDataSource; - - return self; -} - -+ (instancetype)controllerWithCommonDataSource:(id)dataSource - coreDataSource:(id)coreDataSource { - return [[self alloc] initWithCommonDataSource:dataSource coreDataSource:coreDataSource]; -} - -///-------------------------------------- -#pragma mark - Find -///-------------------------------------- - -- (BFTask *)findObjectsAsyncForQueryState:(PFQueryState *)queryState - withCancellationToken:(BFCancellationToken *)cancellationToken - user:(PFUser *)user { - if (queryState.queriesLocalDatastore) { - return [self _findObjectsFromLocalDatastoreAsyncForQueryState:queryState - withCancellationToken:cancellationToken - user:user]; - } - - NSDictionary *relationCondition = queryState.conditions[@"$relatedTo"]; - if (relationCondition) { - PFObject *object = relationCondition[@"object"]; - NSString *key = relationCondition[@"key"]; - if ([object isDataAvailableForKey:key]) { - PFRelation *relation = object[key]; - return [self _findObjectsAsyncInRelation:relation - ofObject:object - forQueryState:queryState - withCancellationToken:cancellationToken - user:user]; - } - } - - return [super findObjectsAsyncForQueryState:queryState withCancellationToken:cancellationToken user:user]; -} - -- (BFTask *)_findObjectsAsyncInRelation:(PFRelation *)relation - ofObject:(PFObject *)parentObject - forQueryState:(PFQueryState *)queryState - withCancellationToken:(BFCancellationToken *)cancellationToken - user:(PFUser *)user { - return [[super findObjectsAsyncForQueryState:queryState - withCancellationToken:cancellationToken - user:user] continueWithSuccessBlock:^id(BFTask *fetchTask) { - - NSArray *objects = fetchTask.result; - for (PFObject *object in objects) { - [relation _addKnownObject:object]; - } - - return [[_offlineStore updateDataForObjectAsync:parentObject] continueWithBlock:^id(BFTask *task) { - // Roll-forward the result of find task instead of a result of update task. - return fetchTask; - } cancellationToken:cancellationToken]; - } cancellationToken:cancellationToken]; -} - - -- (BFTask *)_findObjectsFromLocalDatastoreAsyncForQueryState:(PFQueryState *)queryState - withCancellationToken:(BFCancellationToken *)cancellationToken - user:(PFUser *)user { - @weakify(self); - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - - NSString *pinName = queryState.localDatastorePinName; - if (pinName) { - PFPinningObjectStore *objectStore = self.coreDataSource.pinningObjectStore; - return [objectStore fetchPinAsyncWithName:pinName]; - } - return nil; - }] continueWithSuccessBlock:^id(BFTask *task) { - PFPin *pin = task.result; - return [_offlineStore findAsyncForQueryState:queryState user:user pin:pin]; - } cancellationToken:cancellationToken]; -} - -///-------------------------------------- -#pragma mark - Count -///-------------------------------------- - -- (BFTask *)countObjectsAsyncForQueryState:(PFQueryState *)queryState - withCancellationToken:(BFCancellationToken *)cancellationToken - user:(PFUser *)user { - if (queryState.queriesLocalDatastore) { - return [self _countObjectsFromLocalDatastoreAsyncForQueryState:queryState - withCancellationToken:cancellationToken - user:user]; - } - return [super countObjectsAsyncForQueryState:queryState withCancellationToken:cancellationToken user:user]; -} - -- (BFTask *)_countObjectsFromLocalDatastoreAsyncForQueryState:(PFQueryState *)queryState - withCancellationToken:(BFCancellationToken *)cancellationToken - user:(PFUser *)user { - @weakify(self); - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - - NSString *pinName = queryState.localDatastorePinName; - if (pinName) { - PFPinningObjectStore *controller = self.coreDataSource.pinningObjectStore; - return [controller fetchPinAsyncWithName:pinName]; - } - return nil; - }] continueWithSuccessBlock:^id(BFTask *task) { - PFPin *pin = task.result; - return [_offlineStore countAsyncForQueryState:queryState user:user pin:pin]; - } cancellationToken:cancellationToken]; -} - -///-------------------------------------- -#pragma mark - PFQueryControllerSubclass -///-------------------------------------- - -- (BFTask *)runNetworkCommandAsync:(PFRESTCommand *)command - withCancellationToken:(BFCancellationToken *)cancellationToken - forQueryState:(PFQueryState *)queryState { - return [self.commonDataSource.commandRunner runCommandAsync:command - withOptions:PFCommandRunningOptionRetryIfFailed - cancellationToken:cancellationToken]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFQueryController.h b/FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFQueryController.h deleted file mode 100644 index 8c95ecb..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFQueryController.h +++ /dev/null @@ -1,104 +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. - */ - -#import - -#import - -#import "PFDataProvider.h" - -@class BFCancellationToken; - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFQueryState; -@class PFRESTCommand; -@class PFCommandResult; -@class PFUser; - -NS_ASSUME_NONNULL_BEGIN - -@interface PFQueryController : NSObject - -@property (nonatomic, weak, readonly) id commonDataSource; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithCommonDataSource:(id)dataSource NS_DESIGNATED_INITIALIZER; - -+ (instancetype)controllerWithCommonDataSource:(id)dataSource; - -///-------------------------------------- -/// @name Find -///-------------------------------------- - -/*! - Finds objects from network or LDS for any given query state. - Supports cancellation and ACLed changes for a specific user. - - @param queryState Query state to use. - @param cancellationToken Cancellation token or `nil`. - @param user `user` to use for ACLs or `nil`. - - @returns Task that resolves to `NSArray` of `PFObject`s. - */ -- (BFTask *)findObjectsAsyncForQueryState:(PFQueryState *)queryState - withCancellationToken:(nullable BFCancellationToken *)cancellationToken - user:(nullable PFUser *)user; // TODO: (nlutsenko) Pass `PFUserState` instead of user. - -///-------------------------------------- -/// @name Count -///-------------------------------------- - -/*! - Counts objects from network or LDS for any given query state. - Supports cancellation and ACLed changes for a specific user. - - @param queryState Query state to use. - @param cancellationToken Cancellation token or `nil`. - @param user `user` to use for ACLs or `nil`. - - @returns Task that resolves to `NSNumber` with a count of results. - */ -- (BFTask *)countObjectsAsyncForQueryState:(PFQueryState *)queryState - withCancellationToken:(nullable BFCancellationToken *)cancellationToken - user:(nullable PFUser *)user; // TODO: (nlutsenko) Pass `PFUserState` instead of user. - -///-------------------------------------- -/// @name Caching -///-------------------------------------- - -- (NSString *)cacheKeyForQueryState:(PFQueryState *)queryState sessionToken:(nullable NSString *)sessionToken; -- (BOOL)hasCachedResultForQueryState:(PFQueryState *)queryState sessionToken:(nullable NSString *)sessionToken; - -- (void)clearCachedResultForQueryState:(PFQueryState *)queryState sessionToken:(nullable NSString *)sessionToken; -- (void)clearAllCachedResults; - -@end - -@protocol PFQueryControllerSubclass - -/*! - Implementation should run a command on a network runner. - - @param command Command to run. - @param cancellationToken Cancellation token. - @param queryState Query state to run command for. - - @returns `BFTask` instance with result of `PFCommandResult`. - */ -- (BFTask *)runNetworkCommandAsync:(PFRESTCommand *)command - withCancellationToken:(nullable BFCancellationToken *)cancellationToken - forQueryState:(PFQueryState *)queryState; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFQueryController.m b/FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFQueryController.m deleted file mode 100644 index 9b6c494..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Query/Controller/PFQueryController.m +++ /dev/null @@ -1,160 +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. - */ - -#import "PFQueryController.h" - -#import - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFCommandResult.h" -#import "PFCommandRunning.h" -#import "PFObjectPrivate.h" -#import "PFOfflineStore.h" -#import "PFPin.h" -#import "PFQueryState.h" -#import "PFRESTQueryCommand.h" -#import "PFUser.h" -#import "Parse_Private.h" - -@interface PFQueryController () - -@end - -@implementation PFQueryController - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithCommonDataSource:(id)dataSource { - self = [super init]; - if (!self) return nil; - - _commonDataSource = dataSource; - - return self; -} - -+ (instancetype)controllerWithCommonDataSource:(id)dataSource { - return [[self alloc] initWithCommonDataSource:dataSource]; -} - -///-------------------------------------- -#pragma mark - Find -///-------------------------------------- - -- (BFTask *)findObjectsAsyncForQueryState:(PFQueryState *)queryState - withCancellationToken:(BFCancellationToken *)cancellationToken - user:(PFUser *)user { - NSDate *queryStart = (queryState.trace ? [NSDate date] : nil); - __block NSDate *querySent = nil; - - NSString *sessionToken = user.sessionToken; - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - - PFRESTCommand *command = [PFRESTQueryCommand findCommandForQueryState:queryState withSessionToken:sessionToken]; - querySent = (queryState.trace ? [NSDate date] : nil); - return [self runNetworkCommandAsync:command - withCancellationToken:cancellationToken - forQueryState:queryState]; - }] continueWithSuccessBlock:^id(BFTask *task) { - PFCommandResult *result = task.result; - NSDate *queryReceived = (queryState.trace ? [NSDate date] : nil); - - NSArray *resultObjects = result.result[@"results"]; - NSMutableArray *foundObjects = [NSMutableArray arrayWithCapacity:resultObjects.count]; - if (resultObjects != nil) { - NSString *resultClassName = result.result[@"className"]; - if (!resultClassName) { - resultClassName = queryState.parseClassName; - } - NSArray *selectedKeys = queryState.selectedKeys.allObjects; - for (NSDictionary *resultObject in resultObjects) { - PFObject *object = [PFObject _objectFromDictionary:resultObject - defaultClassName:resultClassName - selectedKeys:selectedKeys]; - [foundObjects addObject:object]; - } - } - - NSString *traceLog = [result.result objectForKey:@"trace"]; - if (traceLog != nil) { - NSLog(@"Pre-processing took %f seconds\n%@Client side parsing took %f seconds", - [querySent timeIntervalSinceDate:queryStart], traceLog, - [queryReceived timeIntervalSinceNow]); - } - - return foundObjects; - } cancellationToken:cancellationToken]; -} - -///-------------------------------------- -#pragma mark - Count -///-------------------------------------- - -- (BFTask *)countObjectsAsyncForQueryState:(PFQueryState *)queryState - withCancellationToken:(BFCancellationToken *)cancellationToken - user:(PFUser *)user { - NSString *sessionToken = user.sessionToken; - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - - PFRESTQueryCommand *findCommand = [PFRESTQueryCommand findCommandForQueryState:queryState - withSessionToken:sessionToken]; - PFRESTCommand *countCommand = [PFRESTQueryCommand countCommandFromFindCommand:findCommand]; - return [self runNetworkCommandAsync:countCommand - withCancellationToken:cancellationToken - forQueryState:queryState]; - }] continueWithSuccessBlock:^id(BFTask *task) { - PFCommandResult *result = task.result; - return result.result[@"count"]; - } cancellationToken:cancellationToken]; -} - -///-------------------------------------- -#pragma mark - Caching -///-------------------------------------- - -- (NSString *)cacheKeyForQueryState:(PFQueryState *)queryState sessionToken:(NSString *)sessionToken { - return nil; -} - -- (BOOL)hasCachedResultForQueryState:(PFQueryState *)queryState sessionToken:(NSString *)sessionToken { - return NO; -} - -- (void)clearCachedResultForQueryState:(PFQueryState *)queryState sessionToken:(NSString *)sessionToken { -} - -- (void)clearAllCachedResults { -} - -///-------------------------------------- -#pragma mark - PFQueryControllerSubclass -///-------------------------------------- - -- (BFTask *)runNetworkCommandAsync:(PFRESTCommand *)command - withCancellationToken:(BFCancellationToken *)cancellationToken - forQueryState:(PFQueryState *)queryState { - return [self.commonDataSource.commandRunner runCommandAsync:command - withOptions:PFCommandRunningOptionRetryIfFailed - cancellationToken:cancellationToken]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Query/PFQueryPrivate.h b/FoodbLog/Pods/Parse/Parse/Internal/Query/PFQueryPrivate.h deleted file mode 100644 index 149386e..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Query/PFQueryPrivate.h +++ /dev/null @@ -1,56 +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. - */ - -#import - -#import - -#import "PFQueryState.h" - -extern NSString *const PFQueryKeyNotEqualTo; -extern NSString *const PFQueryKeyLessThan; -extern NSString *const PFQueryKeyLessThanEqualTo; -extern NSString *const PFQueryKeyGreaterThan; -extern NSString *const PFQueryKeyGreaterThanOrEqualTo; -extern NSString *const PFQueryKeyContainedIn; -extern NSString *const PFQueryKeyNotContainedIn; -extern NSString *const PFQueryKeyContainsAll; -extern NSString *const PFQueryKeyNearSphere; -extern NSString *const PFQueryKeyWithin; -extern NSString *const PFQueryKeyRegex; -extern NSString *const PFQueryKeyExists; -extern NSString *const PFQueryKeyInQuery; -extern NSString *const PFQueryKeyNotInQuery; -extern NSString *const PFQueryKeySelect; -extern NSString *const PFQueryKeyDontSelect; -extern NSString *const PFQueryKeyRelatedTo; -extern NSString *const PFQueryKeyOr; -extern NSString *const PFQueryKeyQuery; -extern NSString *const PFQueryKeyKey; -extern NSString *const PFQueryKeyObject; - -extern NSString *const PFQueryOptionKeyMaxDistance; -extern NSString *const PFQueryOptionKeyBox; -extern NSString *const PFQueryOptionKeyRegexOptions; - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFObject; - -@interface PFQuery () - -@property (nonatomic, strong, readonly) PFQueryState *state; - -@end - -@interface PFQuery (Private) - -- (instancetype)whereRelatedToObject:(PFObject *)parent fromKey:(NSString *)key; -- (void)redirectClassNameForKey:(NSString *)key; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFMutableQueryState.h b/FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFMutableQueryState.h deleted file mode 100644 index e54a13c..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFMutableQueryState.h +++ /dev/null @@ -1,81 +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. - */ - -#import "PFQueryState.h" - -@interface PFMutableQueryState : PFQueryState - -@property (nonatomic, copy, readwrite) NSString *parseClassName; - -@property (nonatomic, assign, readwrite) NSInteger limit; -@property (nonatomic, assign, readwrite) NSInteger skip; - -///-------------------------------------- -/// @name Remote + Caching Options -///-------------------------------------- - -@property (nonatomic, assign, readwrite) PFCachePolicy cachePolicy; -@property (nonatomic, assign, readwrite) NSTimeInterval maxCacheAge; - -@property (nonatomic, assign, readwrite) BOOL trace; - -///-------------------------------------- -/// @name Local Datastore Options -///-------------------------------------- - -@property (nonatomic, assign, readwrite) BOOL shouldIgnoreACLs; -@property (nonatomic, assign, readwrite) BOOL shouldIncludeDeletingEventually; -@property (nonatomic, assign, readwrite) BOOL queriesLocalDatastore; -@property (nonatomic, copy, readwrite) NSString *localDatastorePinName; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)initWithParseClassName:(NSString *)className; -+ (instancetype)stateWithParseClassName:(NSString *)className; - -///-------------------------------------- -/// @name Conditions -///-------------------------------------- - -- (void)setConditionType:(NSString *)type withObject:(id)object forKey:(NSString *)key; - -- (void)setEqualityConditionWithObject:(id)object forKey:(NSString *)key; -- (void)setRelationConditionWithObject:(id)object forKey:(NSString *)key; - -- (void)removeAllConditions; - -///-------------------------------------- -/// @name Sort -///-------------------------------------- - -- (void)sortByKey:(NSString *)key ascending:(BOOL)ascending; -- (void)addSortKey:(NSString *)key ascending:(BOOL)ascending; -- (void)addSortKeysFromSortDescriptors:(NSArray *)sortDescriptors; - -///-------------------------------------- -/// @name Includes -///-------------------------------------- - -- (void)includeKey:(NSString *)key; - -///-------------------------------------- -/// @name Selected Keys -///-------------------------------------- - -- (void)selectKeys:(NSArray *)keys; - -///-------------------------------------- -/// @name Redirect -///-------------------------------------- - -- (void)redirectClassNameForKey:(NSString *)key; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFMutableQueryState.m b/FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFMutableQueryState.m deleted file mode 100644 index 3ac9be9..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFMutableQueryState.m +++ /dev/null @@ -1,177 +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. - */ - -#import "PFMutableQueryState.h" - -#import "PFQueryState_Private.h" - -@interface PFMutableQueryState () { - NSMutableDictionary *_conditions; - NSMutableArray *_sortKeys; - NSMutableSet *_includedKeys; - NSMutableDictionary *_extraOptions; -} - -@end - -@implementation PFMutableQueryState - -@synthesize conditions = _conditions; -@synthesize sortKeys = _sortKeys; -@synthesize includedKeys = _includedKeys; -@synthesize extraOptions = _extraOptions; - -@dynamic parseClassName; -@dynamic selectedKeys; -@dynamic limit; -@dynamic skip; -@dynamic cachePolicy; -@dynamic maxCacheAge; -@dynamic trace; -@dynamic shouldIgnoreACLs; -@dynamic shouldIncludeDeletingEventually; -@dynamic queriesLocalDatastore; -@dynamic localDatastorePinName; - -///-------------------------------------- -#pragma mark - Property Attributes -///-------------------------------------- - -+ (NSDictionary *)propertyAttributes { - NSMutableDictionary *attributes = [[super propertyAttributes] mutableCopy]; - - attributes[@"conditions"] = [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeMutableCopy]; - attributes[@"sortKeys"] = [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeMutableCopy]; - attributes[@"includedKeys"] = [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeMutableCopy]; - attributes[@"extraOptions"] = [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeMutableCopy]; - - return attributes; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithParseClassName:(NSString *)className { - self = [self init]; - if (!self) return nil; - - _parseClassName = [className copy]; - - return self; -} - -+ (instancetype)stateWithParseClassName:(NSString *)className { - return [[self alloc] initWithParseClassName:className]; -} - -///-------------------------------------- -#pragma mark - Conditions -///-------------------------------------- - -- (void)setConditionType:(NSString *)type withObject:(id)object forKey:(NSString *)key { - NSMutableDictionary *conditionObject = nil; - - // Check if we already have some sort of condition - id existingCondition = _conditions[key]; - if ([existingCondition isKindOfClass:[NSMutableDictionary class]]) { - conditionObject = existingCondition; - } - if (!conditionObject) { - conditionObject = [NSMutableDictionary dictionary]; - } - conditionObject[type] = object; - - [self setEqualityConditionWithObject:conditionObject forKey:key]; -} - -- (void)setEqualityConditionWithObject:(id)object forKey:(NSString *)key { - if (!_conditions) { - _conditions = [NSMutableDictionary dictionary]; - } - _conditions[key] = object; -} - -- (void)setRelationConditionWithObject:(id)object forKey:(NSString *)key { - // We need to force saved PFObject here. - NSMutableDictionary *condition = [NSMutableDictionary dictionaryWithCapacity:2]; - condition[@"object"] = object; - condition[@"key"] = key; - [self setEqualityConditionWithObject:condition forKey:@"$relatedTo"]; -} - -- (void)removeAllConditions { - [_conditions removeAllObjects]; -} - -///-------------------------------------- -#pragma mark - Sort -///-------------------------------------- - -- (void)sortByKey:(NSString *)key ascending:(BOOL)ascending { - [_sortKeys removeAllObjects]; - [self addSortKey:key ascending:ascending]; -} - -- (void)addSortKey:(NSString *)key ascending:(BOOL)ascending { - if (!key) { - return; - } - - NSString *sortKey = (ascending ? key : [NSString stringWithFormat:@"-%@", key]); - if (!_sortKeys) { - _sortKeys = [NSMutableArray arrayWithObject:sortKey]; - } else { - [_sortKeys addObject:sortKey]; - } -} - -- (void)addSortKeysFromSortDescriptors:(NSArray *)sortDescriptors { - [_sortKeys removeAllObjects]; - for (NSSortDescriptor *sortDescriptor in sortDescriptors) { - [self addSortKey:sortDescriptor.key ascending:sortDescriptor.ascending]; - } -} - -///-------------------------------------- -#pragma mark - Includes -///-------------------------------------- - -- (void)includeKey:(NSString *)key { - if (!_includedKeys) { - _includedKeys = [NSMutableSet setWithObject:key]; - } else { - [_includedKeys addObject:key]; - } -} - -///-------------------------------------- -#pragma mark - Selected Keys -///-------------------------------------- - -- (void)selectKeys:(NSArray *)keys { - if (keys) { - _selectedKeys = (_selectedKeys ? [_selectedKeys setByAddingObjectsFromArray:keys] : [NSSet setWithArray:keys]); - } else { - _selectedKeys = nil; - } -} - -///-------------------------------------- -#pragma mark - Redirect -///-------------------------------------- - -- (void)redirectClassNameForKey:(NSString *)key { - if (!_extraOptions) { - _extraOptions = [NSMutableDictionary dictionary]; - } - _extraOptions[@"redirectClassNameForKey"] = key; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFQueryState.h b/FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFQueryState.h deleted file mode 100644 index c97ff58..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFQueryState.h +++ /dev/null @@ -1,65 +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. - */ - -#import - -#import - -#import "PFBaseState.h" - -@interface PFQueryState : PFBaseState - -@property (nonatomic, copy, readonly) NSString *parseClassName; - -@property (nonatomic, copy, readonly) NSDictionary *conditions; - -@property (nonatomic, copy, readonly) NSArray *sortKeys; -@property (nonatomic, copy, readonly) NSString *sortOrderString; - -@property (nonatomic, copy, readonly) NSSet *includedKeys; -@property (nonatomic, copy, readonly) NSSet *selectedKeys; -@property (nonatomic, copy, readonly) NSDictionary *extraOptions; - -@property (nonatomic, assign, readonly) NSInteger limit; -@property (nonatomic, assign, readonly) NSInteger skip; - -///-------------------------------------- -/// @name Remote + Caching Options -///-------------------------------------- - -@property (nonatomic, assign, readonly) PFCachePolicy cachePolicy; -@property (nonatomic, assign, readonly) NSTimeInterval maxCacheAge; - -@property (nonatomic, assign, readonly) BOOL trace; - -///-------------------------------------- -/// @name Local Datastore Options -///-------------------------------------- - -/*! - If ignoreACLs is enabled, we don't check ACLs when querying from LDS. We also don't grab - `PFUser currentUser` since it's unnecessary when ignoring ACLs. - */ -@property (nonatomic, assign, readonly) BOOL shouldIgnoreACLs; -/*! - This is currently unused, but is here to allow future querying across objects that are in the - process of being deleted eventually. - */ -@property (nonatomic, assign, readonly) BOOL shouldIncludeDeletingEventually; -@property (nonatomic, assign, readonly) BOOL queriesLocalDatastore; -@property (nonatomic, copy, readonly) NSString *localDatastorePinName; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)initWithState:(PFQueryState *)state; -+ (instancetype)stateWithState:(PFQueryState *)state; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFQueryState.m b/FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFQueryState.m deleted file mode 100644 index d5da258..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFQueryState.m +++ /dev/null @@ -1,88 +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. - */ - -#import "PFQueryState.h" -#import "PFQueryState_Private.h" - -#import "PFMutableQueryState.h" -#import "PFPropertyInfo.h" - -@implementation PFQueryState - -///-------------------------------------- -#pragma mark - PFBaseStateSubclass -///-------------------------------------- - -+ (NSDictionary *)propertyAttributes { - return @{ - @"parseClassName": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], - @"conditions": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], - @"sortKeys": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], - @"includedKeys": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], - @"selectedKeys": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], - @"extraOptions": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], - - @"limit": [PFPropertyAttributes attributes], - @"skip": [PFPropertyAttributes attributes], - @"cachePolicy": [PFPropertyAttributes attributes], - @"maxCacheAge": [PFPropertyAttributes attributes], - - @"trace": [PFPropertyAttributes attributes], - @"shouldIgnoreACLs": [PFPropertyAttributes attributes], - @"shouldIncludeDeletingEventually": [PFPropertyAttributes attributes], - @"queriesLocalDatastore": [PFPropertyAttributes attributes], - - @"localDatastorePinName": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy] - }; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _cachePolicy = kPFCachePolicyIgnoreCache; - _maxCacheAge = INFINITY; - _limit = -1; - - return self; -} - -- (instancetype)initWithState:(PFQueryState *)state { - return [super initWithState:state]; -} - -+ (instancetype)stateWithState:(PFQueryState *)state { - return [super stateWithState:state]; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (NSString *)sortOrderString { - return [self.sortKeys componentsJoinedByString:@","]; -} - -///-------------------------------------- -#pragma mark - Mutable Copying -///-------------------------------------- - -- (id)copyWithZone:(NSZone *)zone { - return [[PFQueryState allocWithZone:zone] initWithState:self]; -} - -- (instancetype)mutableCopyWithZone:(NSZone *)zone { - return [[PFMutableQueryState allocWithZone:zone] initWithState:self]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFQueryState_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFQueryState_Private.h deleted file mode 100644 index 006d3c2..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Query/State/PFQueryState_Private.h +++ /dev/null @@ -1,61 +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. - */ - -#import "PFQueryState.h" - -@interface PFQueryState () { -@protected - NSString *_parseClassName; - - NSDictionary *_conditions; - - NSArray *_sortKeys; - - NSSet *_includedKeys; - NSSet *_selectedKeys; - NSDictionary *_extraOptions; - - NSInteger _limit; - NSInteger _skip; - - PFCachePolicy _cachePolicy; - NSTimeInterval _maxCacheAge; - - BOOL _trace; - - BOOL _shouldIgnoreACLs; - BOOL _shouldIncludeDeletingEventually; - BOOL _queriesLocalDatastore; - NSString *_localDatastorePinName; -} - -@property (nonatomic, copy, readwrite) NSString *parseClassName; - -@property (nonatomic, assign, readwrite) NSInteger limit; -@property (nonatomic, assign, readwrite) NSInteger skip; - -///-------------------------------------- -/// @name Remote + Caching Options -///-------------------------------------- - -@property (nonatomic, assign, readwrite) PFCachePolicy cachePolicy; -@property (nonatomic, assign, readwrite) NSTimeInterval maxCacheAge; - -@property (nonatomic, assign, readwrite) BOOL trace; - -///-------------------------------------- -/// @name Local Datastore Options -///-------------------------------------- - -@property (nonatomic, assign, readwrite) BOOL shouldIgnoreACLs; -@property (nonatomic, assign, readwrite) BOOL shouldIncludeDeletingEventually; -@property (nonatomic, assign, readwrite) BOOL queriesLocalDatastore; -@property (nonatomic, copy, readwrite) NSString *localDatastorePinName; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Query/Utilities/PFQueryUtilities.h b/FoodbLog/Pods/Parse/Parse/Internal/Query/Utilities/PFQueryUtilities.h deleted file mode 100644 index 59276df..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Query/Utilities/PFQueryUtilities.h +++ /dev/null @@ -1,42 +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. - */ - -#import - -@interface PFQueryUtilities : NSObject - -///-------------------------------------- -/// @name Predicate -///-------------------------------------- - -/*! - Takes an arbitrary predicate and normalizes it to a form that can easily be converted to a `PFQuery`. - */ -+ (NSPredicate *)predicateByNormalizingPredicate:(NSPredicate *)predicate; - -///-------------------------------------- -/// @name Regex -///-------------------------------------- - -/*! - Converts a string into a regex that matches it. - - @param string String to convert from. - - @returns Query regex string from a string. - */ -+ (NSString *)regexStringForString:(NSString *)string; - -///-------------------------------------- -/// @name Errors -///-------------------------------------- - -+ (NSError *)objectNotFoundError; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Query/Utilities/PFQueryUtilities.m b/FoodbLog/Pods/Parse/Parse/Internal/Query/Utilities/PFQueryUtilities.m deleted file mode 100644 index 5e9b717..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Query/Utilities/PFQueryUtilities.m +++ /dev/null @@ -1,530 +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. - */ - -#import "PFQueryUtilities.h" - -#import "PFAssert.h" -#import "PFConstants.h" -#import "PFErrorUtilities.h" - -@implementation PFQueryUtilities - -///-------------------------------------- -#pragma mark - Predicate -///-------------------------------------- - -+ (NSPredicate *)predicateByNormalizingPredicate:(NSPredicate *)predicate { - return [self _hoistCommonPredicates:[self _normalizeToDNF:predicate]]; -} - -/*! - Traverses over all of the subpredicates in the given predicate, calling the given blocks to - transform any instances of NSPredicate. - */ -+ (NSPredicate *)_mapPredicate:(NSPredicate *)predicate - compoundBlock:(NSPredicate *(^)(NSCompoundPredicate *))compoundBlock - comparisonBlock:(NSPredicate *(^)(NSComparisonPredicate *predicate))comparisonBlock { - if ([predicate isKindOfClass:[NSCompoundPredicate class]]) { - if (compoundBlock) { - return compoundBlock((NSCompoundPredicate *)predicate); - } else { - NSCompoundPredicate *compound = (NSCompoundPredicate *)predicate; - - NSMutableArray *newSubpredicates = [NSMutableArray arrayWithCapacity:compound.subpredicates.count]; - for (NSPredicate *subPredicate in compound.subpredicates) { - [newSubpredicates addObject:[self _mapPredicate:subPredicate - compoundBlock:compoundBlock - comparisonBlock:comparisonBlock]]; - } - - NSCompoundPredicateType type = compound.compoundPredicateType; - return [[NSCompoundPredicate alloc] initWithType:type subpredicates:newSubpredicates]; - } - } - - if ([predicate isKindOfClass:[NSComparisonPredicate class]]) { - if (comparisonBlock) { - return comparisonBlock((NSComparisonPredicate *)predicate); - } else { - return predicate; - } - } - - [NSException raise:NSInternalInconsistencyException format:@"NSExpression predicates are not supported."]; - return nil; -} - -/*! - Returns a predicate that is the negation of the input predicate, or throws on error. - */ -+ (NSPredicate *)_negatePredicate:(NSPredicate *)predicate { - return [self _mapPredicate:predicate - compoundBlock:^NSPredicate *(NSCompoundPredicate *compound) { - switch (compound.compoundPredicateType) { - case NSNotPredicateType: { - return [compound.subpredicates objectAtIndex:0]; - } - case NSAndPredicateType: { - NSMutableArray *newSubpredicates = - [NSMutableArray arrayWithCapacity:compound.subpredicates.count]; - for (NSPredicate *subpredicate in compound.subpredicates) { - [newSubpredicates addObject:[self _negatePredicate:subpredicate]]; - } - return [NSCompoundPredicate orPredicateWithSubpredicates:newSubpredicates]; - } - case NSOrPredicateType: { - NSMutableArray *newSubpredicates = - [NSMutableArray arrayWithCapacity:compound.subpredicates.count]; - for (NSPredicate *subpredicate in compound.subpredicates) { - [newSubpredicates addObject:[self _negatePredicate:subpredicate]]; - } - return [NSCompoundPredicate andPredicateWithSubpredicates:newSubpredicates]; - } - default: { - [NSException raise:NSInternalInconsistencyException - format:@"This compound predicate cannot be negated. (%zd)", - compound.compoundPredicateType]; - return nil; - } - } - } comparisonBlock:^NSPredicate *(NSComparisonPredicate *comparison) { - NSPredicateOperatorType newType; - NSComparisonPredicateModifier newModifier = comparison.comparisonPredicateModifier; - SEL customSelector; - - switch (comparison.predicateOperatorType) { - case NSEqualToPredicateOperatorType: { - newType = NSNotEqualToPredicateOperatorType; - break; - } - case NSNotEqualToPredicateOperatorType: { - newType = NSEqualToPredicateOperatorType; - break; - } - case NSInPredicateOperatorType: { - newType = NSCustomSelectorPredicateOperatorType; - customSelector = NSSelectorFromString(@"notContainedIn:"); - break; - } - case NSLessThanPredicateOperatorType: { - newType = NSGreaterThanOrEqualToPredicateOperatorType; - break; - } - case NSLessThanOrEqualToPredicateOperatorType: { - newType = NSGreaterThanPredicateOperatorType; - break; - } - case NSGreaterThanPredicateOperatorType: { - newType = NSLessThanOrEqualToPredicateOperatorType; - break; - } - case NSGreaterThanOrEqualToPredicateOperatorType: { - newType = NSLessThanPredicateOperatorType; - break; - } - case NSBetweenPredicateOperatorType: { - [NSException raise:NSInternalInconsistencyException - format:@"A BETWEEN predicate was found after they should have been removed."]; - } - case NSMatchesPredicateOperatorType: - case NSLikePredicateOperatorType: - case NSBeginsWithPredicateOperatorType: - case NSEndsWithPredicateOperatorType: - case NSContainsPredicateOperatorType: - case NSCustomSelectorPredicateOperatorType: - default: { - [NSException raise:NSInternalInconsistencyException - format:@"This comparison predicate cannot be negated. (%@)", comparison]; - return nil; - } - } - - if (newType == NSCustomSelectorPredicateOperatorType) { - return [NSComparisonPredicate predicateWithLeftExpression:comparison.leftExpression - rightExpression:comparison.rightExpression - customSelector:customSelector]; - } else { - return [NSComparisonPredicate predicateWithLeftExpression:comparison.leftExpression - rightExpression:comparison.rightExpression - modifier:newModifier - type:newType - options:comparison.options]; - } - }]; -} - -/*! - Returns a version of the given predicate that contains no NSNotPredicateType compound predicates. - This greatly simplifies the diversity of predicates we have to handle later in the pipeline. - */ -+ (NSPredicate *)removeNegation:(NSPredicate *)predicate { - return [self _mapPredicate:predicate - compoundBlock:^NSPredicate *(NSCompoundPredicate *compound) { - // Remove negation from any subpredicates. - NSMutableArray *newSubpredicates = - [NSMutableArray arrayWithCapacity:compound.subpredicates.count]; - for (NSPredicate *subPredicate in [compound subpredicates]) { - [newSubpredicates addObject:[self removeNegation:subPredicate]]; - } - - // If this is a NOT predicate, return the negation of the subpredicate. - // Otherwise, just pass it on. - if (compound.compoundPredicateType == NSNotPredicateType) { - return [self _negatePredicate:[newSubpredicates objectAtIndex:0]]; - } else { - return [[NSCompoundPredicate alloc] initWithType:compound.compoundPredicateType - subpredicates:newSubpredicates]; - } - } comparisonBlock:nil]; -} - -/*! - Returns a version of the given predicate that contains no NSBetweenPredicateOperatorType predicates. - (A BETWEEN {C, D}) gets converted to (A >= C AND A <= D). - */ -+ (NSPredicate *)removeBetween:(NSPredicate *)predicate { - return [self _mapPredicate:predicate - compoundBlock:nil - comparisonBlock:^NSPredicate *(NSComparisonPredicate *predicate) { - if ([predicate predicateOperatorType] == NSBetweenPredicateOperatorType) { - NSComparisonPredicate *between = (NSComparisonPredicate *)predicate; - NSExpression *rhs = between.rightExpression; - - PFConsistencyAssert(rhs.expressionType == NSConstantValueExpressionType || - rhs.expressionType == NSAggregateExpressionType, - @"The right-hand side of a BETWEEN operation must be a value or literal."); - - PFConsistencyAssert([rhs.constantValue isKindOfClass:[NSArray class]], - @"The right-hand side of a BETWEEN operation must be an array."); - - NSArray *array = rhs.constantValue; - PFConsistencyAssert(array.count == 2, @"The right-hand side of a BETWEEN operation must have 2 items."); - - id minValue = array[0]; - id maxValue = array[1]; - - NSExpression *minExpression = ([minValue isKindOfClass:[NSExpression class]] - ? minValue - : [NSExpression expressionForConstantValue:minValue]); - NSExpression *maxExpression = ([maxValue isKindOfClass:[NSExpression class]] - ? maxValue - : [NSExpression expressionForConstantValue:maxValue]); - - return [NSCompoundPredicate andPredicateWithSubpredicates: - @[ [NSComparisonPredicate predicateWithLeftExpression:between.leftExpression - rightExpression:minExpression - modifier:between.comparisonPredicateModifier - type:NSGreaterThanOrEqualToPredicateOperatorType - options:between.options], - [NSComparisonPredicate predicateWithLeftExpression:between.leftExpression - rightExpression:maxExpression - modifier:between.comparisonPredicateModifier - type:NSLessThanOrEqualToPredicateOperatorType - options:between.options] - ]]; - } - return predicate; - }]; -} - -/*! - Returns a version of the given predicate that contains no Yoda conditions. - A Yoda condition is one where there's a constant on the LHS, such as (3 <= X). - The predicate returned by this method will instead have (X >= 3). - */ -+ (NSPredicate *)reverseYodaConditions:(NSPredicate *)predicate { - return [self _mapPredicate:predicate - compoundBlock:nil - comparisonBlock:^NSPredicate *(NSComparisonPredicate *comparison) { - if (comparison.leftExpression.expressionType == NSConstantValueExpressionType && - comparison.rightExpression.expressionType == NSKeyPathExpressionType) { - // This is a Yoda condition. - NSPredicateOperatorType newType; - switch ([comparison predicateOperatorType]) { - case NSEqualToPredicateOperatorType: { - newType = NSEqualToPredicateOperatorType; - break; - } - case NSNotEqualToPredicateOperatorType: { - newType = NSNotEqualToPredicateOperatorType; - break; - } - case NSLessThanPredicateOperatorType: { - newType = NSGreaterThanPredicateOperatorType; - break; - } - case NSLessThanOrEqualToPredicateOperatorType: { - newType = NSGreaterThanOrEqualToPredicateOperatorType; - break; - } - case NSGreaterThanPredicateOperatorType: { - newType = NSLessThanPredicateOperatorType; - break; - } - case NSGreaterThanOrEqualToPredicateOperatorType: { - newType = NSLessThanOrEqualToPredicateOperatorType; - break; - } - case NSInPredicateOperatorType: { - // This is like "5 IN X" where X is an array. - // Mongo handles this with syntax like "X = 5". - newType = NSEqualToPredicateOperatorType; - break; - } - case NSContainsPredicateOperatorType: - case NSMatchesPredicateOperatorType: - case NSLikePredicateOperatorType: - case NSBeginsWithPredicateOperatorType: - case NSEndsWithPredicateOperatorType: - case NSCustomSelectorPredicateOperatorType: - case NSBetweenPredicateOperatorType: - default: { - // We don't know how to reverse this Yoda condition, but maybe that's okay. - return predicate; - } - } - return [NSComparisonPredicate predicateWithLeftExpression:comparison.rightExpression - rightExpression:comparison.leftExpression - modifier:comparison.comparisonPredicateModifier - type:newType - options:comparison.options]; - } - return comparison; - }]; -} - -/*! - Returns a version of the given predicate converted to disjunctive normal form (DNF). - Unlike normalizeToDNF:error:, this method only accepts compound predicates, and assumes that - removeNegation:error: has already been applied to the given predicate. - */ -+ (NSPredicate *)asOrOfAnds:(NSCompoundPredicate *)compound { - // Convert the sub-predicates to DNF. - NSMutableArray *dnfSubpredicates = [NSMutableArray arrayWithCapacity:compound.subpredicates.count]; - for (NSPredicate *subpredicate in compound.subpredicates) { - if ([subpredicate isKindOfClass:[NSCompoundPredicate class]]) { - [dnfSubpredicates addObject:[self asOrOfAnds:(NSCompoundPredicate *)subpredicate]]; - } else { - [dnfSubpredicates addObject:subpredicate]; - } - } - - if (compound.compoundPredicateType == NSOrPredicateType) { - // We just need to flatten any child ORs into this OR. - NSMutableArray *newSubpredicates = [NSMutableArray arrayWithCapacity:dnfSubpredicates.count]; - for (NSPredicate *subpredicate in dnfSubpredicates) { - if ([subpredicate isKindOfClass:[NSCompoundPredicate class]] && - ((NSCompoundPredicate *)subpredicate).compoundPredicateType == NSOrPredicateType) { - for (NSPredicate *grandchild in ((NSCompoundPredicate *)subpredicate).subpredicates) { - [newSubpredicates addObject:grandchild]; - } - } else { - [newSubpredicates addObject:subpredicate]; - } - } - // There's no reason to wrap a single predicate in an OR. - if (newSubpredicates.count == 1) { - return newSubpredicates.lastObject; - } - return [NSCompoundPredicate orPredicateWithSubpredicates:newSubpredicates]; - } - - if (compound.compoundPredicateType == NSAndPredicateType) { - // This is tough. We need to take the cross product of all the subpredicates. - NSMutableArray *disjunction = [NSMutableArray arrayWithObject:@[]]; - for (NSPredicate *subpredicate in dnfSubpredicates) { - NSMutableArray *newDisjunction = [NSMutableArray array]; - if ([subpredicate isKindOfClass:[NSCompoundPredicate class]]) { - NSCompoundPredicate *subcompound = (NSCompoundPredicate *)subpredicate; - if (subcompound.compoundPredicateType == NSOrPredicateType) { - // We have to add every item in the OR to every AND list we have. - for (NSArray *conjunction in disjunction) { - for (NSPredicate *grandchild in subcompound.subpredicates) { - [newDisjunction addObject:[conjunction arrayByAddingObject:grandchild]]; - } - } - - } else if (subcompound.compoundPredicateType == NSAndPredicateType) { - // Just add all these conditions to all the conjunctions in progress. - for (NSArray *conjunction in disjunction) { - NSArray *grandchildren = subcompound.subpredicates; - [newDisjunction addObject:[conjunction arrayByAddingObjectsFromArray:grandchildren]]; - } - - } else { - [NSException raise:NSInternalInconsistencyException - format:@"[PFQuery asOrOfAnds:] found a compound query that wasn't OR or AND."]; - } - } else { - // Just add this condition to all the conjunctions in progress. - for (NSArray *conjunction in disjunction) { - [newDisjunction addObject:[conjunction arrayByAddingObject:subpredicate]]; - } - } - disjunction = newDisjunction; - } - - // Now disjunction contains an OR of ANDs. We just need to convert it to NSPredicates. - NSMutableArray *andPredicates = [NSMutableArray arrayWithCapacity:disjunction.count]; - for (NSArray *conjunction in disjunction) { - if (conjunction.count > 0) { - if (conjunction.count == 1) { - [andPredicates addObject:conjunction.lastObject]; - } else { - [andPredicates addObject:[NSCompoundPredicate - andPredicateWithSubpredicates:conjunction]]; - } - } - } - if (andPredicates.count == 1) { - return andPredicates.lastObject; - } else { - return [NSCompoundPredicate orPredicateWithSubpredicates:andPredicates]; - } - } - - [NSException raise:NSInternalInconsistencyException - format:@"[PFQuery asOrOfAnds:] was passed a compound query that wasn't OR or AND."]; - - return nil; -} - -/*! - Throws an exception if any comparison predicate inside this predicate has any modifiers, such as ANY, EVERY, etc. - */ -+ (void)assertNoPredicateModifiers:(NSPredicate *)predicate { - [self _mapPredicate:predicate - compoundBlock:nil - comparisonBlock:^NSPredicate *(NSComparisonPredicate *comparison) { - PFConsistencyAssert(comparison.comparisonPredicateModifier == NSDirectPredicateModifier, - @"Unsupported comparison predicate modifier %zd.", - comparison.comparisonPredicateModifier); - return comparison; - }]; -} - -/*! - Returns a version of the given predicate converted to disjunctive normal form (DNF), - known colloqially as an "or of ands", the only form of query that PFQuery accepts. - */ -+ (NSPredicate *)_normalizeToDNF:(NSPredicate *)predicate { - // Make sure they didn't use ANY, EVERY, etc. - [self assertNoPredicateModifiers:predicate]; - - // Change any BETWEEN operators to a conjunction. - predicate = [self removeBetween:predicate]; - - // Change any backwards (3 <= X) to the standardized (X >= 3). - predicate = [self reverseYodaConditions:predicate]; - - // Push any negation into the leaves. - predicate = [self removeNegation:predicate]; - - // Any comparison predicate is trivially DNF. - if (![predicate isKindOfClass:[NSCompoundPredicate class]]) { - return predicate; - } - - // It must be a compound predicate. Convert it to an OR of ANDs. - return [self asOrOfAnds:(NSCompoundPredicate *)predicate]; -} - -/*! - Takes a predicate like ((A AND B) OR (A AND C)) and rewrites it as the more efficient (A AND (B OR C)). - Assumes the input predicate is already in DNF. - // TODO: (nlutsenko): Move this logic into the server and remove it from here. - */ -+ (NSPredicate *)_hoistCommonPredicates:(NSPredicate *)predicate { - // This only makes sense for queries with a top-level OR. - if (!([predicate isKindOfClass:[NSCompoundPredicate class]] && - ((NSCompoundPredicate *)predicate).compoundPredicateType == NSOrPredicateType)) { - return predicate; - } - - // Find the set of predicates that are included in every branch of this OR. - NSArray *andPredicates = ((NSCompoundPredicate *)predicate).subpredicates; - NSMutableSet *common = nil; - for (NSPredicate *andPredicate in andPredicates) { - NSMutableSet *comparisonPredicates = nil; - if ([andPredicate isKindOfClass:[NSComparisonPredicate class]]) { - comparisonPredicates = [NSMutableSet setWithObject:andPredicate]; - } else { - comparisonPredicates = - [NSMutableSet setWithArray:((NSCompoundPredicate *)andPredicate).subpredicates]; - } - - if (!common) { - common = comparisonPredicates; - } else { - [common intersectSet:comparisonPredicates]; - } - } - - if (!common.count) { - return predicate; - } - - NSMutableArray *newAndPredicates = [NSMutableArray array]; - - // Okay, there were common sub-predicates. Hoist them up to this one. - for (NSPredicate *andPredicate in andPredicates) { - NSMutableSet *comparisonPredicates = nil; - if ([andPredicate isKindOfClass:[NSComparisonPredicate class]]) { - comparisonPredicates = [NSMutableSet setWithObject:andPredicate]; - } else { - comparisonPredicates = - [NSMutableSet setWithArray:((NSCompoundPredicate *)andPredicate).subpredicates]; - } - - for (NSPredicate *comparisonPredicate in common) { - [comparisonPredicates removeObject:comparisonPredicate]; - } - - if (comparisonPredicates.count == 0) { - // One of the OR predicates reduces to TRUE, so just return the hoisted part. - return [NSCompoundPredicate andPredicateWithSubpredicates:common.allObjects]; - } else if (comparisonPredicates.count == 1) { - [newAndPredicates addObject:comparisonPredicates.allObjects.lastObject]; - } else { - NSPredicate *newAndPredicate = - [NSCompoundPredicate andPredicateWithSubpredicates:comparisonPredicates.allObjects]; - [newAndPredicates addObject:newAndPredicate]; - } - } - - // Make an AND of the hoisted predicates and the OR of the modified subpredicates. - NSPredicate *newOrPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:newAndPredicates]; - NSArray *newPredicates = [@[ newOrPredicate ] arrayByAddingObjectsFromArray:common.allObjects]; - return [NSCompoundPredicate andPredicateWithSubpredicates:newPredicates]; -} - -///-------------------------------------- -#pragma mark - Regex -///-------------------------------------- - -/*! - This is used to create a regex string to match the input string. By using Q and E flags to match, we can do this - without requiring super expensive rewrites, but me must be careful to escape existing \E flags in the input string. - By replacing it with `\E\\E\Q`, the regex engine will end the old literal block, put in the user's `\E` string, and - Begin another literal block. - */ -+ (NSString *)regexStringForString:(NSString *)string { - return [NSString stringWithFormat:@"\\Q%@\\E", [string stringByReplacingOccurrencesOfString:@"\\E" - withString:@"\\E\\\\E\\Q"]]; -} - -///-------------------------------------- -#pragma mark - Errors -///-------------------------------------- - -+ (NSError *)objectNotFoundError { - return [PFErrorUtilities errorWithCode:kPFErrorObjectNotFound message:@"No results matched the query."]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Relation/PFRelationPrivate.h b/FoodbLog/Pods/Parse/Parse/Internal/Relation/PFRelationPrivate.h deleted file mode 100644 index 26d26fd..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Relation/PFRelationPrivate.h +++ /dev/null @@ -1,27 +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. - */ - -#import - -#import - -@class PFDecoder; - -@interface PFRelation (Private) - -+ (PFRelation *)relationForObject:(PFObject *)parent forKey:(NSString *)key; -+ (PFRelation *)relationWithTargetClass:(NSString *)targetClass; -+ (PFRelation *)relationFromDictionary:(NSDictionary *)dictionary withDecoder:(PFDecoder *)decoder; -- (void)ensureParentIs:(PFObject *)someParent andKeyIs:(NSString *)someKey; -- (NSDictionary *)encodeIntoDictionary; -- (BOOL)_hasKnownObject:(PFObject *)object; -- (void)_addKnownObject:(PFObject *)object; -- (void)_removeKnownObject:(PFObject *)object; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFMutableRelationState.h b/FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFMutableRelationState.h deleted file mode 100644 index 3fd99ed..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFMutableRelationState.h +++ /dev/null @@ -1,19 +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. - */ - -#import "PFRelationState.h" - -@interface PFMutableRelationState : PFRelationState - -@property (nonatomic, weak, readwrite) PFObject *parent; -@property (nonatomic, copy, readwrite) NSString *targetClass; -@property (nonatomic, copy, readwrite) NSMutableSet *knownObjects; -@property (nonatomic, copy, readwrite) NSString *key; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFMutableRelationState.m b/FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFMutableRelationState.m deleted file mode 100644 index 6a92279..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFMutableRelationState.m +++ /dev/null @@ -1,62 +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. - */ - -#import "PFMutableRelationState.h" - -#import "PFObject.h" -#import "PFRelationState_Private.h" - -@implementation PFMutableRelationState - -@dynamic parent; -@dynamic parentObjectId; -@dynamic parentClassName; -@dynamic targetClass; -@dynamic knownObjects; -@dynamic key; - -///-------------------------------------- -#pragma mark - PFBaseStateSubclass -///-------------------------------------- - -+ (NSDictionary *)propertyAttributes { - NSMutableDictionary *parentAttributes = [[super propertyAttributes] mutableCopy]; - - parentAttributes[@"knownObjects"] = [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeMutableCopy]; - - return parentAttributes; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _knownObjects = [[NSMutableSet alloc] init]; - - return self; -} - -///-------------------------------------- -#pragma mark - Properties -///-------------------------------------- - -- (void)setParent:(PFObject *)parent { - if (_parent != parent || ![self.parentClassName isEqualToString:parent.parseClassName] || - ![self.parentObjectId isEqualToString:parent.objectId]) { - _parent = parent; - _parentClassName = [[parent parseClassName] copy]; - _parentObjectId = [[parent objectId] copy]; - } -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFRelationState.h b/FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFRelationState.h deleted file mode 100644 index 3ce8e80..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFRelationState.h +++ /dev/null @@ -1,30 +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. - */ - -#import "PFBaseState.h" - -@class PFObject; - -@interface PFRelationState : PFBaseState - -@property (nonatomic, weak, readonly) PFObject *parent; -@property (nonatomic, copy, readonly) NSString *parentClassName; -@property (nonatomic, copy, readonly) NSString *parentObjectId; -@property (nonatomic, copy, readonly) NSString *targetClass; -@property (nonatomic, copy, readonly) NSSet *knownObjects; -@property (nonatomic, copy, readonly) NSString *key; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithState:(PFRelationState *)otherState; -+ (instancetype)stateWithState:(PFRelationState *)otherState; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFRelationState.m b/FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFRelationState.m deleted file mode 100644 index bdf36c6..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFRelationState.m +++ /dev/null @@ -1,65 +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. - */ - -#import "PFRelationState.h" -#import "PFRelationState_Private.h" - -#import "PFMutableRelationState.h" - -@implementation PFRelationState - -///-------------------------------------- -#pragma mark - PFBaseStateSubclass -///-------------------------------------- - -+ (NSDictionary *)propertyAttributes { - return @{ - @"parent": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeWeak], - @"parentClassName": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], - @"parentObjectId": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], - @"targetClass": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], - @"knownObjects": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], - @"key": [PFPropertyAttributes attributesWithAssociationType:PFPropertyInfoAssociationTypeCopy], - }; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _knownObjects = [[NSSet alloc] init]; - - return self; -} - -- (instancetype)initWithState:(PFRelationState *)otherState { - return [super initWithState:otherState]; -} - -+ (instancetype)stateWithState:(PFRelationState *)otherState { - return [super stateWithState:otherState]; -} - -///-------------------------------------- -#pragma mark - Copying -///-------------------------------------- - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[PFRelationState allocWithZone:zone] initWithState:self]; -} - -- (instancetype)mutableCopyWithZone:(NSZone *)zone { - return [[PFMutableRelationState allocWithZone:zone] initWithState:self]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFRelationState_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFRelationState_Private.h deleted file mode 100644 index bf13b9e..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Relation/State/PFRelationState_Private.h +++ /dev/null @@ -1,28 +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. - */ - -#import "PFRelationState.h" - -@interface PFRelationState() { -@protected - __weak PFObject *_parent; - NSString *_parentClassName; - NSString *_parentObjectId; - NSSet *_knownObjects; - NSString *_key; -} - -@property (nonatomic, weak, readwrite) PFObject *parent; -@property (nonatomic, copy, readwrite) NSString *parentClassName; -@property (nonatomic, copy, readwrite) NSString *parentObjectId; -@property (nonatomic, copy, readwrite) NSString *targetClass; -@property (nonatomic, copy, readwrite) NSSet *knownObjects; -@property (nonatomic, copy, readwrite) NSString *key; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Session/Controller/PFSessionController.h b/FoodbLog/Pods/Parse/Parse/Internal/Session/Controller/PFSessionController.h deleted file mode 100644 index 83d06e4..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Session/Controller/PFSessionController.h +++ /dev/null @@ -1,40 +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. - */ - -#import - -#import - -#import "PFDataProvider.h" - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFSession; - -NS_ASSUME_NONNULL_BEGIN - -@interface PFSessionController : NSObject - -@property (nonatomic, weak, readonly) id dataSource; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)initWithDataSource:(id)dataSource; -+ (instancetype)controllerWithDataSource:(id)dataSource; - -///-------------------------------------- -/// @name Current Session -///-------------------------------------- - -- (BFTask *)getCurrentSessionAsyncWithSessionToken:(nullable NSString *)sessionToken; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Session/Controller/PFSessionController.m b/FoodbLog/Pods/Parse/Parse/Internal/Session/Controller/PFSessionController.m deleted file mode 100644 index 7abe535..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Session/Controller/PFSessionController.m +++ /dev/null @@ -1,60 +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. - */ - -#import "PFSessionController.h" - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFCommandResult.h" -#import "PFCommandRunning.h" -#import "PFObjectPrivate.h" -#import "PFRESTSessionCommand.h" -#import "PFSession.h" - -@implementation PFSessionController - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithDataSource:(id)dataSource { - self = [super init]; - if (!self) return nil; - - _dataSource = dataSource; - - return self; -} - -+ (instancetype)controllerWithDataSource:(id)dataSource { - return [[self alloc] initWithDataSource:dataSource]; -} - -///-------------------------------------- -#pragma mark - Current Session -///-------------------------------------- - -- (BFTask *)getCurrentSessionAsyncWithSessionToken:(NSString *)sessionToken { - @weakify(self); - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - PFRESTCommand *command = [PFRESTSessionCommand getCurrentSessionCommandWithSessionToken:sessionToken]; - return [self.dataSource.commandRunner runCommandAsync:command - withOptions:PFCommandRunningOptionRetryIfFailed]; - }] continueWithSuccessBlock:^id(BFTask *task) { - PFCommandResult *result = task.result; - NSDictionary *dictionary = result.result; - PFSession *session = [PFSession _objectFromDictionary:dictionary - defaultClassName:[PFSession parseClassName] - completeData:YES]; - return session; - }]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Session/PFSession_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/Session/PFSession_Private.h deleted file mode 100644 index b647585..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Session/PFSession_Private.h +++ /dev/null @@ -1,24 +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. - */ - -#import - -#import - -@class PFSessionController; - -@interface PFSession () - -///-------------------------------------- -/// @name Session Controller -///-------------------------------------- - -+ (PFSessionController *)sessionController; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Session/Utilities/PFSessionUtilities.h b/FoodbLog/Pods/Parse/Parse/Internal/Session/Utilities/PFSessionUtilities.h deleted file mode 100644 index 806d7da..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Session/Utilities/PFSessionUtilities.h +++ /dev/null @@ -1,24 +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. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface PFSessionUtilities : NSObject - -///-------------------------------------- -/// @name Session Token -///-------------------------------------- - -+ (BOOL)isSessionTokenRevocable:(nullable NSString *)sessionToken; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/Session/Utilities/PFSessionUtilities.m b/FoodbLog/Pods/Parse/Parse/Internal/Session/Utilities/PFSessionUtilities.m deleted file mode 100644 index 4dff476..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/Session/Utilities/PFSessionUtilities.m +++ /dev/null @@ -1,22 +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. - */ - -#import "PFSessionUtilities.h" - -@implementation PFSessionUtilities - -///-------------------------------------- -#pragma mark - Session Token -///-------------------------------------- - -+ (BOOL)isSessionTokenRevocable:(NSString *)sessionToken { - return (sessionToken && [sessionToken rangeOfString:@"r:"].location != NSNotFound); -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/ThreadSafety/PFThreadsafety.h b/FoodbLog/Pods/Parse/Parse/Internal/ThreadSafety/PFThreadsafety.h deleted file mode 100644 index 7ca2a64..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/ThreadSafety/PFThreadsafety.h +++ /dev/null @@ -1,13 +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. - */ - -#import - -extern dispatch_queue_t PFThreadsafetyCreateQueueForObject(id object); -extern void PFThreadsafetySafeDispatchSync(dispatch_queue_t queue, dispatch_block_t block); diff --git a/FoodbLog/Pods/Parse/Parse/Internal/ThreadSafety/PFThreadsafety.m b/FoodbLog/Pods/Parse/Parse/Internal/ThreadSafety/PFThreadsafety.m deleted file mode 100644 index e78f547..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/ThreadSafety/PFThreadsafety.m +++ /dev/null @@ -1,33 +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. - */ - -#import "PFThreadsafety.h" - -static void *const PFThreadsafetyQueueIDKey = (void *)&PFThreadsafetyQueueIDKey; - -dispatch_queue_t PFThreadsafetyCreateQueueForObject(id object) { - NSString *label = [NSStringFromClass([object class]) stringByAppendingString:@".synchronizationQueue"]; - dispatch_queue_t queue = dispatch_queue_create([label UTF8String], DISPATCH_QUEUE_SERIAL); - - void *uuid = calloc(1, sizeof(uuid)); - dispatch_queue_set_specific(queue, PFThreadsafetyQueueIDKey, uuid, free); - - return queue; -} - -void PFThreadsafetySafeDispatchSync(dispatch_queue_t queue, dispatch_block_t block) { - void *uuidMine = dispatch_get_specific(PFThreadsafetyQueueIDKey); - void *uuidOther = dispatch_queue_get_specific(queue, PFThreadsafetyQueueIDKey); - - if (uuidMine == uuidOther) { - block(); - } else { - dispatch_sync(queue, block); - } -} diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h b/FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h deleted file mode 100644 index 746c247..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h +++ /dev/null @@ -1,61 +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. - */ - -#import - -#import -#import - -#import "PFCoreDataProvider.h" - -NS_ASSUME_NONNULL_BEGIN - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFUser; - -@interface PFUserAuthenticationController : NSObject - -@property (nonatomic, weak, readonly) id dataSource; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -- (instancetype)initWithDataSource:(id)dataSource; -+ (instancetype)controllerWithDataSource:(id)dataSource; - -///-------------------------------------- -/// @name Authentication Providers -///-------------------------------------- - -- (void)registerAuthenticationDelegate:(id)delegate forAuthType:(NSString *)authType; -- (void)unregisterAuthenticationDelegateForAuthType:(NSString *)authType; - -- (id)authenticationDelegateForAuthType:(NSString *)authType; - -///-------------------------------------- -/// @name Authentication -///-------------------------------------- - -- (BFTask PF_GENERIC(NSNumber *) *)restoreAuthenticationAsyncWithAuthData:(nullable NSDictionary *)authData - forAuthType:(NSString *)authType; -- (BFTask PF_GENERIC(NSNumber *) *)deauthenticateAsyncWithAuthType:(NSString *)authType; - -///-------------------------------------- -/// @name Log In -///-------------------------------------- - -- (BFTask *)logInUserAsyncWithAuthType:(NSString *)authType authData:(NSDictionary *)authData; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m b/FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m deleted file mode 100644 index 2f50838..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m +++ /dev/null @@ -1,171 +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. - */ - -#import "PFUserAuthenticationController.h" - -#import "BFTask+Private.h" -#import "PFMacros.h" -#import "PFUserPrivate.h" -#import "PFObjectPrivate.h" -#import "PFAnonymousUtils.h" -#import "PFAnonymousAuthenticationProvider.h" -#import "PFUserController.h" -#import "PFCurrentUserController.h" -#import "PFAssert.h" - -@interface PFUserAuthenticationController () { - dispatch_queue_t _dataAccessQueue; - NSMutableDictionary PF_GENERIC(NSString *, id) *_authenticationDelegates; -} - -@end - -@implementation PFUserAuthenticationController - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithDataSource:(id)dataSource { - self = [super init]; - if (!self) return nil; - - _dataSource = dataSource; - _dataAccessQueue = dispatch_queue_create("com.parse.user.authenticationManager", DISPATCH_QUEUE_SERIAL); - _authenticationDelegates = [NSMutableDictionary dictionary]; - - return self; -} - -+ (instancetype)controllerWithDataSource:(id)dataSource { - return [[self alloc] initWithDataSource:dataSource]; -} - -///-------------------------------------- -#pragma mark - Authentication Providers -///-------------------------------------- - -- (void)registerAuthenticationDelegate:(id)delegate forAuthType:(NSString *)authType { - PFParameterAssert(delegate, @"Authentication delegate can't be `nil`."); - PFParameterAssert(authType, @"`authType` can't be `nil`."); - PFConsistencyAssert(![self authenticationDelegateForAuthType:authType], - @"Authentication delegate already registered for authType `%@`.", authType); - - dispatch_sync(_dataAccessQueue, ^{ - _authenticationDelegates[authType] = delegate; - }); - - // TODO: (nlutsenko) Decouple this further. - [[self.dataSource.currentUserController getCurrentUserAsyncWithOptions:0] continueWithSuccessBlock:^id(BFTask *task) { - PFUser *user = task.result; - [user synchronizeAuthDataWithAuthType:authType]; - return nil; - }]; -} - -- (void)unregisterAuthenticationDelegateForAuthType:(NSString *)authType { - if (!authType) { - return; - } - dispatch_sync(_dataAccessQueue, ^{ - [_authenticationDelegates removeObjectForKey:authType]; - }); -} - -- (id)authenticationDelegateForAuthType:(NSString *)authType { - if (!authType) { - return nil; - } - - __block id delegate = nil; - dispatch_sync(_dataAccessQueue, ^{ - delegate = _authenticationDelegates[authType]; - }); - return delegate; -} - -///-------------------------------------- -#pragma mark - Authentication -///-------------------------------------- - -- (BFTask PF_GENERIC(NSNumber *)*)restoreAuthenticationAsyncWithAuthData:(nullable NSDictionary *)authData - forAuthType:(NSString *)authType { - id provider = [self authenticationDelegateForAuthType:authType]; - if (!provider) { - return [BFTask taskWithResult:@YES]; - } - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id { - return [BFTask taskWithResult:@([provider restoreAuthenticationWithAuthData:authData])]; - }]; -} - -- (BFTask PF_GENERIC(NSNumber *)*)deauthenticateAsyncWithAuthType:(NSString *)authType { - return [self restoreAuthenticationAsyncWithAuthData:nil forAuthType:authType]; -} - -///-------------------------------------- -#pragma mark - Log In -///-------------------------------------- - -- (BFTask *)logInUserAsyncWithAuthType:(NSString *)authType authData:(NSDictionary *)authData { - //TODO: (nlutsenko) Make it fully async. - //TODO: (nlutsenko) Inject `PFUserController` here. - PFUser *currentUser = [PFUser currentUser]; - if (currentUser && [PFAnonymousUtils isLinkedWithUser:currentUser]) { - if ([currentUser isLazy]) { - PFUser *user = currentUser; - BFTask *resolveLaziness = nil; - NSDictionary *oldAnonymousData = nil; - @synchronized(user.lock) { - oldAnonymousData = user.authData[PFAnonymousUserAuthenticationType]; - - // Replace any anonymity with the new linked authData - [user stripAnonymity]; - - [user.authData setObject:authData forKey:authType]; - [user.linkedServiceNames addObject:authType]; - - resolveLaziness = [user resolveLazinessAsync:[BFTask taskWithResult:nil]]; - } - - return [resolveLaziness continueAsyncWithBlock:^id(BFTask *task) { - if (task.isCancelled || task.exception || task.error) { - [user.authData removeObjectForKey:authType]; - [user.linkedServiceNames removeObject:authType]; - [user restoreAnonymity:oldAnonymousData]; - return task; - } - return task.result; - }]; - } else { - return [[currentUser linkWithAuthTypeInBackground:authType - authData:authData] continueAsyncWithBlock:^id(BFTask *task) { - NSError *error = task.error; - if (error) { - if (error.code == kPFErrorAccountAlreadyLinked) { - // An account that's linked to the given authData already exists, - // so log in instead of trying to claim. - return [[PFUser userController] logInCurrentUserAsyncWithAuthType:authType - authData:authData - revocableSession:[PFUser _isRevocableSessionEnabled]]; - } else { - return task; - } - } - - return [BFTask taskWithResult:currentUser]; - }]; - } - } - return [[PFUser userController] logInCurrentUserAsyncWithAuthType:authType - authData:authData - revocableSession:[PFUser _isRevocableSessionEnabled]]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h b/FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h deleted file mode 100644 index d906dd1..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h +++ /dev/null @@ -1,27 +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. - */ - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -extern NSString *const PFAnonymousUserAuthenticationType; - -@interface PFAnonymousAuthenticationProvider : NSObject - -/*! - Gets auth data with a fresh UUID. - */ -@property (nonatomic, copy, readonly) NSDictionary *authData; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m b/FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m deleted file mode 100644 index e338151..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m +++ /dev/null @@ -1,36 +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. - */ - -#import "PFAnonymousAuthenticationProvider.h" - -#import - -NSString *const PFAnonymousUserAuthenticationType = @"anonymous"; - -@implementation PFAnonymousAuthenticationProvider - -///-------------------------------------- -#pragma mark - PFAnonymousAuthenticationProvider -///-------------------------------------- - -- (BOOL)restoreAuthenticationWithAuthData:(NSDictionary *)authData { - return YES; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (NSDictionary *)authData { - NSString *uuidString = [NSUUID UUID].UUIDString; - uuidString = [uuidString lowercaseString]; - return @{ @"id" : uuidString }; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h deleted file mode 100644 index 6d966f3..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h +++ /dev/null @@ -1,22 +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. - */ - -#import - -@class PFAnonymousAuthenticationProvider; -@class PFUser; - -@interface PFAnonymousUtils (Private) - -+ (PFAnonymousAuthenticationProvider *)_authenticationProvider; -+ (void)_clearAuthenticationProvider; - -+ (PFUser *)_lazyLogIn; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h b/FoodbLog/Pods/Parse/Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h deleted file mode 100644 index 4ccbf77..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h +++ /dev/null @@ -1,18 +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. - */ - -#import "PFObjectFileCodingLogic.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFUserFileCodingLogic : PFObjectFileCodingLogic - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m b/FoodbLog/Pods/Parse/Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m deleted file mode 100644 index d459bc2..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m +++ /dev/null @@ -1,60 +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. - */ - -#import "PFUserFileCodingLogic.h" - -#import "PFDecoder.h" -#import "PFMutableUserState.h" -#import "PFObjectPrivate.h" -#import "PFUserConstants.h" -#import "PFUserPrivate.h" - -@interface PFUserFileCodingLogic () - -@end - -@implementation PFUserFileCodingLogic - -///-------------------------------------- -#pragma mark - Coding -///-------------------------------------- - -- (void)updateObject:(PFObject *)object fromDictionary:(NSDictionary *)dictionary usingDecoder:(PFDecoder *)decoder { - PFUser *user = (PFUser *)object; - - NSString *newSessionToken = dictionary[@"session_token"] ?: dictionary[PFUserSessionTokenRESTKey]; - if (newSessionToken) { - PFMutableUserState *state = [user._state mutableCopy]; - state.sessionToken = newSessionToken; - user._state = state; - } - - // Merge the linked service metadata - NSDictionary *newAuthData = dictionary[@"auth_data"] ?: dictionary[PFUserAuthDataRESTKey]; - newAuthData = [decoder decodeObject:newAuthData]; - if (newAuthData) { - [user.authData removeAllObjects]; - [user.linkedServiceNames removeAllObjects]; - [newAuthData enumerateKeysAndObjectsUsingBlock:^(id key, id linkData, BOOL *stop) { - if (linkData != [NSNull null]) { - user.authData[key] = linkData; - [user.linkedServiceNames addObject:key]; - [user synchronizeAuthDataWithAuthType:key]; - } else { - [user.authData removeObjectForKey:key]; - [user.linkedServiceNames removeObject:key]; - [user synchronizeAuthDataWithAuthType:key]; - } - }]; - } - - [super updateObject:user fromDictionary:dictionary usingDecoder:decoder]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/Constants/PFUserConstants.h b/FoodbLog/Pods/Parse/Parse/Internal/User/Constants/PFUserConstants.h deleted file mode 100644 index f8da41e..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/Constants/PFUserConstants.h +++ /dev/null @@ -1,15 +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. - */ - -#import - -extern NSString *const PFUserUsernameRESTKey; -extern NSString *const PFUserPasswordRESTKey; -extern NSString *const PFUserSessionTokenRESTKey; -extern NSString *const PFUserAuthDataRESTKey; diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/Constants/PFUserConstants.m b/FoodbLog/Pods/Parse/Parse/Internal/User/Constants/PFUserConstants.m deleted file mode 100644 index ecccaf1..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/Constants/PFUserConstants.m +++ /dev/null @@ -1,15 +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. - */ - -#import "PFUserConstants.h" - -NSString *const PFUserUsernameRESTKey = @"username"; -NSString *const PFUserPasswordRESTKey = @"password"; -NSString *const PFUserSessionTokenRESTKey = @"sessionToken"; -NSString *const PFUserAuthDataRESTKey = @"authData"; diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/Controller/PFUserController.h b/FoodbLog/Pods/Parse/Parse/Internal/User/Controller/PFUserController.h deleted file mode 100644 index 4ff2208..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/Controller/PFUserController.h +++ /dev/null @@ -1,61 +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. - */ - -#import - -#import "PFCoreDataProvider.h" -#import "PFDataProvider.h" -#import "PFObjectControlling.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface PFUserController : NSObject - -@property (nonatomic, weak, readonly) id commonDataSource; -@property (nonatomic, weak, readonly) id coreDataSource; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithCommonDataSource:(id)commonDataSource - coreDataSource:(id)coreDataSource; -+ (instancetype)controllerWithCommonDataSource:(id)commonDataSource - coreDataSource:(id)coreDataSource; - -///-------------------------------------- -/// @name Log In -///-------------------------------------- - -- (BFTask *)logInCurrentUserAsyncWithSessionToken:(NSString *)sessionToken; -- (BFTask *)logInCurrentUserAsyncWithUsername:(NSString *)username - password:(NSString *)password - revocableSession:(BOOL)revocableSession; - -//TODO: (nlutsenko) Move this method into PFUserAuthenticationController after PFUser is decoupled further. -- (BFTask *)logInCurrentUserAsyncWithAuthType:(NSString *)authType - authData:(NSDictionary *)authData - revocableSession:(BOOL)revocableSession; - -///-------------------------------------- -/// @name Reset Password -///-------------------------------------- - -- (BFTask *)requestPasswordResetAsyncForEmail:(NSString *)email; - -///-------------------------------------- -/// @name Log Out -///-------------------------------------- - -- (BFTask *)logOutUserAsyncWithSessionToken:(NSString *)sessionToken; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/Controller/PFUserController.m b/FoodbLog/Pods/Parse/Parse/Internal/User/Controller/PFUserController.m deleted file mode 100644 index cebeb52..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/Controller/PFUserController.m +++ /dev/null @@ -1,164 +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. - */ - -#import "PFUserController.h" - -#import "BFTask+Private.h" -#import "PFCommandResult.h" -#import "PFCommandRunning.h" -#import "PFCurrentUserController.h" -#import "PFErrorUtilities.h" -#import "PFMacros.h" -#import "PFObjectPrivate.h" -#import "PFRESTUserCommand.h" -#import "PFUserPrivate.h" - -@implementation PFUserController - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithCommonDataSource:(id)commonDataSource - coreDataSource:(id)coreDataSource { - self = [super init]; - if (!self) return nil; - - _commonDataSource = commonDataSource; - _coreDataSource = coreDataSource; - - return self; -} - -+ (instancetype)controllerWithCommonDataSource:(id)commonDataSource - coreDataSource:(id)coreDataSource { - return [[self alloc] initWithCommonDataSource:commonDataSource - coreDataSource:coreDataSource]; -} - -///-------------------------------------- -#pragma mark - Log In -///-------------------------------------- - -- (BFTask *)logInCurrentUserAsyncWithSessionToken:(NSString *)sessionToken { - @weakify(self); - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - PFRESTCommand *command = [PFRESTUserCommand getCurrentUserCommandWithSessionToken:sessionToken]; - return [self.commonDataSource.commandRunner runCommandAsync:command - withOptions:PFCommandRunningOptionRetryIfFailed]; - }] continueWithSuccessBlock:^id(BFTask *task) { - @strongify(self); - PFCommandResult *result = task.result; - NSDictionary *dictionary = result.result; - - // We test for a null object, if it isn't, we can use the response to create a PFUser. - if ([dictionary isKindOfClass:[NSNull class]] || !dictionary) { - return [BFTask taskWithError:[PFErrorUtilities errorWithCode:kPFErrorObjectNotFound - message:@"Invalid Session Token."]]; - } - - PFUser *user = [PFUser _objectFromDictionary:dictionary - defaultClassName:[PFUser parseClassName] - completeData:YES]; - // Serialize the object to disk so we can later access it via currentUser - PFCurrentUserController *controller = self.coreDataSource.currentUserController; - return [[controller saveCurrentObjectAsync:user] continueWithBlock:^id(BFTask *task) { - return user; - }]; - }]; -} - -- (BFTask *)logInCurrentUserAsyncWithUsername:(NSString *)username - password:(NSString *)password - revocableSession:(BOOL)revocableSession { - @weakify(self); - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - PFRESTCommand *command = [PFRESTUserCommand logInUserCommandWithUsername:username - password:password - revocableSession:revocableSession]; - return [self.commonDataSource.commandRunner runCommandAsync:command - withOptions:PFCommandRunningOptionRetryIfFailed]; - }] continueWithSuccessBlock:^id(BFTask *task) { - @strongify(self); - PFCommandResult *result = task.result; - NSDictionary *dictionary = result.result; - - // We test for a null object, if it isn't, we can use the response to create a PFUser. - if ([dictionary isKindOfClass:[NSNull class]] || !dictionary) { - return [BFTask taskWithError:[PFErrorUtilities errorWithCode:kPFErrorObjectNotFound - message:@"Invalid login credentials."]]; - } - - PFUser *user = [PFUser _objectFromDictionary:dictionary - defaultClassName:[PFUser parseClassName] - completeData:YES]; - - // Serialize the object to disk so we can later access it via currentUser - PFCurrentUserController *controller = self.coreDataSource.currentUserController; - return [[controller saveCurrentObjectAsync:user] continueWithBlock:^id(BFTask *task) { - return user; - }]; - }]; -} - -- (BFTask *)logInCurrentUserAsyncWithAuthType:(NSString *)authType - authData:(NSDictionary *)authData - revocableSession:(BOOL)revocableSession { - @weakify(self); - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - PFRESTCommand *command = [PFRESTUserCommand serviceLoginUserCommandWithAuthenticationType:authType - authenticationData:authData - revocableSession:revocableSession]; - return [self.commonDataSource.commandRunner runCommandAsync:command - withOptions:PFCommandRunningOptionRetryIfFailed]; - }] continueWithSuccessBlock:^id(BFTask *task) { - PFCommandResult *result = task.result; - PFUser *user = [PFUser _objectFromDictionary:result.result - defaultClassName:[PFUser parseClassName] - completeData:YES]; - @synchronized ([user lock]) { - user.authData[authType] = authData; - [user.linkedServiceNames addObject:authType]; - [user startSave]; - return [user _handleServiceLoginCommandResult:result]; - } - }]; -} - -///-------------------------------------- -#pragma mark - Reset Password -///-------------------------------------- - -- (BFTask *)requestPasswordResetAsyncForEmail:(NSString *)email { - @weakify(self); - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - PFRESTCommand *command = [PFRESTUserCommand resetPasswordCommandForUserWithEmail:email]; - return [self.commonDataSource.commandRunner runCommandAsync:command - withOptions:PFCommandRunningOptionRetryIfFailed]; - }] continueWithSuccessResult:nil]; -} - -///-------------------------------------- -#pragma mark - Log Out -///-------------------------------------- - -- (BFTask *)logOutUserAsyncWithSessionToken:(NSString *)sessionToken { - @weakify(self); - return [[BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @strongify(self); - PFRESTCommand *command = [PFRESTUserCommand logOutUserCommandWithSessionToken:sessionToken]; - return [self.commonDataSource.commandRunner runCommandAsync:command - withOptions:PFCommandRunningOptionRetryIfFailed]; - }] continueWithSuccessResult:nil]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/CurrentUserController/PFCurrentUserController.h b/FoodbLog/Pods/Parse/Parse/Internal/User/CurrentUserController/PFCurrentUserController.h deleted file mode 100644 index 15b8e99..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/CurrentUserController/PFCurrentUserController.h +++ /dev/null @@ -1,59 +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. - */ - -#import - -#import - -#import "PFCoreDataProvider.h" -#import "PFCurrentObjectControlling.h" -#import "PFDataProvider.h" -#import "PFMacros.h" - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFUser; - -typedef NS_OPTIONS(NSUInteger, PFCurrentUserLoadingOptions) { - PFCurrentUserLoadingOptionCreateLazyIfNotAvailable = 1 << 0, -}; - -@interface PFCurrentUserController : NSObject - -@property (nonatomic, weak, readonly) id commonDataSource; -@property (nonatomic, weak, readonly) id coreDataSource; - -@property (atomic, assign) BOOL automaticUsersEnabled; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithStorageType:(PFCurrentObjectStorageType)storageType - commonDataSource:(id)commonDataSource - coreDataSource:(id)coreDataSource NS_DESIGNATED_INITIALIZER; -+ (instancetype)controllerWithStorageType:(PFCurrentObjectStorageType)storageType - commonDataSource:(id)commonDataSource - coreDataSource:(id)coreDataSource; - -///-------------------------------------- -/// @name User -///-------------------------------------- - -- (BFTask *)getCurrentUserAsyncWithOptions:(PFCurrentUserLoadingOptions)options; - -- (BFTask *)logOutCurrentUserAsync; - -///-------------------------------------- -/// @name Session Token -///-------------------------------------- - -- (BFTask *)getCurrentUserSessionTokenAsync; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/CurrentUserController/PFCurrentUserController.m b/FoodbLog/Pods/Parse/Parse/Internal/User/CurrentUserController/PFCurrentUserController.m deleted file mode 100644 index 098b4e6..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/CurrentUserController/PFCurrentUserController.m +++ /dev/null @@ -1,364 +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. - */ - -#import "PFCurrentUserController.h" - -#import - -#import "BFTask+Private.h" -#import "PFAnonymousUtils_Private.h" -#import "PFAssert.h" -#import "PFAsyncTaskQueue.h" -#import "PFFileManager.h" -#import "PFKeychainStore.h" -#import "PFMutableUserState.h" -#import "PFObjectFilePersistenceController.h" -#import "PFObjectPrivate.h" -#import "PFQuery.h" -#import "PFUserConstants.h" -#import "PFUserPrivate.h" - -@interface PFCurrentUserController () { - dispatch_queue_t _dataQueue; - PFAsyncTaskQueue *_dataTaskQueue; - - PFUser *_currentUser; - BOOL _currentUserMatchesDisk; -} - -@end - -@implementation PFCurrentUserController - -@synthesize storageType = _storageType; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - PFNotDesignatedInitializer(); -} - -- (instancetype)initWithStorageType:(PFCurrentObjectStorageType)storageType - commonDataSource:(id)commonDataSource - coreDataSource:(id)coreDataSource { - self = [super init]; - if (!self) return nil; - - _dataQueue = dispatch_queue_create("com.parse.currentUser.controller", DISPATCH_QUEUE_CONCURRENT); - _dataTaskQueue = [PFAsyncTaskQueue taskQueue]; - - _storageType = storageType; - _commonDataSource = commonDataSource; - _coreDataSource = coreDataSource; - - return self; -} - -+ (instancetype)controllerWithStorageType:(PFCurrentObjectStorageType)dataStorageType - commonDataSource:(id)commonDataSource - coreDataSource:(id)coreDataSource { - return [[self alloc] initWithStorageType:dataStorageType - commonDataSource:commonDataSource - coreDataSource:coreDataSource]; -} - -///-------------------------------------- -#pragma mark - PFCurrentObjectControlling -///-------------------------------------- - -- (BFTask *)getCurrentObjectAsync { - PFCurrentUserLoadingOptions options = 0; - if (self.automaticUsersEnabled) { - options |= PFCurrentUserLoadingOptionCreateLazyIfNotAvailable; - } - return [self getCurrentUserAsyncWithOptions:options]; -} - -- (BFTask *)saveCurrentObjectAsync:(PFUser *)object { - return [_dataTaskQueue enqueue:^id(BFTask *task) { - return [self _saveCurrentUserAsync:object]; - }]; -} - -///-------------------------------------- -#pragma mark - User -///-------------------------------------- - -- (BFTask *)getCurrentUserAsyncWithOptions:(PFCurrentUserLoadingOptions)options { - return [_dataTaskQueue enqueue:^id(BFTask *task) { - return [self _getCurrentUserAsyncWithOptions:options]; - }]; -} - -- (BFTask *)_getCurrentUserAsyncWithOptions:(PFCurrentUserLoadingOptions)options { - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - __block BOOL matchesDisk = NO; - __block PFUser *currentUser = nil; - dispatch_sync(_dataQueue, ^{ - matchesDisk = _currentUserMatchesDisk; - currentUser = _currentUser; - }); - if (currentUser) { - return currentUser; - } - - if (matchesDisk) { - if (options & PFCurrentUserLoadingOptionCreateLazyIfNotAvailable) { - return [self _lazyLogInUser]; - } - return nil; - } - - return [[[[self _loadCurrentUserFromDiskAsync] continueWithSuccessBlock:^id(BFTask *task) { - PFUser *user = task.result; - // If the object was not yet saved, but is already linked with AnonymousUtils - it means it is lazy. - // So mark it's state as `isLazy` and make it `dirty` - if (!user.objectId && [PFAnonymousUtils isLinkedWithUser:user]) { - user.isLazy = YES; - [user _setDirty:YES]; - } - return user; - }] continueWithBlock:^id(BFTask *task) { - dispatch_barrier_sync(_dataQueue, ^{ - _currentUser = task.result; - _currentUserMatchesDisk = !task.faulted; - }); - return task; - }] continueWithBlock:^id(BFTask *task) { - // If there's no user and automatic user is enabled, do lazy login. - if (!task.result && (options & PFCurrentUserLoadingOptionCreateLazyIfNotAvailable)) { - return [self _lazyLogInUser]; - } - return task; - }]; - }]; -} - -- (BFTask *)_saveCurrentUserAsync:(PFUser *)user { - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - __block PFUser *currentUser = nil; - dispatch_sync(_dataQueue, ^{ - currentUser = _currentUser; - }); - - BFTask *task = [BFTask taskWithResult:nil]; - // Check for objectId equality to not logout in case we are saving another instance of the same user. - if (currentUser != nil && currentUser != user && ![user.objectId isEqualToString:currentUser.objectId]) { - task = [task continueWithBlock:^id(BFTask *task) { - return [currentUser _logOutAsync]; - }]; - } - return [[task continueWithBlock:^id(BFTask *task) { - @synchronized (user.lock) { - [user setIsCurrentUser:YES]; - [user synchronizeAllAuthData]; - } - return [self _saveCurrentUserToDiskAsync:user]; - }] continueWithBlock:^id(BFTask *task) { - dispatch_barrier_sync(_dataQueue, ^{ - _currentUser = user; - _currentUserMatchesDisk = !task.faulted && !task.cancelled; - }); - return user; - }]; - }]; -} - -- (BFTask *)logOutCurrentUserAsync { - return [_dataTaskQueue enqueue:^id(BFTask *task) { - return [[self _getCurrentUserAsyncWithOptions:0] continueWithBlock:^id(BFTask *task) { - BFTask *userLogoutTask = nil; - - PFUser *user = task.result; - if (user) { - userLogoutTask = [user _logOutAsync]; - } else { - userLogoutTask = [BFTask taskWithResult:nil]; - } - - NSString *filePath = [self.commonDataSource.fileManager parseDataItemPathForPathComponent:PFUserCurrentUserFileName]; - BFTask *fileTask = [PFFileManager removeItemAtPathAsync:filePath]; - BFTask *unpinTask = nil; - - if (self.storageType == PFCurrentObjectStorageTypeOfflineStore) { - unpinTask = [PFObject unpinAllObjectsInBackgroundWithName:PFUserCurrentUserPinName]; - } else { - unpinTask = [BFTask taskWithResult:nil]; - } - - [self _deleteSensitiveUserDataFromKeychainWithItemName:PFUserCurrentUserFileName]; - - BFTask *logoutTask = [[BFTask taskForCompletionOfAllTasks:@[ fileTask, unpinTask ]] continueWithBlock:^id(BFTask *task) { - dispatch_barrier_sync(_dataQueue, ^{ - _currentUser = nil; - _currentUserMatchesDisk = YES; - }); - return nil; - }]; - return [BFTask taskForCompletionOfAllTasks:@[ userLogoutTask, logoutTask ]]; - }]; - }]; -} - -///-------------------------------------- -#pragma mark - Data Storage -///-------------------------------------- - -- (BFTask *)_loadCurrentUserFromDiskAsync { - BFTask *task = nil; - if (self.storageType == PFCurrentObjectStorageTypeOfflineStore) { - // Try loading from OfflineStore - PFQuery *query = [[[PFQuery queryWithClassName:[PFUser parseClassName]] - fromPinWithName:PFUserCurrentUserPinName] - // We need to ignoreACLs here because right now we don't have currentUser. - ignoreACLs]; - - // Silence the warning if we are loading from LDS - task = [[query findObjectsInBackground] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *results = task.result; - if ([results count] == 1) { - return [BFTask taskWithResult:results.firstObject]; - } else if ([results count] != 0) { - return [[PFObject unpinAllObjectsInBackgroundWithName:PFUserCurrentUserPinName] - continueWithSuccessResult:nil]; - } - - // Backward compatibility if we previously have non-LDS currentUser. - return [PFObject _migrateObjectInBackgroundFromFile:PFUserCurrentUserFileName toPin:PFUserCurrentUserPinName usingMigrationBlock:^id(BFTask *task) { - PFUser *user = task.result; - // Only migrate session token to Keychain if it was loaded from Data File. - if (user.sessionToken) { - return [self _saveSensitiveUserDataAsync:user - toKeychainItemWithName:PFUserCurrentUserKeychainItemName]; - } - return nil; - }]; - }]; - } else { - PFObjectFilePersistenceController *controller = self.coreDataSource.objectFilePersistenceController; - task = [controller loadPersistentObjectAsyncForKey:PFUserCurrentUserFileName]; - } - return [task continueWithSuccessBlock:^id(BFTask *task) { - PFUser *user = task.result; - [user setIsCurrentUser:YES]; - return [[self _loadSensitiveUserDataAsync:user - fromKeychainItemWithName:PFUserCurrentUserKeychainItemName] continueWithSuccessResult:user]; - }]; -} - -- (BFTask *)_saveCurrentUserToDiskAsync:(PFUser *)user { - if (self.storageType == PFCurrentObjectStorageTypeOfflineStore) { - return [[[PFObject unpinAllObjectsInBackgroundWithName:PFUserCurrentUserPinName] continueWithSuccessBlock:^id(BFTask *task) { - return [self _saveSensitiveUserDataAsync:user toKeychainItemWithName:PFUserCurrentUserKeychainItemName]; - }] continueWithSuccessBlock:^id(BFTask *task) { - // We don't want to include children of `currentUser` automatically. - return [user _pinInBackgroundWithName:PFUserCurrentUserPinName includeChildren:NO]; - }]; - } - - return [[self _saveSensitiveUserDataAsync:user - toKeychainItemWithName:PFUserCurrentUserKeychainItemName] continueWithBlock:^id(BFTask *task) { - PFObjectFilePersistenceController *controller = self.coreDataSource.objectFilePersistenceController; - return [controller persistObjectAsync:user forKey:PFUserCurrentUserFileName]; - }]; -} - -///-------------------------------------- -#pragma mark - Sensitive Data -///-------------------------------------- - -- (BFTask *)_loadSensitiveUserDataAsync:(PFUser *)user fromKeychainItemWithName:(NSString *)itemName { - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - NSDictionary *userData = self.commonDataSource.keychainStore[itemName]; - @synchronized (user.lock) { - if (userData) { - PFMutableUserState *state = [user._state mutableCopy]; - - NSString *sessionToken = userData[PFUserSessionTokenRESTKey] ?: userData[@"session_token"]; - if (sessionToken) { - state.sessionToken = sessionToken; - } - - user._state = state; - - NSDictionary *newAuthData = userData[PFUserAuthDataRESTKey] ?: userData[@"auth_data"]; - [newAuthData enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - user.authData[key] = obj; - if (obj != nil) { - [user.linkedServiceNames addObject:key]; - } - [user synchronizeAuthDataWithAuthType:key]; - }]; - } - } - return nil; - }]; -} - -- (BFTask *)_saveSensitiveUserDataAsync:(PFUser *)user toKeychainItemWithName:(NSString *)itemName { - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - NSMutableDictionary *userData = [NSMutableDictionary dictionaryWithCapacity:2]; - @synchronized (user.lock) { - if (user.sessionToken) { - userData[PFUserSessionTokenRESTKey] = [user.sessionToken copy]; - } - if ([user.authData count]) { - userData[PFUserAuthDataRESTKey] = [user.authData copy]; - } - } - self.commonDataSource.keychainStore[itemName] = userData; - - return nil; - }]; -} - -- (void)_deleteSensitiveUserDataFromKeychainWithItemName:(NSString *)itemName { - [self.commonDataSource.keychainStore removeObjectForKey:itemName]; -} - -///-------------------------------------- -#pragma mark - Session Token -///-------------------------------------- - -- (BFTask *)getCurrentUserSessionTokenAsync { - return [[self getCurrentUserAsyncWithOptions:0] continueWithSuccessBlock:^id(BFTask *task) { - PFUser *user = task.result; - return user.sessionToken; - }]; -} - -///-------------------------------------- -#pragma mark - Lazy Login -///-------------------------------------- - -- (BFTask *)_lazyLogInUser { - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - PFUser *user = [PFAnonymousUtils _lazyLogIn]; - - // When LDS is enabled, we will immediately save the anon user to LDS. When LDS is disabled, we - // will create the anon user, but will lazily save it to Parse on an object save that has this - // user in its ACL. - // The main differences here would be that non-LDS may have different anon users in different - // sessions until an object is saved and LDS will persist the same anon user. This shouldn't be a - // big deal... - if (self.storageType == PFCurrentObjectStorageTypeOfflineStore) { - return [[self _saveCurrentUserAsync:user] continueWithSuccessResult:user]; - } - - dispatch_barrier_sync(_dataQueue, ^{ - _currentUser = user; - _currentUserMatchesDisk = YES; - }); - return user; - }]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/PFUserPrivate.h b/FoodbLog/Pods/Parse/Parse/Internal/User/PFUserPrivate.h deleted file mode 100644 index 4dfebd4..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/PFUserPrivate.h +++ /dev/null @@ -1,79 +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. - */ - -#import - -#import - -#import "PFMacros.h" - -extern NSString *const PFUserCurrentUserFileName; -extern NSString *const PFUserCurrentUserPinName; -extern NSString *const PFUserCurrentUserKeychainItemName; - -@class BFTask PF_GENERIC(__covariant BFGenericType); -@class PFCommandResult; -@class PFUserController; - -@interface PFUser (Private) - -///-------------------------------------- -/// @name Current User -///-------------------------------------- -+ (BFTask *)_getCurrentUserSessionTokenAsync; -+ (NSString *)currentSessionToken; - -- (void)synchronizeAllAuthData; - -- (BFTask *)_handleServiceLoginCommandResult:(PFCommandResult *)result; - -- (void)synchronizeAuthDataWithAuthType:(NSString *)authType; - -+ (PFUser *)logInLazyUserWithAuthType:(NSString *)authType authData:(NSDictionary *)authData; -- (BFTask *)resolveLazinessAsync:(BFTask *)toAwait; -- (void)stripAnonymity; -- (void)restoreAnonymity:(id)data; - -///-------------------------------------- -/// @name Revocable Session -///-------------------------------------- -+ (BOOL)_isRevocableSessionEnabled; -+ (void)_setRevocableSessionEnabled:(BOOL)enabled; - -+ (PFUserController *)userController; - -@end - -// Private Properties -@interface PFUser () { - BOOL isCurrentUser; - NSMutableDictionary *authData; - NSMutableSet *linkedServiceNames; - BOOL isLazy; -} - -// This earmarks the user as being an "identity" user. This will make saves write through -// to the currentUser singleton and disk object -@property (nonatomic, assign) BOOL isCurrentUser; - -@property (nonatomic, strong, readonly) NSMutableDictionary *authData; -@property (nonatomic, strong, readonly) NSMutableSet *linkedServiceNames; -@property (nonatomic, assign) BOOL isLazy; - -- (BOOL)_isAuthenticatedWithCurrentUser:(PFUser *)currentUser; - -- (BFTask *)_logOutAsync; - -///-------------------------------------- -/// @name Third-party Authentication (Private) -///-------------------------------------- - -+ (void)_unregisterAuthenticationDelegateForAuthType:(NSString *)authType; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/State/PFMutableUserState.h b/FoodbLog/Pods/Parse/Parse/Internal/User/State/PFMutableUserState.h deleted file mode 100644 index 43e8f2d..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/State/PFMutableUserState.h +++ /dev/null @@ -1,19 +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. - */ - -#import "PFUserState.h" - -@interface PFMutableUserState : PFUserState - -@property (nonatomic, copy, readwrite) NSString *sessionToken; -@property (nonatomic, copy, readwrite) NSDictionary *authData; - -@property (nonatomic, assign, readwrite) BOOL isNew; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/State/PFMutableUserState.m b/FoodbLog/Pods/Parse/Parse/Internal/User/State/PFMutableUserState.m deleted file mode 100644 index 255265b..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/State/PFMutableUserState.m +++ /dev/null @@ -1,20 +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. - */ - -#import "PFMutableUserState.h" - -#import "PFUserState_Private.h" - -@implementation PFMutableUserState - -@dynamic sessionToken; -@dynamic authData; -@dynamic isNew; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/State/PFUserState.h b/FoodbLog/Pods/Parse/Parse/Internal/User/State/PFUserState.h deleted file mode 100644 index 72fa098..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/State/PFUserState.h +++ /dev/null @@ -1,26 +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. - */ - -#import "PFObjectState.h" - -@interface PFUserState : PFObjectState - -@property (nonatomic, copy, readonly) NSString *sessionToken; -@property (nonatomic, copy, readonly) NSDictionary *authData; - -@property (nonatomic, assign, readonly) BOOL isNew; - -///-------------------------------------- -/// @name Init -///-------------------------------------- - -- (instancetype)initWithState:(PFUserState *)state; -+ (instancetype)stateWithState:(PFUserState *)state; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/State/PFUserState.m b/FoodbLog/Pods/Parse/Parse/Internal/User/State/PFUserState.m deleted file mode 100644 index 2c50485..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/State/PFUserState.m +++ /dev/null @@ -1,64 +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. - */ - -#import "PFUserState.h" -#import "PFUserState_Private.h" - -#import "PFMutableUserState.h" -#import "PFObjectState_Private.h" -#import "PFUserConstants.h" - -@implementation PFUserState - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithState:(PFUserState *)state { - self = [super initWithState:state]; - if (!self) return nil; - - _sessionToken = [state.sessionToken copy]; - _authData = [state.authData copy]; - _isNew = state.isNew; - - return self; -} - -+ (instancetype)stateWithState:(PFUserState *)state { - return [super stateWithState:state]; -} - -///-------------------------------------- -#pragma mark - Serialization -///-------------------------------------- - -- (NSDictionary *)dictionaryRepresentationWithObjectEncoder:(PFEncoder *)objectEncoder { - NSMutableDictionary *dictionary = [[super dictionaryRepresentationWithObjectEncoder:objectEncoder] mutableCopy]; - [dictionary removeObjectForKey:PFUserPasswordRESTKey]; - return dictionary; -} - -///-------------------------------------- -#pragma mark - NSCopying -///-------------------------------------- - -- (id)copyWithZone:(NSZone *)zone { - return [[PFUserState allocWithZone:zone] initWithState:self]; -} - -///-------------------------------------- -#pragma mark - NSMutableCopying -///-------------------------------------- - -- (id)mutableCopyWithZone:(NSZone *)zone { - return [[PFMutableUserState allocWithZone:zone] initWithState:self]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Internal/User/State/PFUserState_Private.h b/FoodbLog/Pods/Parse/Parse/Internal/User/State/PFUserState_Private.h deleted file mode 100644 index c305f76..0000000 --- a/FoodbLog/Pods/Parse/Parse/Internal/User/State/PFUserState_Private.h +++ /dev/null @@ -1,25 +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. - */ - -#import "PFUserState.h" - -@interface PFUserState () { -@protected - NSString *_sessionToken; - NSDictionary *_authData; - - BOOL _isNew; -} - -@property (nonatomic, copy, readwrite) NSString *sessionToken; -@property (nonatomic, copy, readwrite) NSDictionary *authData; - -@property (nonatomic, assign, readwrite) BOOL isNew; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFACL.h b/FoodbLog/Pods/Parse/Parse/PFACL.h deleted file mode 100644 index a952585..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFACL.h +++ /dev/null @@ -1,264 +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. - */ - -#import - -#import - -PF_ASSUME_NONNULL_BEGIN - -@class PFRole; -@class PFUser; - -/*! - The `PFACL` class is used to control which users can access or modify a particular object. - Each can have its own `PFACL`. You can grant read and write permissions separately to specific users, - to groups of users that belong to roles, or you can grant permissions to "the public" so that, - for example, any user could read a particular object but only a particular set of users could write to that object. - */ -@interface PFACL : NSObject - -///-------------------------------------- -/// @name Creating an ACL -///-------------------------------------- - -/*! - @abstract Creates an ACL with no permissions granted. - - @returns Returns a new `PFACL`. - */ -+ (instancetype)ACL; - -/*! - @abstract Creates an ACL where only the provided user has access. - - @param user The user to assign access. - */ -+ (instancetype)ACLWithUser:(PFUser *)user; - -///-------------------------------------- -/// @name Controlling Public Access -///-------------------------------------- - -/*! - @abstract Set whether the public is allowed to read this object. - - @param allowed Whether the public can read this object. - */ -- (void)setPublicReadAccess:(BOOL)allowed; - -/*! - @abstract Gets whether the public is allowed to read this object. - - @returns `YES` if the public read access is enabled, otherwise `NO`. - */ -- (BOOL)getPublicReadAccess; - -/*! - @abstract Set whether the public is allowed to write this object. - - @param allowed Whether the public can write this object. - */ -- (void)setPublicWriteAccess:(BOOL)allowed; - -/*! - @abstract Gets whether the public is allowed to write this object. - - @returns `YES` if the public write access is enabled, otherwise `NO`. - */ -- (BOOL)getPublicWriteAccess; - -///-------------------------------------- -/// @name Controlling Access Per-User -///-------------------------------------- - -/*! - @abstract Set whether the given user id is allowed to read this object. - - @param allowed Whether the given user can write this object. - @param userId The <[PFObject objectId]> of the user to assign access. - */ -- (void)setReadAccess:(BOOL)allowed forUserId:(NSString *)userId; - -/*! - @abstract Gets whether the given user id is *explicitly* allowed to read this object. - Even if this returns `NO`, the user may still be able to access it if returns `YES` - or if the user belongs to a role that has access. - - @param userId The <[PFObject objectId]> of the user for which to retrive access. - - @returns `YES` if the user with this `objectId` has *explicit* read access, otherwise `NO`. - */ -- (BOOL)getReadAccessForUserId:(NSString *)userId; - -/*! - @abstract Set whether the given user id is allowed to write this object. - - @param allowed Whether the given user can read this object. - @param userId The `objectId` of the user to assign access. - */ -- (void)setWriteAccess:(BOOL)allowed forUserId:(NSString *)userId; - -/*! - @abstract Gets whether the given user id is *explicitly* allowed to write this object. - Even if this returns NO, the user may still be able to write it if returns `YES` - or if the user belongs to a role that has access. - - @param userId The <[PFObject objectId]> of the user for which to retrive access. - - @returns `YES` if the user with this `objectId` has *explicit* write access, otherwise `NO`. - */ -- (BOOL)getWriteAccessForUserId:(NSString *)userId; - -/*! - @abstract Set whether the given user is allowed to read this object. - - @param allowed Whether the given user can read this object. - @param user The user to assign access. - */ -- (void)setReadAccess:(BOOL)allowed forUser:(PFUser *)user; - -/*! - @abstract Gets whether the given user is *explicitly* allowed to read this object. - Even if this returns `NO`, the user may still be able to access it if returns `YES` - or if the user belongs to a role that has access. - - @param user The user for which to retrive access. - - @returns `YES` if the user has *explicit* read access, otherwise `NO`. - */ -- (BOOL)getReadAccessForUser:(PFUser *)user; - -/*! - @abstract Set whether the given user is allowed to write this object. - - @param allowed Whether the given user can write this object. - @param user The user to assign access. - */ -- (void)setWriteAccess:(BOOL)allowed forUser:(PFUser *)user; - -/*! - @abstract Gets whether the given user is *explicitly* allowed to write this object. - Even if this returns `NO`, the user may still be able to write it if returns `YES` - or if the user belongs to a role that has access. - - @param user The user for which to retrive access. - - @returns `YES` if the user has *explicit* write access, otherwise `NO`. - */ -- (BOOL)getWriteAccessForUser:(PFUser *)user; - -///-------------------------------------- -/// @name Controlling Access Per-Role -///-------------------------------------- - -/*! - @abstract Get whether users belonging to the role with the given name are allowed to read this object. - Even if this returns `NO`, the role may still be able to read it if a parent role has read access. - - @param name The name of the role. - - @returns `YES` if the role has read access, otherwise `NO`. - */ -- (BOOL)getReadAccessForRoleWithName:(NSString *)name; - -/*! - @abstract Set whether users belonging to the role with the given name are allowed to read this object. - - @param allowed Whether the given role can read this object. - @param name The name of the role. - */ -- (void)setReadAccess:(BOOL)allowed forRoleWithName:(NSString *)name; - -/*! - @abstract Get whether users belonging to the role with the given name are allowed to write this object. - Even if this returns `NO`, the role may still be able to write it if a parent role has write access. - - @param name The name of the role. - - @returns `YES` if the role has read access, otherwise `NO`. - */ -- (BOOL)getWriteAccessForRoleWithName:(NSString *)name; - -/*! - @abstract Set whether users belonging to the role with the given name are allowed to write this object. - - @param allowed Whether the given role can write this object. - @param name The name of the role. - */ -- (void)setWriteAccess:(BOOL)allowed forRoleWithName:(NSString *)name; - -/*! - @abstract Get whether users belonging to the given role are allowed to read this object. - Even if this returns `NO`, the role may still be able to read it if a parent role has read access. - - @discussion The role must already be saved on the server and - it's data must have been fetched in order to use this method. - - @param role The name of the role. - - @returns `YES` if the role has read access, otherwise `NO`. - */ -- (BOOL)getReadAccessForRole:(PFRole *)role; - -/*! - @abstract Set whether users belonging to the given role are allowed to read this object. - - @discussion The role must already be saved on the server and - it's data must have been fetched in order to use this method. - - @param allowed Whether the given role can read this object. - @param role The role to assign access. - */ -- (void)setReadAccess:(BOOL)allowed forRole:(PFRole *)role; - -/*! - @abstract Get whether users belonging to the given role are allowed to write this object. - Even if this returns `NO`, the role may still be able to write it if a parent role has write access. - - @discussion The role must already be saved on the server and - it's data must have been fetched in order to use this method. - - @param role The name of the role. - - @returns `YES` if the role has write access, otherwise `NO`. - */ -- (BOOL)getWriteAccessForRole:(PFRole *)role; - -/*! - @abstract Set whether users belonging to the given role are allowed to write this object. - - @discussion The role must already be saved on the server and - it's data must have been fetched in order to use this method. - - @param allowed Whether the given role can write this object. - @param role The role to assign access. - */ -- (void)setWriteAccess:(BOOL)allowed forRole:(PFRole *)role; - -///-------------------------------------- -/// @name Setting Access Defaults -///-------------------------------------- - -/*! - @abstract Sets a default ACL that will be applied to all instances of when they are created. - - @param acl The ACL to use as a template for all instance of created after this method has been called. - This value will be copied and used as a template for the creation of new ACLs, so changes to the - instance after this method has been called will not be reflected in new instance of . - @param currentUserAccess - If `YES`, the `PFACL` that is applied to newly-created instance of will - provide read and write access to the <[PFUser currentUser]> at the time of creation. - - If `NO`, the provided `acl` will be used without modification. - - If `acl` is `nil`, this value is ignored. - */ -+ (void)setDefaultACL:(PF_NULLABLE PFACL *)acl withAccessForCurrentUser:(BOOL)currentUserAccess; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFACL.m b/FoodbLog/Pods/Parse/Parse/PFACL.m deleted file mode 100644 index 59190f9..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFACL.m +++ /dev/null @@ -1,363 +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. - */ - -#import "PFACL.h" -#import "PFACLPrivate.h" - -#import "BFTask+Private.h" -#import "PFACLState.h" -#import "PFAssert.h" -#import "PFDefaultACLController.h" -#import "PFMacros.h" -#import "PFMutableACLState.h" -#import "PFObjectPrivate.h" -#import "PFObjectUtilities.h" -#import "PFRole.h" -#import "PFUser.h" -#import "PFUserPrivate.h" - -static NSString *const PFACLPublicKey_ = @"*"; -static NSString *const PFACLUnresolvedKey_ = @"*unresolved"; -static NSString *const PFACLCodingDataKey_ = @"ACL"; - -@interface PFACL () - -@property (atomic, strong, readwrite) PFACLState *state; - -@end - -@implementation PFACL { - PFUser *unresolvedUser; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _state = [[PFACLState alloc] init]; - - return self; -} - -///-------------------------------------- -#pragma mark - Default ACL -///-------------------------------------- - -+ (instancetype)ACL { - return [[self alloc] init]; -} - -+ (instancetype)ACLWithUser:(PFUser *)user { - PFACL *acl = [self ACL]; - [acl setReadAccess:YES forUser:user]; - [acl setWriteAccess:YES forUser:user]; - return acl; -} - -+ (instancetype)ACLWithDictionary:(NSDictionary *)dictionary { - return [[self alloc] initWithDictionary:dictionary]; -} - -+ (PFACL *)defaultACL { - return [[[PFDefaultACLController defaultController] getDefaultACLAsync] waitForResult:NULL - withMainThreadWarning:NO]; -} - -+ (void)setDefaultACL:(PFACL *)acl withAccessForCurrentUser:(BOOL)currentUserAccess { - [[PFDefaultACLController defaultController] setDefaultACLAsync:acl withCurrentUserAccess:currentUserAccess]; -} - -- (void)setShared:(BOOL)newShared { - self.state = [self.state copyByMutatingWithBlock:^(PFMutableACLState *newState) { - newState.shared = newShared; - }]; -} - -- (BOOL)isShared { - return self.state.shared; -} - -- (instancetype)createUnsharedCopy { - PFACL *newACL = [[self class] ACLWithDictionary:self.state.permissions]; - if (unresolvedUser) { - [newACL setReadAccess:[self getReadAccessForUser:unresolvedUser] forUser:unresolvedUser]; - [newACL setWriteAccess:[self getWriteAccessForUser:unresolvedUser] forUser:unresolvedUser]; - } - return newACL; -} - -- (void)resolveUser:(PFUser *)user { - if (user != unresolvedUser) { - return; - } - NSMutableDictionary *unresolvedPermissions = self.state.permissions[PFACLUnresolvedKey_]; - if (unresolvedPermissions) { - self.state = [self.state copyByMutatingWithBlock:^(PFMutableACLState *newState) { - newState.permissions[user.objectId] = unresolvedPermissions; - [newState.permissions removeObjectForKey:PFACLUnresolvedKey_]; - }]; - } - unresolvedUser = nil; -} - -- (BOOL)hasUnresolvedUser { - return unresolvedUser != nil; -} - -- (void)setAccess:(NSString *)accessType to:(BOOL)allowed forUserId:(NSString *)userId { - NSDictionary *permissions = self.state.permissions[userId]; - - // No change needed. - if ([permissions[accessType] boolValue] == allowed) { - return; - } - - NSMutableDictionary *newPermissions = [NSMutableDictionary dictionaryWithDictionary:permissions]; - if (allowed) { - newPermissions[accessType] = @YES; - } else { - [newPermissions removeObjectForKey:accessType]; - } - - self.state = [self.state copyByMutatingWithBlock:^(PFMutableACLState *newState) { - if (newPermissions.count) { - newState.permissions[userId] = [newPermissions copy]; - } else { - [newState.permissions removeObjectForKey:userId]; - } - }]; -} - -- (BOOL)getAccess:(NSString *)accessType forUserId:(NSString *)userId { - return [self.state.permissions[userId][accessType] boolValue]; -} - -- (instancetype)initWithDictionary:(NSDictionary *)dictionary { - self = [self init]; - if (!self) return nil; - - // We iterate over the input ACL rather than just copying to - // permissionsById so that we can ensure it is the right format. - [dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *userId, NSDictionary *permissions, BOOL *stop) { - [permissions enumerateKeysAndObjectsUsingBlock:^(NSString *accessType, id obj, BOOL *stop) { - [self setAccess:accessType to:[obj boolValue] forUserId:userId]; - }]; - }]; - - return self; -} - -- (void)setReadAccess:(BOOL)allowed forUserId:(NSString *)userId { - PFParameterAssert(userId, @"Can't setReadAccess for nil userId."); - [self setAccess:@"read" to:allowed forUserId:userId]; -} - -- (BOOL)getReadAccessForUserId:(NSString *)userId { - PFParameterAssert(userId, @"Can't getReadAccessForUserId for nil userId."); - return [self getAccess:@"read" forUserId:userId]; -} - -- (void)setWriteAccess:(BOOL)allowed forUserId:(NSString *)userId { - PFParameterAssert(userId, @"Can't setWriteAccess for nil userId."); - [self setAccess:@"write" to:allowed forUserId:userId]; -} - -- (BOOL)getWriteAccessForUserId:(NSString *)userId { - PFParameterAssert(userId, @"Can't getWriteAccessForUserId for nil userId."); - return [self getAccess:@"write" forUserId:userId]; -} - -- (void)setPublicReadAccess:(BOOL)allowed { - [self setReadAccess:allowed forUserId:PFACLPublicKey_]; -} - -- (BOOL)getPublicReadAccess { - return [self getReadAccessForUserId:PFACLPublicKey_]; -} - -- (void)setPublicWriteAccess:(BOOL)allowed { - [self setWriteAccess:allowed forUserId:PFACLPublicKey_]; -} - -- (BOOL)getPublicWriteAccess { - return [self getWriteAccessForUserId:PFACLPublicKey_]; -} - -- (BOOL)getReadAccessForRoleWithName:(NSString *)name { - PFParameterAssert(name, @"Can't get read access for nil role name."); - return [self getReadAccessForUserId:[@"role:" stringByAppendingString:name]]; -} - -- (void)setReadAccess:(BOOL)allowed forRoleWithName:(NSString *)name { - PFParameterAssert(name, @"Can't set read access for nil role name."); - [self setReadAccess:allowed forUserId:[@"role:" stringByAppendingString:name]]; -} - -- (BOOL)getWriteAccessForRoleWithName:(NSString *)name { - PFParameterAssert(name, @"Can't get write access for nil role name."); - return [self getWriteAccessForUserId:[@"role:" stringByAppendingString:name]]; -} - -- (void)setWriteAccess:(BOOL)allowed forRoleWithName:(NSString *)name { - PFParameterAssert(name, @"Can't set write access for nil role name."); - [self setWriteAccess:allowed forUserId:[@"role:" stringByAppendingString:name]]; -} - -- (void)validateRoleState:(PFRole *)role { - // Validates that a role has already been saved to the server, and thus can be used in an ACL. - PFParameterAssert(role.objectId, @"Roles must be saved to the server before they can be used in an ACL."); -} - -- (BOOL)getReadAccessForRole:(PFRole *)role { - [self validateRoleState:role]; - return [self getReadAccessForRoleWithName:role.name]; -} - -- (void)setReadAccess:(BOOL)allowed forRole:(PFRole *)role { - [self validateRoleState:role]; - [self setReadAccess:allowed forRoleWithName:role.name]; -} - -- (BOOL)getWriteAccessForRole:(PFRole *)role { - [self validateRoleState:role]; - return [self getWriteAccessForRoleWithName:role.name]; -} - -- (void)setWriteAccess:(BOOL)allowed forRole:(PFRole *)role { - [self validateRoleState:role]; - [self setWriteAccess:allowed forRoleWithName:role.name]; -} - -- (void)prepareUnresolvedUser:(PFUser *)user { - // TODO: (nlutsenko) Consider making @synchronized. - if (unresolvedUser != user) { - // If the unresolved user changed, register the save listener on the new user. This listener - // will call resolveUser with the user. - self.state = [self.state copyByMutatingWithBlock:^(PFMutableACLState *newState) { - [newState.permissions removeObjectForKey:PFACLUnresolvedKey_]; - }]; - - unresolvedUser = user; - - // Note: callback is a reference back to the same block so that it can unregister itself. - @weakify(self); - __weak __block void (^weakCallback)(id result, NSError *error) = nil; - __block void (^callback)(id result, NSError *error) = [^(id result, NSError *error) { - @strongify(self); - [self resolveUser:result]; - [result unregisterSaveListener:weakCallback]; - } copy]; - weakCallback = callback; - [user registerSaveListener:callback]; - } -} - -- (void)setUnresolvedReadAccess:(BOOL)allowed forUser:(PFUser *)user { - [self prepareUnresolvedUser:user]; - [self setReadAccess:allowed forUserId:PFACLUnresolvedKey_]; -} - -- (void)setReadAccess:(BOOL)allowed forUser:(PFUser *)user { - NSString *objectId = user.objectId; - if (!objectId) { - if ([user isLazy]) { - [self setUnresolvedReadAccess:allowed forUser:user]; - return; - } - PFParameterAssert(objectId, @"Can't setReadAcccess for unsaved user."); - } - [self setReadAccess:allowed forUserId:objectId]; -} - -- (BOOL)getReadAccessForUser:(PFUser *)user { - if (user == unresolvedUser) { - return [self getReadAccessForUserId:PFACLUnresolvedKey_]; - } - NSString *objectId = user.objectId; - PFParameterAssert(objectId, @"Can't getReadAccessForUser who isn't saved."); - return [self getReadAccessForUserId:objectId]; -} - -- (void)setUnresolvedWriteAccess:(BOOL)allowed forUser:(PFUser *)user { - [self prepareUnresolvedUser:user]; - [self setWriteAccess:allowed forUserId:PFACLUnresolvedKey_]; -} - -- (void)setWriteAccess:(BOOL)allowed forUser:(PFUser *)user { - NSString *objectId = user.objectId; - if (!objectId) { - if ([user isLazy]) { - [self setUnresolvedWriteAccess:allowed forUser:user]; - return; - } - PFParameterAssert(objectId, @"Can't setWriteAccess for unsaved user."); - } - [self setWriteAccess:allowed forUserId:objectId]; -} - -- (BOOL)getWriteAccessForUser:(PFUser *)user { - if (user == unresolvedUser) { - return [self getWriteAccessForUserId:PFACLUnresolvedKey_]; - } - NSString *objectId = user.objectId; - PFParameterAssert(objectId, @"Can't getWriteAccessForUser who isn't saved."); - return [self getWriteAccessForUserId:objectId]; -} - -- (NSDictionary *)encodeIntoDictionary { - return self.state.permissions; -} - -///-------------------------------------- -#pragma mark - NSObject -///-------------------------------------- - -- (BOOL)isEqual:(id)object { - if (object == self) { - return YES; - } - if (![object isKindOfClass:[PFACL class]]) { - return NO; - } - - PFACL *acl = (PFACL *)object; - return [self.state isEqual:acl.state] && [PFObjectUtilities isObject:self->unresolvedUser - equalToObject:acl->unresolvedUser]; -} - -- (NSUInteger)hash { - return [self.state hash] ^ [unresolvedUser hash]; -} - -///-------------------------------------- -#pragma mark - NSCopying -///-------------------------------------- - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[PFACL allocWithZone:zone] initWithDictionary:self.state.permissions]; -} - -///-------------------------------------- -#pragma mark - NSCoding -///-------------------------------------- - -- (instancetype)initWithCoder:(NSCoder *)coder { - NSDictionary *dictionary = [coder decodeObjectForKey:PFACLCodingDataKey_]; - return [self initWithDictionary:dictionary]; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [coder encodeObject:[self encodeIntoDictionary] forKey:PFACLCodingDataKey_]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFAnalytics.h b/FoodbLog/Pods/Parse/Parse/PFAnalytics.h deleted file mode 100644 index 7655e8f..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFAnalytics.h +++ /dev/null @@ -1,167 +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. - */ - -#import - -#import - -#import - -PF_ASSUME_NONNULL_BEGIN - -/*! - `PFAnalytics` provides an interface to Parse's logging and analytics backend. - - Methods will return immediately and cache the request (+ timestamp) to be - handled "eventually." That is, the request will be sent immediately if possible - or the next time a network connection is available. - */ -@interface PFAnalytics : NSObject - -///-------------------------------------- -/// @name App-Open / Push Analytics -///-------------------------------------- - -/*! - @abstract Tracks this application being launched. If this happened as the result of the - user opening a push notification, this method sends along information to - correlate this open with that push. - - @discussion Pass in `nil` to track a standard "application opened" event. - - @param launchOptions The `NSDictionary` indicating the reason the application was - launched, if any. This value can be found as a parameter to various - `UIApplicationDelegate` methods, and can be empty or `nil`. - - @returns Returns the task encapsulating the work being done. - */ -+ (BFTask PF_GENERIC(NSNumber *)*)trackAppOpenedWithLaunchOptions:(PF_NULLABLE NSDictionary *)launchOptions; - -/*! - @abstract Tracks this application being launched. - If this happened as the result of the user opening a push notification, - this method sends along information to correlate this open with that push. - - @discussion Pass in `nil` to track a standard "application opened" event. - - @param launchOptions The dictionary indicating the reason the application was - launched, if any. This value can be found as a parameter to various - `UIApplicationDelegate` methods, and can be empty or `nil`. - @param block The block to execute on server response. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)` - */ -+ (void)trackAppOpenedWithLaunchOptionsInBackground:(PF_NULLABLE NSDictionary *)launchOptions - block:(PF_NULLABLE PFBooleanResultBlock)block; - -/*! - @abstract Tracks this application being launched. If this happened as the result of the - user opening a push notification, this method sends along information to - correlate this open with that push. - - @param userInfo The Remote Notification payload, if any. This value can be - found either under `UIApplicationLaunchOptionsRemoteNotificationKey` on `launchOptions`, - or as a parameter to `application:didReceiveRemoteNotification:`. - This can be empty or `nil`. - - @returns Returns the task encapsulating the work being done. - */ -+ (BFTask PF_GENERIC(NSNumber *)*)trackAppOpenedWithRemoteNotificationPayload:(PF_NULLABLE NSDictionary *)userInfo; - -/*! - @abstract Tracks this application being launched. If this happened as the result of the - user opening a push notification, this method sends along information to - correlate this open with that push. - - @param userInfo The Remote Notification payload, if any. This value can be - found either under `UIApplicationLaunchOptionsRemoteNotificationKey` on `launchOptions`, - or as a parameter to `application:didReceiveRemoteNotification:`. This can be empty or `nil`. - @param block The block to execute on server response. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)` - */ -+ (void)trackAppOpenedWithRemoteNotificationPayloadInBackground:(PF_NULLABLE NSDictionary *)userInfo - block:(PF_NULLABLE PFBooleanResultBlock)block; - -///-------------------------------------- -/// @name Custom Analytics -///-------------------------------------- - -/*! - @abstract Tracks the occurrence of a custom event. - - @discussion Parse will store a data point at the time of invocation with the given event name. - - @param name The name of the custom event to report to Parse as having happened. - - @returns Returns the task encapsulating the work being done. - */ -+ (BFTask PF_GENERIC(NSNumber *)*)trackEvent:(NSString *)name; - -/*! - @abstract Tracks the occurrence of a custom event. Parse will store a data point at the - time of invocation with the given event name. The event will be sent at some - unspecified time in the future, even if Parse is currently inaccessible. - - @param name The name of the custom event to report to Parse as having happened. - @param block The block to execute on server response. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)` - */ -+ (void)trackEventInBackground:(NSString *)name block:(PF_NULLABLE PFBooleanResultBlock)block; - -/*! - @abstract Tracks the occurrence of a custom event with additional dimensions. Parse will - store a data point at the time of invocation with the given event name. - - @discussion Dimensions will allow segmentation of the occurrences of this custom event. - Keys and values should be NSStrings, and will throw otherwise. - - To track a user signup along with additional metadata, consider the following: - - NSDictionary *dimensions = @{ @"gender": @"m", - @"source": @"web", - @"dayType": @"weekend" }; - [PFAnalytics trackEvent:@"signup" dimensions:dimensions]; - - @warning There is a default limit of 8 dimensions per event tracked. - - @param name The name of the custom event to report to Parse as having happened. - @param dimensions The `NSDictionary` of information by which to segment this event. - - @returns Returns the task encapsulating the work being done. - */ -+ (BFTask PF_GENERIC(NSNumber *)*)trackEvent:(NSString *)name - dimensions:(PF_NULLABLE NSDictionary PF_GENERIC(NSString *, NSString *)*)dimensions; - -/*! - @abstract Tracks the occurrence of a custom event with additional dimensions. Parse will - store a data point at the time of invocation with the given event name. The - event will be sent at some unspecified time in the future, even if Parse is currently inaccessible. - - @discussionDimensions will allow segmentation of the occurrences of this custom event. - Keys and values should be NSStrings, and will throw otherwise. - - To track a user signup along with additional metadata, consider the following: - NSDictionary *dimensions = @{ @"gender": @"m", - @"source": @"web", - @"dayType": @"weekend" }; - [PFAnalytics trackEvent:@"signup" dimensions:dimensions]; - - There is a default limit of 8 dimensions per event tracked. - - @param name The name of the custom event to report to Parse as having happened. - @param dimensions The `NSDictionary` of information by which to segment this event. - @param block The block to execute on server response. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)` - */ -+ (void)trackEventInBackground:(NSString *)name - dimensions:(PF_NULLABLE NSDictionary PF_GENERIC(NSString *, NSString *)*)dimensions - block:(PF_NULLABLE PFBooleanResultBlock)block; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFAnalytics.m b/FoodbLog/Pods/Parse/Parse/PFAnalytics.m deleted file mode 100644 index 514095a..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFAnalytics.m +++ /dev/null @@ -1,91 +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. - */ - -#import "PFAnalytics.h" -#import "PFAnalytics_Private.h" - -#import "BFTask+Private.h" -#import "PFAnalyticsController.h" -#import "PFAssert.h" -#import "PFEncoder.h" -#import "PFEventuallyQueue.h" -#import "PFUserPrivate.h" -#import "Parse_Private.h" - -@implementation PFAnalytics - -///-------------------------------------- -#pragma mark - App-Open / Push Analytics -///-------------------------------------- - -+ (BFTask PF_GENERIC(NSNumber *)*)trackAppOpenedWithLaunchOptions:(PF_NULLABLE NSDictionary *)launchOptions { -#if TARGET_OS_WATCH - NSDictionary *userInfo = nil; -#elif TARGET_OS_IOS - NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]; -#elif PF_TARGET_OS_OSX - NSDictionary *userInfo = launchOptions[NSApplicationLaunchUserNotificationKey]; -#endif - - return [self trackAppOpenedWithRemoteNotificationPayload:userInfo]; -} - -+ (void)trackAppOpenedWithLaunchOptionsInBackground:(PF_NULLABLE NSDictionary *)launchOptions - block:(PF_NULLABLE PFBooleanResultBlock)block { - [[self trackAppOpenedWithLaunchOptions:launchOptions] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -+ (BFTask PF_GENERIC(NSNumber *)*)trackAppOpenedWithRemoteNotificationPayload:(PF_NULLABLE NSDictionary *)userInfo { - return [[[PFUser _getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { - NSString *sessionToken = task.result; - PFAnalyticsController *controller = [Parse _currentManager].analyticsController; - return [controller trackAppOpenedEventAsyncWithRemoteNotificationPayload:userInfo sessionToken:sessionToken]; - }] continueWithSuccessResult:@YES]; -} - -+ (void)trackAppOpenedWithRemoteNotificationPayloadInBackground:(PF_NULLABLE NSDictionary *)userInfo - block:(PF_NULLABLE PFBooleanResultBlock)block { - [[self trackAppOpenedWithRemoteNotificationPayload:userInfo] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -///-------------------------------------- -#pragma mark - Custom Analytics -///-------------------------------------- - -+ (BFTask PF_GENERIC(NSNumber *)*)trackEvent:(NSString *)name { - return [self trackEvent:name dimensions:nil]; -} - -+ (void)trackEventInBackground:(NSString *)name block:(PF_NULLABLE PFBooleanResultBlock)block { - [self trackEventInBackground:name dimensions:nil block:block]; -} - -+ (BFTask PF_GENERIC(NSNumber *)*)trackEvent:(NSString *)name - dimensions:(PF_NULLABLE NSDictionary PF_GENERIC(NSString *, NSString *) *)dimensions { - PFParameterAssert([[name stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length], - @"A name for the custom event must be provided."); - [dimensions enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - PFParameterAssert([key isKindOfClass:[NSString class]] && [obj isKindOfClass:[NSString class]], - @"trackEvent dimensions expect keys and values of type NSString."); - }]; - - return [[[PFUser _getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { - NSString *sessionToken = task.result; - PFAnalyticsController *controller = [Parse _currentManager].analyticsController; - return [controller trackEventAsyncWithName:name dimensions:dimensions sessionToken:sessionToken]; - }] continueWithSuccessResult:@YES]; -} - -+ (void)trackEventInBackground:(NSString *)name - dimensions:(PF_NULLABLE NSDictionary PF_GENERIC(NSString *, NSString *) *)dimensions - block:(PF_NULLABLE PFBooleanResultBlock)block { - [[self trackEvent:name dimensions:dimensions] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFAnonymousUtils.h b/FoodbLog/Pods/Parse/Parse/PFAnonymousUtils.h deleted file mode 100644 index ff9ed8b..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFAnonymousUtils.h +++ /dev/null @@ -1,82 +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. - */ - -#import - -#import - -#import -#import - -PF_ASSUME_NONNULL_BEGIN - -/*! - Provides utility functions for working with Anonymously logged-in users. - Anonymous users have some unique characteristics: - - - Anonymous users don't need a user name or password. - - Once logged out, an anonymous user cannot be recovered. - - When the current user is anonymous, the following methods can be used to switch - to a different user or convert the anonymous user into a regular one: - - signUp converts an anonymous user to a standard user with the given username and password. - Data associated with the anonymous user is retained. - - logIn switches users without converting the anonymous user. - Data associated with the anonymous user will be lost. - - Service logIn (e.g. Facebook, Twitter) will attempt to convert - the anonymous user into a standard user by linking it to the service. - If a user already exists that is linked to the service, it will instead switch to the existing user. - - Service linking (e.g. Facebook, Twitter) will convert the anonymous user - into a standard user by linking it to the service. - */ -@interface PFAnonymousUtils : NSObject - -///-------------------------------------- -/// @name Creating an Anonymous User -///-------------------------------------- - -/*! - @abstract Creates an anonymous user asynchronously and sets as a result to `BFTask`. - - @returns The task, that encapsulates the work being done. - */ -+ (BFTask PF_GENERIC(PFUser *)*)logInInBackground; - -/*! - @abstract Creates an anonymous user. - - @param block The block to execute when anonymous user creation is complete. - It should have the following argument signature: `^(PFUser *user, NSError *error)`. - */ -+ (void)logInWithBlock:(PF_NULLABLE PFUserResultBlock)block; - -/* - @abstract Creates an anonymous user. - - @param target Target object for the selector. - @param selector The selector that will be called when the asynchronous request is complete. - It should have the following signature: `(void)callbackWithUser:(PFUser *)user error:(NSError *)error`. - */ -+ (void)logInWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; - -///-------------------------------------- -/// @name Determining Whether a User is Anonymous -///-------------------------------------- - -/*! - @abstract Whether the object is logged in anonymously. - - @param user object to check for anonymity. The user must be logged in on this device. - - @returns `YES` if the user is anonymous. `NO` if the user is not the current user or is not anonymous. - */ -+ (BOOL)isLinkedWithUser:(PF_NULLABLE PFUser *)user; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFAnonymousUtils.m b/FoodbLog/Pods/Parse/Parse/PFAnonymousUtils.m deleted file mode 100644 index 073e525..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFAnonymousUtils.m +++ /dev/null @@ -1,91 +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. - */ - -#import "PFAnonymousUtils.h" -#import "PFAnonymousUtils_Private.h" - -#import "BFTask+Private.h" -#import "PFAnonymousAuthenticationProvider.h" -#import "PFInternalUtils.h" -#import "PFUserPrivate.h" - -@implementation PFAnonymousUtils - -///-------------------------------------- -#pragma mark - Log In -///-------------------------------------- - -+ (BFTask *)logInInBackground { - PFAnonymousAuthenticationProvider *provider = [self _authenticationProvider]; - return [PFUser logInWithAuthTypeInBackground:PFAnonymousUserAuthenticationType authData:provider.authData]; -} - -+ (void)logInWithBlock:(PFUserResultBlock)block { - [[self logInInBackground] thenCallBackOnMainThreadAsync:block]; -} - -+ (void)logInWithTarget:(id)target selector:(SEL)selector { - [self logInWithBlock:^(PFUser *user, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:user object:error]; - }]; -} - -///-------------------------------------- -#pragma mark - Link -///-------------------------------------- - -+ (BOOL)isLinkedWithUser:(PFUser *)user { - return [user isLinkedWithAuthType:PFAnonymousUserAuthenticationType]; -} - -///-------------------------------------- -#pragma mark - Private -///-------------------------------------- - -static PFAnonymousAuthenticationProvider *authenticationProvider_; - -+ (dispatch_queue_t)_providerAccessQueue { - static dispatch_queue_t queue; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - queue = dispatch_queue_create("com.parse.anonymousUtils.provider.access", DISPATCH_QUEUE_SERIAL); - }); - return queue; -} - -+ (PFAnonymousAuthenticationProvider *)_authenticationProvider { - __block PFAnonymousAuthenticationProvider *provider = nil; - dispatch_sync([self _providerAccessQueue], ^{ - provider = authenticationProvider_; - if (!provider) { - provider = [[PFAnonymousAuthenticationProvider alloc] init]; - [PFUser registerAuthenticationDelegate:provider forAuthType:PFAnonymousUserAuthenticationType]; - authenticationProvider_ = provider; - } - }); - return provider; -} - -+ (void)_clearAuthenticationProvider { - [PFUser _unregisterAuthenticationDelegateForAuthType:PFAnonymousUserAuthenticationType]; - dispatch_sync([self _providerAccessQueue], ^{ - authenticationProvider_ = nil; - }); -} - -///-------------------------------------- -#pragma mark - Lazy Login -///-------------------------------------- - -+ (PFUser *)_lazyLogIn { - PFAnonymousAuthenticationProvider *provider = [self _authenticationProvider]; - return [PFUser logInLazyUserWithAuthType:PFAnonymousUserAuthenticationType authData:provider.authData]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFCloud.h b/FoodbLog/Pods/Parse/Parse/PFCloud.h deleted file mode 100644 index b807b75..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFCloud.h +++ /dev/null @@ -1,91 +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. - */ - -#import - -#import - -#import - -PF_ASSUME_NONNULL_BEGIN - -/*! - The `PFCloud` class provides methods for interacting with Parse Cloud Functions. - */ -@interface PFCloud : NSObject - -/*! - @abstract Calls the given cloud function *synchronously* with the parameters provided. - - @param function The function name to call. - @param parameters The parameters to send to the function. - - @returns The response from the cloud function. - */ -+ (PF_NULLABLE_S id)callFunction:(NSString *)function - withParameters:(PF_NULLABLE NSDictionary *)parameters PF_SWIFT_UNAVAILABLE; - -/*! - @abstract Calls the given cloud function *synchronously* with the parameters provided and - sets the error if there is one. - - @param function The function name to call. - @param parameters The parameters to send to the function. - @param error Pointer to an `NSError` that will be set if necessary. - - @returns The response from the cloud function. - This result could be a `NSDictionary`, an `NSArray`, `NSNumber` or `NSString`. - */ -+ (PF_NULLABLE_S id)callFunction:(NSString *)function - withParameters:(PF_NULLABLE NSDictionary *)parameters - error:(NSError **)error; - -/*! - @abstract Calls the given cloud function *asynchronously* with the parameters provided. - - @param function The function name to call. - @param parameters The parameters to send to the function. - - @returns The task, that encapsulates the work being done. - */ -+ (BFTask PF_GENERIC(id) *)callFunctionInBackground:(NSString *)function - withParameters:(PF_NULLABLE NSDictionary *)parameters; - -/*! - @abstract Calls the given cloud function *asynchronously* with the parameters provided - and executes the given block when it is done. - - @param function The function name to call. - @param parameters The parameters to send to the function. - @param block The block to execute when the function call finished. - It should have the following argument signature: `^(id result, NSError *error)`. - */ -+ (void)callFunctionInBackground:(NSString *)function - withParameters:(PF_NULLABLE NSDictionary *)parameters - block:(PF_NULLABLE PFIdResultBlock)block; - -/* - @abstract Calls the given cloud function *asynchronously* with the parameters provided - and then executes the given selector when it is done. - - @param function The function name to call. - @param parameters The parameters to send to the function. - @param target The object to call the selector on. - @param selector The selector to call when the function call finished. - It should have the following signature: `(void)callbackWithResult:(id)result error:(NSError *)error`. - Result will be `nil` if error is set and vice versa. - */ -+ (void)callFunctionInBackground:(NSString *)function - withParameters:(PF_NULLABLE NSDictionary *)parameters - target:(PF_NULLABLE_S id)target - selector:(PF_NULLABLE_S SEL)selector; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFCloud.m b/FoodbLog/Pods/Parse/Parse/PFCloud.m deleted file mode 100644 index bb019ae..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFCloud.m +++ /dev/null @@ -1,58 +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. - */ - -#import "PFCloud.h" - -#import "BFTask+Private.h" -#import "PFCloudCodeController.h" -#import "PFCommandResult.h" -#import "PFCoreManager.h" -#import "PFUserPrivate.h" -#import "Parse_Private.h" - -@implementation PFCloud - -///-------------------------------------- -#pragma mark - Public -///-------------------------------------- - -+ (id)callFunction:(NSString *)function withParameters:(NSDictionary *)parameters { - return [self callFunction:function withParameters:parameters error:nil]; -} - -+ (id)callFunction:(NSString *)function withParameters:(NSDictionary *)parameters error:(NSError **)error { - return [[self callFunctionInBackground:function withParameters:parameters] waitForResult:error]; -} - -+ (BFTask *)callFunctionInBackground:(NSString *)functionName withParameters:(NSDictionary *)parameters { - return [[PFUser _getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { - NSString *sessionToken = task.result; - PFCloudCodeController *controller = [Parse _currentManager].coreManager.cloudCodeController; - return [controller callCloudCodeFunctionAsync:functionName - withParameters:parameters - sessionToken:sessionToken]; - }]; -} - -+ (void)callFunctionInBackground:(NSString *)function - withParameters:(NSDictionary *)parameters - target:(id)target - selector:(SEL)selector { - [self callFunctionInBackground:function withParameters:parameters block:^(id results, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:results object:error]; - }]; -} - -+ (void)callFunctionInBackground:(NSString *)function - withParameters:(NSDictionary *)parameters - block:(PFIdResultBlock)block { - [[self callFunctionInBackground:function withParameters:parameters] thenCallBackOnMainThreadAsync:block]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFConfig.h b/FoodbLog/Pods/Parse/Parse/PFConfig.h deleted file mode 100644 index 7420692..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFConfig.h +++ /dev/null @@ -1,106 +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. - */ - -#import - -#import - -#import -#import - -PF_ASSUME_NONNULL_BEGIN - -@class PFConfig; - -typedef void(^PFConfigResultBlock)(PFConfig *PF_NULLABLE_S config, NSError *PF_NULLABLE_S error); - -/*! - `PFConfig` is a representation of the remote configuration object. - It enables you to add things like feature gating, a/b testing or simple "Message of the day". - */ -@interface PFConfig : NSObject - -///-------------------------------------- -/// @name Current Config -///-------------------------------------- - -/*! - @abstract Returns the most recently fetched config. - - @discussion If there was no config fetched - this method will return an empty instance of `PFConfig`. - - @returns Current, last fetched instance of PFConfig. - */ -+ (PFConfig *)currentConfig; - -///-------------------------------------- -/// @name Retrieving Config -///-------------------------------------- - -/*! - @abstract Gets the `PFConfig` object *synchronously* from the server. - - @returns Instance of `PFConfig` if the operation succeeded, otherwise `nil`. - */ -+ (PF_NULLABLE PFConfig *)getConfig PF_SWIFT_UNAVAILABLE; - -/*! - @abstract Gets the `PFConfig` object *synchronously* from the server and sets an error if it occurs. - - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Instance of PFConfig if the operation succeeded, otherwise `nil`. - */ -+ (PF_NULLABLE PFConfig *)getConfig:(NSError **)error; - -/*! - @abstract Gets the `PFConfig` *asynchronously* and sets it as a result of a task. - - @returns The task, that encapsulates the work being done. - */ -+ (BFTask PF_GENERIC(PFConfig *)*)getConfigInBackground; - -/*! - @abstract Gets the `PFConfig` *asynchronously* and executes the given callback block. - - @param block The block to execute. - It should have the following argument signature: `^(PFConfig *config, NSError *error)`. - */ -+ (void)getConfigInBackgroundWithBlock:(PF_NULLABLE PFConfigResultBlock)block; - -///-------------------------------------- -/// @name Parameters -///-------------------------------------- - -/*! - @abstract Returns the object associated with a given key. - - @param key The key for which to return the corresponding configuration value. - - @returns The value associated with `key`, or `nil` if there is no such value. - */ -- (PF_NULLABLE_S id)objectForKey:(NSString *)key; - -/*! - @abstract Returns the object associated with a given key. - - @discussion This method enables usage of literal syntax on `PFConfig`. - E.g. `NSString *value = config[@"key"];` - - @see objectForKey: - - @param keyedSubscript The keyed subscript for which to return the corresponding configuration value. - - @returns The value associated with `key`, or `nil` if there is no such value. - */ -- (PF_NULLABLE_S id)objectForKeyedSubscript:(NSString *)keyedSubscript; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFConfig.m b/FoodbLog/Pods/Parse/Parse/PFConfig.m deleted file mode 100644 index b4d1655..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFConfig.m +++ /dev/null @@ -1,113 +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. - */ - -#import "PFConfig.h" - -#import "BFTask+Private.h" -#import "PFConfigController.h" -#import "PFCoreManager.h" -#import "PFCurrentConfigController.h" -#import "PFCurrentUserController.h" -#import "PFInternalUtils.h" -#import "PFUserPrivate.h" -#import "Parse_Private.h" - -NSString *const PFConfigParametersRESTKey = @"params"; - -@interface PFConfig () - -@property (atomic, copy, readwrite) NSDictionary *parametersDictionary; - -@end - -@implementation PFConfig - -///-------------------------------------- -#pragma mark - Class -///-------------------------------------- - -+ (PFConfigController *)_configController { - return [Parse _currentManager].coreManager.configController; -} - -#pragma mark Public - -+ (PFConfig *)currentConfig { - return [[[self _configController].currentConfigController getCurrentConfigAsync] waitForResult:nil - withMainThreadWarning:NO]; -} - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithFetchedConfig:(NSDictionary *)resultDictionary { - self = [self init]; - if (!self) return nil; - - _parametersDictionary = resultDictionary[PFConfigParametersRESTKey]; - - return self; -} - -///-------------------------------------- -#pragma mark - Fetch -///-------------------------------------- - -+ (PFConfig *)getConfig { - return [self getConfig:nil]; -} - -+ (PFConfig *)getConfig:(NSError **)error { - return [[self getConfigInBackground] waitForResult:error]; -} - -+ (BFTask *)getConfigInBackground { - PFCurrentUserController *controller = [Parse _currentManager].coreManager.currentUserController; - return [[controller getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { - NSString *sessionToken = task.result; - return [[self _configController] fetchConfigAsyncWithSessionToken:sessionToken]; - }]; -} - -+ (void)getConfigInBackgroundWithBlock:(PFConfigResultBlock)block { - [[self getConfigInBackground] thenCallBackOnMainThreadAsync:block]; -} - -///-------------------------------------- -#pragma mark - Getting Values -///-------------------------------------- - -- (id)objectForKey:(NSString *)key { - return _parametersDictionary[key]; -} - -- (id)objectForKeyedSubscript:(NSString *)keyedSubscript { - return _parametersDictionary[keyedSubscript]; -} - -#pragma mark Equality Testing - -- (NSUInteger)hash { - return [_parametersDictionary hash]; -} - -- (BOOL)isEqual:(id)object { - if ([object isKindOfClass:[PFConfig class]]) { - PFConfig *other = object; - - // Compare pointers first, to account for nil dictionary - return self.parametersDictionary == other.parametersDictionary || - [self.parametersDictionary isEqual:other.parametersDictionary]; - } - - return NO; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFConstants.h b/FoodbLog/Pods/Parse/Parse/PFConstants.h deleted file mode 100644 index c46eab0..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFConstants.h +++ /dev/null @@ -1,509 +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. - */ - -#import - -#import - -@class PFObject; -@class PFUser; - -///-------------------------------------- -/// @name Version -///-------------------------------------- - -#define PARSE_VERSION @"1.9.0" - -extern NSInteger const PARSE_API_VERSION; - -///-------------------------------------- -/// @name Platform -///-------------------------------------- - -#define PARSE_IOS_ONLY (TARGET_OS_IPHONE) -#define PARSE_OSX_ONLY (TARGET_OS_MAC && !(TARGET_OS_IPHONE)) - -extern NSString *const PF_NONNULL_S kPFDeviceType; - -#if PARSE_IOS_ONLY -#import -#else -#import -#endif - -///-------------------------------------- -/// @name Server -///-------------------------------------- - -extern NSString *const PF_NONNULL_S kPFParseServer; - -///-------------------------------------- -/// @name Cache Policies -///-------------------------------------- - -/*! - `PFCachePolicy` specifies different caching policies that could be used with . - - This lets you show data when the user's device is offline, - or when the app has just started and network requests have not yet had time to complete. - Parse takes care of automatically flushing the cache when it takes up too much space. - - @warning Cache policy could only be set when Local Datastore is not enabled. - - @see PFQuery - */ -typedef NS_ENUM(uint8_t, PFCachePolicy) { - /*! - @abstract The query does not load from the cache or save results to the cache. - This is the default cache policy. - */ - kPFCachePolicyIgnoreCache = 0, - /*! - @abstract The query only loads from the cache, ignoring the network. - If there are no cached results, this causes a `NSError` with `kPFErrorCacheMiss` code. - */ - kPFCachePolicyCacheOnly, - /*! - @abstract The query does not load from the cache, but it will save results to the cache. - */ - kPFCachePolicyNetworkOnly, - /*! - @abstract The query first tries to load from the cache, but if that fails, it loads results from the network. - If there are no cached results, this causes a `NSError` with `kPFErrorCacheMiss` code. - */ - kPFCachePolicyCacheElseNetwork, - /*! - @abstract The query first tries to load from the network, but if that fails, it loads results from the cache. - If there are no cached results, this causes a `NSError` with `kPFErrorCacheMiss` code. - */ - kPFCachePolicyNetworkElseCache, - /*! - @abstract The query first loads from the cache, then loads from the network. - The callback will be called twice - first with the cached results, then with the network results. - Since it returns two results at different times, this cache policy cannot be used with synchronous or task methods. - */ - kPFCachePolicyCacheThenNetwork -}; - -///-------------------------------------- -/// @name Logging Levels -///-------------------------------------- - -/*! - `PFLogLevel` enum specifies different levels of logging that could be used to limit or display more messages in logs. - - @see [Parse setLogLevel:] - @see [Parse logLevel] - */ -typedef NS_ENUM(uint8_t, PFLogLevel) { - /*! - Log level that disables all logging. - */ - PFLogLevelNone = 0, - /*! - Log level that if set is going to output error messages to the log. - */ - PFLogLevelError = 1, - /*! - Log level that if set is going to output the following messages to log: - - Errors - - Warnings - */ - PFLogLevelWarning = 2, - /*! - Log level that if set is going to output the following messages to log: - - Errors - - Warnings - - Informational messages - */ - PFLogLevelInfo = 3, - /*! - Log level that if set is going to output the following messages to log: - - Errors - - Warnings - - Informational messages - - Debug messages - */ - PFLogLevelDebug = 4 -}; - -///-------------------------------------- -/// @name Errors -///-------------------------------------- - -extern NSString *const PF_NONNULL_S PFParseErrorDomain; - -/*! - `PFErrorCode` enum contains all custom error codes that are used as `code` for `NSError` for callbacks on all classes. - - These codes are used when `domain` of `NSError` that you receive is set to `PFParseErrorDomain`. - */ -typedef NS_ENUM(NSInteger, PFErrorCode) { - /*! - @abstract Internal server error. No information available. - */ - kPFErrorInternalServer = 1, - /*! - @abstract The connection to the Parse servers failed. - */ - kPFErrorConnectionFailed = 100, - /*! - @abstract Object doesn't exist, or has an incorrect password. - */ - kPFErrorObjectNotFound = 101, - /*! - @abstract You tried to find values matching a datatype that doesn't - support exact database matching, like an array or a dictionary. - */ - kPFErrorInvalidQuery = 102, - /*! - @abstract Missing or invalid classname. Classnames are case-sensitive. - They must start with a letter, and `a-zA-Z0-9_` are the only valid characters. - */ - kPFErrorInvalidClassName = 103, - /*! - @abstract Missing object id. - */ - kPFErrorMissingObjectId = 104, - /*! - @abstract Invalid key name. Keys are case-sensitive. - They must start with a letter, and `a-zA-Z0-9_` are the only valid characters. - */ - kPFErrorInvalidKeyName = 105, - /*! - @abstract Malformed pointer. Pointers must be arrays of a classname and an object id. - */ - kPFErrorInvalidPointer = 106, - /*! - @abstract Malformed json object. A json dictionary is expected. - */ - kPFErrorInvalidJSON = 107, - /*! - @abstract Tried to access a feature only available internally. - */ - kPFErrorCommandUnavailable = 108, - /*! - @abstract Field set to incorrect type. - */ - kPFErrorIncorrectType = 111, - /*! - @abstract Invalid channel name. A channel name is either an empty string (the broadcast channel) - or contains only `a-zA-Z0-9_` characters and starts with a letter. - */ - kPFErrorInvalidChannelName = 112, - /*! - @abstract Invalid device token. - */ - kPFErrorInvalidDeviceToken = 114, - /*! - @abstract Push is misconfigured. See details to find out how. - */ - kPFErrorPushMisconfigured = 115, - /*! - @abstract The object is too large. - */ - kPFErrorObjectTooLarge = 116, - /*! - @abstract That operation isn't allowed for clients. - */ - kPFErrorOperationForbidden = 119, - /*! - @abstract The results were not found in the cache. - */ - kPFErrorCacheMiss = 120, - /*! - @abstract Keys in `NSDictionary` values may not include `$` or `.`. - */ - kPFErrorInvalidNestedKey = 121, - /*! - @abstract Invalid file name. - A file name can contain only `a-zA-Z0-9_.` characters and should be between 1 and 36 characters. - */ - kPFErrorInvalidFileName = 122, - /*! - @abstract Invalid ACL. An ACL with an invalid format was saved. This should not happen if you use . - */ - kPFErrorInvalidACL = 123, - /*! - @abstract The request timed out on the server. Typically this indicates the request is too expensive. - */ - kPFErrorTimeout = 124, - /*! - @abstract The email address was invalid. - */ - kPFErrorInvalidEmailAddress = 125, - /*! - A unique field was given a value that is already taken. - */ - kPFErrorDuplicateValue = 137, - /*! - @abstract Role's name is invalid. - */ - kPFErrorInvalidRoleName = 139, - /*! - @abstract Exceeded an application quota. Upgrade to resolve. - */ - kPFErrorExceededQuota = 140, - /*! - @abstract Cloud Code script had an error. - */ - kPFScriptError = 141, - /*! - @abstract Cloud Code validation failed. - */ - kPFValidationError = 142, - /*! - @abstract Product purchase receipt is missing. - */ - kPFErrorReceiptMissing = 143, - /*! - @abstract Product purchase receipt is invalid. - */ - kPFErrorInvalidPurchaseReceipt = 144, - /*! - @abstract Payment is disabled on this device. - */ - kPFErrorPaymentDisabled = 145, - /*! - @abstract The product identifier is invalid. - */ - kPFErrorInvalidProductIdentifier = 146, - /*! - @abstract The product is not found in the App Store. - */ - kPFErrorProductNotFoundInAppStore = 147, - /*! - @abstract The Apple server response is not valid. - */ - kPFErrorInvalidServerResponse = 148, - /*! - @abstract Product fails to download due to file system error. - */ - kPFErrorProductDownloadFileSystemFailure = 149, - /*! - @abstract Fail to convert data to image. - */ - kPFErrorInvalidImageData = 150, - /*! - @abstract Unsaved file. - */ - kPFErrorUnsavedFile = 151, - /*! - @abstract Fail to delete file. - */ - kPFErrorFileDeleteFailure = 153, - /*! - @abstract Application has exceeded its request limit. - */ - kPFErrorRequestLimitExceeded = 155, - /*! - @abstract Invalid event name. - */ - kPFErrorInvalidEventName = 160, - /*! - @abstract Username is missing or empty. - */ - kPFErrorUsernameMissing = 200, - /*! - @abstract Password is missing or empty. - */ - kPFErrorUserPasswordMissing = 201, - /*! - @abstract Username has already been taken. - */ - kPFErrorUsernameTaken = 202, - /*! - @abstract Email has already been taken. - */ - kPFErrorUserEmailTaken = 203, - /*! - @abstract The email is missing, and must be specified. - */ - kPFErrorUserEmailMissing = 204, - /*! - @abstract A user with the specified email was not found. - */ - kPFErrorUserWithEmailNotFound = 205, - /*! - @abstract The user cannot be altered by a client without the session. - */ - kPFErrorUserCannotBeAlteredWithoutSession = 206, - /*! - @abstract Users can only be created through sign up. - */ - kPFErrorUserCanOnlyBeCreatedThroughSignUp = 207, - /*! - @abstract An existing Facebook account already linked to another user. - */ - kPFErrorFacebookAccountAlreadyLinked = 208, - /*! - @abstract An existing account already linked to another user. - */ - kPFErrorAccountAlreadyLinked = 208, - /*! - Error code indicating that the current session token is invalid. - */ - kPFErrorInvalidSessionToken = 209, - kPFErrorUserIdMismatch = 209, - /*! - @abstract Facebook id missing from request. - */ - kPFErrorFacebookIdMissing = 250, - /*! - @abstract Linked id missing from request. - */ - kPFErrorLinkedIdMissing = 250, - /*! - @abstract Invalid Facebook session. - */ - kPFErrorFacebookInvalidSession = 251, - /*! - @abstract Invalid linked session. - */ - kPFErrorInvalidLinkedSession = 251, -}; - -///-------------------------------------- -/// @name Blocks -///-------------------------------------- - -typedef void (^PFBooleanResultBlock)(BOOL succeeded, NSError *PF_NULLABLE_S error); -typedef void (^PFIntegerResultBlock)(int number, NSError *PF_NULLABLE_S error); -typedef void (^PFArrayResultBlock)(NSArray *PF_NULLABLE_S objects, NSError *PF_NULLABLE_S error); -typedef void (^PFObjectResultBlock)(PFObject *PF_NULLABLE_S object, NSError *PF_NULLABLE_S error); -typedef void (^PFSetResultBlock)(NSSet *PF_NULLABLE_S channels, NSError *PF_NULLABLE_S error); -typedef void (^PFUserResultBlock)(PFUser *PF_NULLABLE_S user, NSError *PF_NULLABLE_S error); -typedef void (^PFDataResultBlock)(NSData *PF_NULLABLE_S data, NSError *PF_NULLABLE_S error); -typedef void (^PFDataStreamResultBlock)(NSInputStream *PF_NULLABLE_S stream, NSError *PF_NULLABLE_S error); -typedef void (^PFFilePathResultBlock)(NSString *PF_NULLABLE_S filePath, NSError *PF_NULLABLE_S error); -typedef void (^PFStringResultBlock)(NSString *PF_NULLABLE_S string, NSError *PF_NULLABLE_S error); -typedef void (^PFIdResultBlock)(PF_NULLABLE_S id object, NSError *PF_NULLABLE_S error); -typedef void (^PFProgressBlock)(int percentDone); - -///-------------------------------------- -/// @name Network Notifications -///-------------------------------------- - -/*! - @abstract The name of the notification that is going to be sent before any URL request is sent. - */ -extern NSString *const PF_NONNULL_S PFNetworkWillSendURLRequestNotification; - -/*! - @abstract The name of the notification that is going to be sent after any URL response is received. - */ -extern NSString *const PF_NONNULL_S PFNetworkDidReceiveURLResponseNotification; - -/*! - @abstract The key of request(NSURLRequest) in the userInfo dictionary of a notification. - @note This key is populated in userInfo, only if `PFLogLevel` on `Parse` is set to `PFLogLevelDebug`. - */ -extern NSString *const PF_NONNULL_S PFNetworkNotificationURLRequestUserInfoKey; - -/*! - @abstract The key of response(NSHTTPURLResponse) in the userInfo dictionary of a notification. - @note This key is populated in userInfo, only if `PFLogLevel` on `Parse` is set to `PFLogLevelDebug`. - */ -extern NSString *const PF_NONNULL_S PFNetworkNotificationURLResponseUserInfoKey; - -/*! - @abstract The key of repsonse body (usually `NSString` with JSON) in the userInfo dictionary of a notification. - @note This key is populated in userInfo, only if `PFLogLevel` on `Parse` is set to `PFLogLevelDebug`. - */ -extern NSString *const PF_NONNULL_S PFNetworkNotificationURLResponseBodyUserInfoKey; - - -///-------------------------------------- -/// @name Deprecated Macros -///-------------------------------------- - -#ifndef PARSE_DEPRECATED -# ifdef __deprecated_msg -# define PARSE_DEPRECATED(_MSG) __deprecated_msg(_MSG) -# else -# ifdef __deprecated -# define PARSE_DEPRECATED(_MSG) __attribute__((deprecated)) -# else -# define PARSE_DEPRECATED(_MSG) -# endif -# endif -#endif - -///-------------------------------------- -/// @name Extensions Macros -///-------------------------------------- - -#ifndef PF_EXTENSION_UNAVAILABLE -# if PARSE_IOS_ONLY -# ifdef NS_EXTENSION_UNAVAILABLE_IOS -# define PF_EXTENSION_UNAVAILABLE(_msg) NS_EXTENSION_UNAVAILABLE_IOS(_msg) -# else -# define PF_EXTENSION_UNAVAILABLE(_msg) -# endif -# else -# ifdef NS_EXTENSION_UNAVAILABLE_MAC -# define PF_EXTENSION_UNAVAILABLE(_msg) NS_EXTENSION_UNAVAILABLE_MAC(_msg) -# else -# define PF_EXTENSION_UNAVAILABLE(_msg) -# endif -# endif -#endif - -///-------------------------------------- -/// @name Swift Macros -///-------------------------------------- - -#ifndef PF_SWIFT_UNAVAILABLE -# ifdef NS_SWIFT_UNAVAILABLE -# define PF_SWIFT_UNAVAILABLE NS_SWIFT_UNAVAILABLE("") -# else -# define PF_SWIFT_UNAVAILABLE -# endif -#endif - -///-------------------------------------- -/// @name Obj-C Generics Macros -///-------------------------------------- - -#if __has_feature(objc_generics) || __has_extension(objc_generics) -# define PF_GENERIC(...) <__VA_ARGS__> -#else -# define PF_GENERIC(...) -# define PFGenericObject PFObject * -#endif - -///-------------------------------------- -/// @name Platform Availability Defines -///-------------------------------------- - -#ifndef TARGET_OS_IOS -# define TARGET_OS_IOS TARGET_OS_IPHONE -#endif -#ifndef TARGET_OS_WATCH -# define TARGET_OS_WATCH 0 -#endif -#ifndef TARGET_OS_TV -# define TARGET_OS_TV 0 -#endif - -#ifndef PF_TARGET_OS_OSX -# define PF_TARGET_OS_OSX TARGET_OS_MAC && !TARGET_OS_IOS && !TARGET_OS_WATCH && !TARGET_OS_TV -#endif - -///-------------------------------------- -/// @name Avaiability Macros -///-------------------------------------- - -#ifndef PF_WATCH_UNAVAILABLE -# ifdef __WATCHOS_UNAVAILABLE -# define PF_WATCH_UNAVAILABLE __WATCHOS_UNAVAILABLE -# else -# define PF_WATCH_UNAVAILABLE -# endif -#endif diff --git a/FoodbLog/Pods/Parse/Parse/PFConstants.m b/FoodbLog/Pods/Parse/Parse/PFConstants.m deleted file mode 100644 index 174b5a7..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFConstants.m +++ /dev/null @@ -1,32 +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. - */ - -#import "PFConstants.h" - -NSInteger const PARSE_API_VERSION = 2; - -#if PARSE_IOS_ONLY -NSString *const kPFDeviceType = @"ios"; -#else -NSString *const kPFDeviceType = @"osx"; -#endif - -NSString *const kPFParseServer = @"https://api.parse.com"; - -NSString *const PFParseErrorDomain = @"Parse"; - -///-------------------------------------- -#pragma mark - Network Notifications -///-------------------------------------- - -NSString *const PFNetworkWillSendURLRequestNotification = @"PFNetworkWillSendURLRequestNotification"; -NSString *const PFNetworkDidReceiveURLResponseNotification = @"PFNetworkDidReceiveURLResponseNotification"; -NSString *const PFNetworkNotificationURLRequestUserInfoKey = @"PFNetworkNotificationURLRequestUserInfoKey"; -NSString *const PFNetworkNotificationURLResponseUserInfoKey = @"PFNetworkNotificationURLResponseUserInfoKey"; -NSString *const PFNetworkNotificationURLResponseBodyUserInfoKey = @"PFNetworkNotificationURLResponseBodyUserInfoKey"; diff --git a/FoodbLog/Pods/Parse/Parse/PFFile.h b/FoodbLog/Pods/Parse/Parse/PFFile.h deleted file mode 100644 index c2313cc..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFFile.h +++ /dev/null @@ -1,446 +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. - */ - -#import - -#import - -#import - -PF_ASSUME_NONNULL_BEGIN - -/*! - `PFFile` representes a file of binary data stored on the Parse servers. - This can be a image, video, or anything else that an application needs to reference in a non-relational way. - */ -@interface PFFile : NSObject - -///-------------------------------------- -/// @name Creating a PFFile -///-------------------------------------- - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/*! - @abstract Creates a file with given data. A name will be assigned to it by the server. - - @param data The contents of the new `PFFile`. - - @returns A new `PFFile`. - */ -+ (PF_NULLABLE instancetype)fileWithData:(NSData *)data; - -/*! - @abstract Creates a file with given data and name. - - @param name The name of the new PFFile. The file name must begin with and - alphanumeric character, and consist of alphanumeric characters, periods, - spaces, underscores, or dashes. - @param data The contents of the new `PFFile`. - - @returns A new `PFFile` object. - */ -+ (PF_NULLABLE instancetype)fileWithName:(PF_NULLABLE NSString *)name data:(NSData *)data; - -/*! - @abstract Creates a file with the contents of another file. - - @warning This method raises an exception if the file at path is not accessible - or if there is not enough disk space left. - - @param name The name of the new `PFFile`. The file name must begin with and alphanumeric character, - and consist of alphanumeric characters, periods, spaces, underscores, or dashes. - @param path The path to the file that will be uploaded to Parse. - - @returns A new `PFFile` instance. - */ -+ (PF_NULLABLE instancetype)fileWithName:(PF_NULLABLE NSString *)name - contentsAtPath:(NSString *)path PF_SWIFT_UNAVAILABLE; - -/*! - @abstract Creates a file with the contents of another file. - - @param name The name of the new `PFFile`. The file name must begin with and alphanumeric character, - and consist of alphanumeric characters, periods, spaces, underscores, or dashes. - @param path The path to the file that will be uploaded to Parse. - @param error On input, a pointer to an error object. - If an error occurs, this pointer is set to an actual error object containing the error information. - You may specify `nil` for this parameter if you do not want the error information. - - @returns A new `PFFile` instance or `nil` if the error occured. - */ -+ (PF_NULLABLE instancetype)fileWithName:(PF_NULLABLE NSString *)name - contentsAtPath:(NSString *)path - error:(NSError **)error; - -/*! - @abstract Creates a file with given data, name and content type. - - @warning This method raises an exception if the data supplied is not accessible or could not be saved. - - @param name The name of the new `PFFile`. The file name must begin with and alphanumeric character, - and consist of alphanumeric characters, periods, spaces, underscores, or dashes. - @param data The contents of the new `PFFile`. - @param contentType Represents MIME type of the data. - - @returns A new `PFFile` instance. - */ -+ (PF_NULLABLE instancetype)fileWithName:(PF_NULLABLE NSString *)name - data:(NSData *)data - contentType:(PF_NULLABLE NSString *)contentType PF_SWIFT_UNAVAILABLE; - -/*! - @abstract Creates a file with given data, name and content type. - - @param name The name of the new `PFFile`. The file name must begin with and alphanumeric character, - and consist of alphanumeric characters, periods, spaces, underscores, or dashes. - @param data The contents of the new `PFFile`. - @param contentType Represents MIME type of the data. - @param error On input, a pointer to an error object. - If an error occurs, this pointer is set to an actual error object containing the error information. - You may specify `nil` for this parameter if you do not want the error information. - - @returns A new `PFFile` instance or `nil` if the error occured. - */ -+ (PF_NULLABLE instancetype)fileWithName:(PF_NULLABLE NSString *)name - data:(NSData *)data - contentType:(PF_NULLABLE NSString *)contentType - error:(NSError **)error; - -/*! - @abstract Creates a file with given data and content type. - - @param data The contents of the new `PFFile`. - @param contentType Represents MIME type of the data. - - @returns A new `PFFile` object. - */ -+ (instancetype)fileWithData:(NSData *)data contentType:(PF_NULLABLE NSString *)contentType; - -///-------------------------------------- -/// @name File Properties -///-------------------------------------- - -/*! - @abstract The name of the file. - - @discussion Before the file is saved, this is the filename given by - the user. After the file is saved, that name gets prefixed with a unique - identifier. - */ -@property (nonatomic, copy, readonly) NSString *name; - -/*! - @abstract The url of the file. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, copy, readonly) NSString *url; - -/*! - @abstract Whether the file has been uploaded for the first time. - */ -@property (nonatomic, assign, readonly) BOOL isDirty; - -///-------------------------------------- -/// @name Storing Data with Parse -///-------------------------------------- - -/*! - @abstract Saves the file *synchronously*. - - @returns Returns whether the save succeeded. - */ -- (BOOL)save PF_SWIFT_UNAVAILABLE; - -/*! - @abstract Saves the file *synchronously* and sets an error if it occurs. - - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns whether the save succeeded. - */ -- (BOOL)save:(NSError **)error; - -/*! - @abstract Saves the file *asynchronously*. - - @returns The task, that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(NSNumber *)*)saveInBackground; - -/*! - @abstract Saves the file *asynchronously* - - @param progressBlock The block should have the following argument signature: `^(int percentDone)` - - @returns The task, that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(NSNumber *)*)saveInBackgroundWithProgressBlock:(PF_NULLABLE PFProgressBlock)progressBlock; - -/*! - @abstract Saves the file *asynchronously* and executes the given block. - - @param block The block should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - */ -- (void)saveInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block; - -/*! - @abstract Saves the file *asynchronously* and executes the given block. - - @discussion This method will execute the progressBlock periodically with the percent progress. - `progressBlock` will get called with `100` before `resultBlock` is called. - - @param block The block should have the following argument signature: `^(BOOL succeeded, NSError *error)` - @param progressBlock The block should have the following argument signature: `^(int percentDone)` - */ -- (void)saveInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block - progressBlock:(PF_NULLABLE PFProgressBlock)progressBlock; - -/* - @abstract Saves the file *asynchronously* and calls the given callback. - - @param target The object to call selector on. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - `[result boolValue]` will tell you whether the call succeeded or not. - */ -- (void)saveInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; - -///-------------------------------------- -/// @name Getting Data from Parse -///-------------------------------------- - -/*! - @abstract Whether the data is available in memory or needs to be downloaded. - */ -@property (assign, readonly) BOOL isDataAvailable; - -/*! - @abstract *Synchronously* gets the data from cache if available or fetches its contents from the network. - - @returns The `NSData` object containing file data. Returns `nil` if there was an error in fetching. - */ -- (PF_NULLABLE NSData *)getData PF_SWIFT_UNAVAILABLE; - -/*! - @abstract This method is like but avoids ever holding the entire `PFFile` contents in memory at once. - - @discussion This can help applications with many large files avoid memory warnings. - - @returns A stream containing the data. Returns `nil` if there was an error in fetching. - */ -- (PF_NULLABLE NSInputStream *)getDataStream PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* gets the data from cache if available or fetches its contents from the network. - Sets an error if it occurs. - - @param error Pointer to an `NSError` that will be set if necessary. - - @returns The `NSData` object containing file data. Returns `nil` if there was an error in fetching. - */ -- (PF_NULLABLE NSData *)getData:(NSError **)error; - -/*! - @abstract This method is like but avoids ever holding the entire `PFFile` contents in memory at once. - - @param error Pointer to an `NSError` that will be set if necessary. - - @returns A stream containing the data. Returns nil if there was an error in - fetching. - */ -- (PF_NULLABLE NSInputStream *)getDataStream:(NSError **)error; - -/*! - @abstract This method is like but it fetches asynchronously to avoid blocking the current thread. - - @see getData - - @returns The task, that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(NSData *)*)getDataInBackground; - -/*! - @abstract This method is like but it fetches asynchronously to avoid blocking the current thread. - - @discussion This can help applications with many large files avoid memory warnings. - - @see getData - - @param progressBlock The block should have the following argument signature: ^(int percentDone) - - @returns The task, that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(NSData *)*)getDataInBackgroundWithProgressBlock:(PF_NULLABLE PFProgressBlock)progressBlock; - -/*! - @abstract This method is like but avoids - ever holding the entire `PFFile` contents in memory at once. - - @discussion This can help applications with many large files avoid memory warnings. - - @returns The task, that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(NSInputStream *)*)getDataStreamInBackground; - -/*! - @abstract This method is like , but yields a live-updating stream. - - @discussion Instead of , which yields a stream that can be read from only after the request has - completed, this method gives you a stream directly written to by the HTTP session. As this stream is not pre-buffered, - it is strongly advised to use the `NSStreamDelegate` methods, in combination with a run loop, to consume the data in - the stream, to do proper async file downloading. - - @note You MUST open this stream before reading from it. - @note Do NOT call on this task from the main thread. It may result in a deadlock. - - @returns A task that produces a *live* stream that is being written to with the data from the server. - */ -- (BFTask PF_GENERIC(NSInputStream *)*)getDataDownloadStreamInBackground; - -/*! - @abstract This method is like but avoids - ever holding the entire `PFFile` contents in memory at once. - - @discussion This can help applications with many large files avoid memory warnings. - @param progressBlock The block should have the following argument signature: ^(int percentDone) - - @returns The task, that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(NSInputStream *)*)getDataStreamInBackgroundWithProgressBlock:(PF_NULLABLE PFProgressBlock)progressBlock; - -/*! - @abstract This method is like , but yields a live-updating stream. - - @discussion Instead of , which yields a stream that can be read from only after the request has - completed, this method gives you a stream directly written to by the HTTP session. As this stream is not pre-buffered, - it is strongly advised to use the `NSStreamDelegate` methods, in combination with a run loop, to consume the data in - the stream, to do proper async file downloading. - - @note You MUST open this stream before reading from it. - @note Do NOT call on this task from the main thread. It may result in a deadlock. - - @param progressBlock The block should have the following argument signature: `^(int percentDone)` - - @returns A task that produces a *live* stream that is being written to with the data from the server. - */ -- (BFTask PF_GENERIC(NSInputStream *)*)getDataDownloadStreamInBackgroundWithProgressBlock:(PF_NULLABLE PFProgressBlock)progressBlock; - -/*! - @abstract *Asynchronously* gets the data from cache if available or fetches its contents from the network. - - @param block The block should have the following argument signature: `^(NSData *result, NSError *error)` - */ -- (void)getDataInBackgroundWithBlock:(PF_NULLABLE PFDataResultBlock)block; - -/*! - @abstract This method is like but avoids - ever holding the entire `PFFile` contents in memory at once. - - @discussion This can help applications with many large files avoid memory warnings. - - @param block The block should have the following argument signature: `(NSInputStream *result, NSError *error)` - */ -- (void)getDataStreamInBackgroundWithBlock:(PF_NULLABLE PFDataStreamResultBlock)block; - -/*! - @abstract *Asynchronously* gets the data from cache if available or fetches its contents from the network. - - @discussion This method will execute the progressBlock periodically with the percent progress. - `progressBlock` will get called with `100` before `resultBlock` is called. - - @param resultBlock The block should have the following argument signature: ^(NSData *result, NSError *error) - @param progressBlock The block should have the following argument signature: ^(int percentDone) - */ -- (void)getDataInBackgroundWithBlock:(PF_NULLABLE PFDataResultBlock)resultBlock - progressBlock:(PF_NULLABLE PFProgressBlock)progressBlock; - -/*! - @abstract This method is like but avoids - ever holding the entire `PFFile` contents in memory at once. - - @discussion This can help applications with many large files avoid memory warnings. - - @param resultBlock The block should have the following argument signature: `^(NSInputStream *result, NSError *error)`. - @param progressBlock The block should have the following argument signature: `^(int percentDone)`. - */ -- (void)getDataStreamInBackgroundWithBlock:(PF_NULLABLE PFDataStreamResultBlock)resultBlock - progressBlock:(PF_NULLABLE PFProgressBlock)progressBlock; - -/* - @abstract *Asynchronously* gets the data from cache if available or fetches its contents from the network. - - @param target The object to call selector on. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(NSData *)result error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - */ -- (void)getDataInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; - -/*! - @abstract *Asynchronously* gets the file path for file from cache if available or fetches its contents from the network. - - @note The file path may change between versions of SDK. - @note If you overwrite the contents of the file at returned path it will persist those change - until the file cache is cleared. - - @returns The task, with the result set to `NSString` representation of a file path. - */ -- (BFTask PF_GENERIC(NSString *)*)getFilePathInBackground; - -/*! - @abstract *Asynchronously* gets the file path for file from cache if available or fetches its contents from the network. - - @note The file path may change between versions of SDK. - @note If you overwrite the contents of the file at returned path it will persist those change - until the file cache is cleared. - - @param progressBlock The block should have the following argument signature: `^(int percentDone)`. - - @returns The task, with the result set to `NSString` representation of a file path. - */ -- (BFTask PF_GENERIC(NSString *)*)getFilePathInBackgroundWithProgressBlock:(PF_NULLABLE PFProgressBlock)progressBlock; - -/*! - @abstract *Asynchronously* gets the file path for file from cache if available or fetches its contents from the network. - - @note The file path may change between versions of SDK. - @note If you overwrite the contents of the file at returned path it will persist those change - until the file cache is cleared. - - @param block The block should have the following argument signature: `^(NSString *filePath, NSError *error)`. - */ -- (void)getFilePathInBackgroundWithBlock:(PF_NULLABLE PFFilePathResultBlock)block; - -/*! - @abstract *Asynchronously* gets the file path for file from cache if available or fetches its contents from the network. - - @note The file path may change between versions of SDK. - @note If you overwrite the contents of the file at returned path it will persist those change - until the file cache is cleared. - - @param block The block should have the following argument signature: `^(NSString *filePath, NSError *error)`. - @param progressBlock The block should have the following argument signature: `^(int percentDone)`. - */ -- (void)getFilePathInBackgroundWithBlock:(PF_NULLABLE PFFilePathResultBlock)block - progressBlock:(PF_NULLABLE PFProgressBlock)progressBlock; - -///-------------------------------------- -/// @name Interrupting a Transfer -///-------------------------------------- - -/*! - @abstract Cancels the current request (upload or download of file). - */ -- (void)cancel; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFFile.m b/FoodbLog/Pods/Parse/Parse/PFFile.m deleted file mode 100644 index 26fcda3..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFFile.m +++ /dev/null @@ -1,546 +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. - */ - -#import "PFFile.h" -#import "PFFile_Private.h" - -#import - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFAsyncTaskQueue.h" -#import "PFCommandResult.h" -#import "PFCoreManager.h" -#import "PFErrorUtilities.h" -#import "PFFileController.h" -#import "PFFileManager.h" -#import "PFFileStagingController.h" -#import "PFInternalUtils.h" -#import "PFMacros.h" -#import "PFMutableFileState.h" -#import "PFRESTFileCommand.h" -#import "PFThreadsafety.h" -#import "PFUserPrivate.h" -#import "Parse_Private.h" - -static const unsigned long long PFFileMaxFileSize = 10 * 1024 * 1024; // 10 MB - -@interface PFFile () { - dispatch_queue_t _synchronizationQueue; -} - -@property (nonatomic, strong, readwrite) PFFileState *state; -@property (nonatomic, copy, readonly) NSString *stagedFilePath; -@property (nonatomic, assign, readonly, getter=isDirty) BOOL dirty; - -// -// Private -@property (nonatomic, strong) PFAsyncTaskQueue *taskQueue; -@property (nonatomic, strong) BFCancellationTokenSource *cancellationTokenSource; - -@end - -@implementation PFFile - -@synthesize stagedFilePath = _stagedFilePath; - -///-------------------------------------- -#pragma mark - Public -///-------------------------------------- - -#pragma mark Init - -+ (instancetype)fileWithData:(NSData *)data { - return [self fileWithName:nil data:data contentType:nil]; -} - -+ (instancetype)fileWithName:(NSString *)name data:(NSData *)data { - return [self fileWithName:name data:data contentType:nil]; -} - -+ (instancetype)fileWithName:(NSString *)name contentsAtPath:(NSString *)path { - NSError *error = nil; - PFFile *file = [self fileWithName:name contentsAtPath:path error:&error]; - PFParameterAssert(!error, @"Could not access file at %@: %@", path, error); - return file; -} - -+ (instancetype)fileWithName:(NSString *)name contentsAtPath:(NSString *)path error:(NSError **)error { - NSFileManager *fileManager = [NSFileManager defaultManager]; - BOOL directory = NO; - - if (![fileManager fileExistsAtPath:path isDirectory:&directory] || directory) { - NSString *message = [NSString stringWithFormat:@"Failed to create PFFile at path '%@': " - "file does not exist.", path]; - if (error) { - *error = [NSError errorWithDomain:NSCocoaErrorDomain - code:NSFileNoSuchFileError - userInfo:@{ NSLocalizedDescriptionKey: message }]; - } - return nil; - } - - NSDictionary *attributes = [fileManager attributesOfItemAtPath:path error:nil]; - unsigned long long length = [attributes[NSFileSize] unsignedLongValue]; - if (length > PFFileMaxFileSize) { - NSString *message = [NSString stringWithFormat:@"Failed to create PFFile at path '%@': " - "file is larger than %lluMB.", path, (PFFileMaxFileSize >> 20)]; - if (error) { - *error = [NSError errorWithDomain:NSCocoaErrorDomain - code:NSFileReadTooLargeError - userInfo:@{ NSLocalizedDescriptionKey: message }]; - } - return nil; - } - - PFFile *file = [self fileWithName:name url:nil]; - if (![file _stageWithPath:path error:error]) { - return nil; - } - return file; -} - -+ (instancetype)fileWithName:(NSString *)name - data:(NSData *)data - contentType:(NSString *)contentType { - NSError *error = nil; - PFFile *file = [self fileWithName:name data:data contentType:contentType error:&error]; - PFConsistencyAssert(!error, @"Could not save file data for %@ : %@", name, error); - return file; -} - -+ (instancetype)fileWithName:(NSString *)name - data:(NSData *)data - contentType:(NSString *)contentType - error:(NSError **)error { - if (!data) { - NSString *message = @"Cannot create a PFFile with nil data."; - if (error) { - *error = [NSError errorWithDomain:NSCocoaErrorDomain - code:NSFileNoSuchFileError - userInfo:@{ NSLocalizedDescriptionKey: message }]; - } - return nil; - } - - if ([data length] > PFFileMaxFileSize) { - NSString *message = [NSString stringWithFormat:@"Failed to create PFFile with data: " - "data is larger than %lluMB.", (PFFileMaxFileSize >> 20)]; - if (error) { - *error = [NSError errorWithDomain:NSCocoaErrorDomain - code:NSFileReadTooLargeError - userInfo:@{ NSLocalizedDescriptionKey: message }]; - } - return nil; - } - - PFFile *file = [[self alloc] initWithName:name urlString:nil mimeType:contentType]; - if (![file _stageWithData:data error:error]) { - return nil; - } - return file; -} - -+ (instancetype)fileWithData:(NSData *)data contentType:(NSString *)contentType { - return [self fileWithName:nil data:data contentType:contentType]; -} - -#pragma mark Uploading - -- (BOOL)save { - return [self save:nil]; -} - -- (BOOL)save:(NSError **)error { - return [[[self saveInBackground] waitForResult:error] boolValue]; -} - -- (BFTask *)saveInBackground { - return [self _uploadAsyncWithProgressBlock:nil]; -} - -- (BFTask *)saveInBackgroundWithProgressBlock:(PFProgressBlock)progressBlock { - return [self _uploadAsyncWithProgressBlock:progressBlock]; -} - -- (void)saveInBackgroundWithBlock:(PFBooleanResultBlock)block { - [[self saveInBackground] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -- (void)saveInBackgroundWithBlock:(PFBooleanResultBlock)block - progressBlock:(PFProgressBlock)progressBlock { - [[self _uploadAsyncWithProgressBlock:progressBlock] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -- (void)saveInBackgroundWithTarget:(id)target selector:(SEL)selector { - [self saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; - }]; -} - -#pragma mark Downloading - -- (NSData *)getData { - return [self getData:nil]; -} - -- (NSInputStream *)getDataStream { - return [self getDataStream:nil]; -} - -- (NSData *)getData:(NSError **)error { - return [[self getDataInBackground] waitForResult:error]; -} - -- (NSInputStream *)getDataStream:(NSError **)error { - return [[self getDataStreamInBackground] waitForResult:error]; -} - -- (BFTask *)getDataInBackground { - return [self _getDataAsyncWithProgressBlock:nil]; -} - -- (BFTask *)getDataInBackgroundWithProgressBlock:(PFProgressBlock)progressBlock { - return [self _getDataAsyncWithProgressBlock:progressBlock]; -} - -- (BFTask *)getDataStreamInBackground { - return [self _getDataStreamAsyncWithProgressBlock:nil]; -} - -- (BFTask *)getDataStreamInBackgroundWithProgressBlock:(PFProgressBlock)progressBlock { - return [self _getDataStreamAsyncWithProgressBlock:progressBlock]; -} - -- (BFTask *)getDataDownloadStreamInBackground { - return [self getDataDownloadStreamInBackgroundWithProgressBlock:nil]; -} - -- (BFTask *)getDataDownloadStreamInBackgroundWithProgressBlock:(PFProgressBlock)progressBlock { - return [self _downloadStreamAsyncWithProgressBlock:progressBlock]; -} - -- (void)getDataInBackgroundWithBlock:(PFDataResultBlock)block { - [self getDataInBackgroundWithBlock:block progressBlock:nil]; -} - -- (void)getDataStreamInBackgroundWithBlock:(PFDataStreamResultBlock)block { - [self getDataStreamInBackgroundWithBlock:block progressBlock:nil]; -} - -- (void)getDataInBackgroundWithBlock:(PFDataResultBlock)resultBlock - progressBlock:(PFProgressBlock)progressBlock { - [[self _getDataAsyncWithProgressBlock:progressBlock] thenCallBackOnMainThreadAsync:resultBlock]; -} - -- (void)getDataStreamInBackgroundWithBlock:(PFDataStreamResultBlock)resultBlock - progressBlock:(PFProgressBlock)progressBlock { - [[self _getDataStreamAsyncWithProgressBlock:progressBlock] thenCallBackOnMainThreadAsync:resultBlock]; -} - -- (void)getDataInBackgroundWithTarget:(id)target selector:(SEL)selector { - [self getDataInBackgroundWithBlock:^(NSData *data, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:data object:error]; - }]; -} - -- (BFTask PF_GENERIC(NSString *) *)getFilePathInBackground { - return [self getFilePathInBackgroundWithProgressBlock:nil]; -} - -- (BFTask PF_GENERIC(NSString *)*)getFilePathInBackgroundWithProgressBlock:(PFProgressBlock)progressBlock { - return [[self _downloadAsyncWithProgressBlock:progressBlock] continueWithSuccessBlock:^id(BFTask *task) { - if (self.dirty) { - return self.stagedFilePath; - } - return [[[self class] fileController] cachedFilePathForFileState:self.state]; - }]; -} - -- (void)getFilePathInBackgroundWithBlock:(PF_NULLABLE PFFilePathResultBlock)block { - [[self getFilePathInBackground] thenCallBackOnMainThreadAsync:block]; -} - -- (void)getFilePathInBackgroundWithBlock:(PF_NULLABLE PFFilePathResultBlock)block - progressBlock:(PF_NULLABLE PFProgressBlock)progressBlock { - [[self getFilePathInBackgroundWithProgressBlock:progressBlock] thenCallBackOnMainThreadAsync:block]; -} - -#pragma mark Interrupting - -- (void)cancel { - [self _performDataAccessBlock:^{ - [self.cancellationTokenSource cancel]; - self.cancellationTokenSource = nil; - }]; -} - -///-------------------------------------- -#pragma mark - Private -///-------------------------------------- - -#pragma mark Init - -- (instancetype)initWithName:(NSString *)name urlString:(NSString *)url mimeType:(NSString *)mimeType { - self = [super init]; - if (!self) return nil; - - _taskQueue = [[PFAsyncTaskQueue alloc] init]; - _synchronizationQueue = PFThreadsafetyCreateQueueForObject(self); - - _state = [[PFFileState alloc] initWithName:name urlString:url mimeType:mimeType]; - - return self; -} - -+ (instancetype)fileWithName:(NSString *)name url:(NSString *)url { - return [[self alloc] initWithName:name urlString:url mimeType:nil]; -} - -#pragma mark Upload - -- (BFTask *)_uploadAsyncWithProgressBlock:(PFProgressBlock)progressBlock { - @weakify(self); - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id { - @strongify(self); - - __block BFCancellationToken *cancellationToken = nil; - [self _performDataAccessBlock:^{ - if (!self.cancellationTokenSource || self.cancellationTokenSource.cancellationRequested) { - self.cancellationTokenSource = [BFCancellationTokenSource cancellationTokenSource]; - } - cancellationToken = self.cancellationTokenSource.token; - }]; - - return [[[PFUser _getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { - NSString *sessionToken = task.result; - return [self.taskQueue enqueue:^id(BFTask *task) { - if (!self.dirty) { - [self _performProgressBlockAsync:progressBlock withProgress:100]; - return [BFTask taskWithResult:nil]; - } - - return [self _uploadFileAsyncWithSessionToken:sessionToken - cancellationToken:cancellationToken - progressBlock:progressBlock]; - }]; - }] continueWithSuccessResult:@YES]; - }]; -} - -- (BFTask *)_uploadFileAsyncWithSessionToken:(NSString *)sessionToken - cancellationToken:(BFCancellationToken *)cancellationToken - progressBlock:(PFProgressBlock)progressBlock { - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - - PFFileController *controller = [[self class] fileController]; - NSString *sourceFilePath = self.stagedFilePath; - @weakify(self); - return [[[controller uploadFileAsyncWithState:[self _fileState] - sourceFilePath:sourceFilePath - sessionToken:sessionToken - cancellationToken:cancellationToken - progressBlock:progressBlock] continueWithSuccessBlock:^id(BFTask *task) { - @strongify(self); - [self _performDataAccessBlock:^{ - self.state = [task.result copy]; - }]; - return nil; - } cancellationToken:cancellationToken] continueWithBlock:^id(BFTask *task) { - @strongify(self); - [self _performDataAccessBlock:^{ - self.cancellationTokenSource = nil; - }]; - return task; - }]; -} - -#pragma mark Download - -- (BFTask *)_getDataAsyncWithProgressBlock:(PFProgressBlock)progressBlock { - return [[self _downloadAsyncWithProgressBlock:progressBlock] continueWithSuccessBlock:^id(BFTask *task) { - return [self _cachedData]; - }]; -} - -- (BFTask *)_getDataStreamAsyncWithProgressBlock:(PFProgressBlock)progressBlock { - return [[self _downloadAsyncWithProgressBlock:progressBlock] continueWithSuccessBlock:^id(BFTask *task) { - return [self _cachedDataStream]; - }]; -} - -- (BFTask *)_downloadAsyncWithProgressBlock:(PFProgressBlock)progressBlock { - __block BFCancellationToken *cancellationToken = nil; - [self _performDataAccessBlock:^{ - if (!self.cancellationTokenSource || self.cancellationTokenSource.cancellationRequested) { - self.cancellationTokenSource = [BFCancellationTokenSource cancellationTokenSource]; - } - cancellationToken = self.cancellationTokenSource.token; - }]; - - @weakify(self); - return [self.taskQueue enqueue:^id(BFTask *task) { - @strongify(self); - if (self.isDataAvailable) { - [self _performProgressBlockAsync:progressBlock withProgress:100]; - return [BFTask taskWithResult:nil]; - } - - PFFileController *controller = [[self class] fileController]; - return [[controller downloadFileAsyncWithState:[self _fileState] - cancellationToken:cancellationToken - progressBlock:progressBlock] continueWithBlock:^id(BFTask *task) { - [self _performDataAccessBlock:^{ - self.cancellationTokenSource = nil; - }]; - return task; - }]; - }]; -} - -- (BFTask *)_downloadStreamAsyncWithProgressBlock:(PFProgressBlock)progressBlock { - __block BFCancellationToken *cancellationToken = nil; - [self _performDataAccessBlock:^{ - if (!self.cancellationTokenSource || self.cancellationTokenSource.cancellationRequested) { - self.cancellationTokenSource = [BFCancellationTokenSource cancellationTokenSource]; - } - cancellationToken = self.cancellationTokenSource.token; - }]; - - @weakify(self); - return [self.taskQueue enqueue:^id(BFTask *task) { - @strongify(self); - if (self.isDataAvailable) { - [self _performProgressBlockAsync:progressBlock withProgress:100]; - return [self _cachedDataStream]; - } - - PFFileController *controller = [[self class] fileController]; - return [[controller downloadFileStreamAsyncWithState:[self _fileState] - cancellationToken:cancellationToken - progressBlock:progressBlock] continueWithBlock:^id(BFTask *task) { - [self _performDataAccessBlock:^{ - self.cancellationTokenSource = nil; - }]; - return task; - }]; - }]; -} - -#pragma mark Caching - -- (NSString *)_cachedFilePath { - return [[[self class] fileController] cachedFilePathForFileState:self.state]; -} - -- (NSData *)_cachedData { - NSString *filePath = (self.dirty ? self.stagedFilePath : [self _cachedFilePath]); - return [NSData dataWithContentsOfFile:filePath options:NSDataReadingMappedIfSafe error:NULL]; -} - -- (NSInputStream *)_cachedDataStream { - NSString *filePath = (self.dirty ? self.stagedFilePath : [[[self class] fileController] cachedFilePathForFileState:self.state]); - return [NSInputStream inputStreamWithFileAtPath:filePath]; -} - -///-------------------------------------- -#pragma mark - Staging -///-------------------------------------- - -- (BOOL)_stageWithData:(NSData *)data error:(NSError **)error { - __block BOOL result = NO; - [self _performDataAccessBlock:^{ - _stagedFilePath = [[[[self class] fileController].fileStagingController stageFileAsyncWithData:data - name:self.state.name - uniqueId:(uintptr_t)self] - waitForResult:error withMainThreadWarning:NO]; - - result = (_stagedFilePath != nil); - }]; - return result; -} - -- (BOOL)_stageWithPath:(NSString *)path error:(NSError **)error { - __block BOOL result = NO; - [self _performDataAccessBlock:^{ - _stagedFilePath = [[[[self class] fileController].fileStagingController stageFileAsyncAtPath:path - name:self.state.name - uniqueId:(uintptr_t)self] - waitForResult:error withMainThreadWarning:NO]; - - result = (_stagedFilePath != nil); - }]; - return result; -} - -#pragma mark Data Access - -- (NSString *)name { - __block NSString *name = nil; - [self _performDataAccessBlock:^{ - name = self.state.name; - }]; - return name; -} - -- (NSString *)url { - __block NSString *url = nil; - [self _performDataAccessBlock:^{ - url = self.state.secureURLString; - }]; - return url; -} - -- (BOOL)isDirty { - return !self.url; -} - -- (BOOL)isDataAvailable { - __block BOOL available = NO; - [self _performDataAccessBlock:^{ - available = self.dirty || [[NSFileManager defaultManager] fileExistsAtPath:[self _cachedFilePath]]; - }]; - return available; -} - -- (void)_performDataAccessBlock:(dispatch_block_t)block { - PFThreadsafetySafeDispatchSync(_synchronizationQueue, block); -} - -- (PFFileState *)_fileState { - __block PFFileState *state = nil; - [self _performDataAccessBlock:^{ - state = self.state; - }]; - return state; -} - -#pragma mark Progress - -- (void)_performProgressBlockAsync:(PFProgressBlock)block withProgress:(int)progress { - if (!block) { - return; - } - - dispatch_async(dispatch_get_main_queue(), ^{ - block(progress); - }); -} - -///-------------------------------------- -#pragma mark - FileController -///-------------------------------------- - -+ (PFFileController *)fileController { - return [Parse _currentManager].coreManager.fileController; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFGeoPoint.h b/FoodbLog/Pods/Parse/Parse/PFGeoPoint.h deleted file mode 100644 index 37d3bb0..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFGeoPoint.h +++ /dev/null @@ -1,114 +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. - */ - -#import -#import - -#import - -PF_ASSUME_NONNULL_BEGIN - -@class PFGeoPoint; - -typedef void(^PFGeoPointResultBlock)(PFGeoPoint *PF_NULLABLE_S geoPoint, NSError *PF_NULLABLE_S error); - -/*! - `PFGeoPoint` may be used to embed a latitude / longitude point as the value for a key in a . - It could be used to perform queries in a geospatial manner using <[PFQuery whereKey:nearGeoPoint:]>. - - Currently, instances of may only have one key associated with a `PFGeoPoint` type. - */ -@interface PFGeoPoint : NSObject - -///-------------------------------------- -/// @name Creating a Geo Point -///-------------------------------------- - -/*! - @abstract Create a PFGeoPoint object. Latitude and longitude are set to `0.0`. - - @returns Returns a new `PFGeoPoint`. - */ -+ (instancetype)geoPoint; - -/*! - @abstract Creates a new `PFGeoPoint` object for the given `CLLocation`, set to the location's coordinates. - - @param location Instace of `CLLocation`, with set latitude and longitude. - - @returns Returns a new PFGeoPoint at specified location. - */ -+ (instancetype)geoPointWithLocation:(PF_NULLABLE CLLocation *)location; - -/*! - @abstract Create a new `PFGeoPoint` object with the specified latitude and longitude. - - @param latitude Latitude of point in degrees. - @param longitude Longitude of point in degrees. - - @returns New point object with specified latitude and longitude. - */ -+ (instancetype)geoPointWithLatitude:(double)latitude longitude:(double)longitude; - -/*! - @abstract Fetches the current device location and executes a block with a new `PFGeoPoint` object. - - @param resultBlock A block which takes the newly created `PFGeoPoint` as an argument. - It should have the following argument signature: `^(PFGeoPoint *geoPoint, NSError *error)` - */ -+ (void)geoPointForCurrentLocationInBackground:(PF_NULLABLE PFGeoPointResultBlock)resultBlock; - -///-------------------------------------- -/// @name Controlling Position -///-------------------------------------- - -/*! - @abstract Latitude of point in degrees. Valid range is from `-90.0` to `90.0`. - */ -@property (nonatomic, assign) double latitude; - -/*! - @abstract Longitude of point in degrees. Valid range is from `-180.0` to `180.0`. - */ -@property (nonatomic, assign) double longitude; - -///-------------------------------------- -/// @name Calculating Distance -///-------------------------------------- - -/*! - @abstract Get distance in radians from this point to specified point. - - @param point `PFGeoPoint` that represents the location of other point. - - @returns Distance in radians between the receiver and `point`. - */ -- (double)distanceInRadiansTo:(PF_NULLABLE PFGeoPoint *)point; - -/*! - @abstract Get distance in miles from this point to specified point. - - @param point `PFGeoPoint` that represents the location of other point. - - @returns Distance in miles between the receiver and `point`. - */ -- (double)distanceInMilesTo:(PF_NULLABLE PFGeoPoint *)point; - -/*! - @abstract Get distance in kilometers from this point to specified point. - - @param point `PFGeoPoint` that represents the location of other point. - - @returns Distance in kilometers between the receiver and `point`. - */ -- (double)distanceInKilometersTo:(PF_NULLABLE PFGeoPoint *)point; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFGeoPoint.m b/FoodbLog/Pods/Parse/Parse/PFGeoPoint.m deleted file mode 100644 index 5912bff..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFGeoPoint.m +++ /dev/null @@ -1,193 +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. - */ - -#import "PFGeoPoint.h" - -#import - -#import "PFAssert.h" -#import "PFCoreManager.h" -#import "PFHash.h" -#import "PFLocationManager.h" -#import "Parse_Private.h" - -const double EARTH_RADIUS_MILES = 3958.8; -const double EARTH_RADIUS_KILOMETERS = 6371.0; - -@implementation PFGeoPoint - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -+ (instancetype)geoPoint { - return [[self alloc] init]; -} - -+ (instancetype)geoPointWithLocation:(CLLocation *)location { - return [self geoPointWithLatitude:location.coordinate.latitude - longitude:location.coordinate.longitude]; -} - -+ (instancetype)geoPointWithLatitude:(double)latitude longitude:(double)longitude { - PFGeoPoint *gpt = [self geoPoint]; - gpt.latitude = latitude; - gpt.longitude = longitude; - return gpt; -} - -+ (void)geoPointForCurrentLocationInBackground:(PFGeoPointResultBlock)resultBlock { - if (!resultBlock) { - return; - } - - void(^locationHandler)(CLLocation *, NSError *) = ^(CLLocation *location, NSError *error) { - PFGeoPoint *newGeoPoint = [PFGeoPoint geoPointWithLocation:location]; - resultBlock(newGeoPoint, error); - }; - [[Parse _currentManager].coreManager.locationManager addBlockForCurrentLocation:locationHandler]; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (void)setLatitude:(double)latitude { - PFParameterAssert(latitude >= -90.0 && latitude <= 90.0, - @"`latitude` is out of range [-90.0, 90.0]: %f", latitude); - _latitude = latitude; -} - -- (void)setLongitude:(double)longitude { - PFParameterAssert(longitude >= -180.0 && longitude <= 180.0, - @"`longitude` is out of range [-180.0, 180.0]: %f", longitude); - _longitude = longitude; -} - -- (double)distanceInRadiansTo:(PFGeoPoint *)point { - double d2r = M_PI / 180.0; // radian conversion factor - double lat1rad = self.latitude * d2r; - double long1rad = self.longitude * d2r; - double lat2rad = [point latitude] * d2r; - double long2rad = [point longitude] * d2r; - double deltaLat = lat1rad - lat2rad; - double deltaLong = long1rad - long2rad; - double sinDeltaLatDiv2 = sin(deltaLat / 2.); - double sinDeltaLongDiv2 = sin(deltaLong / 2.); - // Square of half the straight line chord distance between both points. [0.0, 1.0] - double a = sinDeltaLatDiv2 * sinDeltaLatDiv2 - + cos(lat1rad) * cos(lat2rad) * sinDeltaLongDiv2 * sinDeltaLongDiv2; - a = fmin(1.0, a); - return 2. * asin(sqrt(a)); -} - -- (double)distanceInMilesTo:(PFGeoPoint *)point { - return [self distanceInRadiansTo:point] * EARTH_RADIUS_MILES; -} - -- (double)distanceInKilometersTo:(PFGeoPoint *)point { - return [self distanceInRadiansTo:point] * EARTH_RADIUS_KILOMETERS; -} - -///-------------------------------------- -#pragma mark - Encoding -///-------------------------------------- - -static NSString *const PFGeoPointCodingTypeKey = @"__type"; -static NSString *const PFGeoPointCodingLatitudeKey = @"latitude"; -static NSString *const PFGeoPointCodingLongitudeKey = @"longitude"; - -- (NSDictionary *)encodeIntoDictionary { - return @{ - PFGeoPointCodingTypeKey : @"GeoPoint", - PFGeoPointCodingLatitudeKey : @(self.latitude), - PFGeoPointCodingLongitudeKey : @(self.longitude) - }; -} - -+ (instancetype)geoPointWithDictionary:(NSDictionary *)dictionary { - return [[self alloc] initWithEncodedDictionary:dictionary]; -} - -- (instancetype)initWithEncodedDictionary:(NSDictionary *)dictionary { - self = [self init]; - if (!self) return nil; - - id latObj = dictionary[PFGeoPointCodingLatitudeKey]; - PFParameterAssert([latObj isKindOfClass:[NSNumber class]], @"Invalid latitude type passed: %@", latObj); - - id longObj = dictionary[PFGeoPointCodingLongitudeKey]; - PFParameterAssert([longObj isKindOfClass:[NSNumber class]], @"Invalid longitude type passed: %@", longObj); - - _latitude = [latObj doubleValue]; - _longitude = [longObj doubleValue]; - - return self; -} - -///-------------------------------------- -#pragma mark - NSObject -///-------------------------------------- - -- (BOOL)isEqual:(id)object { - if (self == object) { - return YES; - } - - if (![object isKindOfClass:[PFGeoPoint class]]) { - return NO; - } - - PFGeoPoint *geoPoint = object; - - return (self.latitude == geoPoint.latitude && - self.longitude == geoPoint.longitude); -} - -- (NSUInteger)hash { - return PFDoublePairHash(self.latitude, self.longitude); -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p, latitude: %f, longitude: %f>", - [self class], - self, - self.latitude, - self.longitude]; -} - -///-------------------------------------- -#pragma mark - NSCopying -///-------------------------------------- - -- (instancetype)copyWithZone:(NSZone *)zone { - PFGeoPoint *geoPoint = [[self class] geoPointWithLatitude:self.latitude longitude:self.longitude]; - return geoPoint; -} - -///-------------------------------------- -#pragma mark - NSCoding -///-------------------------------------- - -- (instancetype)initWithCoder:(NSCoder *)coder { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - dictionary[PFGeoPointCodingTypeKey] = [coder decodeObjectForKey:PFGeoPointCodingTypeKey]; - dictionary[PFGeoPointCodingLatitudeKey] = [coder decodeObjectForKey:PFGeoPointCodingLatitudeKey]; - dictionary[PFGeoPointCodingLongitudeKey] = [coder decodeObjectForKey:PFGeoPointCodingLongitudeKey]; - return [self initWithEncodedDictionary:dictionary]; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - NSDictionary *dictionary = [self encodeIntoDictionary]; - [dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - [coder encodeObject:obj forKey:key]; - }]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFInstallation.h b/FoodbLog/Pods/Parse/Parse/PFInstallation.h deleted file mode 100644 index 3b1c042..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFInstallation.h +++ /dev/null @@ -1,113 +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. - */ - -#import - -#import -#import -#import - -PF_ASSUME_NONNULL_BEGIN - -/*! - A Parse Framework Installation Object that is a local representation of an - installation persisted to the Parse cloud. This class is a subclass of a - , and retains the same functionality of a PFObject, but also extends - it with installation-specific fields and related immutability and validity - checks. - - A valid `PFInstallation` can only be instantiated via - <[PFInstallation currentInstallation]> because the required identifier fields - are readonly. The and fields are also readonly properties which - are automatically updated to match the device's time zone and application badge - when the `PFInstallation` is saved, thus these fields might not reflect the - latest device state if the installation has not recently been saved. - - `PFInstallation` objects which have a valid and are saved to - the Parse cloud can be used to target push notifications. - */ - -PF_WATCH_UNAVAILABLE @interface PFInstallation : PFObject - -///-------------------------------------- -/// @name Accessing the Current Installation -///-------------------------------------- - -/*! - @abstract Gets the currently-running installation from disk and returns an instance of it. - - @discussion If this installation is not stored on disk, returns a `PFInstallation` - with and fields set to those of the - current installation. - - @result Returns a `PFInstallation` that represents the currently-running installation. - */ -+ (instancetype)currentInstallation; - -///-------------------------------------- -/// @name Installation Properties -///-------------------------------------- - -/*! - @abstract The device type for the `PFInstallation`. - */ -@property (nonatomic, copy, readonly) NSString *deviceType; - -/*! - @abstract The installationId for the `PFInstallation`. - */ -@property (nonatomic, copy, readonly) NSString *installationId; - -/*! - @abstract The device token for the `PFInstallation`. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, copy) NSString *deviceToken; - -/*! - @abstract The badge for the `PFInstallation`. - */ -@property (nonatomic, assign) NSInteger badge; - -/*! - @abstract The name of the time zone for the `PFInstallation`. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, copy, readonly) NSString *timeZone; - -/*! - @abstract The channels for the `PFInstallation`. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, copy) NSArray *channels; - -/*! - @abstract Sets the device token string property from an `NSData`-encoded token. - - @param deviceTokenData A token that identifies the device. - */ -- (void)setDeviceTokenFromData:(PF_NULLABLE NSData *)deviceTokenData; - -///-------------------------------------- -/// @name Querying for Installations -///-------------------------------------- - -/*! - @abstract Creates a for `PFInstallation` objects. - - @discussion Only the following types of queries are allowed for installations: - - - `[query getObjectWithId:]` - - `[query whereKey:@"installationId" equalTo:]` - - `[query whereKey:@"installationId" matchesKey: inQuery:]` - - You can add additional query conditions, but one of the above must appear as a top-level `AND` clause in the query. - */ -+ (PF_NULLABLE PFQuery *)query; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFInstallation.m b/FoodbLog/Pods/Parse/Parse/PFInstallation.m deleted file mode 100644 index 2536d64..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFInstallation.m +++ /dev/null @@ -1,342 +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. - */ - -#import "PFInstallation.h" -#import "PFInstallationPrivate.h" - -#import "BFTask+Private.h" -#import "PFApplication.h" -#import "PFAssert.h" -#import "PFCoreManager.h" -#import "PFCurrentInstallationController.h" -#import "PFFileManager.h" -#import "PFInstallationConstants.h" -#import "PFInstallationController.h" -#import "PFInstallationIdentifierStore.h" -#import "PFInternalUtils.h" -#import "PFObject+Subclass.h" -#import "PFObjectEstimatedData.h" -#import "PFObjectPrivate.h" -#import "PFOfflineStore.h" -#import "PFPushPrivate.h" -#import "PFQueryPrivate.h" -#import "Parse_Private.h" -#import "PFErrorUtilities.h" - -@implementation PFInstallation (Private) - -static NSSet *protectedKeys; - -+ (void)initialize { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - protectedKeys = PF_SET(PFInstallationKeyDeviceType, - PFInstallationKeyInstallationId, - PFInstallationKeyTimeZone, - PFInstallationKeyLocaleIdentifier, - PFInstallationKeyParseVersion, - PFInstallationKeyAppVersion, - PFInstallationKeyAppName, - PFInstallationKeyAppIdentifier); - }); -} - -// Clear device token. Used for testing. -- (void)_clearDeviceToken { - [super removeObjectForKey:PFInstallationKeyDeviceToken]; -} - -- (BFTask PF_GENERIC(PFVoid) *)_validateDeleteAsync { - return [[super _validateDeleteAsync] continueWithSuccessBlock:^id(BFTask PF_GENERIC(PFVoid) *task) { - NSError *error = [PFErrorUtilities errorWithCode:kPFErrorCommandUnavailable - message:@"Installation cannot be deleted"]; - return [BFTask taskWithError:error]; - }]; -} - -// Validates a class name. We override this to only allow the installation class name. -+ (void)_assertValidInstanceClassName:(NSString *)className { - PFParameterAssert([className isEqualToString:[PFInstallation parseClassName]], - @"Cannot initialize a PFInstallation with a custom class name."); -} - -- (BOOL)_isCurrentInstallation { - return (self == [[self class] _currentInstallationController].memoryCachedCurrentInstallation); -} - -- (void)_markAllFieldsDirty { - @synchronized(self.lock) { - NSDictionary *estimatedData = self._estimatedData.dictionaryRepresentation; - [estimatedData enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - [super setObject:obj forKey:key]; - }]; - } -} - -- (NSString *)displayClassName { - return NSStringFromClass([PFInstallation class]); -} - -///-------------------------------------- -#pragma mark - Command Handlers -///-------------------------------------- - -- (BFTask *)handleSaveResultAsync:(NSDictionary *)result { - @weakify(self); - return [[super handleSaveResultAsync:result] continueWithBlock:^id(BFTask *task) { - @strongify(self); - BFTask *saveTask = [[[self class] _currentInstallationController] saveCurrentObjectAsync:self]; - return [saveTask continueWithResult:task]; - }]; -} - -///-------------------------------------- -#pragma mark - Current Installation Controller -///-------------------------------------- - -+ (PFCurrentInstallationController *)_currentInstallationController { - return [Parse _currentManager].coreManager.currentInstallationController; -} - -@end - -@implementation PFInstallation - -@dynamic deviceType; -@dynamic installationId; -@dynamic deviceToken; -@dynamic timeZone; -@dynamic channels; -@dynamic badge; - -///-------------------------------------- -#pragma mark - PFSubclassing -///-------------------------------------- - -+ (NSString *)parseClassName { - return @"_Installation"; -} - -+ (PFQuery *)query { - return [super query]; -} - -///-------------------------------------- -#pragma mark - Current Installation -///-------------------------------------- - -+ (instancetype)currentInstallation { - BFTask *task = [[self _currentInstallationController] getCurrentObjectAsync]; - return [task waitForResult:nil withMainThreadWarning:NO]; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (id)objectForKey:(NSString *)key { - if ([key isEqualToString:PFInstallationKeyBadge] && [self _isCurrentInstallation]) { - // Update the data dictionary badge value from the device. - [self _updateBadgeFromDevice]; - } - - return [super objectForKey:key]; -} - -- (void)setObject:(id)object forKey:(NSString *)key { - PFParameterAssert(![protectedKeys containsObject:key], - @"Can't change the '%@' field of a PFInstallation.", key); - - if ([key isEqualToString:PFInstallationKeyBadge]) { - // Set the application badge and update the badge value in the data dictionary. - NSInteger badge = [object integerValue]; - PFParameterAssert(badge >= 0, @"Can't set the badge to less than zero."); - - [PFApplication currentApplication].iconBadgeNumber = badge; - [super setObject:@(badge) forKey:PFInstallationKeyBadge]; - } - - [super setObject:object forKey:key]; -} - -- (void)incrementKey:(NSString *)key byAmount:(NSNumber *)amount { - PFParameterAssert(![key isEqualToString:PFInstallationKeyBadge], - @"Can't atomically increment the 'badge' field of a PFInstallation."); - - [super incrementKey:key byAmount:amount]; -} - -- (void)removeObjectForKey:(NSString *)key { - PFParameterAssert(![protectedKeys containsObject:key], - @"Can't remove the '%@' field of a PFInstallation.", key); - PFParameterAssert(![key isEqualToString:PFInstallationKeyBadge], - @"Can't remove the 'badge' field of a PFInstallation."); - [super removeObjectForKey:key]; -} - -// Internal mutators override the dynamic accessor and use super to avoid -// read-only checks on automatic fields. -- (void)setDeviceType:(NSString *)deviceType { - [self _setObject:deviceType forKey:PFInstallationKeyDeviceType onlyIfDifferent:YES]; -} - -- (void)setInstallationId:(NSString *)installationId { - [self _setObject:installationId forKey:PFInstallationKeyInstallationId onlyIfDifferent:YES]; -} - -- (void)setDeviceToken:(NSString *)deviceToken { - [self _setObject:deviceToken forKey:PFInstallationKeyDeviceToken onlyIfDifferent:YES]; -} - -- (void)setDeviceTokenFromData:(NSData *)deviceTokenData { - [self _setObject:[[PFPush pushInternalUtilClass] convertDeviceTokenToString:deviceTokenData] - forKey:PFInstallationKeyDeviceToken - onlyIfDifferent:YES]; -} - -- (void)setTimeZone:(NSString *)timeZone { - [self _setObject:timeZone forKey:PFInstallationKeyTimeZone onlyIfDifferent:YES]; -} - -- (void)setLocaleIdentifier:(NSString *)localeIdentifier { - [self _setObject:localeIdentifier - forKey:PFInstallationKeyLocaleIdentifier - onlyIfDifferent:YES]; -} - -- (void)setChannels:(NSArray *)channels { - [self _setObject:channels forKey:PFInstallationKeyChannels onlyIfDifferent:YES]; -} - -///-------------------------------------- -#pragma mark - PFObject -///-------------------------------------- - -- (BFTask *)saveAsync:(BFTask *)toAwait { - return [[super saveAsync:toAwait] continueWithBlock:^id(BFTask *task) { - // Do not attempt to resave an object if LDS is enabled, since changing objectId is not allowed. - if ([Parse _currentManager].offlineStoreLoaded) { - return task; - } - - if (task.error.code == kPFErrorObjectNotFound) { - @synchronized (self.lock) { - // Retry the fetch as a save operation because this Installation was deleted on the server. - // We always want [currentInstallation save] to succeed. - self.objectId = nil; - [self _markAllFieldsDirty]; - return [super saveAsync:nil]; - } - } - return task; - }]; -} - -- (BOOL)needsDefaultACL { - return NO; -} - -///-------------------------------------- -#pragma mark - Automatic Info -///-------------------------------------- - -- (void)_objectWillSave { - if ([self _isCurrentInstallation]) { - @synchronized(self.lock) { - [self _updateTimeZoneFromDevice]; - [self _updateBadgeFromDevice]; - [self _updateVersionInfoFromDevice]; - [self _updateLocaleIdentifierFromDevice]; - } - } -} - -- (void)_updateTimeZoneFromDevice { - // Get the system time zone (after clearing the cached value) and update - // the installation if necessary. - NSString *systemTimeZoneName = [PFInternalUtils currentSystemTimeZoneName]; - if (![systemTimeZoneName isEqualToString:self.timeZone]) { - self.timeZone = systemTimeZoneName; - } -} - -- (void)_updateBadgeFromDevice { - // Get the application icon and update the installation if necessary. - NSNumber *applicationBadge = @([PFApplication currentApplication].iconBadgeNumber); - NSNumber *installationBadge = [super objectForKey:PFInstallationKeyBadge]; - if (installationBadge == nil || ![applicationBadge isEqualToNumber:installationBadge]) { - [super setObject:applicationBadge forKey:PFInstallationKeyBadge]; - } -} - -- (void)_updateVersionInfoFromDevice { - NSDictionary *appInfo = [[NSBundle mainBundle] infoDictionary]; - NSString *appName = appInfo[(__bridge NSString *)kCFBundleNameKey]; - NSString *appVersion = appInfo[(__bridge NSString *)kCFBundleVersionKey]; - NSString *appIdentifier = appInfo[(__bridge NSString *)kCFBundleIdentifierKey]; - // It's possible that the app was created without an info.plist and we just - // cannot get the data we need. - // Note: it's important to make the possibly nil string the message receptor for - // nil propegation instead of a BAD_ACCESS - if (appName && ![self[PFInstallationKeyAppName] isEqualToString:appName]) { - [super setObject:appName forKey:PFInstallationKeyAppName]; - } - if (appVersion && ![self[PFInstallationKeyAppVersion] isEqualToString:appVersion]) { - [super setObject:appVersion forKey:PFInstallationKeyAppVersion]; - } - if (appIdentifier && ![self[PFInstallationKeyAppIdentifier] isEqualToString:appIdentifier]) { - [super setObject:appIdentifier forKey:PFInstallationKeyAppIdentifier]; - } - if (![self[PFInstallationKeyParseVersion] isEqualToString:PARSE_VERSION]) { - [super setObject:PARSE_VERSION forKey:PFInstallationKeyParseVersion]; - } -} - -/*! - @abstract Save localeIdentifier in the following format: [language code]-[COUNTRY CODE]. - - @discussion The language codes are two-letter lowercase ISO language codes (such as "en") as defined by - ISO 639-1. - The country codes are two-letter uppercase ISO country codes (such as "US") as defined by - ISO 3166-1. - - Many iOS locale identifiers don't contain the country code -> inconsistencies with Android/Windows Phone. - */ -- (void)_updateLocaleIdentifierFromDevice { - NSLocale *currentLocale = [NSLocale currentLocale]; - NSString *language = [currentLocale objectForKey:NSLocaleLanguageCode]; - NSString *countryCode = [currentLocale objectForKey:NSLocaleCountryCode]; - - if (language.length == 0) { - return; - } - - NSString *localeIdentifier = nil; - if (countryCode.length > 0) { - localeIdentifier = [NSString stringWithFormat:@"%@-%@", language, countryCode]; - } else { - localeIdentifier = language; - } - - NSString *currentLocaleIdentifier = self[PFInstallationKeyLocaleIdentifier]; - if (localeIdentifier.length > 0 && ![localeIdentifier isEqualToString:currentLocaleIdentifier]) { - // Call into super to avoid checking on protected keys. - [super setObject:localeIdentifier forKey:PFInstallationKeyLocaleIdentifier]; - } -} - -///-------------------------------------- -#pragma mark - Data Source -///-------------------------------------- - -+ (id)objectController { - return [Parse _currentManager].coreManager.installationController; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFNetworkActivityIndicatorManager.h b/FoodbLog/Pods/Parse/Parse/PFNetworkActivityIndicatorManager.h deleted file mode 100644 index d5b376a..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFNetworkActivityIndicatorManager.h +++ /dev/null @@ -1,70 +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. - */ - -#import -#import - -#import - -PF_ASSUME_NONNULL_BEGIN - -/*! - `PFNetworkActivityIndicatorManager` manages the state of the network activity indicator in the status bar. - When enabled, it will start managing the network activity indicator in the status bar, - according to the network operations that are performed by Parse SDK. - - The number of active requests is incremented or decremented like a stack or a semaphore, - the activity indicator will animate, as long as the number is greater than zero. - */ -@interface PFNetworkActivityIndicatorManager : NSObject - -/*! - A Boolean value indicating whether the manager is enabled. - If `YES` - the manager will start managing the status bar network activity indicator, - according to the network operations that are performed by Parse SDK. - The default value is `YES`. - */ -@property (nonatomic, assign, getter = isEnabled) BOOL enabled; - -/*! - A Boolean value indicating whether the network activity indicator is currently displayed in the status bar. - */ -@property (nonatomic, assign, readonly, getter = isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible; - -/*! - The value that indicates current network activities count. - */ -@property (nonatomic, assign, readonly) NSUInteger networkActivityCount; - -/*! - @abstract Returns the shared network activity indicator manager object for the system. - - @returns The systemwide network activity indicator manager. - */ -+ (instancetype)sharedManager; - -/*! - @abstract Increments the number of active network requests. - - @discussion If this number was zero before incrementing, - this will start animating network activity indicator in the status bar. - */ -- (void)incrementActivityCount; - -/*! - @abstract Decrements the number of active network requests. - - @discussion If this number becomes zero after decrementing, - this will stop animating network activity indicator in the status bar. - */ -- (void)decrementActivityCount; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFNetworkActivityIndicatorManager.m b/FoodbLog/Pods/Parse/Parse/PFNetworkActivityIndicatorManager.m deleted file mode 100644 index c8d9e6a..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFNetworkActivityIndicatorManager.m +++ /dev/null @@ -1,165 +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. - */ - -#import "PFNetworkActivityIndicatorManager.h" - -#import - -#import "PFApplication.h" -#import "PFCommandRunningConstants.h" - -static NSTimeInterval const PFNetworkActivityIndicatorVisibilityDelay = 0.17; - -@interface PFNetworkActivityIndicatorManager () { - dispatch_queue_t _networkActivityAccessQueue; -} - -@property (nonatomic, assign, readwrite) NSUInteger networkActivityCount; - -@property (nonatomic, strong) NSTimer *activityIndicatorVisibilityTimer; - -@end - -@implementation PFNetworkActivityIndicatorManager - -@synthesize enabled = _enabled; -@synthesize networkActivityCount = _networkActivityCount; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -+ (instancetype)sharedManager { - static PFNetworkActivityIndicatorManager *manager; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - manager = [[self alloc] init]; - manager.enabled = YES; - }); - return manager; -} - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _networkActivityAccessQueue = dispatch_queue_create("com.parse.networkActivityIndicatorManager", - DISPATCH_QUEUE_SERIAL); - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(_handleWillSendURLRequestNotification:) - name:PFNetworkWillSendURLRequestNotification - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(_handleDidReceiveURLResponseNotification:) - name:PFNetworkDidReceiveURLResponseNotification - object:nil]; - - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [_activityIndicatorVisibilityTimer invalidate]; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (void)setNetworkActivityCount:(NSUInteger)networkActivityCount { - dispatch_sync(_networkActivityAccessQueue, ^{ - _networkActivityCount = networkActivityCount; - }); - dispatch_async(dispatch_get_main_queue(), ^{ - [self _updateNetworkActivityIndicatorVisibilityAfterDelay]; - }); -} - -- (NSUInteger)networkActivityCount { - __block NSUInteger count = 0; - dispatch_sync(_networkActivityAccessQueue, ^{ - count = _networkActivityCount; - }); - return count; -} - -- (BOOL)isNetworkActivityIndicatorVisible { - return self.networkActivityCount > 0; -} - -///-------------------------------------- -#pragma mark - Counts -///-------------------------------------- - -- (void)incrementActivityCount { - dispatch_sync(_networkActivityAccessQueue, ^{ - _networkActivityCount++; - }); - dispatch_async(dispatch_get_main_queue(), ^{ - [self _updateNetworkActivityIndicatorVisibilityAfterDelay]; - }); -} - -- (void)decrementActivityCount { - dispatch_sync(_networkActivityAccessQueue, ^{ - _networkActivityCount = MAX(_networkActivityCount - 1, 0); - }); - dispatch_async(dispatch_get_main_queue(), ^{ - [self _updateNetworkActivityIndicatorVisibilityAfterDelay]; - }); -} - -///-------------------------------------- -#pragma mark - Network Activity Indicator -///-------------------------------------- - -- (void)_updateNetworkActivityIndicatorVisibilityAfterDelay { - if (self.enabled) { - // Delay hiding of activity indicator for a short interval, to avoid flickering - if (![self isNetworkActivityIndicatorVisible]) { - [self.activityIndicatorVisibilityTimer invalidate]; - - NSTimeInterval timeInterval = PFNetworkActivityIndicatorVisibilityDelay; - SEL selector = @selector(_updateNetworkActivityIndicatorVisibility); - self.activityIndicatorVisibilityTimer = [NSTimer timerWithTimeInterval:timeInterval - target:self - selector:selector - userInfo:nil - repeats:NO]; - [[NSRunLoop mainRunLoop] addTimer:self.activityIndicatorVisibilityTimer - forMode:NSRunLoopCommonModes]; - } else { - [self performSelectorOnMainThread:@selector(_updateNetworkActivityIndicatorVisibility) - withObject:nil - waitUntilDone:NO - modes:@[ NSRunLoopCommonModes ]]; - } - } -} - -- (void)_updateNetworkActivityIndicatorVisibility NS_EXTENSION_UNAVAILABLE_IOS("") { - if (![PFApplication currentApplication].extensionEnvironment) { - [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:self.networkActivityIndicatorVisible]; - } -} - -///-------------------------------------- -#pragma mark - Command Running -///-------------------------------------- - -- (void)_handleWillSendURLRequestNotification:(NSNotification *)notification { - [self incrementActivityCount]; -} - -- (void)_handleDidReceiveURLResponseNotification:(NSNotification *)notification { - [self decrementActivityCount]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFNullability.h b/FoodbLog/Pods/Parse/Parse/PFNullability.h deleted file mode 100644 index 8c1b958..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFNullability.h +++ /dev/null @@ -1,47 +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. - */ - -#ifndef Parse_PFNullability_h -#define Parse_PFNullability_h - -///-------------------------------------- -/// @name Nullability Annotation Support -///-------------------------------------- - -#if __has_feature(nullability) -# define PF_NONNULL nonnull -# define PF_NONNULL_S __nonnull -# define PF_NULLABLE nullable -# define PF_NULLABLE_S __nullable -# define PF_NULLABLE_PROPERTY nullable, -#else -# define PF_NONNULL -# define PF_NONNULL_S -# define PF_NULLABLE -# define PF_NULLABLE_S -# define PF_NULLABLE_PROPERTY -#endif - -#if __has_feature(assume_nonnull) -# ifdef NS_ASSUME_NONNULL_BEGIN -# define PF_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN -# else -# define PF_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin") -# endif -# ifdef NS_ASSUME_NONNULL_END -# define PF_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END -# else -# define PF_ASSUME_NONNULL_END _Pragma("clang assume_nonnull end") -# endif -#else -# define PF_ASSUME_NONNULL_BEGIN -# define PF_ASSUME_NONNULL_END -#endif - -#endif diff --git a/FoodbLog/Pods/Parse/Parse/PFObject+Subclass.h b/FoodbLog/Pods/Parse/Parse/PFObject+Subclass.h deleted file mode 100644 index 585d5c1..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFObject+Subclass.h +++ /dev/null @@ -1,125 +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. - */ - -#import - -#import -#import - -@class PFQuery PF_GENERIC(PFGenericObject : PFObject *); - -PF_ASSUME_NONNULL_BEGIN - -/*! - ### Subclassing Notes - - Developers can subclass `PFObject` for a more native object-oriented class structure. - Strongly-typed subclasses of `PFObject` must conform to the protocol - and must call before <[Parse setApplicationId:clientKey:]> is called. - After this it will be returned by and other `PFObject` factories. - - All methods in except for <[PFSubclassing parseClassName]> - are already implemented in the `PFObject+Subclass` category. - - Including `PFObject+Subclass.h` in your implementation file provides these implementations automatically. - - Subclasses support simpler initializers, query syntax, and dynamic synthesizers. - The following shows an example subclass: - - \@interface MYGame : PFObject - - // Accessing this property is the same as objectForKey:@"title" - @property (nonatomic, copy) NSString *title; - - + (NSString *)parseClassName; - - @end - - - @implementation MYGame - - @dynamic title; - - + (NSString *)parseClassName { - return @"Game"; - } - - @end - - - MYGame *game = [[MYGame alloc] init]; - game.title = @"Bughouse"; - [game saveInBackground]; - */ -@interface PFObject (Subclass) - -///-------------------------------------- -/// @name Methods for Subclasses -///-------------------------------------- - -/*! - @abstract Creates an instance of the registered subclass with this class's . - - @discussion This helps a subclass ensure that it can be subclassed itself. - For example, `[PFUser object]` will return a `MyUser` object if `MyUser` is a registered subclass of `PFUser`. - For this reason, `[MyClass object]` is preferred to `[[MyClass alloc] init]`. - This method can only be called on subclasses which conform to `PFSubclassing`. - A default implementation is provided by `PFObject` which should always be sufficient. - */ -+ (instancetype)object; - -/*! - @abstract Creates a reference to an existing `PFObject` for use in creating associations between `PFObjects`. - - @discussion Calling on this object will return `NO` until or has been called. - This method can only be called on subclasses which conform to . - A default implementation is provided by `PFObject` which should always be sufficient. - No network request will be made. - - @param objectId The object id for the referenced object. - - @returns An instance of `PFObject` without data. - */ -+ (instancetype)objectWithoutDataWithObjectId:(PF_NULLABLE NSString *)objectId; - -/*! - @abstract Registers an Objective-C class for Parse to use for representing a given Parse class. - - @discussion Once this is called on a `PFObject` subclass, any `PFObject` Parse creates with a class name - that matches `[self parseClassName]` will be an instance of subclass. - This method can only be called on subclasses which conform to . - A default implementation is provided by `PFObject` which should always be sufficient. - */ -+ (void)registerSubclass; - -/*! - @abstract Returns a query for objects of type . - - @discussion This method can only be called on subclasses which conform to . - A default implementation is provided by which should always be sufficient. - */ -+ (PF_NULLABLE PFQuery *)query; - -/*! - @abstract Returns a query for objects of type with a given predicate. - - @discussion A default implementation is provided by which should always be sufficient. - @warning This method can only be called on subclasses which conform to . - - @param predicate The predicate to create conditions from. - - @returns An instance of . - - @see [PFQuery queryWithClassName:predicate:] - */ -+ (PF_NULLABLE PFQuery *)queryWithPredicate:(PF_NULLABLE NSPredicate *)predicate; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFObject.h b/FoodbLog/Pods/Parse/Parse/PFObject.h deleted file mode 100644 index aeb51c7..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFObject.h +++ /dev/null @@ -1,1429 +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. - */ - -#import - -#import - -#import -#import - -PF_ASSUME_NONNULL_BEGIN - -@protocol PFSubclassing; -@class PFRelation; - -/*! - The name of the default pin that for PFObject local data store. - */ -extern NSString *const PFObjectDefaultPin; - -/*! - The `PFObject` class is a local representation of data persisted to the Parse cloud. - This is the main class that is used to interact with objects in your app. - */ -NS_REQUIRES_PROPERTY_DEFINITIONS -@interface PFObject : NSObject { - BOOL dirty; - - // An array of NSDictionary of NSString -> PFFieldOperation. - // Each dictionary has a subset of the object's keys as keys, and the - // changes to the value for that key as its value. - // There is always at least one dictionary of pending operations. - // Every time a save is started, a new dictionary is added to the end. - // Whenever a save completes, the new data is put into fetchedData, and - // a dictionary is removed from the start. - NSMutableArray *PF_NULLABLE_S operationSetQueue; -} - -///-------------------------------------- -/// @name Creating a PFObject -///-------------------------------------- - -/*! - @abstract Initializes a new empty `PFObject` instance with a class name. - - @param newClassName A class name can be any alphanumeric string that begins with a letter. - It represents an object in your app, like a 'User' or a 'Document'. - - @returns Returns the object that is instantiated with the given class name. - */ -- (instancetype)initWithClassName:(NSString *)newClassName; - -/*! - @abstract Creates a new PFObject with a class name. - - @param className A class name can be any alphanumeric string that begins with a letter. - It represents an object in your app, like a 'User' or a 'Document'. - - @returns Returns the object that is instantiated with the given class name. - */ -+ (instancetype)objectWithClassName:(NSString *)className; - -/*! - @abstract Creates a new `PFObject` with a class name, initialized with data - constructed from the specified set of objects and keys. - - @param className The object's class. - @param dictionary An `NSDictionary` of keys and objects to set on the new `PFObject`. - - @returns A PFObject with the given class name and set with the given data. - */ -+ (instancetype)objectWithClassName:(NSString *)className dictionary:(PF_NULLABLE NSDictionary PF_GENERIC(NSString *, id)*)dictionary; - -/*! - @abstract Creates a reference to an existing PFObject for use in creating associations between PFObjects. - - @discussion Calling on this object will return `NO` until has been called. - No network request will be made. - - @param className The object's class. - @param objectId The object id for the referenced object. - - @returns A `PFObject` instance without data. - */ -+ (instancetype)objectWithoutDataWithClassName:(NSString *)className objectId:(PF_NULLABLE NSString *)objectId; - -///-------------------------------------- -/// @name Managing Object Properties -///-------------------------------------- - -/*! - @abstract The class name of the object. - */ -@property (strong, readonly) NSString *parseClassName; - -/*! - @abstract The id of the object. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, strong) NSString *objectId; - -/*! - @abstract When the object was last updated. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, strong, readonly) NSDate *updatedAt; - -/*! - @abstract When the object was created. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, strong, readonly) NSDate *createdAt; - -/*! - @abstract The ACL for this object. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, strong) PFACL *ACL; - -/*! - @abstract Returns an array of the keys contained in this object. - - @discussion This does not include `createdAt`, `updatedAt`, `authData`, or `objectId`. - It does include things like username and ACL. - */ -- (NSArray PF_GENERIC(NSString *)*)allKeys; - -///-------------------------------------- -/// @name Accessors -///-------------------------------------- - -/*! - @abstract Returns the value associated with a given key. - - @param key The key for which to return the corresponding value. - */ -- (PF_NULLABLE_S id)objectForKey:(NSString *)key; - -/*! - @abstract Sets the object associated with a given key. - - @param object The object for `key`. A strong reference to the object is maintained by PFObject. - Raises an `NSInvalidArgumentException` if `object` is `nil`. - If you need to represent a `nil` value - use `NSNull`. - @param key The key for `object`. - Raises an `NSInvalidArgumentException` if `key` is `nil`. - - @see setObject:forKeyedSubscript: - */ -- (void)setObject:(id)object forKey:(NSString *)key; - -/*! - @abstract Unsets a key on the object. - - @param key The key. - */ -- (void)removeObjectForKey:(NSString *)key; - -/*! - @abstract Returns the value associated with a given key. - - @discussion This method enables usage of literal syntax on `PFObject`. - E.g. `NSString *value = object[@"key"];` - - @param key The key for which to return the corresponding value. - - @see objectForKey: - */ -- (PF_NULLABLE_S id)objectForKeyedSubscript:(NSString *)key; - -/*! - @abstract Returns the value associated with a given key. - - @discussion This method enables usage of literal syntax on `PFObject`. - E.g. `object[@"key"] = @"value";` - - @param object The object for `key`. A strong reference to the object is maintained by PFObject. - Raises an `NSInvalidArgumentException` if `object` is `nil`. - If you need to represent a `nil` value - use `NSNull`. - @param key The key for `object`. - Raises an `NSInvalidArgumentException` if `key` is `nil`. - - @see setObject:forKey: - */ -- (void)setObject:(id)object forKeyedSubscript:(NSString *)key; - -/*! - @abstract Returns the relation object associated with the given key. - - @param key The key that the relation is associated with. - */ -- (PFRelation *)relationForKey:(NSString *)key; - -/*! - @abstract Returns the relation object associated with the given key. - - @param key The key that the relation is associated with. - - @deprecated Please use `[PFObject relationForKey:]` instead. - */ -- (PFRelation *)relationforKey:(NSString *)key PARSE_DEPRECATED("Please use -relationForKey: instead."); - -/*! - @abstract Clears any changes to this object made since the last call to save and sets it back to the server state. - */ -- (void)revert; - -/*! - @abstract Clears any changes to this object's key that were done after last successful save and sets it back to the - server state. - - @param key The key to revert changes for. - */ -- (void)revertObjectForKey:(NSString *)key; - -///-------------------------------------- -/// @name Array Accessors -///-------------------------------------- - -/*! - @abstract Adds an object to the end of the array associated with a given key. - - @param object The object to add. - @param key The key. - */ -- (void)addObject:(id)object forKey:(NSString *)key; - -/*! - @abstract Adds the objects contained in another array to the end of the array associated with a given key. - - @param objects The array of objects to add. - @param key The key. - */ -- (void)addObjectsFromArray:(NSArray *)objects forKey:(NSString *)key; - -/*! - @abstract Adds an object to the array associated with a given key, only if it is not already present in the array. - - @discussion The position of the insert is not guaranteed. - - @param object The object to add. - @param key The key. - */ -- (void)addUniqueObject:(id)object forKey:(NSString *)key; - -/*! - @abstract Adds the objects contained in another array to the array associated with a given key, - only adding elements which are not already present in the array. - - @dicsussion The position of the insert is not guaranteed. - - @param objects The array of objects to add. - @param key The key. - */ -- (void)addUniqueObjectsFromArray:(NSArray *)objects forKey:(NSString *)key; - -/*! - @abstract Removes all occurrences of an object from the array associated with a given key. - - @param object The object to remove. - @param key The key. - */ -- (void)removeObject:(id)object forKey:(NSString *)key; - -/*! - @abstract Removes all occurrences of the objects contained in another array from the array associated with a given key. - - @param objects The array of objects to remove. - @param key The key. - */ -- (void)removeObjectsInArray:(NSArray *)objects forKey:(NSString *)key; - -///-------------------------------------- -/// @name Increment -///-------------------------------------- - -/*! - @abstract Increments the given key by `1`. - - @param key The key. - */ -- (void)incrementKey:(NSString *)key; - -/*! - @abstract Increments the given key by a number. - - @param key The key. - @param amount The amount to increment. - */ -- (void)incrementKey:(NSString *)key byAmount:(NSNumber *)amount; - -///-------------------------------------- -/// @name Saving Objects -///-------------------------------------- - -/*! - @abstract *Synchronously* saves the `PFObject`. - - @returns Returns whether the save succeeded. - */ -- (BOOL)save PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* saves the `PFObject` and sets an error if it occurs. - - @param error Pointer to an NSError that will be set if necessary. - - @returns Returns whether the save succeeded. - */ -- (BOOL)save:(NSError **)error; - -/*! - @abstract Saves the `PFObject` *asynchronously*. - - @returns The task that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(NSNumber *)*)saveInBackground; - -/*! - @abstract Saves the `PFObject` *asynchronously* and executes the given callback block. - - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - */ -- (void)saveInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block; - -/* - @abstract Saves the `PFObject` asynchronously and calls the given callback. - - @param target The object to call selector on. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - `[result boolValue]` will tell you whether the call succeeded or not. - */ -- (void)saveInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; - -/*! - @abstract Saves this object to the server at some unspecified time in the future, - even if Parse is currently inaccessible. - - @discussion Use this when you may not have a solid network connection, and don't need to know when the save completes. - If there is some problem with the object such that it can't be saved, it will be silently discarded. If the save - completes successfully while the object is still in memory, then callback will be called. - - Objects saved with this method will be stored locally in an on-disk cache until they can be delivered to Parse. - They will be sent immediately if possible. Otherwise, they will be sent the next time a network connection is - available. Objects saved this way will persist even after the app is closed, in which case they will be sent the - next time the app is opened. If more than 10MB of data is waiting to be sent, subsequent calls to - will cause old saves to be silently discarded until the connection can be re-established, and the queued objects - can be saved. - - @returns The task that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(NSNumber *)*)saveEventually PF_WATCH_UNAVAILABLE; - -/*! - @abstract Saves this object to the server at some unspecified time in the future, - even if Parse is currently inaccessible. - - @discussion Use this when you may not have a solid network connection, and don't need to know when the save completes. - If there is some problem with the object such that it can't be saved, it will be silently discarded. If the save - completes successfully while the object is still in memory, then callback will be called. - - Objects saved with this method will be stored locally in an on-disk cache until they can be delivered to Parse. - They will be sent immediately if possible. Otherwise, they will be sent the next time a network connection is - available. Objects saved this way will persist even after the app is closed, in which case they will be sent the - next time the app is opened. If more than 10MB of data is waiting to be sent, subsequent calls to - will cause old saves to be silently discarded until the connection can be re-established, and the queued objects - can be saved. - - @param callback The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - */ -- (void)saveEventually:(PF_NULLABLE PFBooleanResultBlock)callback PF_WATCH_UNAVAILABLE; - -///-------------------------------------- -/// @name Saving Many Objects -///-------------------------------------- - -/*! - @abstract Saves a collection of objects *synchronously all at once. - - @param objects The array of objects to save. - - @returns Returns whether the save succeeded. - */ -+ (BOOL)saveAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects PF_SWIFT_UNAVAILABLE; - -/*! - @abstract Saves a collection of objects *synchronously* all at once and sets an error if necessary. - - @param objects The array of objects to save. - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns whether the save succeeded. - */ -+ (BOOL)saveAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects error:(NSError **)error; - -/*! - @abstract Saves a collection of objects all at once *asynchronously*. - - @param objects The array of objects to save. - - @returns The task that encapsulates the work being done. - */ -+ (BFTask PF_GENERIC(NSNumber *)*)saveAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects; - -/*! - @abstract Saves a collection of objects all at once `asynchronously` and executes the block when done. - - @param objects The array of objects to save. - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - */ -+ (void)saveAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects - block:(PF_NULLABLE PFBooleanResultBlock)block; - -/* - @abstract Saves a collection of objects all at once *asynchronously* and calls a callback when done. - - @param objects The array of objects to save. - @param target The object to call selector on. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(NSNumber *)number error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - `[result boolValue]` will tell you whether the call succeeded or not. - */ -+ (void)saveAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects - target:(PF_NULLABLE_S id)target - selector:(PF_NULLABLE_S SEL)selector; - -///-------------------------------------- -/// @name Deleting Many Objects -///-------------------------------------- - -/*! - @abstract *Synchronously* deletes a collection of objects all at once. - - @param objects The array of objects to delete. - - @returns Returns whether the delete succeeded. - */ -+ (BOOL)deleteAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* deletes a collection of objects all at once and sets an error if necessary. - - @param objects The array of objects to delete. - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns whether the delete succeeded. - */ -+ (BOOL)deleteAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects error:(NSError **)error; - -/*! - @abstract Deletes a collection of objects all at once asynchronously. - @param objects The array of objects to delete. - @returns The task that encapsulates the work being done. - */ -+ (BFTask PF_GENERIC(NSNumber *)*)deleteAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects; - -/*! - @abstract Deletes a collection of objects all at once *asynchronously* and executes the block when done. - - @param objects The array of objects to delete. - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - */ -+ (void)deleteAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects - block:(PF_NULLABLE PFBooleanResultBlock)block; - -/* - @abstract Deletes a collection of objects all at once *asynchronously* and calls a callback when done. - - @param objects The array of objects to delete. - @param target The object to call selector on. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(NSNumber *)number error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - `[result boolValue]` will tell you whether the call succeeded or not. - */ -+ (void)deleteAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects - target:(PF_NULLABLE_S id)target - selector:(PF_NULLABLE_S SEL)selector; - -///-------------------------------------- -/// @name Getting an Object -///-------------------------------------- - -/*! - @abstract Gets whether the `PFObject` has been fetched. - - @returns `YES` if the PFObject is new or has been fetched or refreshed, otherwise `NO`. - */ -- (BOOL)isDataAvailable; - -#if PARSE_IOS_ONLY - -/*! - @abstract Refreshes the PFObject with the current data from the server. - - @deprecated Please use `-fetch` instead. - */ -- (PF_NULLABLE instancetype)refresh PF_SWIFT_UNAVAILABLE PARSE_DEPRECATED("Please use `-fetch` instead."); - -/*! - @abstract *Synchronously* refreshes the `PFObject` with the current data from the server and sets an error if it occurs. - - @param error Pointer to an `NSError` that will be set if necessary. - - @deprecated Please use `-fetch:` instead. - */ -- (PF_NULLABLE instancetype)refresh:(NSError **)error PARSE_DEPRECATED("Please use `-fetch:` instead."); - -/*! - @abstract *Asynchronously* refreshes the `PFObject` and executes the given callback block. - - @param block The block to execute. - The block should have the following argument signature: `^(PFObject *object, NSError *error)` - - @deprecated Please use `-fetchInBackgroundWithBlock:` instead. - */ -- (void)refreshInBackgroundWithBlock:(PF_NULLABLE PFObjectResultBlock)block PARSE_DEPRECATED("Please use `-fetchInBackgroundWithBlock:` instead."); - -/* - @abstract *Asynchronously* refreshes the `PFObject` and calls the given callback. - - @param target The target on which the selector will be called. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(PFObject *)refreshedObject error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - `refreshedObject` will be the `PFObject` with the refreshed data. - - @deprecated Please use `fetchInBackgroundWithTarget:selector:` instead. - */ -- (void)refreshInBackgroundWithTarget:(PF_NULLABLE_S id)target - selector:(PF_NULLABLE_S SEL)selector PARSE_DEPRECATED("Please use `fetchInBackgroundWithTarget:selector:` instead."); - -#endif - -/*! - @abstract *Synchronously* fetches the PFObject with the current data from the server. - */ -- (PF_NULLABLE instancetype)fetch PF_SWIFT_UNAVAILABLE; -/*! - @abstract *Synchronously* fetches the PFObject with the current data from the server and sets an error if it occurs. - - @param error Pointer to an `NSError` that will be set if necessary. - */ -- (PF_NULLABLE instancetype)fetch:(NSError **)error; - -/*! - @abstract *Synchronously* fetches the `PFObject` data from the server if is `NO`. - */ -- (PF_NULLABLE instancetype)fetchIfNeeded PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* fetches the `PFObject` data from the server if is `NO`. - - @param error Pointer to an `NSError` that will be set if necessary. - */ -- (PF_NULLABLE instancetype)fetchIfNeeded:(NSError **)error; - -/*! - @abstract Fetches the `PFObject` *asynchronously* and sets it as a result for the task. - - @returns The task that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(__kindof PFObject *)*)fetchInBackground; - -/*! - @abstract Fetches the PFObject *asynchronously* and executes the given callback block. - - @param block The block to execute. - It should have the following argument signature: `^(PFObject *object, NSError *error)`. - */ -- (void)fetchInBackgroundWithBlock:(PF_NULLABLE PFObjectResultBlock)block; - -/* - @abstract Fetches the `PFObject *asynchronously* and calls the given callback. - - @param target The target on which the selector will be called. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(PFObject *)refreshedObject error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - `refreshedObject` will be the `PFObject` with the refreshed data. - */ -- (void)fetchInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; - -/*! - @abstract Fetches the `PFObject` data *asynchronously* if isDataAvailable is `NO`, - then sets it as a result for the task. - - @returns The task that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(__kindof PFObject *)*)fetchIfNeededInBackground; - -/*! - @abstract Fetches the `PFObject` data *asynchronously* if is `NO`, then calls the callback block. - - @param block The block to execute. - It should have the following argument signature: `^(PFObject *object, NSError *error)`. - */ -- (void)fetchIfNeededInBackgroundWithBlock:(PF_NULLABLE PFObjectResultBlock)block; - -/* - @abstract Fetches the PFObject's data asynchronously if isDataAvailable is false, then calls the callback. - - @param target The target on which the selector will be called. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(PFObject *)fetchedObject error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - `refreshedObject` will be the `PFObject` with the refreshed data. - */ -- (void)fetchIfNeededInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; - -///-------------------------------------- -/// @name Getting Many Objects -///-------------------------------------- - -/*! - @abstract *Synchronously* fetches all of the `PFObject` objects with the current data from the server. - - @param objects The list of objects to fetch. - */ -+ (PF_NULLABLE NSArray PF_GENERIC(__kindof PFObject *)*)fetchAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* fetches all of the `PFObject` objects with the current data from the server - and sets an error if it occurs. - - @param objects The list of objects to fetch. - @param error Pointer to an `NSError` that will be set if necessary. - */ -+ (PF_NULLABLE NSArray PF_GENERIC(__kindof PFObject *)*)fetchAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects - error:(NSError **)error; - -/*! - @abstract *Synchronously* fetches all of the `PFObject` objects with the current data from the server. - @param objects The list of objects to fetch. - */ -+ (PF_NULLABLE NSArray PF_GENERIC(__kindof PFObject *)*)fetchAllIfNeeded:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* fetches all of the `PFObject` objects with the current data from the server - and sets an error if it occurs. - - @param objects The list of objects to fetch. - @param error Pointer to an `NSError` that will be set if necessary. - */ -+ (PF_NULLABLE NSArray PF_GENERIC(__kindof PFObject *)*)fetchAllIfNeeded:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects - error:(NSError **)error; - -/*! - @abstract Fetches all of the `PFObject` objects with the current data from the server *asynchronously*. - - @param objects The list of objects to fetch. - - @returns The task that encapsulates the work being done. - */ -+ (BFTask PF_GENERIC(NSArray<__kindof PFObject *> *)*)fetchAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects; - -/*! - @abstract Fetches all of the `PFObject` objects with the current data from the server *asynchronously* - and calls the given block. - - @param objects The list of objects to fetch. - @param block The block to execute. - It should have the following argument signature: `^(NSArray *objects, NSError *error)`. - */ -+ (void)fetchAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects - block:(PF_NULLABLE PFArrayResultBlock)block; - -/* - @abstract Fetches all of the `PFObject` objects with the current data from the server *asynchronously* - and calls the given callback. - - @param objects The list of objects to fetch. - @param target The target on which the selector will be called. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(NSArray *)fetchedObjects error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - `fetchedObjects` will the array of `PFObject` objects that were fetched. - */ -+ (void)fetchAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects - target:(PF_NULLABLE_S id)target - selector:(PF_NULLABLE_S SEL)selector; - -/*! - @abstract Fetches all of the `PFObject` objects with the current data from the server *asynchronously*. - - @param objects The list of objects to fetch. - - @returns The task that encapsulates the work being done. - */ -+ (BFTask PF_GENERIC(NSArray<__kindof PFObject *> *)*)fetchAllIfNeededInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects; - -/*! - @abstract Fetches all of the PFObjects with the current data from the server *asynchronously* - and calls the given block. - - @param objects The list of objects to fetch. - @param block The block to execute. - It should have the following argument signature: `^(NSArray *objects, NSError *error)`. - */ -+ (void)fetchAllIfNeededInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects - block:(PF_NULLABLE PFArrayResultBlock)block; - -/* - @abstract Fetches all of the PFObjects with the current data from the server *asynchronously* - and calls the given callback. - - @param objects The list of objects to fetch. - @param target The target on which the selector will be called. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(NSArray *)fetchedObjects error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - `fetchedObjects` will the array of `PFObject` objects that were fetched. - */ -+ (void)fetchAllIfNeededInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects - target:(PF_NULLABLE_S id)target - selector:(PF_NULLABLE_S SEL)selector; - -///-------------------------------------- -/// @name Fetching From Local Datastore -///-------------------------------------- - -/*! - @abstract *Synchronously* loads data from the local datastore into this object, - if it has not been fetched from the server already. - */ -- (PF_NULLABLE instancetype)fetchFromLocalDatastore PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* loads data from the local datastore into this object, if it has not been fetched - from the server already. - - @discussion If the object is not stored in the local datastore, this `error` will be set to - return kPFErrorCacheMiss. - - @param error Pointer to an `NSError` that will be set if necessary. - */ -- (PF_NULLABLE instancetype)fetchFromLocalDatastore:(NSError **)error; - -/*! - @abstract *Asynchronously* loads data from the local datastore into this object, - if it has not been fetched from the server already. - - @returns The task that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(__kindof PFObject *)*)fetchFromLocalDatastoreInBackground; - -/*! - @abstract *Asynchronously* loads data from the local datastore into this object, - if it has not been fetched from the server already. - - @param block The block to execute. - It should have the following argument signature: `^(PFObject *object, NSError *error)`. - */ -- (void)fetchFromLocalDatastoreInBackgroundWithBlock:(PF_NULLABLE PFObjectResultBlock)block; - -///-------------------------------------- -/// @name Deleting an Object -///-------------------------------------- - -/*! - @abstract *Synchronously* deletes the `PFObject`. - - @returns Returns whether the delete succeeded. - */ -- (BOOL)delete PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* deletes the `PFObject` and sets an error if it occurs. - - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns whether the delete succeeded. - */ -- (BOOL)delete:(NSError **)error; - -/*! - @abstract Deletes the `PFObject` *asynchronously*. - - @returns The task that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(NSNumber *)*)deleteInBackground; - -/*! - @abstract Deletes the `PFObject` *asynchronously* and executes the given callback block. - - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - */ -- (void)deleteInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block; - -/* - @abstract Deletes the `PFObject` *asynchronously* and calls the given callback. - - @param target The object to call selector on. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - `[result boolValue]` will tell you whether the call succeeded or not. - */ -- (void)deleteInBackgroundWithTarget:(PF_NULLABLE_S id)target - selector:(PF_NULLABLE_S SEL)selector; - -/*! - @abstract Deletes this object from the server at some unspecified time in the future, - even if Parse is currently inaccessible. - - @discussion Use this when you may not have a solid network connection, - and don't need to know when the delete completes. If there is some problem with the object - such that it can't be deleted, the request will be silently discarded. - - Delete instructions made with this method will be stored locally in an on-disk cache until they can be transmitted - to Parse. They will be sent immediately if possible. Otherwise, they will be sent the next time a network connection - is available. Delete requests will persist even after the app is closed, in which case they will be sent the - next time the app is opened. If more than 10MB of or commands are waiting - to be sent, subsequent calls to or will cause old requests to be silently discarded - until the connection can be re-established, and the queued requests can go through. - - @returns The task that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(NSNumber *)*)deleteEventually PF_WATCH_UNAVAILABLE; - -///-------------------------------------- -/// @name Dirtiness -///-------------------------------------- - -/*! - @abstract Gets whether any key-value pair in this object (or its children) - has been added/updated/removed and not saved yet. - - @returns Returns whether this object has been altered and not saved yet. - */ -- (BOOL)isDirty; - -/*! - @abstract Get whether a value associated with a key has been added/updated/removed and not saved yet. - - @param key The key to check for - - @returns Returns whether this key has been altered and not saved yet. - */ -- (BOOL)isDirtyForKey:(NSString *)key; - -///-------------------------------------- -/// @name Pinning -///-------------------------------------- - -/*! - @abstract *Synchronously* stores the object and every object it points to in the local datastore, recursively, - using a default pin name: `PFObjectDefaultPin`. - - @discussion If those other objects have not been fetched from Parse, they will not be stored. However, - if they have changed data, all the changes will be retained. To get the objects back later, you can - use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with - <[PFObject objectWithoutDataWithClassName:objectId:]> and then call on it. - - @returns Returns whether the pin succeeded. - - @see unpin: - @see PFObjectDefaultPin - */ -- (BOOL)pin PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* stores the object and every object it points to in the local datastore, recursively, - using a default pin name: `PFObjectDefaultPin`. - - @discussion If those other objects have not been fetched from Parse, they will not be stored. However, - if they have changed data, all the changes will be retained. To get the objects back later, you can - use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with - <[PFObject objectWithoutDataWithClassName:objectId:]> and then call on it. - - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns whether the pin succeeded. - - @see unpin: - @see PFObjectDefaultPin - */ -- (BOOL)pin:(NSError **)error; - -/*! - @abstract *Synchronously* stores the object and every object it points to in the local datastore, recursively. - - @discussion If those other objects have not been fetched from Parse, they will not be stored. However, - if they have changed data, all the changes will be retained. To get the objects back later, you can - use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with - <[PFObject objectWithoutDataWithClassName:objectId:]> and then call on it. - - @param name The name of the pin. - - @returns Returns whether the pin succeeded. - - @see unpinWithName: - */ -- (BOOL)pinWithName:(NSString *)name PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* stores the object and every object it points to in the local datastore, recursively. - - @discussion If those other objects have not been fetched from Parse, they will not be stored. However, - if they have changed data, all the changes will be retained. To get the objects back later, you can - use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with - <[PFObject objectWithoutDataWithClassName:objectId:]> and then call on it. - - @param name The name of the pin. - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns whether the pin succeeded. - - @see unpinWithName: - */ -- (BOOL)pinWithName:(NSString *)name - error:(NSError **)error; - -/*! - @abstract *Asynchronously* stores the object and every object it points to in the local datastore, recursively, - using a default pin name: `PFObjectDefaultPin`. - - @discussion If those other objects have not been fetched from Parse, they will not be stored. However, - if they have changed data, all the changes will be retained. To get the objects back later, you can - use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with - <[PFObject objectWithoutDataWithClassName:objectId:]> and then call on it. - - @returns The task that encapsulates the work being done. - - @see unpinInBackground - @see PFObjectDefaultPin - */ -- (BFTask PF_GENERIC(NSNumber *)*)pinInBackground; - -/*! - @abstract *Asynchronously* stores the object and every object it points to in the local datastore, recursively, - using a default pin name: `PFObjectDefaultPin`. - - @discussion If those other objects have not been fetched from Parse, they will not be stored. However, - if they have changed data, all the changes will be retained. To get the objects back later, you can - use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with - <[PFObject objectWithoutDataWithClassName:objectId:]> and then call on it. - - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - - @see unpinInBackgroundWithBlock: - @see PFObjectDefaultPin - */ -- (void)pinInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block; - -/*! - @abstract *Asynchronously* stores the object and every object it points to in the local datastore, recursively. - - @discussion If those other objects have not been fetched from Parse, they will not be stored. However, - if they have changed data, all the changes will be retained. To get the objects back later, you can - use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with - <[PFObject objectWithoutDataWithClassName:objectId:]> and then call on it. - - @param name The name of the pin. - - @returns The task that encapsulates the work being done. - - @see unpinInBackgroundWithName: - */ -- (BFTask PF_GENERIC(NSNumber *)*)pinInBackgroundWithName:(NSString *)name; - -/*! - @abstract *Asynchronously* stores the object and every object it points to in the local datastore, recursively. - - @discussion If those other objects have not been fetched from Parse, they will not be stored. However, - if they have changed data, all the changes will be retained. To get the objects back later, you can - use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with - <[PFObject objectWithoutDataWithClassName:objectId:]> and then call on it. - - @param name The name of the pin. - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - - @see unpinInBackgroundWithName:block: - */ -- (void)pinInBackgroundWithName:(NSString *)name block:(PF_NULLABLE PFBooleanResultBlock)block; - -///-------------------------------------- -/// @name Pinning Many Objects -///-------------------------------------- - -/*! - @abstract *Synchronously* stores the objects and every object they point to in the local datastore, recursively, - using a default pin name: `PFObjectDefaultPin`. - - @discussion If those other objects have not been fetched from Parse, they will not be stored. However, - if they have changed data, all the changes will be retained. To get the objects back later, you can - use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with - `[PFObject objectWithoutDataWithClassName:objectId:]` and then call `fetchFromLocalDatastore:` on it. - - @param objects The objects to be pinned. - - @returns Returns whether the pin succeeded. - - @see unpinAll: - @see PFObjectDefaultPin - */ -+ (BOOL)pinAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* stores the objects and every object they point to in the local datastore, recursively, - using a default pin name: `PFObjectDefaultPin`. - - @discussion If those other objects have not been fetched from Parse, they will not be stored. However, - if they have changed data, all the changes will be retained. To get the objects back later, you can - use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with - `[PFObject objectWithoutDataWithClassName:objectId:]` and then call `fetchFromLocalDatastore:` on it. - - @param objects The objects to be pinned. - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns whether the pin succeeded. - - @see unpinAll:error: - @see PFObjectDefaultPin - */ -+ (BOOL)pinAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects error:(NSError **)error; - -/*! - @abstract *Synchronously* stores the objects and every object they point to in the local datastore, recursively. - - @discussion If those other objects have not been fetched from Parse, they will not be stored. However, - if they have changed data, all the changes will be retained. To get the objects back later, you can - use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with - `[PFObject objectWithoutDataWithClassName:objectId:]` and then call `fetchFromLocalDatastore:` on it. - - @param objects The objects to be pinned. - @param name The name of the pin. - - @returns Returns whether the pin succeeded. - - @see unpinAll:withName: - */ -+ (BOOL)pinAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects withName:(NSString *)name PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* stores the objects and every object they point to in the local datastore, recursively. - - @discussion If those other objects have not been fetched from Parse, they will not be stored. However, - if they have changed data, all the changes will be retained. To get the objects back later, you can - use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with - `[PFObject objectWithoutDataWithClassName:objectId:]` and then call `fetchFromLocalDatastore:` on it. - - @param objects The objects to be pinned. - @param name The name of the pin. - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns whether the pin succeeded. - - @see unpinAll:withName:error: - */ -+ (BOOL)pinAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects - withName:(NSString *)name - error:(NSError **)error; - -/*! - @abstract *Asynchronously* stores the objects and every object they point to in the local datastore, recursively, - using a default pin name: `PFObjectDefaultPin`. - - @discussion If those other objects have not been fetched from Parse, they will not be stored. However, - if they have changed data, all the changes will be retained. To get the objects back later, you can - use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with - `[PFObject objectWithoutDataWithClassName:objectId:]` and then call `fetchFromLocalDatastore:` on it. - - @param objects The objects to be pinned. - - @returns The task that encapsulates the work being done. - - @see unpinAllInBackground: - @see PFObjectDefaultPin - */ -+ (BFTask PF_GENERIC(NSNumber *)*)pinAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects; - -/*! - @abstract *Asynchronously* stores the objects and every object they point to in the local datastore, recursively, - using a default pin name: `PFObjectDefaultPin`. - - @discussion If those other objects have not been fetched from Parse, they will not be stored. However, - if they have changed data, all the changes will be retained. To get the objects back later, you can - use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with - `[PFObject objectWithoutDataWithClassName:objectId:]` and then call `fetchFromLocalDatastore:` on it. - - @param objects The objects to be pinned. - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - - @see unpinAllInBackground:block: - @see PFObjectDefaultPin - */ -+ (void)pinAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects block:(PF_NULLABLE PFBooleanResultBlock)block; - -/*! - @abstract *Asynchronously* stores the objects and every object they point to in the local datastore, recursively. - - @discussion If those other objects have not been fetched from Parse, they will not be stored. However, - if they have changed data, all the changes will be retained. To get the objects back later, you can - use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with - `[PFObject objectWithoutDataWithClassName:objectId:]` and then call `fetchFromLocalDatastore:` on it. - - @param objects The objects to be pinned. - @param name The name of the pin. - - @returns The task that encapsulates the work being done. - - @see unpinAllInBackground:withName: - */ -+ (BFTask PF_GENERIC(NSNumber *)*)pinAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects withName:(NSString *)name; - -/*! - @abstract *Asynchronously* stores the objects and every object they point to in the local datastore, recursively. - - @discussion If those other objects have not been fetched from Parse, they will not be stored. However, - if they have changed data, all the changes will be retained. To get the objects back later, you can - use a that uses <[PFQuery fromLocalDatastore]>, or you can create an unfetched pointer with - `[PFObject objectWithoutDataWithClassName:objectId:]` and then call `fetchFromLocalDatastore:` on it. - - @param objects The objects to be pinned. - @param name The name of the pin. - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - - @see unpinAllInBackground:withName:block: - */ -+ (void)pinAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects - withName:(NSString *)name - block:(PF_NULLABLE PFBooleanResultBlock)block; - -///-------------------------------------- -/// @name Unpinning -///-------------------------------------- - -/*! - @abstract *Synchronously* removes the object and every object it points to in the local datastore, recursively, - using a default pin name: `PFObjectDefaultPin`. - - @returns Returns whether the unpin succeeded. - - @see pin: - @see PFObjectDefaultPin - */ -- (BOOL)unpin PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* removes the object and every object it points to in the local datastore, recursively, - using a default pin name: `PFObjectDefaultPin`. - - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns whether the unpin succeeded. - - @see pin: - @see PFObjectDefaultPin - */ -- (BOOL)unpin:(NSError **)error; - -/*! - @abstract *Synchronously* removes the object and every object it points to in the local datastore, recursively. - - @param name The name of the pin. - - @returns Returns whether the unpin succeeded. - - @see pinWithName: - */ -- (BOOL)unpinWithName:(NSString *)name PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* removes the object and every object it points to in the local datastore, recursively. - - @param name The name of the pin. - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns whether the unpin succeeded. - - @see pinWithName:error: - */ -- (BOOL)unpinWithName:(NSString *)name - error:(NSError **)error; - -/*! - @abstract *Asynchronously* removes the object and every object it points to in the local datastore, recursively, - using a default pin name: `PFObjectDefaultPin`. - - @returns The task that encapsulates the work being done. - - @see pinInBackground - @see PFObjectDefaultPin - */ -- (BFTask PF_GENERIC(NSNumber *)*)unpinInBackground; - -/*! - @abstract *Asynchronously* removes the object and every object it points to in the local datastore, recursively, - using a default pin name: `PFObjectDefaultPin`. - - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - - @see pinInBackgroundWithBlock: - @see PFObjectDefaultPin - */ -- (void)unpinInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block; - -/*! - @abstract *Asynchronously* removes the object and every object it points to in the local datastore, recursively. - - @param name The name of the pin. - - @returns The task that encapsulates the work being done. - - @see pinInBackgroundWithName: - */ -- (BFTask PF_GENERIC(NSNumber *)*)unpinInBackgroundWithName:(NSString *)name; - -/*! - @abstract *Asynchronously* removes the object and every object it points to in the local datastore, recursively. - - @param name The name of the pin. - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - - @see pinInBackgroundWithName:block: - */ -- (void)unpinInBackgroundWithName:(NSString *)name block:(PF_NULLABLE PFBooleanResultBlock)block; - -///-------------------------------------- -/// @name Unpinning Many Objects -///-------------------------------------- - -/*! - @abstract *Synchronously* removes all objects in the local datastore - using a default pin name: `PFObjectDefaultPin`. - - @returns Returns whether the unpin succeeded. - - @see PFObjectDefaultPin - */ -+ (BOOL)unpinAllObjects PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* removes all objects in the local datastore - using a default pin name: `PFObjectDefaultPin`. - - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns whether the unpin succeeded. - - @see PFObjectDefaultPin - */ -+ (BOOL)unpinAllObjects:(NSError **)error; - -/*! - @abstract *Synchronously* removes all objects with the specified pin name. - - @param name The name of the pin. - - @returns Returns whether the unpin succeeded. - */ -+ (BOOL)unpinAllObjectsWithName:(NSString *)name PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* removes all objects with the specified pin name. - - @param name The name of the pin. - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns whether the unpin succeeded. - */ -+ (BOOL)unpinAllObjectsWithName:(NSString *)name - error:(NSError **)error; - -/*! - @abstract *Asynchronously* removes all objects in the local datastore - using a default pin name: `PFObjectDefaultPin`. - - @returns The task that encapsulates the work being done. - - @see PFObjectDefaultPin - */ -+ (BFTask PF_GENERIC(NSNumber *)*)unpinAllObjectsInBackground; - -/*! - @abstract *Asynchronously* removes all objects in the local datastore - using a default pin name: `PFObjectDefaultPin`. - - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - - @see PFObjectDefaultPin - */ -+ (void)unpinAllObjectsInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block; - -/*! - @abstract *Asynchronously* removes all objects with the specified pin name. - - @param name The name of the pin. - - @returns The task that encapsulates the work being done. - */ -+ (BFTask PF_GENERIC(NSNumber *)*)unpinAllObjectsInBackgroundWithName:(NSString *)name; - -/*! - @abstract *Asynchronously* removes all objects with the specified pin name. - - @param name The name of the pin. - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - */ -+ (void)unpinAllObjectsInBackgroundWithName:(NSString *)name block:(PF_NULLABLE PFBooleanResultBlock)block; - -/*! - @abstract *Synchronously* removes the objects and every object they point to in the local datastore, recursively, - using a default pin name: `PFObjectDefaultPin`. - - @param objects The objects. - - @returns Returns whether the unpin succeeded. - - @see pinAll: - @see PFObjectDefaultPin - */ -+ (BOOL)unpinAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* removes the objects and every object they point to in the local datastore, recursively, - using a default pin name: `PFObjectDefaultPin`. - - @param objects The objects. - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns whether the unpin succeeded. - - @see pinAll:error: - @see PFObjectDefaultPin - */ -+ (BOOL)unpinAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects error:(NSError **)error; - -/*! - @abstract *Synchronously* removes the objects and every object they point to in the local datastore, recursively. - - @param objects The objects. - @param name The name of the pin. - - @returns Returns whether the unpin succeeded. - - @see pinAll:withName: - */ -+ (BOOL)unpinAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects withName:(NSString *)name PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* removes the objects and every object they point to in the local datastore, recursively. - - @param objects The objects. - @param name The name of the pin. - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns whether the unpin succeeded. - - @see pinAll:withName:error: - */ -+ (BOOL)unpinAll:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects - withName:(NSString *)name - error:(NSError **)error; - -/*! - @abstract *Asynchronously* removes the objects and every object they point to in the local datastore, recursively, - using a default pin name: `PFObjectDefaultPin`. - - @param objects The objects. - - @returns The task that encapsulates the work being done. - - @see pinAllInBackground: - @see PFObjectDefaultPin - */ -+ (BFTask PF_GENERIC(NSNumber *)*)unpinAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects; - -/*! - @abstract *Asynchronously* removes the objects and every object they point to in the local datastore, recursively, - using a default pin name: `PFObjectDefaultPin`. - - @param objects The objects. - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - - @see pinAllInBackground:block: - @see PFObjectDefaultPin - */ -+ (void)unpinAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects block:(PF_NULLABLE PFBooleanResultBlock)block; - -/*! - @abstract *Asynchronously* removes the objects and every object they point to in the local datastore, recursively. - - @param objects The objects. - @param name The name of the pin. - - @returns The task that encapsulates the work being done. - - @see pinAllInBackground:withName: - */ -+ (BFTask PF_GENERIC(NSNumber *)*)unpinAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects withName:(NSString *)name; - -/*! - @abstract *Asynchronously* removes the objects and every object they point to in the local datastore, recursively. - - @param objects The objects. - @param name The name of the pin. - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - - @see pinAllInBackground:withName:block: - */ -+ (void)unpinAllInBackground:(PF_NULLABLE NSArray PF_GENERIC(PFObject *)*)objects - withName:(NSString *)name - block:(PF_NULLABLE PFBooleanResultBlock)block; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFObject.m b/FoodbLog/Pods/Parse/Parse/PFObject.m deleted file mode 100644 index b403694..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFObject.m +++ /dev/null @@ -1,2770 +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. - */ - -#import "PFObject.h" -#import "PFObject+Subclass.h" -#import "PFObjectSubclassingController.h" - -#import -#import -#import - -#import - -#import "BFTask+Private.h" -#import "PFACLPrivate.h" -#import "PFCommandResult.h" -#import "PFCommandRunning.h" -#import "PFConstants.h" -#import "PFCoreManager.h" -#import "PFCurrentUserController.h" -#import "PFDateFormatter.h" -#import "PFDecoder.h" -#import "PFEncoder.h" -#import "PFErrorUtilities.h" -#import "PFEventuallyQueue_Private.h" -#import "PFFileManager.h" -#import "PFFile_Private.h" -#import "PFJSONSerialization.h" -#import "PFLogging.h" -#import "PFMacros.h" -#import "PFMultiProcessFileLockController.h" -#import "PFMutableObjectState.h" -#import "PFObjectBatchController.h" -#import "PFObjectConstants.h" -#import "PFObjectController.h" -#import "PFObjectEstimatedData.h" -#import "PFObjectFileCodingLogic.h" -#import "PFObjectFilePersistenceController.h" -#import "PFObjectLocalIdStore.h" -#import "PFObjectUtilities.h" -#import "PFOfflineStore.h" -#import "PFOperationSet.h" -#import "PFPin.h" -#import "PFPinningObjectStore.h" -#import "PFQueryPrivate.h" -#import "PFRESTObjectBatchCommand.h" -#import "PFRESTObjectCommand.h" -#import "PFRelation.h" -#import "PFRelationPrivate.h" -#import "PFSubclassing.h" -#import "PFTaskQueue.h" -#import "ParseInternal.h" -#import "Parse_Private.h" - -/*! - Checks if an object can be used as a value for PFObject. - */ -static void PFObjectAssertValueIsKindOfValidClass(id object) { - static NSArray *classes; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - classes = @[ [NSDictionary class], [NSArray class], - [NSString class], [NSNumber class], [NSNull class], [NSDate class], [NSData class], - [PFObject class], [PFFile class], [PFACL class], [PFGeoPoint class] ]; - }); - - for (Class class in classes) { - if ([object isKindOfClass:class]) { - return; - } - } - - PFParameterAssert(NO, @"PFObject values may not have class: %@", [object class]); -} - -/*! - Checks if a class is a of container kind to be used as a value for PFObject. - */ -static BOOL PFObjectValueIsKindOfMutableContainerClass(id object) { - static NSArray *classes; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - classes = @[ [NSDictionary class], [NSArray class], [PFACL class], [PFGeoPoint class] ]; - }); - - for (Class class in classes) { - if ([object isKindOfClass:class]) { - return YES; - } - } - - return NO; -} - -@interface PFObject () { - // A lock for accessing any of the internal state of this object. - // Guards basically all of the variables below. - NSObject *lock; - - PFObjectState *_pfinternal_state; - - PFObjectEstimatedData *_estimatedData; - NSMutableSet *_availableKeys; // TODO: (nlutsenko) Maybe decouple this further. - - // TODO (grantland): Derive this off the EventuallyPins as opposed to +/- count. - int _deletingEventually; - - // A dictionary that maps id (objects) => PFJSONCache - NSMutableDictionary *hashedObjectsCache; - - NSString *localId; - - // This queue is used to guarantee the order of *Eventually commands - // and offload all the work to the background thread - PFTaskQueue *_eventuallyTaskQueue; -} - -@property (nonatomic, strong, readwrite) NSString *localId; - -@property (nonatomic, strong, readwrite) PFTaskQueue *taskQueue; - -+ (void)assertSubclassIsRegistered:(Class)subclass; - -@end - -@implementation PFObject (Private) - -+ (void)unregisterSubclass:(Class)subclass { - [[self subclassingController] unregisterSubclass:subclass]; -} - -/*! - Returns the object that should be used to synchronize all internal data access. - */ -- (NSObject *)lock { - return lock; -} - -/*! - Blocks until all outstanding operations have completed. - */ -- (void)waitUntilFinished { - [[self.taskQueue enqueue:^BFTask *(BFTask *toAwait) { - return toAwait; - }] waitForResult:nil]; -} - -/*! - For operations that need to be put into multiple objects queues, like saveAll - and fetchAll, this method does the nasty work. - @param taskStart - A block that is called when all of the objects are ready. - It can return a promise that all of the queues will then wait on. - @param objects - The objects that this operation affects. - @returns - Returns a promise that is fulfilled once the promise returned by the - block is fulfilled. - */ -+ (BFTask *)_enqueue:(BFTask *(^)(BFTask *toAwait))taskStart forObjects:(NSArray *)objects { - // The task that will be complete when all of the child queues indicate they're ready to start. - BFTaskCompletionSource *readyToStart = [BFTaskCompletionSource taskCompletionSource]; - - // First, we need to lock the mutex for the queue for every object. We have to hold this - // from at least when taskStart() is called to when obj.taskQueue enqueue is called, so - // that saves actually get executed in the order they were setup by taskStart(). - // The locks have to be sorted so that we always acquire them in the same order. - // Otherwise, there's some risk of deadlock. - NSMutableArray *mutexes = [NSMutableArray array]; - for (PFObject *obj in objects) { - [mutexes addObject:obj.taskQueue.mutex]; - } - [mutexes sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { - void *lock1 = (__bridge void *)obj1; - void *lock2 = (__bridge void *)obj2; - return lock1 - lock2; - }]; - for (NSObject *lock in mutexes) { - objc_sync_enter(lock); - } - - @try { - // The task produced by taskStart. By running this immediately, we allow everything prior - // to toAwait to run before waiting for all of the queues on all of the objects. - BFTask *fullTask = taskStart(readyToStart.task); - - // Add fullTask to each of the objects' queues. - NSMutableArray *childTasks = [NSMutableArray array]; - for (PFObject *obj in objects) { - [obj.taskQueue enqueue:^BFTask *(BFTask *toAwait) { - [childTasks addObject:toAwait]; - return fullTask; - }]; - } - - // When all of the objects' queues are ready, signal fullTask that it's ready to go on. - [[BFTask taskForCompletionOfAllTasks:childTasks] continueWithBlock:^id(BFTask *task) { - readyToStart.result = nil; - return nil; - }]; - - return fullTask; - - } @finally { - for (NSObject *lock in mutexes) { - objc_sync_exit(lock); - } - } -} - -///-------------------------------------- -#pragma mark - Children helpers -///-------------------------------------- - -/*! - Finds all of the objects that are reachable from child, including child itself, - and adds them to the given mutable array. It traverses arrays and json objects. - @param node An kind object to search for children. - @param dirtyChildren The array to collect the result into. - @param seen The set of all objects that have already been seen. - @param seenNew The set of new objects that have already been seen since the - last existing object. - */ -+ (void)collectDirtyChildren:(id)node - children:(NSMutableSet *)dirtyChildren - files:(NSMutableSet *)dirtyFiles - seen:(NSSet *)seen - seenNew:(NSSet *)seenNew - currentUser:(PFUser *)currentUser { - if ([node isKindOfClass:[NSArray class]]) { - for (id elem in node) { - @autoreleasepool { - [self collectDirtyChildren:elem - children:dirtyChildren - files:dirtyFiles - seen:seen - seenNew:seenNew - currentUser:currentUser]; - } - } - } else if ([node isKindOfClass:[NSDictionary class]]) { - [node enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - [self collectDirtyChildren:obj - children:dirtyChildren - files:dirtyFiles - seen:seen - seenNew:seenNew - currentUser:currentUser]; - }]; - } else if ([node isKindOfClass:[PFACL class]]) { - PFACL *acl = (PFACL *)node; - if ([acl hasUnresolvedUser]) { - [self collectDirtyChildren:currentUser - children:dirtyChildren - files:dirtyFiles - seen:seen - seenNew:seenNew - currentUser:currentUser]; - } - - } else if ([node isKindOfClass:[PFObject class]]) { - PFObject *object = (PFObject *)node; - NSDictionary *toSearch = nil; - - @synchronized ([object lock]) { - // Check for cycles of new objects. Any such cycle means it will be - // impossible to save this collection of objects, so throw an exception. - if (object.objectId) { - seenNew = [NSSet set]; - } else { - if ([seenNew containsObject:object]) { - [NSException raise:NSInternalInconsistencyException - format:@"Found a circular dependency when saving."]; - } - seenNew = [seenNew setByAddingObject:object]; - } - - // Check for cycles of any object. If this occurs, then there's no - // problem, but we shouldn't recurse any deeper, because it would be - // an infinite recursion. - if ([seen containsObject:object]) { - return; - } - seen = [seen setByAddingObject:object]; - - // Recurse into this object's children looking for dirty children. - // We only need to look at the child object's current estimated data, - // because that's the only data that might need to be saved now. - toSearch = [object->_estimatedData.dictionaryRepresentation copy]; - } - - [self collectDirtyChildren:toSearch - children:dirtyChildren - files:dirtyFiles - seen:seen - seenNew:seenNew - currentUser:currentUser]; - - if ([object isDirty:NO]) { - [dirtyChildren addObject:object]; - } - } else if ([node isKindOfClass:[PFFile class]]) { - PFFile *file = (PFFile *)node; - if (!file.url) { - [dirtyFiles addObject:node]; - } - } -} - -// Helper version of collectDirtyChildren:children:seen:seenNew so that callers -// don't have to add the internally used parameters. -+ (void)collectDirtyChildren:(id)child - children:(NSMutableSet *)dirtyChildren - files:(NSMutableSet *)dirtyFiles - currentUser:(PFUser *)currentUser { - [self collectDirtyChildren:child - children:dirtyChildren - files:dirtyFiles - seen:[NSSet set] - seenNew:[NSSet set] - currentUser:currentUser]; -} - -// Returns YES if the given object can be serialized for saving as a value -// that is pointed to by a PFObject. -// @param value The object we want to serialize as a value. -// @param saved The set of all objects we can assume will be saved before this one. -// @param error The reason why it can't be serialized. -+ (BOOL)canBeSerializedAsValue:(id)value - afterSaving:(NSMutableArray *)saved - error:(NSError **)error { - if ([value isKindOfClass:[PFObject class]]) { - PFObject *object = (PFObject *)value; - if (!object.objectId && ![saved containsObject:object]) { - if (error) { - *error = [PFErrorUtilities errorWithCode:kPFErrorInvalidPointer - message:@"Pointer to an unsaved object."]; - } - return NO; - } - - } else if ([value isKindOfClass:[NSDictionary class]]) { - __block BOOL retValue = YES; - [value enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - if (![[self class] canBeSerializedAsValue:obj - afterSaving:saved - error:error]) { - retValue = NO; - *stop = YES; - } - }]; - return retValue; - } else if ([value isKindOfClass:[NSArray class]]) { - NSArray *array = (NSArray *)value; - for (NSString *item in array) { - if (![[self class] canBeSerializedAsValue:item - afterSaving:saved - error:error]) { - return NO; - } - } - } - - return YES; -} - -// Returns YES if this object can be serialized for saving. -// @param saved A set of objects that we can assume will have been saved. -// @param error The reason why it can't be serialized. -- (BOOL)canBeSerializedAfterSaving:(NSMutableArray *)saved withCurrentUser:(PFUser *)user error:(NSError **)error { - @synchronized (lock) { - // This method is only used for batching sets of objects for saveAll - // and when saving children automatically. Since it's only used to - // determine whether or not save should be called on them, it only - // needs to examine their current values, so we use estimatedData. - if (![[self class] canBeSerializedAsValue:_estimatedData.dictionaryRepresentation - afterSaving:saved - error:error]) { - return NO; - } - - if ([self isDataAvailableForKey:@"ACL"] && - [[self ACLWithoutCopying] hasUnresolvedUser] && - ![saved containsObject:user]) { - if (error) { - *error = [PFErrorUtilities errorWithCode:kPFErrorInvalidACL - message:@"User associated with ACL must be signed up."]; - } - return NO; - } - - return YES; - } -} - -// This saves all of the objects and files reachable from the given object. -// It does its work in multiple waves, saving as many as possible in each wave. -// If there's ever an error, it just gives up, sets error, and returns NO; -+ (BFTask *)_deepSaveAsync:(id)object withCurrentUser:(PFUser *)currentUser sessionToken:(NSString *)sessionToken { - BFTask *task = [BFTask taskWithResult:@YES]; - - NSMutableSet *uniqueObjects = [NSMutableSet set]; - NSMutableSet *uniqueFiles = [NSMutableSet set]; - [self collectDirtyChildren:object children:uniqueObjects files:uniqueFiles currentUser:currentUser]; - for (PFFile *file in uniqueFiles) { - task = [task continueAsyncWithSuccessBlock:^id(BFTask *task) { - return [[file saveInBackground] continueAsyncWithBlock:^id(BFTask *task) { - // This is a stupid hack because our current behavior is to fail file - // saves with an error when a file save inside it is cancelled. - if (task.isCancelled) { - NSError *newError = [PFErrorUtilities errorWithCode:kPFErrorUnsavedFile - message:@"A file save was cancelled."]; - return [BFTask taskWithError:newError]; - } - return task; - }]; - }]; - } - - // TODO: (nlutsenko) Get rid of this once we allow localIds in batches. - NSArray *remaining = [uniqueObjects allObjects]; - NSMutableArray *finished = [NSMutableArray array]; - while ([remaining count] > 0) { - // Partition the objects into two sets: those that can be save immediately, - // and those that rely on other objects to be created first. - NSMutableArray *current = [NSMutableArray array]; - NSMutableArray *nextBatch = [NSMutableArray array]; - for (PFObject *object in remaining) { - if ([object canBeSerializedAfterSaving:finished withCurrentUser:currentUser error:nil]) { - [current addObject:object]; - } else { - [nextBatch addObject:object]; - } - } - remaining = nextBatch; - - if (current.count == 0) { - // We do cycle-detection when building the list of objects passed to this - // function, so this should never get called. But we should check for it - // anyway, so that we get an exception instead of an infinite loop. - [NSException raise:NSInternalInconsistencyException - format:@"Unable to save a PFObject with a relation to a cycle."]; - } - - // If a lazy user is one of the objects in the array, resolve its laziness now and - // remove it from the list of things to save. - // - // This has to happen separately from everything else because there [PFUser save] - // is special-cased to work for lazy users, but new users can't be created by - // PFMultiCommand's regular save. - if ([currentUser isLazy] && [current containsObject:currentUser]) { - task = [task continueAsyncWithSuccessBlock:^id(BFTask *task) { - return [currentUser saveInBackground]; - }]; - - [finished addObject:currentUser]; - [current removeObject:currentUser]; - if (current.count == 0) { - continue; - } - } - - task = [task continueAsyncWithSuccessBlock:^id(BFTask *task) { - // Batch requests have currently a limit of 50 packaged requests per single request - // This splitting will split the overall array into segments of upto 50 requests - // and execute them concurrently with a wrapper task for all of them. - NSArray *objectBatches = [PFInternalUtils arrayBySplittingArray:current - withMaximumComponentsPerSegment:PFRESTObjectBatchCommandSubcommandsLimit]; - NSMutableArray *tasks = [NSMutableArray arrayWithCapacity:[objectBatches count]]; - - for (NSArray *objectBatch in objectBatches) { - BFTask *batchTask = [self _enqueue:^BFTask *(BFTask *toAwait) { - return [toAwait continueAsyncWithBlock:^id(BFTask *task) { - NSMutableArray *commands = [NSMutableArray arrayWithCapacity:[objectBatch count]]; - for (PFObject *object in objectBatch) { - PFRESTCommand *command = nil; - @synchronized ([object lock]) { - [object _objectWillSave]; - [object _checkSaveParametersWithCurrentUser:currentUser]; - command = [object _constructSaveCommandForChanges:[object unsavedChanges] - sessionToken:sessionToken - objectEncoder:[PFPointerObjectEncoder objectEncoder]]; - [object startSave]; - } - [commands addObject:command]; - } - - PFRESTCommand *batchCommand = [PFRESTObjectBatchCommand batchCommandWithCommands:commands - sessionToken:sessionToken]; - return [[[Parse _currentManager].commandRunner runCommandAsync:batchCommand withOptions:0] - continueAsyncWithBlock:^id(BFTask *commandRunnerTask) { - NSArray *results = [commandRunnerTask.result result]; - - NSMutableArray *handleSaveTasks = [NSMutableArray arrayWithCapacity:[objectBatch count]]; - - __block NSError *error = task.error; - [objectBatch enumerateObjectsUsingBlock:^(PFObject *object, NSUInteger idx, BOOL *stop) { - // If the task resulted in an error - don't even bother looking into - // the result of the command, just roll the error further - - BFTask *task = nil; - if (commandRunnerTask.error) { - task = [object handleSaveResultAsync:nil]; - } else { - NSDictionary *commandResult = results[idx]; - - NSDictionary *errorResult = commandResult[@"error"]; - if (errorResult) { - error = [PFErrorUtilities errorFromResult:errorResult]; - task = [[object handleSaveResultAsync:nil] continueWithBlock:^id(BFTask *task) { - return [BFTask taskWithError:error]; - }]; - } else { - NSDictionary *successfulResult = commandResult[@"success"]; - task = [object handleSaveResultAsync:successfulResult]; - } - } - [handleSaveTasks addObject:task]; - }]; - - return [[BFTask taskForCompletionOfAllTasks:handleSaveTasks] continueAsyncWithBlock:^id(BFTask *task) { - if (commandRunnerTask.error || commandRunnerTask.cancelled || commandRunnerTask.exception) { - return commandRunnerTask; - } - - // Reiterate saveAll tasks, return first error. - for (BFTask *handleSaveTask in handleSaveTasks) { - if (handleSaveTask.error || handleSaveTask.exception) { - return handleSaveTask; - } - } - - return @YES; - }]; - }]; - }]; - } forObjects:objectBatch]; - [tasks addObject:batchTask]; - } - - return [[BFTask taskForCompletionOfAllTasks:tasks] continueWithBlock:^id(BFTask *task) { - // Return the first exception, instead of the aggregated one - // for the sake of compatability with old versions - - if ([task.exception.name isEqualToString:BFTaskMultipleExceptionsException]) { - NSException *firstException = [task.exception.userInfo[@"exceptions"] firstObject]; - if (firstException) { - return [BFTask taskWithException:firstException]; - } - } - - if (task.error || task.cancelled || task.exception) { - return task; - } - - return @YES; - }]; - }]; - - [finished addObjectsFromArray:current]; - } - - return task; -} - -// Just like deepSaveAsync, but uses saveEventually instead of saveAsync. -// Because you shouldn't wait for saveEventually calls to complete, this -// does not return any operation. -+ (BFTask *)_enqueueSaveEventuallyChildrenOfObject:(PFObject *)object - currentUser:(PFUser *)currentUser { - return [BFTask taskFromExecutor:[BFExecutor defaultExecutor] withBlock:^id{ - NSMutableSet *uniqueObjects = [NSMutableSet set]; - NSMutableSet *uniqueFiles = [NSMutableSet set]; - [self collectDirtyChildren:object children:uniqueObjects files:uniqueFiles currentUser:currentUser]; - for (PFFile *file in uniqueFiles) { - if (!file.url) { - NSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException - reason:@"Unable to saveEventually a PFObject with a relation to a new, unsaved PFFile." - userInfo:nil]; - return [BFTask taskWithException:exception]; - } - } - - // Remove object from the queue of objects to save as this method should only save children. - [uniqueObjects removeObject:object]; - - NSArray *remaining = [uniqueObjects allObjects]; - NSMutableArray *finished = [NSMutableArray array]; - NSMutableArray *enqueueTasks = [NSMutableArray array]; - while ([remaining count] > 0) { - // Partition the objects into two sets: those that can be save immediately, - // and those that rely on other objects to be created first. - NSMutableArray *current = [NSMutableArray array]; - NSMutableArray *nextBatch = [NSMutableArray array]; - for (PFObject *object in remaining) { - if ([object canBeSerializedAfterSaving:finished withCurrentUser:currentUser error:nil]) { - [current addObject:object]; - } else { - [nextBatch addObject:object]; - } - } - remaining = nextBatch; - - if (current.count == 0) { - // We do cycle-detection when building the list of objects passed to this - // function, so this should never get called. But we should check for it - // anyway, so that we get an exception instead of an infinite loop. - [NSException raise:NSInternalInconsistencyException - format:@"Unable to save a PFObject with a relation to a cycle."]; - } - - // If a lazy user is one of the objects in the array, resolve its laziness now and - // remove it from the list of things to save. - // - // This has to happen separately from everything else because there [PFUser save] - // is special-cased to work for lazy users, but new users can't be created by - // PFMultiCommand's regular save. - // - // Unfortunately, ACLs with lazy users still cannot be saved, because the ACL does - // does not get updated after the user save completes. - // TODO: (nlutsenko) Make the ACL update after the user is saved. - if ([currentUser isLazy] && [current containsObject:currentUser]) { - [enqueueTasks addObject:[currentUser _enqueueSaveEventuallyWithChildren:NO]]; - [finished addObject:currentUser]; - [current removeObject:currentUser]; - if (current.count == 0) { - continue; - } - } - - // TODO: (nlutsenko) Allow batching with saveEventually. - for (PFObject *object in current) { - [enqueueTasks addObject:[object _enqueueSaveEventuallyWithChildren:NO]]; - } - - [finished addObjectsFromArray:current]; - } - return [BFTask taskForCompletionOfAllTasks:enqueueTasks]; - }]; -} - -- (BFTask *)_saveChildrenInBackgroundWithCurrentUser:(PFUser *)currentUser sessionToken:(NSString *)sessionToken { - @synchronized (lock) { - return [[self class] _deepSaveAsync:_estimatedData.dictionaryRepresentation - withCurrentUser:currentUser - sessionToken:sessionToken]; - } -} - -///-------------------------------------- -#pragma mark - Dirtiness helper -///-------------------------------------- - -- (BOOL)isDirty:(BOOL)considerChildren { - @synchronized (lock) { - [self checkForChangesToMutableContainers]; - if (self._state.deleted || dirty || [self _hasChanges]) { - return YES; - } - - if (considerChildren) { - NSMutableSet *seen = [NSMutableSet set]; - return [self _areChildrenDirty:seen]; - } - - return NO; - } -} - -- (void)_setDirty:(BOOL)aDirty { - @synchronized (lock) { - dirty = aDirty; - } -} - -- (BOOL)_areChildrenDirty:(NSMutableSet *)seenObjects { - if ([seenObjects containsObject:self]) { - return NO; - } - [seenObjects addObject:self]; - - @synchronized(lock) { - [self checkpointAllMutableContainers]; - if (self._state.deleted || dirty || [self _hasChanges]) { - return YES; - } - - // We only need to consider the currently estimated children here, - // because they're the only ones that might need to be saved in a - // subsequent call to save, which is the meaning of "dirtiness". - __block BOOL retValue = NO; - [_estimatedData enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) { - if ([obj isKindOfClass:[PFObject class]] && [obj _areChildrenDirty:seenObjects]) { - retValue = YES; - *stop = YES; - } - }]; - return retValue; - } -} - -///-------------------------------------- -#pragma mark - Mutable container management -///-------------------------------------- - -- (void)checkpointAllMutableContainers { - @synchronized (lock) { - [_estimatedData enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) { - [self checkpointMutableContainer:obj]; - }]; - } -} - -- (void)checkpointMutableContainer:(id)object { - @synchronized (lock) { - if (PFObjectValueIsKindOfMutableContainerClass(object)) { - [hashedObjectsCache setObject:[PFJSONCacheItem cacheFromObject:object] - forKey:[NSValue valueWithNonretainedObject:object]]; - } - } -} - -- (void)checkForChangesToMutableContainer:(id)object forKey:(NSString *)key { - @synchronized (lock) { - // If this is a mutable container, we should check its contents. - if (PFObjectValueIsKindOfMutableContainerClass(object)) { - PFJSONCacheItem *oldCacheItem = [hashedObjectsCache objectForKey:[NSValue valueWithNonretainedObject:object]]; - if (!oldCacheItem) { - [NSException raise:NSInternalInconsistencyException - format:@"PFObject contains container item that isn't cached."]; - } else { - PFJSONCacheItem *newCacheItem = [PFJSONCacheItem cacheFromObject:object]; - if (![oldCacheItem isEqual:newCacheItem]) { - // A mutable container changed out from under us. Treat it as a set operation. - [self setObject:object forKey:key]; - } - } - } else { - [hashedObjectsCache removeObjectForKey:[NSValue valueWithNonretainedObject:object]]; - } - } -} - -- (void)checkForChangesToMutableContainers { - @synchronized (lock) { - NSMutableArray *unexaminedCacheKeys = [[hashedObjectsCache allKeys] mutableCopy]; - NSDictionary *reachableData = _estimatedData.dictionaryRepresentation; - [reachableData enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - [unexaminedCacheKeys removeObject:[NSValue valueWithNonretainedObject:obj]]; - [self checkForChangesToMutableContainer:obj forKey:key]; - }]; - - // Remove unchecked cache entries. - [hashedObjectsCache removeObjectsForKeys:unexaminedCacheKeys]; - } -} - -///-------------------------------------- -#pragma mark - Data Availability -///-------------------------------------- - -// TODO: (nlutsenko) Remove this when rest of PFObject is decoupled. -- (void)setHasBeenFetched:(BOOL)fetched { - @synchronized (lock) { - if (self._state.complete != fetched) { - PFMutableObjectState *state = [_pfinternal_state mutableCopy]; - state.complete = fetched; - self._state = state; - } - } -} - -- (void)_setDeleted:(BOOL)deleted { - @synchronized (lock) { - if (self._state.deleted != deleted) { - PFMutableObjectState *state = [_pfinternal_state mutableCopy]; - state.deleted = deleted; - self._state = state; - } - } -} - -- (BOOL)isDataAvailableForKey:(NSString *)key { - if (!key) { - return NO; - } - - @synchronized (lock) { - if ([self isDataAvailable]) { - return YES; - } - return [_availableKeys containsObject:key]; - } -} - -///-------------------------------------- -#pragma mark - Validations -///-------------------------------------- - -// Validations that are done on save. For now, there is nothing. -- (void)_checkSaveParametersWithCurrentUser:(PFUser *)currentUser { - return; -} - -/*! - Checks if Parse class name could be used to initialize a given instance of PFObject or it's subclass. - */ -+ (void)_assertValidInstanceClassName:(NSString *)className { - PFParameterAssert(className, @"Class name can't be 'nil'."); - PFParameterAssert(![className hasPrefix:@"_"], @"Invalid class name. Class names cannot start with an underscore."); -} - -///-------------------------------------- -#pragma mark - Serialization helpers -///-------------------------------------- - -- (NSString *)getOrCreateLocalId { - @synchronized(lock) { - if (!self.localId) { - PFConsistencyAssert(!self._state.objectId, - @"A localId should not be created for an object with an objectId."); - self.localId = [[Parse _currentManager].coreManager.objectLocalIdStore createLocalId]; - } - } - return self.localId; -} - -- (void)resolveLocalId { - @synchronized (lock) { - PFConsistencyAssert(self.localId, @"Tried to resolve a localId for an object with no localId."); - NSString *newObjectId = [[Parse _currentManager].coreManager.objectLocalIdStore objectIdForLocalId:self.localId]; - - // If we are resolving local ids, then this object is about to go over the network. - // But if it has local ids that haven't been resolved yet, then that's not going to - // be possible. - if (!newObjectId) { - [NSException raise:NSInternalInconsistencyException - format:@"Tried to save an object with a pointer to a new, unsaved object."]; - } - - // Nil out the localId so that the new objectId won't be saved back to the PFObjectLocalIdStore. - self.localId = nil; - self.objectId = newObjectId; - } -} - -+ (id)_objectFromDictionary:(NSDictionary *)dictionary - defaultClassName:(NSString *)defaultClassName - completeData:(BOOL)completeData { - return [self _objectFromDictionary:dictionary - defaultClassName:defaultClassName - completeData:completeData - decoder:[PFDecoder objectDecoder]]; -} - -// When merging results from a query, ensure that any supplied `selectedKeys` are marked as available. This special -// handling is necessary because keys with an `undefined` value are not guaranteed to be included in the server's -// response data. -// -// See T3336562 -+ (id)_objectFromDictionary:(NSDictionary *)dictionary - defaultClassName:(NSString *)defaultClassName - selectedKeys:(NSArray *)selectedKeys { - PFObject *result = [self _objectFromDictionary:dictionary - defaultClassName:defaultClassName - completeData:(selectedKeys == nil) - decoder:[PFDecoder objectDecoder]]; - [result->_availableKeys addObjectsFromArray:selectedKeys]; - return result; -} - -/*! - Creates a PFObject from a dictionary object. - - @param dictionary Undecoded dictionary. - @param defaultClassName The className of the resulting object if none is given by the dictionary. - @param completeData Whether to use complete data. - @param decoder Decoder used to decode the dictionary. - */ -+ (id)_objectFromDictionary:(NSDictionary *)dictionary - defaultClassName:(NSString *)defaultClassName - completeData:(BOOL)completeData - decoder:(PFDecoder *)decoder { - NSString *objectId = nil; - NSString *className = nil; - if (dictionary != nil) { - objectId = dictionary[@"objectId"]; - className = dictionary[@"className"] ?: defaultClassName; - } - PFObject *object = [PFObject objectWithoutDataWithClassName:className objectId:objectId]; - [object _mergeAfterFetchWithResult:dictionary decoder:decoder completeData:completeData]; - return object; -} - -/*! - When the app was previously a non-LDS app and want to enable LDS, currentUser and currentInstallation - will be discarded if we don't migrate them. This is a helper method to migrate user/installation - from disk to pin. - - @param fileName the file in which the object was saved. - @param pinName the name of the pin in which the object should be stored. - */ -+ (BFTask *)_migrateObjectInBackgroundFromFile:(NSString *)fileName - toPin:(NSString *)pinName { - return [self _migrateObjectInBackgroundFromFile:fileName toPin:pinName usingMigrationBlock:nil]; -} - -/*! - When the app was previously a non-LDS app and want to enable LDS, currentUser and currentInstallation - will be discarded if we don't migrate them. This is a helper method to migrate user/installation - from disk to pin. - - @param fileName the file in which the object was saved. - @param pinName the name of the pin in which the object should be stored. - @param migrationBlock The block that will be called if there is an object on disk and before the object is pinned. - */ -+ (BFTask *)_migrateObjectInBackgroundFromFile:(NSString *)fileName - toPin:(NSString *)pinName - usingMigrationBlock:(BFContinuationBlock)migrationBlock { - PFObjectFilePersistenceController *controller = [Parse _currentManager].coreManager.objectFilePersistenceController; - BFTask *task = [controller loadPersistentObjectAsyncForKey:fileName]; - if (migrationBlock) { - task = [task continueWithSuccessBlock:^id(BFTask *task) { - PFObject *object = task.result; - if (object) { - return [[task continueWithBlock:migrationBlock] continueWithResult:object]; - } - return task; - }]; - } - return [task continueWithSuccessBlock:^id(BFTask *task) { - PFObject *object = task.result; - return [[object _pinInBackgroundWithName:pinName includeChildren:NO] continueWithBlock:^id(BFTask *task) { - BFTask *resultTask = [BFTask taskWithResult:object]; - - // Only delete if we successfully pin it so that it retries the migration next time. - if (!task.error && !task.exception && !task.cancelled) { - NSString *path = [[Parse _currentManager].fileManager parseDataItemPathForPathComponent:fileName]; - return [[PFFileManager removeItemAtPathAsync:path] continueWithBlock:^id(BFTask *task) { - // We don't care if it fails to delete the file, so return the - return resultTask; - }]; - } - return resultTask; - }]; - }]; -} - -///-------------------------------------- -#pragma mark - REST operations -///-------------------------------------- - -/*! - Encodes parse object into NSDictionary suitable for persisting into LDS. - */ -- (NSDictionary *)RESTDictionaryWithObjectEncoder:(PFEncoder *)objectEncoder - operationSetUUIDs:(NSArray **)operationSetUUIDs { - @synchronized (lock) { - [self checkForChangesToMutableContainers]; - PFObjectState *state = self._state; - return [self RESTDictionaryWithObjectEncoder:objectEncoder - operationSetUUIDs:operationSetUUIDs - state:state - operationSetQueue:operationSetQueue]; - } -} - -- (NSDictionary *)RESTDictionaryWithObjectEncoder:(PFEncoder *)objectEncoder - operationSetUUIDs:(NSArray **)operationSetUUIDs - state:(PFObjectState *)state - operationSetQueue:(NSArray *)queue { - NSMutableDictionary *result = [[state dictionaryRepresentationWithObjectEncoder:objectEncoder] mutableCopy]; - result[PFObjectClassNameRESTKey] = state.parseClassName; - result[PFObjectCompleteRESTKey] = @(state.complete); - - result[PFObjectIsDeletingEventuallyRESTKey] = @(_deletingEventually); - - // TODO (hallucinogen): based on some note from Android's toRest, we'll need to put this - // stuff somewhere else - NSMutableArray *operations = [NSMutableArray array]; - NSMutableArray *mutableOperationSetUUIDs = [NSMutableArray array]; - for (PFOperationSet *operation in queue) { - NSArray *ooSetUUIDs = nil; - [operations addObject:[operation RESTDictionaryUsingObjectEncoder:objectEncoder - operationSetUUIDs:&ooSetUUIDs]]; - [mutableOperationSetUUIDs addObjectsFromArray:ooSetUUIDs]; - } - - *operationSetUUIDs = mutableOperationSetUUIDs; - - result[PFObjectOperationsRESTKey] = operations; - return result; -} - -- (void)mergeFromRESTDictionary:(NSDictionary *)object withDecoder:(PFDecoder *)decoder { - @synchronized (lock) { - BOOL mergeServerData = NO; - - PFMutableObjectState *state = [self._state mutableCopy]; - - // If LDS has `updatedAt` and we have it - compare, then if stuff is newer - merge. - // If LDS doesn't have `updatedAt` and we don't have it - merge anyway. - NSString *updatedAtString = object[PFObjectUpdatedAtRESTKey]; - if (updatedAtString) { - NSDate *updatedDate = [[PFDateFormatter sharedFormatter] dateFromString:updatedAtString]; - mergeServerData = ([state.updatedAt compare:updatedDate] != NSOrderedDescending); - } else if (!state.updatedAt) { - mergeServerData = YES; - } - [object enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - if ([key isEqualToString:PFObjectOperationsRESTKey]) { - PFOperationSet *remoteOperationSet = nil; - NSArray *operations = (NSArray *)obj; - if ([operations count] > 0) { - // Add and enqueue any saveEventually operations, roll forward any other - // operations sets (operations sets here are generally failed/incomplete saves). - PFOperationSet *current = nil; - for (id rawOperationSet in operations) { - PFOperationSet *operationSet = [PFOperationSet operationSetFromRESTDictionary:rawOperationSet - usingDecoder:decoder]; - if (operationSet.saveEventually) { - if (current != nil) { - [[self unsavedChanges] mergeOperationSet:current]; - current = nil; - } - - // Check if queue already contains this operation set and discard it if does - if (![self _containsOperationSet:operationSet]) { - // Insert the `saveEventually` operationSet before the last operation set at all times. - NSUInteger index = ([operationSetQueue count] == 0 ? 0 : [operationSetQueue count] - 1); - [operationSetQueue insertObject:operationSet atIndex:index]; - [self _enqueueSaveEventuallyOperationAsync:operationSet]; - } - - continue; - } - - if (current != nil) { - [operationSet mergeOperationSet:current]; - } - current = operationSet; - } - if (current != nil) { - remoteOperationSet = current; - } - } - - PFOperationSet *localOperationSet = [self unsavedChanges]; - if (localOperationSet.updatedAt != nil && - [localOperationSet.updatedAt compare:remoteOperationSet.updatedAt] != NSOrderedAscending) { - [localOperationSet mergeOperationSet:remoteOperationSet]; - } else { - PFConsistencyAssert(remoteOperationSet, @"'remoteOperationSet' should not be nil."); - NSUInteger index = [operationSetQueue indexOfObject:localOperationSet]; - [remoteOperationSet mergeOperationSet:localOperationSet]; - [operationSetQueue replaceObjectAtIndex:index withObject:remoteOperationSet]; - } - - return; - } - - if ([key isEqualToString:PFObjectCompleteRESTKey]) { - // If server data is complete, consider this object to be fetched - state.complete = state.complete || [obj boolValue]; - return; - } - if ([key isEqualToString:PFObjectIsDeletingEventuallyRESTKey]) { - _deletingEventually = [obj intValue]; - return; - } - - [_availableKeys addObject:key]; - - // If server data in dictionary is older - don't merge it. - if (!mergeServerData) { - return; - } - - if ([key isEqualToString:PFObjectTypeRESTKey] || [key isEqualToString:PFObjectClassNameRESTKey]) { - return; - } - if ([key isEqualToString:PFObjectObjectIdRESTKey]) { - state.objectId = obj; - return; - } - if ([key isEqualToString:PFObjectCreatedAtRESTKey]) { - [state setCreatedAtFromString:obj]; - return; - } - if ([key isEqualToString:PFObjectUpdatedAtRESTKey]) { - [state setUpdatedAtFromString:obj]; - return; - } - - if ([key isEqualToString:PFObjectACLRESTKey]) { - PFACL *acl = [PFACL ACLWithDictionary:obj]; - [state setServerDataObject:acl forKey:PFObjectACLRESTKey]; - [self checkpointMutableContainer:acl]; - return; - } - - // Should be decoded - id decodedObject = [decoder decodeObject:obj]; - if (PFObjectValueIsKindOfMutableContainerClass(decodedObject)) { - [self checkpointMutableContainer:decodedObject]; - } - [state setServerDataObject:decodedObject forKey:key]; - }]; - if (state.updatedAt == nil && state.createdAt != nil) { - state.updatedAt = state.createdAt; - } - BOOL previousDirtyState = dirty; - self._state = state; - dirty = previousDirtyState; - - if (mergeServerData) { - if ([object[PFObjectCompleteRESTKey] boolValue]) { - [self removeOldKeysAfterFetch:object]; - } else { - // Unmark the object as fetched, because we merged from incomplete new data. - [self setHasBeenFetched:NO]; - } - } - [self rebuildEstimatedData]; - [self checkpointAllMutableContainers]; - } -} - -///-------------------------------------- -#pragma mark - Eventually Helper -///-------------------------------------- - -/*! - Enqueues saveEventually operation asynchronously. - - @returns A task which result is a saveEventually task. - */ -- (BFTask *)_enqueueSaveEventuallyWithChildren:(BOOL)saveChildren { - return [_eventuallyTaskQueue enqueue:^BFTask *(BFTask *toAwait) { - PFUser *currentUser = [PFUser currentUser]; - NSString *sessionToken = currentUser.sessionToken; - return [[toAwait continueAsyncWithBlock:^id(BFTask *task) { - return [self _validateSaveEventuallyAsync]; - }] continueWithSuccessBlock:^id(BFTask *task) { - @synchronized (lock) { - [self _objectWillSave]; - if (![self isDirty:NO]) { - return [BFTask taskWithResult:@YES]; - } - } - - BFTask *saveChildrenTask = nil; - if (saveChildren) { - saveChildrenTask = [[self class] _enqueueSaveEventuallyChildrenOfObject:self currentUser:currentUser]; - } else { - saveChildrenTask = [BFTask taskWithResult:nil]; - } - - return [saveChildrenTask continueWithSuccessBlock:^id(BFTask *task) { - BFTask *saveTask = nil; - @synchronized (lock) { - // Snapshot the current set of changes, and push a new changeset into the queue. - PFOperationSet *changes = [self unsavedChanges]; - changes.saveEventually = YES; - [self startSave]; - [self _checkSaveParametersWithCurrentUser:currentUser]; - PFRESTCommand *command = [self _constructSaveCommandForChanges:changes - sessionToken:sessionToken - objectEncoder:[PFPointerOrLocalIdObjectEncoder objectEncoder]]; - - // Enqueue the eventually operation! - saveTask = [[Parse _currentManager].eventuallyQueue enqueueCommandInBackground:command withObject:self]; - [self _enqueueSaveEventuallyOperationAsync:changes]; - } - saveTask = [saveTask continueWithBlock:^id(BFTask *task) { - @try { - if (!task.isCancelled && !task.exception && !task.error) { - PFCommandResult *result = task.result; - // PFPinningEventuallyQueue handle save result directly. - if (![Parse _currentManager].offlineStoreLoaded) { - return [self handleSaveResultAsync:result.result]; - } - } - return task; - } @finally { - [[Parse _currentManager].eventuallyQueue _notifyTestHelperObjectUpdated]; - } - }]; - return [BFTask taskWithResult:saveTask]; - }]; - }]; - }]; -} - - -/*! - Enqueues the saveEventually PFOperationSet in PFObject taskQueue - */ -- (BFTask *)_enqueueSaveEventuallyOperationAsync:(PFOperationSet *)operationSet { - if (!operationSet.isSaveEventually) { - NSString *message = @"This should only be used to enqueue saveEventually operation sets"; - NSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException - reason:message - userInfo:nil]; - return [BFTask taskWithException:exception]; - } - - return [self.taskQueue enqueue:^BFTask *(BFTask *toAwait) { - // Use default priority background to break a chain and make sure this operation is truly asynchronous - return [toAwait continueWithExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id(BFTask *task) { - PFEventuallyQueue *queue = [Parse _currentManager].eventuallyQueue; - id queueSubClass = (id)queue; - return [queueSubClass _waitForOperationSet:operationSet eventuallyPin:nil]; - }]; - }]; -} - -///-------------------------------------- -#pragma mark - Data model manipulation -///-------------------------------------- - -- (NSMutableDictionary *)_convertToDictionaryForSaving:(PFOperationSet *)changes - withObjectEncoder:(PFEncoder *)encoder { - @synchronized (lock) { - [self checkForChangesToMutableContainers]; - - NSMutableDictionary *serialized = [NSMutableDictionary dictionary]; - [changes enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - serialized[key] = obj; - }]; - return [encoder encodeObject:serialized]; - } -} - -/*! - performOperation:forKey: is like setObject:forKey, but instead of just taking a - new value, it takes a PFFieldOperation that modifies the value. - */ -- (void)performOperation:(PFFieldOperation *)operation forKey:(NSString *)key { - @synchronized (lock) { - id newValue = [_estimatedData applyFieldOperation:operation forKey:key]; - - PFFieldOperation *oldOperation = [[self unsavedChanges] objectForKey:key]; - PFFieldOperation *newOperation = [operation mergeWithPrevious:oldOperation]; - [[self unsavedChanges] setObject:newOperation forKey:key]; - [self checkpointMutableContainer:newValue]; - [_availableKeys addObject:key]; - } -} - -- (BOOL)_containsOperationSet:(PFOperationSet *)operationSet { - @synchronized (lock) { - for (PFOperationSet *existingOperationSet in operationSetQueue) { - if (existingOperationSet == operationSet || - [existingOperationSet.uuid isEqualToString:operationSet.uuid]) { - return YES; - } - } - } - return NO; -} - -/*! - Returns the set of PFFieldOperations that will be sent in the next save. - */ -- (PFOperationSet *)unsavedChanges { - @synchronized (lock) { - return [operationSetQueue lastObject]; - } -} - -/*! - @returns YES if there's unsaved changes in this object. This complements ivar `dirty` for `isDirty` check. - */ -- (BOOL)_hasChanges { - @synchronized (lock) { - return [[self unsavedChanges] count] > 0; - } -} - -/*! - @returns YES if this PFObject has operations in operationSetQueue that haven't been completed yet, - NO if there are no operations in the operationSetQueue. - */ -- (BOOL)_hasOutstandingOperations { - @synchronized (lock) { - // > 1 since 1 is unsaved changes. - return [operationSetQueue count] > 1; - } -} - -- (void)rebuildEstimatedData { - @synchronized (lock) { - _estimatedData = [PFObjectEstimatedData estimatedDataFromServerData:self._state.serverData - operationSetQueue:operationSetQueue]; - } -} - -- (PFObject *)mergeFromObject:(PFObject *)other { - @synchronized (lock) { - if (self == other) { - // If they point to the same instance, then don't merge. - return self; - } - - PFMutableObjectState *state = [self._state mutableCopy]; - state.objectId = other.objectId; - state.createdAt = other.createdAt; - state.updatedAt = other.updatedAt; - state.serverData = [other._state.serverData mutableCopy]; - self._state = state; - [self checkpointAllMutableContainers]; - - dirty = NO; - - [self rebuildEstimatedData]; - return self; - } -} - -- (void)_mergeAfterFetchWithResult:(NSDictionary *)result decoder:(PFDecoder *)decoder completeData:(BOOL)completeData { - @synchronized (lock) { - [self checkForChangesToMutableContainers]; - [self _mergeFromServerWithResult:result decoder:decoder completeData:completeData]; - if (completeData) { - [self removeOldKeysAfterFetch:result]; - } - [self rebuildEstimatedData]; - [self checkpointAllMutableContainers]; - } -} - -- (void)removeOldKeysAfterFetch:(NSDictionary *)result { - @synchronized (lock) { - PFMutableObjectState *state = [self._state mutableCopy]; - - NSMutableDictionary *removedDictionary = [NSMutableDictionary dictionaryWithDictionary:state.serverData]; - [removedDictionary removeObjectsForKeys:[result allKeys]]; - - NSArray *removedKeys = [removedDictionary allKeys]; - [state removeServerDataObjectsForKeys:removedKeys]; - [_availableKeys minusSet:[NSSet setWithArray:removedKeys]]; - - self._state = state; - } -} - -- (void)_mergeAfterSaveWithResult:(NSDictionary *)result decoder:(PFDecoder *)decoder { - @synchronized (lock) { - PFOperationSet *operationsBeforeSave = operationSetQueue[0]; - [operationSetQueue removeObjectAtIndex:0]; - - if (!result) { - // Merge the data from the failed save into the next save. - PFOperationSet *operationsForNextSave = operationSetQueue[0]; - [operationsForNextSave mergeOperationSet:operationsBeforeSave]; - } else { - // Merge the data from the save and the data from the server into serverData. - [self checkForChangesToMutableContainers]; - - PFMutableObjectState *state = [self._state mutableCopy]; - [state applyOperationSet:operationsBeforeSave]; - self._state = state; - - [self _mergeFromServerWithResult:result decoder:decoder completeData:NO]; - [self rebuildEstimatedData]; - [self checkpointAllMutableContainers]; - } - } -} - -- (void)_mergeFromServerWithResult:(NSDictionary *)result decoder:(PFDecoder *)decoder completeData:(BOOL)completeData { - @synchronized (lock) { - PFMutableObjectState *state = [self._state mutableCopy]; - - // If the server's data is complete, consider this object to be fetched. - state.complete |= completeData; - - [result enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - if ([key isEqualToString:PFObjectObjectIdRESTKey]) { - state.objectId = obj; - } else if ([key isEqualToString:PFObjectCreatedAtRESTKey]) { - // These dates can be passed in as NSDate or as NSString, - // depending on whether they were wrapped inside JSONObject with __type: Date or not. - if ([obj isKindOfClass:[NSDate class]]) { - state.createdAt = obj; - } else { - [state setCreatedAtFromString:obj]; - } - } else if ([key isEqualToString:PFObjectUpdatedAtRESTKey]) { - // These dates can be passed in as NSDate or as NSString, - // depending on whether they were wrapped inside JSONObject with __type: Date or not. - if ([obj isKindOfClass:[NSDate class]]) { - state.updatedAt = obj; - } else { - [state setUpdatedAtFromString:obj]; - } - } else if ([key isEqualToString:PFObjectACLRESTKey]) { - PFACL *acl = [PFACL ACLWithDictionary:obj]; - [state setServerDataObject:acl forKey:key]; - [self checkpointMutableContainer:acl]; - } else { - [state setServerDataObject:[decoder decodeObject:obj] forKey:key]; - } - }]; - if (state.updatedAt == nil && state.createdAt != nil) { - state.updatedAt = state.createdAt; - } - self._state = state; - [_availableKeys addObjectsFromArray:[result allKeys]]; - - dirty = NO; - } -} - -///-------------------------------------- -#pragma mark - Command handlers -///-------------------------------------- - -// We can't get rid of these handlers, because subclasses override them -// to add special actions after operations. - -- (BFTask *)handleSaveResultAsync:(NSDictionary *)result { - BFTask *task = [BFTask taskWithResult:nil]; - - NSDictionary *fetchedObjects = [self _collectFetchedObjects]; - - [task continueWithBlock:^id(BFTask *task) { - PFKnownParseObjectDecoder *decoder = [PFKnownParseObjectDecoder decoderWithFetchedObjects:fetchedObjects]; - @synchronized (self.lock) { - // TODO (hallucinogen): t5611821 we need to make mergeAfterSave that accepts decoder and operationBeforeSave - [self _mergeAfterSaveWithResult:result decoder:decoder]; - } - return nil; - }]; - - PFOfflineStore *store = [Parse _currentManager].offlineStore; - if (store != nil) { - task = [task continueWithBlock:^id(BFTask *task) { - return [store updateDataForObjectAsync:self]; - }]; - } - - return [task continueWithBlock:^id(BFTask *task) { - @synchronized (lock) { - if (self.saveDelegate) { - [self.saveDelegate invoke:self error:nil]; - } - return [BFTask taskWithResult:@(!!result)]; - } - }]; -} - -///-------------------------------------- -#pragma mark - Asynchronous operations -///-------------------------------------- - -- (void)startSave { - @synchronized (lock) { - [operationSetQueue addObject:[[PFOperationSet alloc] init]]; - } -} - -- (BFTask *)saveAsync:(BFTask *)toAwait { - PFCurrentUserController *controller = [[self class] currentUserController]; - return [[controller getCurrentObjectAsync] continueWithBlock:^id(BFTask *task) { - PFUser *currentUser = task.result; - NSString *sessionToken = currentUser.sessionToken; - - BFTask *await = toAwait ?: [BFTask taskWithResult:nil]; - return [[await continueAsyncWithBlock:^id(BFTask *task) { - PFOfflineStore *offlineStore = [Parse _currentManager].offlineStore; - if (offlineStore != nil) { - return [offlineStore fetchObjectLocallyAsync:self]; - } - return nil; - }] continueWithBlock:^id(BFTask *task) { - @synchronized (lock) { - if (![self isDirty:YES]) { - return [BFTask taskWithResult:@YES]; - } - - [self _objectWillSave]; - - // Snapshot the current set of changes, and push a new changeset into the queue. - PFOperationSet *changes = [self unsavedChanges]; - - [self startSave]; - BFTask *childrenTask = [self _saveChildrenInBackgroundWithCurrentUser:currentUser - sessionToken:sessionToken]; - if (!dirty && ![changes count]) { - return childrenTask; - } - return [[childrenTask continueWithSuccessBlock:^id(BFTask *task) { - [self _checkSaveParametersWithCurrentUser:currentUser]; - PFRESTCommand *command = [self _constructSaveCommandForChanges:changes - sessionToken:sessionToken - objectEncoder:[PFPointerObjectEncoder objectEncoder]]; - return [[Parse _currentManager].commandRunner runCommandAsync:command - withOptions:PFCommandRunningOptionRetryIfFailed]; - }] continueAsyncWithBlock:^id(BFTask *task) { - if (task.isCancelled || task.exception || task.error) { - // If there was an error, we want to roll forward the save changes before rethrowing. - BFTask *commandRunnerTask = task; - return [[self handleSaveResultAsync:nil] continueWithBlock:^id(BFTask *task) { - return commandRunnerTask; - }]; - } - PFCommandResult *result = task.result; - return [self handleSaveResultAsync:result.result]; - }]; - } - }]; - }]; -} - -- (BFTask *)fetchAsync:(BFTask *)toAwait { - PFCurrentUserController *controller = [[self class] currentUserController]; - return [[controller getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { - NSString *sessionToken = task.result; - return [toAwait continueAsyncWithBlock:^id(BFTask *task) { - return [[[self class] objectController] fetchObjectAsync:self withSessionToken:sessionToken]; - }]; - }]; -} - -- (BFTask *)deleteAsync:(BFTask *)toAwait { - PFCurrentUserController *controller = [[self class] currentUserController]; - return [[controller getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { - NSString *sessionToken = task.result; - return [toAwait continueAsyncWithBlock:^id(BFTask *task) { - return [[[self class] objectController] deleteObjectAsync:self withSessionToken:sessionToken]; - }]; - }]; -} - -///-------------------------------------- -#pragma mark - Command constructors -///-------------------------------------- - -- (PFRESTCommand *)_constructSaveCommandForChanges:(PFOperationSet *)changes - sessionToken:(NSString *)sessionToken - objectEncoder:(PFEncoder *)encoder { - @synchronized (lock) { - NSDictionary *parameters = [self _convertToDictionaryForSaving:changes withObjectEncoder:encoder]; - - if (self._state.objectId) { - return [PFRESTObjectCommand updateObjectCommandForObjectState:self._state - changes:parameters - operationSetUUID:changes.uuid - sessionToken:sessionToken]; - } - - return [PFRESTObjectCommand createObjectCommandForObjectState:self._state - changes:parameters - operationSetUUID:changes.uuid - sessionToken:sessionToken]; - - } -} - -- (PFRESTCommand *)_currentDeleteCommandWithSessionToken:(NSString *)sessionToken { - return [PFRESTObjectCommand deleteObjectCommandForObjectState:self._state withSessionToken:sessionToken]; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (void)_setObject:(id)object forKey:(NSString *)key onlyIfDifferent:(BOOL)onlyIfDifferent { - PFParameterAssert(object != nil && key != nil, - @"Can't use nil for keys or values on PFObject. Use NSNull for values."); - PFParameterAssert([key isKindOfClass:[NSString class]], @"PFObject keys must be NSStrings."); - - if (onlyIfDifferent) { - id currentObject = self[key]; - if (currentObject == object || - [currentObject isEqual:object]) { - return; - } - } - - @synchronized (lock) { - if ([object isKindOfClass:[PFFieldOperation class]]) { - [self performOperation:object forKey:key]; - return; - } - - PFObjectAssertValueIsKindOfValidClass(object); - [self performOperation:[PFSetOperation setWithValue:object] forKey:key]; - } -} - -///-------------------------------------- -#pragma mark - Misc helpers -///-------------------------------------- - -- (NSString *)displayObjectId { - return self._state.objectId ?: @"new"; -} - -- (NSString *)displayClassName { - return self._state.parseClassName; -} - -- (void)registerSaveListener:(void (^)(id result, NSError *error))callback { - @synchronized (lock) { - if (!self.saveDelegate) { - self.saveDelegate = [[PFMulticastDelegate alloc] init]; - } - [self.saveDelegate subscribe:callback]; - } -} - -- (void)unregisterSaveListener:(void (^)(id result, NSError *error))callback { - @synchronized (lock) { - if (!self.saveDelegate) { - self.saveDelegate = [[PFMulticastDelegate alloc] init]; - } - [self.saveDelegate unsubscribe:callback]; - } -} - -- (PFACL *)ACLWithoutCopying { - @synchronized (lock) { - return _estimatedData[@"ACL"]; - } -} - -// Overriden by classes which want to ignore the default ACL. -- (void)setDefaultValues { - if ([self needsDefaultACL]) { - PFACL *defaultACL = [PFACL defaultACL]; - if (defaultACL) { - self.ACL = defaultACL; - } - } -} - -- (BOOL)needsDefaultACL { - return YES; -} - -- (NSDictionary *)_collectFetchedObjects { - NSMutableDictionary *fetchedObjects = [NSMutableDictionary dictionary]; - @synchronized (lock) { - NSDictionary *dictionary = _estimatedData.dictionaryRepresentation; - [PFInternalUtils traverseObject:dictionary usingBlock:^id(id obj) { - if ([obj isKindOfClass:[PFObject class]]) { - PFObject *object = obj; - NSString *objectId = object.objectId; - if (objectId && [object isDataAvailable]) { - fetchedObjects[objectId] = object; - } - } - return obj; - }]; - } - return fetchedObjects; -} - -@end - -@implementation PFObject - -@synthesize _availableKeys = _availableKeys; - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - if (!_pfinternal_state) { - PFConsistencyAssert([self conformsToProtocol:@protocol(PFSubclassing)], - @"Can only call -[PFObject init] on subclasses conforming to PFSubclassing."); - [PFObject assertSubclassIsRegistered:[self class]]; - _pfinternal_state = [[self class] _newObjectStateWithParseClassName:[[self class] parseClassName] - objectId:nil - isComplete:YES]; - } - [[self class] _assertValidInstanceClassName:_pfinternal_state.parseClassName]; - - lock = [[NSObject alloc] init]; - operationSetQueue = [NSMutableArray arrayWithObject:[[PFOperationSet alloc] init]]; - _estimatedData = [PFObjectEstimatedData estimatedDataFromServerData:_pfinternal_state.serverData - operationSetQueue:operationSetQueue]; - _availableKeys = [NSMutableSet set]; - hashedObjectsCache = [[NSMutableDictionary alloc] init]; - self.taskQueue = [[PFTaskQueue alloc] init]; - _eventuallyTaskQueue = [[PFTaskQueue alloc] init]; - - if (_pfinternal_state.complete) { - dirty = YES; - [self setDefaultValues]; - } - - return self; -} - -- (instancetype)initWithClassName:(NSString *)className { - PFObjectState *state = [[self class] _newObjectStateWithParseClassName:className objectId:nil isComplete:YES]; - return [self initWithObjectState:state]; -} - -- (instancetype)initWithObjectState:(PFObjectState *)state { - _pfinternal_state = state; - return [self init]; -} - -+ (instancetype)objectWithClassName:(NSString *)className - objectId:(NSString *)objectId - completeData:(BOOL)completeData { - Class class = [[[self class] subclassingController] subclassForParseClassName:className] ?: [PFObject class]; - PFObjectState *state = [class _newObjectStateWithParseClassName:className objectId:objectId isComplete:completeData]; - PFObject *object = [[class alloc] initWithObjectState:state]; - if (!completeData) { - PFConsistencyAssert(![object _hasChanges], - @"The init method of %@ set values on the object, which is not allowed.", class); - } - return object; -} - -+ (instancetype)objectWithClassName:(NSString *)className { - return [self objectWithClassName:className objectId:nil completeData:YES]; -} - -+ (instancetype)objectWithClassName:(NSString *)className dictionary:(NSDictionary *)dictionary { - PFObject *object = [self objectWithClassName:className]; - [dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - object[key] = obj; - }]; - return object; -} - -+ (instancetype)objectWithoutDataWithClassName:(NSString *)className objectId:(NSString *)objectId { - // Try get single instance from OfflineStore - PFOfflineStore *store = [Parse _currentManager].offlineStore; - if (store != nil && objectId != nil) { - PFObject *singleObject = [store getOrCreateObjectWithoutDataWithClassName:className objectId:objectId]; - if (singleObject) { - return singleObject; - } - } - - // Local Datastore is not enabled or cannot found the single instance using objectId, let's use the old way - return [self objectWithClassName:className objectId:objectId completeData:NO]; -} - -#pragma mark Subclassing - -+ (instancetype)object { - PFConsistencyAssert([self conformsToProtocol:@protocol(PFSubclassing)], - @"Can only call +object on subclasses conforming to PFSubclassing"); - NSString *className = [(id)self parseClassName]; - Class class = [[self subclassingController] subclassForParseClassName:className] ?: [PFObject class]; - return [class objectWithClassName:className]; -} - -+ (instancetype)objectWithoutDataWithObjectId:(NSString *)objectId { - PFConsistencyAssert([self conformsToProtocol:@protocol(PFSubclassing)], - @"Can only call objectWithoutDataWithObjectId: on subclasses conforming to PFSubclassing"); - return [self objectWithoutDataWithClassName:[(id)self parseClassName] objectId:objectId]; -} - -#pragma mark Private - -+ (instancetype)objectWithoutDataWithClassName:(NSString *)className localId:(NSString *)localId { - PFObject *object = [self objectWithoutDataWithClassName:className objectId:nil]; - object.localId = localId; - return object; -} - -///-------------------------------------- -#pragma mark - PFObjectPrivateSubclass -///-------------------------------------- - -#pragma mark State - -+ (PFObjectState *)_newObjectStateWithParseClassName:(NSString *)className - objectId:(NSString *)objectId - isComplete:(BOOL)complete { - return [PFObjectState stateWithParseClassName:className objectId:objectId isComplete:complete]; -} - -///-------------------------------------- -#pragma mark - Validation -///-------------------------------------- - -- (BFTask PF_GENERIC(PFVoid) *)_validateFetchAsync { - if (!self._state.objectId) { - NSError *error = [PFErrorUtilities errorWithCode:kPFErrorMissingObjectId - message:@"Can't fetch an object that hasn't been saved to the server."]; - return [BFTask taskWithError:error]; - } - return [BFTask taskWithResult:nil]; -} - -- (BFTask PF_GENERIC(PFVoid) *)_validateDeleteAsync { - return [BFTask taskWithResult:nil]; -} - -- (BFTask PF_GENERIC(PFVoid) *)_validateSaveEventuallyAsync { - return [BFTask taskWithResult:nil]; -} - -#pragma mark Object Will Save - -- (void)_objectWillSave { - // Do nothing. -} - -///-------------------------------------- -#pragma mark - Properties -///-------------------------------------- - -- (void)set_state:(PFObjectState *)state { - @synchronized(lock) { - NSString *oldObjectId = _pfinternal_state.objectId; - if (self._state != state) { - _pfinternal_state = [state copy]; - } - - NSString *newObjectId = _pfinternal_state.objectId; - if (![PFObjectUtilities isObject:oldObjectId equalToObject:newObjectId]) { - [self _notifyObjectIdChangedFrom:oldObjectId toObjectId:newObjectId]; - } - } -} - -- (PFObjectState *)_state { - @synchronized(lock) { - return _pfinternal_state; - } -} - -- (PFObjectEstimatedData *)_estimatedData { - @synchronized (lock) { - return _estimatedData; - } -} - -- (void)setObjectId:(NSString *)objectId { - @synchronized (lock) { - NSString *oldObjectId = self._state.objectId; - if ([PFObjectUtilities isObject:oldObjectId equalToObject:objectId]) { - return; - } - - dirty = YES; - - PFMutableObjectState *state = [self._state mutableCopy]; - state.objectId = objectId; - _pfinternal_state = state; - - [self _notifyObjectIdChangedFrom:oldObjectId toObjectId:objectId]; - } -} - -- (NSString *)objectId { - return self._state.objectId; -} - -- (void)_notifyObjectIdChangedFrom:(NSString *)fromObjectId toObjectId:(NSString *)toObjectId { - @synchronized (self.lock) { - // The OfflineStore might raise exception if this object already had a different objectId. - PFOfflineStore *store = [Parse _currentManager].offlineStore; - if (store != nil) { - [store updateObjectIdForObject:self oldObjectId:fromObjectId newObjectId:toObjectId]; - } - if (self.localId) { - [[Parse _currentManager].coreManager.objectLocalIdStore setObjectId:toObjectId forLocalId:self.localId]; - self.localId = nil; - } - } -} - -- (NSString *)parseClassName { - return self._state.parseClassName; -} - -- (NSDate *)updatedAt { - return self._state.updatedAt; -} - -- (NSDate *)createdAt { - return self._state.createdAt; -} - -- (PFACL *)ACL { - return self[@"ACL"]; -} - -- (void)setACL:(PFACL *)ACL { - if (!ACL) { - [self removeObjectForKey:@"ACL"]; - } else { - self[@"ACL"] = ACL; - } -} - -// PFObject(): -@synthesize localId; -@synthesize taskQueue; - -// PFObject(Private): -@synthesize saveDelegate; - -///-------------------------------------- -#pragma mark - PFObject factory methods for Subclassing -///-------------------------------------- - -// Reverse compatibility note: many people may have built PFObject subclasses before -// we officially supported them. Our implementation can do cool stuff, but requires -// the parseClassName class method. -+ (void)registerSubclass { - [[self subclassingController] registerSubclass:self]; -} - -+ (PFQuery *)query { - PFConsistencyAssert([self conformsToProtocol:@protocol(PFSubclassing)], - @"+[PFObject query] can only be called on subclasses conforming to PFSubclassing."); - [PFObject assertSubclassIsRegistered:self]; - return [PFQuery queryWithClassName:[(id)self parseClassName]]; -} - -+ (PFQuery *)queryWithPredicate:(NSPredicate *)predicate { - PFConsistencyAssert([self conformsToProtocol:@protocol(PFSubclassing)], - @"+[PFObject queryWithPredicate:] can only be called on subclasses conforming to PFSubclassing."); - [PFObject assertSubclassIsRegistered:[self class]]; - return [PFQuery queryWithClassName:[(id)self parseClassName] predicate:predicate]; -} - -+ (void)assertSubclassIsRegistered:(Class)subclass { - // If people hacked their own subclass together before we supported it officially, we shouldn't break their app. - if ([subclass conformsToProtocol:@protocol(PFSubclassing)]) { - Class registration = [[self subclassingController] subclassForParseClassName:[subclass parseClassName]]; - - // It's OK to subclass a subclass (i.e. custom PFUser implementation) - PFConsistencyAssert(registration && (registration == subclass || [registration isSubclassOfClass:subclass]), - @"The class %@ must be registered with registerSubclass before using Parse.", subclass); - } -} - -///-------------------------------------- -#pragma mark - Delete commands -///-------------------------------------- - -- (BOOL)delete { - return [self delete:nil]; -} - -- (BOOL)delete:(NSError **)error { - return [[[self deleteInBackground] waitForResult:error] boolValue]; -} - -- (BFTask *)deleteInBackground { - return [self.taskQueue enqueue:^BFTask *(BFTask *toAwait) { - return [[self deleteAsync:toAwait] continueWithSuccessResult:@YES]; - }]; -} - -- (void)deleteInBackgroundWithTarget:(id)target selector:(SEL)selector { - [self deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; - }]; -} - -- (void)deleteInBackgroundWithBlock:(PFBooleanResultBlock)block { - [[self deleteInBackground] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -///-------------------------------------- -#pragma mark - Save commands -///-------------------------------------- - -- (BOOL)save { - return [self save:nil]; -} - -- (BOOL)save:(NSError **)error { - return [[[self saveInBackground] waitForResult:error] boolValue]; -} - -- (BFTask *)saveInBackground { - return [self.taskQueue enqueue:^BFTask *(BFTask *toAwait) { - return [self saveAsync:toAwait]; - }]; -} - -- (void)saveInBackgroundWithTarget:(id)target selector:(SEL)selector { - [self saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; - }]; -} - -- (void)saveInBackgroundWithBlock:(PFBooleanResultBlock)block { - [[self saveInBackground] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -- (BFTask *)saveEventually { - return [[self _enqueueSaveEventuallyWithChildren:YES] continueWithSuccessBlock:^id(BFTask *task) { - // The result of the previous task will be an instance of BFTask. - // Returning it here will trigger the whole task stack become an actual save task. - return task.result; - }]; -} - -- (void)saveEventually:(PFBooleanResultBlock)block { - [[self saveEventually] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -- (BFTask *)deleteEventually { - return [[[_eventuallyTaskQueue enqueue:^BFTask *(BFTask *toAwait) { - NSString *sessionToken = [PFUser currentSessionToken]; - return [[toAwait continueAsyncWithBlock:^id(BFTask *task) { - return [self _validateDeleteAsync]; - }] continueWithSuccessBlock:^id(BFTask *task) { - @synchronized (lock) { - _deletingEventually += 1; - - PFOfflineStore *store = [Parse _currentManager].offlineStore; - BFTask *updateDataTask = store ? [store updateDataForObjectAsync:self] : [BFTask taskWithResult:nil]; - - PFRESTCommand *command = [self _currentDeleteCommandWithSessionToken:sessionToken]; - BFTask *deleteTask = [updateDataTask continueWithBlock:^id(BFTask *task) { - return [[Parse _currentManager].eventuallyQueue enqueueCommandInBackground:command withObject:self]; - }]; - deleteTask = [deleteTask continueWithSuccessBlock:^id(BFTask *task) { - // PFPinningEventuallyQueue handles delete result directly. - if (![Parse _currentManager].offlineStoreLoaded) { - PFCommandResult *result = task.result; - return [[[self class] objectController] processDeleteResultAsync:result.result forObject:self]; - } - return task; - }]; - return deleteTask; - } - }]; - }] continueWithSuccessBlock:^id(BFTask *task) { - // The result of the previous task will be an instance of BFTask. - // Returning it here will trigger the whole task stack become an actual save task. - return task.result; - }] continueWithSuccessResult:@YES]; -} - -///-------------------------------------- -#pragma mark - Dirtiness -///-------------------------------------- - -- (BOOL)isDirty { - return [self isDirty:YES]; -} - -- (BOOL)isDirtyForKey:(NSString *)key { - @synchronized (lock) { - [self checkForChangesToMutableContainer:_estimatedData[key] forKey:key]; - return !![[self unsavedChanges] objectForKey:key]; - } -} - -///-------------------------------------- -#pragma mark - Fetch -///-------------------------------------- - -- (BOOL)isDataAvailable { - return self._state.complete; -} - -- (instancetype)refresh { - return [self fetch]; -} - -- (instancetype)refresh:(NSError **)error { - return [self fetch:error]; -} - -- (void)refreshInBackgroundWithTarget:(id)target selector:(SEL)selector { - [self fetchInBackgroundWithTarget:target selector:selector]; -} - -- (void)refreshInBackgroundWithBlock:(PFObjectResultBlock)block { - [self fetchInBackgroundWithBlock:block]; -} - -- (instancetype)fetch { - return [self fetch:nil]; -} - -- (instancetype)fetch:(NSError **)error { - return [[self fetchInBackground] waitForResult:error]; -} - -- (BFTask *)fetchInBackground { - if (!self._state.objectId) { - NSError *error = [PFErrorUtilities errorWithCode:kPFErrorMissingObjectId - message:@"Can't refresh an object that hasn't been saved to the server."]; - return [BFTask taskWithError:error]; - } - return [self.taskQueue enqueue:^BFTask *(BFTask *toAwait) { - return [self fetchAsync:toAwait]; - }]; -} - -- (void)fetchInBackgroundWithBlock:(PFObjectResultBlock)block { - [[self fetchInBackground] thenCallBackOnMainThreadAsync:block]; -} - -- (void)fetchInBackgroundWithTarget:(id)target selector:(SEL)selector { - [self fetchInBackgroundWithBlock:^(PFObject *object, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:object object:error]; - }]; -} - -- (instancetype)fetchIfNeeded { - return [self fetchIfNeeded:nil]; -} - -- (instancetype)fetchIfNeeded:(NSError **)error { - return [[self fetchIfNeededInBackground] waitForResult:error]; -} - -- (BFTask *)fetchIfNeededInBackground { - if ([self isDataAvailable]) { - return [BFTask taskWithResult:self]; - } - return [self fetchInBackground]; -} - -- (void)fetchIfNeededInBackgroundWithBlock:(PFObjectResultBlock)block { - [[self fetchIfNeededInBackground] thenCallBackOnMainThreadAsync:block]; -} - -- (void)fetchIfNeededInBackgroundWithTarget:(id)target selector:(SEL)selector { - [self fetchIfNeededInBackgroundWithBlock:^(PFObject *object, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:object object:error]; - }]; -} - -///-------------------------------------- -#pragma mark - Fetching Many Objects -///-------------------------------------- - -+ (NSArray *)fetchAll:(NSArray *)objects { - return [self fetchAll:objects error:nil]; -} - -+ (NSArray *)fetchAllIfNeeded:(NSArray *)objects { - return [self fetchAllIfNeeded:objects error:nil]; -} - -+ (NSArray *)fetchAll:(NSArray *)objects error:(NSError **)error { - return [[self fetchAllInBackground:objects] waitForResult:error]; -} - -+ (NSArray *)fetchAllIfNeeded:(NSArray *)objects error:(NSError **)error { - return [[self fetchAllIfNeededInBackground:objects] waitForResult:error]; -} - -+ (BFTask *)fetchAllInBackground:(NSArray *)objects { - // Snapshot the objects array. - NSArray *fetchObjects = [objects copy]; - - if (fetchObjects.count == 0) { - return [BFTask taskWithResult:fetchObjects]; - } - NSArray *uniqueObjects = [PFObjectBatchController uniqueObjectsArrayFromArray:fetchObjects omitObjectsWithData:NO]; - return [[[[self currentUserController] getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { - NSString *sessionToken = task.result; - return [PFObject _enqueue:^BFTask *(BFTask *toAwait) { - return [toAwait continueAsyncWithBlock:^id(BFTask *task) { - return [[self objectBatchController] fetchObjectsAsync:uniqueObjects withSessionToken:sessionToken]; - }]; - } forObjects:uniqueObjects]; - }] continueWithSuccessResult:fetchObjects]; -} - -+ (void)fetchAllInBackground:(NSArray *)objects target:(id)target selector:(SEL)selector { - [self fetchAllInBackground:objects block:^(NSArray *objects, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:objects object:error]; - }]; -} - -+ (void)fetchAllInBackground:(NSArray *)objects block:(PFArrayResultBlock)block { - [[self fetchAllInBackground:objects] thenCallBackOnMainThreadAsync:block]; -} - -+ (BFTask *)fetchAllIfNeededInBackground:(NSArray *)objects { - NSArray *fetchObjects = [objects copy]; - if (fetchObjects.count == 0) { - return [BFTask taskWithResult:fetchObjects]; - } - NSArray *uniqueObjects = [PFObjectBatchController uniqueObjectsArrayFromArray:fetchObjects omitObjectsWithData:YES]; - return [[[[self currentUserController] getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { - NSString *sessionToken = task.result; - return [PFObject _enqueue:^BFTask *(BFTask *toAwait) { - return [toAwait continueAsyncWithBlock:^id(BFTask *task) { - return [[self objectBatchController] fetchObjectsAsync:uniqueObjects withSessionToken:sessionToken]; - }]; - } forObjects:uniqueObjects]; - }] continueWithSuccessResult:fetchObjects]; -} - -+ (void)fetchAllIfNeededInBackground:(NSArray *)objects target:(id)target selector:(SEL)selector { - [self fetchAllIfNeededInBackground:objects block:^(NSArray *objects, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:objects object:error]; - }]; -} - -+ (void)fetchAllIfNeededInBackground:(NSArray *)objects block:(PFArrayResultBlock)block { - [[self fetchAllIfNeededInBackground:objects] thenCallBackOnMainThreadAsync:block]; -} - -///-------------------------------------- -#pragma mark - Fetch From Local Datastore -///-------------------------------------- - -- (instancetype)fetchFromLocalDatastore { - return [self fetchFromLocalDatastore:nil]; -} - -- (instancetype)fetchFromLocalDatastore:(NSError **)error { - return [[self fetchFromLocalDatastoreInBackground] waitForResult:error]; -} - -- (void)fetchFromLocalDatastoreInBackgroundWithBlock:(PFObjectResultBlock)block { - [[self fetchFromLocalDatastoreInBackground] thenCallBackOnMainThreadAsync:block]; -} - -- (BFTask *)fetchFromLocalDatastoreInBackground { - PFOfflineStore *store = [Parse _currentManager].offlineStore; - PFConsistencyAssert(store != nil, @"You must enable the local datastore before calling fetchFromLocalDatastore()."); - return [store fetchObjectLocallyAsync:self]; -} - -///-------------------------------------- -#pragma mark - Key/Value Accessors -///-------------------------------------- - -- (void)setObject:(id)object forKey:(NSString *)key { - [self _setObject:object forKey:key onlyIfDifferent:NO]; -} - -- (void)setObject:(id)object forKeyedSubscript:(NSString *)key { - [self setObject:object forKey:key]; -} - -- (id)objectForKey:(NSString *)key { - @synchronized (lock) { - PFConsistencyAssert([self isDataAvailableForKey:key], - @"Key \"%@\" has no data. Call fetchIfNeeded before getting its value.", key); - - id result = _estimatedData[key]; - if ([key isEqualToString:PFObjectACLRESTKey] && [result isKindOfClass:[PFACL class]]) { - PFACL *acl = result; - if ([acl isShared]) { - PFACL *copy = [acl createUnsharedCopy]; - self[PFObjectACLRESTKey] = copy; - return copy; - } - } - - // A relation may be deserialized without a parent or key. Either way, make sure it's consistent. - // TODO: (nlutsenko) This should be removable after we clean up the serialization code. - if ([result isKindOfClass:[PFRelation class]]) { - [result ensureParentIs:self andKeyIs:key]; - } - - return result; - } -} - -- (id)objectForKeyedSubscript:(NSString *)key { - return [self objectForKey:key]; -} - -- (void)removeObjectForKey:(NSString *)key { - @synchronized (lock) { - if ([self objectForKey:key]) { - PFDeleteOperation *operation = [[PFDeleteOperation alloc] init]; - [self performOperation:operation forKey:key]; - } - } -} - -- (void)revert { - @synchronized (self.lock) { - if ([self isDirty]) { - NSMutableSet *persistentKeys = [NSMutableSet setWithArray:[self._state.serverData allKeys]]; - - PFOperationSet *unsavedChanges = [self unsavedChanges]; - for (PFOperationSet *operationSet in operationSetQueue) { - if (operationSet != unsavedChanges) { - [persistentKeys addObjectsFromArray:[operationSet.keyEnumerator allObjects]]; - } - } - - [unsavedChanges removeAllObjects]; - [_availableKeys intersectSet:persistentKeys]; - - [self rebuildEstimatedData]; - [self checkpointAllMutableContainers]; - } - } -} - -- (void)revertObjectForKey:(NSString *)key { - @synchronized (self.lock) { - if ([self isDirtyForKey:key]) { - [[self unsavedChanges] removeObjectForKey:key]; - [self rebuildEstimatedData]; - [_availableKeys removeObject:key]; - [self checkpointAllMutableContainers]; - } - } -} - -#pragma mark Relations - -- (PFRelation *)relationforKey:(NSString *)key { - return [self relationForKey:key]; -} - -- (PFRelation *)relationForKey:(NSString *)key { - @synchronized (lock) { - // All the sanity checking is done when addObject or - // removeObject is called on the relation. - PFRelation *relation = [PFRelation relationForObject:self forKey:key]; - - id object = _estimatedData[key]; - if ([object isKindOfClass:[PFRelation class]]) { - relation.targetClass = ((PFRelation *)object).targetClass; - } - return relation; - } -} - -#pragma mark Array - -- (void)addObject:(id)object forKey:(NSString *)key { - [self addObjectsFromArray:@[ object ] forKey:key]; -} - -- (void)addObjectsFromArray:(NSArray *)objects forKey:(NSString *)key { - [self performOperation:[PFAddOperation addWithObjects:objects] forKey:key]; -} - -- (void)addUniqueObject:(id)object forKey:(NSString *)key { - [self addUniqueObjectsFromArray:@[ object ] forKey:key]; -} - -- (void)addUniqueObjectsFromArray:(NSArray *)objects forKey:(NSString *)key { - [self performOperation:[PFAddUniqueOperation addUniqueWithObjects:objects] forKey:key]; -} - -- (void)removeObject:(id)object forKey:(NSString *)key { - [self removeObjectsInArray:@[ object ] forKey:key]; -} - -- (void)removeObjectsInArray:(NSArray *)objects forKey:(NSString *)key { - [self performOperation:[PFRemoveOperation removeWithObjects:objects] forKey:key]; -} - -#pragma mark Increment - -- (void)incrementKey:(NSString *)key { - [self incrementKey:key byAmount:@1]; -} - -- (void)incrementKey:(NSString *)key byAmount:(NSNumber *)amount { - [self performOperation:[PFIncrementOperation incrementWithAmount:amount] forKey:key]; -} - -///-------------------------------------- -#pragma mark - Key Value Coding -///-------------------------------------- - -- (id)valueForUndefinedKey:(NSString *)key { - return self[key]; -} - -- (void)setValue:(id)value forUndefinedKey:(NSString *)key { - self[key] = value; -} - -///-------------------------------------- -#pragma mark - Misc -///-------------------------------------- - -- (NSArray *)allKeys { - @synchronized (lock) { - return [_estimatedData allKeys]; - } -} - -- (NSString *)description { - static NSString *descriptionKey = @"PFObject-PrintingDescription"; - - NSMutableDictionary *threadDictionary = [NSThread currentThread].threadDictionary; - if ([threadDictionary[descriptionKey] boolValue]) { - return [self _flatDescription]; - } - threadDictionary[descriptionKey] = @YES; - NSString *description = [self _recursiveDescription]; - [threadDictionary removeObjectForKey:descriptionKey]; - return description; -} - -- (NSString *)_recursiveDescription { - @synchronized (lock) { - return [NSString stringWithFormat:@"%@ %@", - [self _flatDescription], [_estimatedData.dictionaryRepresentation description]]; - } -} - -- (NSString *)_flatDescription { - @synchronized (lock) { - return [NSString stringWithFormat:@"<%@: %p, objectId: %@, localId: %@>", - self.displayClassName, self, [self displayObjectId], localId]; - } -} - -///-------------------------------------- -#pragma mark - Save all -///-------------------------------------- - -+ (BOOL)saveAll:(NSArray *)objects { - return [PFObject saveAll:objects error:nil]; -} - -+ (BOOL)saveAll:(NSArray *)objects error:(NSError **)error { - return [[[self saveAllInBackground:objects] waitForResult:error] boolValue]; -} - -+ (BFTask *)saveAllInBackground:(NSArray *)objects { - PFCurrentUserController *controller = [[self class] currentUserController]; - return [[controller getCurrentObjectAsync] continueWithBlock:^id(BFTask *task) { - PFUser *currentUser = task.result; - NSString *sessionToken = currentUser.sessionToken; - return [PFObject _deepSaveAsync:objects withCurrentUser:currentUser sessionToken:sessionToken]; - }]; -} - -+ (void)saveAllInBackground:(NSArray *)objects target:(id)target selector:(SEL)selector { - [PFObject saveAllInBackground:objects block:^(BOOL succeeded, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; - }]; -} - -+ (void)saveAllInBackground:(NSArray *)objects block:(PFBooleanResultBlock)block { - [[PFObject saveAllInBackground:objects] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -///-------------------------------------- -#pragma mark - Delete all -///-------------------------------------- - -+ (BOOL)deleteAll:(NSArray *)objects { - return [PFObject deleteAll:objects error:nil]; -} - -+ (BOOL)deleteAll:(NSArray *)objects error:(NSError **)error { - return [[[self deleteAllInBackground:objects] waitForResult:error] boolValue]; -} - -+ (BFTask PF_GENERIC(NSNumber *) *)deleteAllInBackground:(NSArray *)objects { - NSArray *deleteObjects = [objects copy]; // Snapshot the objects. - if (deleteObjects.count == 0) { - return [BFTask PF_GENERIC(NSNumber *) taskWithResult:@YES]; - } - return [[[[self currentUserController] getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { - NSString *sessionToken = task.result; - - NSArray *uniqueObjects = [PFObjectBatchController uniqueObjectsArrayFromArray:deleteObjects usingFilter:^BOOL(PFObject *object) { - return (object.objectId != nil); - }]; - NSMutableArray PF_GENERIC(BFTask *) *validationTasks = [NSMutableArray array]; - for (PFObject *object in uniqueObjects) { - [validationTasks addObject:[object _validateDeleteAsync]]; - } - return [[BFTask taskForCompletionOfAllTasks:validationTasks] continueWithSuccessBlock:^id(BFTask *task) { - return [self _enqueue:^BFTask *(BFTask *toAwait) { - return [toAwait continueAsyncWithBlock:^id(BFTask *task) { - return [[self objectBatchController] deleteObjectsAsync:uniqueObjects - withSessionToken:sessionToken]; - }]; - } forObjects:uniqueObjects]; - }]; - }] continueWithSuccessResult:@YES]; -} - -+ (void)deleteAllInBackground:(NSArray *)objects target:(id)target selector:(SEL)selector { - [PFObject deleteAllInBackground:objects block:^(BOOL succeeded, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; - }]; -} - -+ (void)deleteAllInBackground:(NSArray *)objects block:(PFBooleanResultBlock)block { - [[self deleteAllInBackground:objects] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -///-------------------------------------- -#pragma mark - Dynamic synthesizers -///-------------------------------------- - -// NOTE: The ONLY reason this needs to exist is to support mocking PFObject subclasses. -// -// The reason mocking doesn't work is because OCMClassMock looks for methods that exist on the class already, and will -// not be able to use our dynamic instance-level method resolving. By implementing this, we give this method a signature -// once, and then tell the runtime to forward that message on from there. -// -// Note that by implementing it this way, we no longer need to implement -methodSignatureForSelector: or -// -respondsToSelector:, as the method will be dynamically resolved by the runtime when either of those methods is -// invoked. -+ (BOOL)resolveInstanceMethod:(SEL)sel { - if (self == [PFObject class]) { - return NO; - } - - NSMethodSignature *signature = [[self subclassingController] forwardingMethodSignatureForSelector:sel ofClass:self]; - if (!signature) { - return NO; - } - - // Convert the method signature *back* into a objc type string (sidenote, why isn't this a built in?). - NSMutableString *typeString = [NSMutableString stringWithFormat:@"%s", [signature methodReturnType]]; - for (NSUInteger argumentIndex = 0; argumentIndex < [signature numberOfArguments]; argumentIndex++) { - [typeString appendFormat:@"%s", [signature getArgumentTypeAtIndex:argumentIndex]]; - } - - // TODO: (richardross) Support stret return here (will need to introspect the method signature to do so). - class_addMethod(self, sel, _objc_msgForward, [typeString UTF8String]); - - return YES; -} - -- (void)forwardInvocation:(NSInvocation *)anInvocation { - if (![[[self class] subclassingController] forwardObjectInvocation:anInvocation - withObject:(PFObject *)self]) { - [self doesNotRecognizeSelector:anInvocation.selector]; - } -} - -///-------------------------------------- -#pragma mark - Pinning -///-------------------------------------- - -- (BOOL)pin { - return [self pin:nil]; -} - -- (BOOL)pin:(NSError **)error { - return [self pinWithName:PFObjectDefaultPin error:error]; -} - -- (BFTask *)pinInBackground { - return [self pinInBackgroundWithName:PFObjectDefaultPin]; -} - -- (void)pinInBackgroundWithBlock:(PFBooleanResultBlock)block { - [[self pinInBackground] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -- (BOOL)pinWithName:(NSString *)name { - return [self pinWithName:name error:nil]; -} - -- (BOOL)pinWithName:(NSString *)name error:(NSError **)error { - return [[[self pinInBackgroundWithName:name] waitForResult:error] boolValue]; -} - -- (void)pinInBackgroundWithName:(NSString *)name block:(PFBooleanResultBlock)block { - [[self pinInBackgroundWithName:name] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -- (BFTask *)pinInBackgroundWithName:(NSString *)name { - return [self _pinInBackgroundWithName:name includeChildren:YES]; -} - -- (BFTask *)_pinInBackgroundWithName:(NSString *)name includeChildren:(BOOL)includeChildren { - return [[self class] _pinAllInBackground:@[ self ] withName:name includeChildren:includeChildren]; -} - -///-------------------------------------- -#pragma mark - Pinning Many Objects -///-------------------------------------- - -+ (BOOL)pinAll:(NSArray *)objects { - return [self pinAll:objects error:nil]; -} - -+ (BOOL)pinAll:(NSArray *)objects error:(NSError **)error { - return [self pinAll:objects withName:PFObjectDefaultPin error:error]; -} - -+ (BFTask *)pinAllInBackground:(NSArray *)objects { - return [self pinAllInBackground:objects withName:PFObjectDefaultPin]; -} - -+ (void)pinAllInBackground:(NSArray *)objects - block:(PFBooleanResultBlock)block { - [[self pinAllInBackground:objects] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -+ (BOOL)pinAll:(NSArray *)objects withName:(NSString *)name { - return [self pinAll:objects withName:name error:nil]; -} - -+ (BOOL)pinAll:(NSArray *)objects withName:(NSString *)name error:(NSError **)error { - return [[[self pinAllInBackground:objects withName:name] waitForResult:error] boolValue]; -} - -+ (BFTask *)pinAllInBackground:(NSArray *)objects withName:(NSString *)name { - return [self _pinAllInBackground:objects withName:name includeChildren:YES]; -} - -+ (void)pinAllInBackground:(NSArray *)objects - withName:(NSString *)name - block:(PFBooleanResultBlock)block { - [[self pinAllInBackground:objects withName:name] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -+ (BFTask *)_pinAllInBackground:(NSArray *)objects - withName:(NSString *)name - includeChildren:(BOOL)includeChildren { - return [[self pinningObjectStore] pinObjectsAsync:objects - withPinName:name - includeChildren:includeChildren]; -} - -///-------------------------------------- -#pragma mark - Unpinning -///-------------------------------------- - -- (BOOL)unpin { - return [self unpinWithName:PFObjectDefaultPin]; -} - -- (BOOL)unpin:(NSError **)error { - return [self unpinWithName:PFObjectDefaultPin error:error]; -} - -- (BFTask *)unpinInBackground { - return [self unpinInBackgroundWithName:PFObjectDefaultPin]; -} - -- (void)unpinInBackgroundWithBlock:(PFBooleanResultBlock)block { - [[self unpinInBackground] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -- (BOOL)unpinWithName:(NSString *)name { - return [self unpinWithName:name error:nil]; -} - -- (BOOL)unpinWithName:(NSString *)name error:(NSError **)error { - return [[[self unpinInBackgroundWithName:name] waitForResult:error] boolValue]; -} - -- (BFTask *)unpinInBackgroundWithName:(NSString *)name { - return [[self class] unpinAllInBackground:@[ self ] withName:name]; -} - -- (void)unpinInBackgroundWithName:(NSString *)name block:(PFBooleanResultBlock)block { - [[self unpinInBackgroundWithName:name] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -///-------------------------------------- -#pragma mark - Unpinning Many Objects -///-------------------------------------- - -+ (BOOL)unpinAllObjects { - return [self unpinAllObjects:nil]; -} - -+ (BOOL)unpinAllObjects:(NSError **)error { - return [self unpinAllObjectsWithName:PFObjectDefaultPin error:error]; -} - -+ (BFTask *)unpinAllObjectsInBackground { - return [self unpinAllObjectsInBackgroundWithName:PFObjectDefaultPin]; -} - -+ (void)unpinAllObjectsInBackgroundWithBlock:(PFBooleanResultBlock)block { - [[self unpinAllObjectsInBackground] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -+ (BOOL)unpinAllObjectsWithName:(NSString *)name { - return [self unpinAllObjectsWithName:name error:nil]; -} - -+ (BOOL)unpinAllObjectsWithName:(NSString *)name error:(NSError **)error { - return [[[self unpinAllObjectsInBackgroundWithName:name] waitForResult:error] boolValue]; -} - -+ (void)unpinAllObjectsInBackgroundWithName:(NSString *)name block:(PFBooleanResultBlock)block { - [[self unpinAllObjectsInBackgroundWithName:name] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -+ (BFTask *)unpinAllObjectsInBackgroundWithName:(NSString *)name { - return [[self pinningObjectStore] unpinAllObjectsAsyncWithPinName:name]; -} - -+ (BOOL)unpinAll:(NSArray *)objects { - return [self unpinAll:objects error:nil]; -} - -+ (BOOL)unpinAll:(NSArray *)objects error:(NSError **)error { - return [self unpinAll:objects withName:PFObjectDefaultPin error:error]; -} - -+ (BFTask *)unpinAllInBackground:(NSArray *)objects { - return [self unpinAllInBackground:objects withName:PFObjectDefaultPin]; -} - -+ (void)unpinAllInBackground:(NSArray *)objects block:(PFBooleanResultBlock)block { - [[self unpinAllInBackground:objects] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -+ (BOOL)unpinAll:(NSArray *)objects withName:(NSString *)name { - return [self unpinAll:objects withName:name error:nil]; -} - -+ (BOOL)unpinAll:(NSArray *)objects withName:(NSString *)name error:(NSError **)error { - return [[[self unpinAllInBackground:objects withName:name] waitForResult:error] boolValue]; -} - -+ (BFTask *)unpinAllInBackground:(NSArray *)objects withName:(NSString *)name { - return [[self pinningObjectStore] unpinObjectsAsync:objects withPinName:name]; -} - -+ (void)unpinAllInBackground:(NSArray *)objects - withName:(NSString *)name - block:(PFBooleanResultBlock)block { - [[self unpinAllInBackground:objects withName:name] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -///-------------------------------------- -#pragma mark - Data Source -///-------------------------------------- - -+ (id)objectController { - return [Parse _currentManager].coreManager.objectController; -} - -+ (PFObjectFileCodingLogic *)objectFileCodingLogic { - return [PFObjectFileCodingLogic codingLogic]; -} - -+ (PFObjectBatchController *)objectBatchController { - return [Parse _currentManager].coreManager.objectBatchController; -} - -+ (PFPinningObjectStore *)pinningObjectStore { - return [Parse _currentManager].coreManager.pinningObjectStore; -} - -+ (PFCurrentUserController *)currentUserController { - return [Parse _currentManager].coreManager.currentUserController; -} - -+ (PFObjectSubclassingController *)subclassingController { - return [PFObjectSubclassingController defaultController]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFProduct.h b/FoodbLog/Pods/Parse/Parse/PFProduct.h deleted file mode 100644 index e895d6b..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFProduct.h +++ /dev/null @@ -1,70 +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. - */ - -#import - -#import -#import -#import -#import - -PF_ASSUME_NONNULL_BEGIN - -/*! - The `PFProduct` class represents an in-app purchase product on the Parse server. - By default, products can only be created via the Data Browser. Saving a `PFProduct` will result in error. - However, the products' metadata information can be queried and viewed. - - This class is currently for iOS only. - */ -PF_WATCH_UNAVAILABLE @interface PFProduct : PFObject - -///-------------------------------------- -/// @name Product-specific Properties -///-------------------------------------- - -/*! - @abstract The product identifier of the product. - - @discussion This should match the product identifier in iTunes Connect exactly. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, strong) NSString *productIdentifier; - -/*! - @abstract The icon of the product. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, strong) PFFile *icon; - -/*! - @abstract The title of the product. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, strong) NSString *title; - -/*! - @abstract The subtitle of the product. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, strong) NSString *subtitle; - -/*! - @abstract The order in which the product information is displayed in . - - @discussion The product with a smaller order is displayed earlier in the . - */ -@property (PF_NULLABLE_PROPERTY nonatomic, strong) NSNumber *order; - -/*! - @abstract The name of the associated download. - - @discussion If there is no downloadable asset, it should be `nil`. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, strong, readonly) NSString *downloadName; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFProduct.m b/FoodbLog/Pods/Parse/Parse/PFProduct.m deleted file mode 100644 index 4eb2f2b..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFProduct.m +++ /dev/null @@ -1,48 +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. - */ - -#import "PFProduct.h" -#import "PFProduct+Private.h" - -#import "PFAssert.h" -#import "PFObject+Subclass.h" - -@implementation PFProduct - -@dynamic productIdentifier; -@dynamic icon; -@dynamic title; -@dynamic subtitle; -@dynamic order; -@dynamic downloadName; - -///-------------------------------------- -#pragma mark - PFSubclassing -///-------------------------------------- - -// Validates a class name. We override this to only allow the product class name. -+ (void)_assertValidInstanceClassName:(NSString *)className { - PFParameterAssert([className isEqualToString:[PFProduct parseClassName]], - @"Cannot initialize a PFProduct with a custom class name."); -} - -+ (NSString *)parseClassName { - return @"_Product"; -} - -///-------------------------------------- -#pragma mark - Private -///-------------------------------------- - -@dynamic price; -@dynamic priceLocale; -@dynamic contentPath; -@dynamic progress; - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFPurchase.h b/FoodbLog/Pods/Parse/Parse/PFPurchase.h deleted file mode 100644 index b681cc1..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFPurchase.h +++ /dev/null @@ -1,98 +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. - */ - -#import -#import - -#import -#import - -@class PFProduct; - -PF_ASSUME_NONNULL_BEGIN - -typedef void (^PFPurchaseProductObservationBlock)(SKPaymentTransaction *transaction); -typedef void (^PFPurchaseBuyProductResultBlock)(NSError *PF_NULLABLE_S error); -typedef void (^PFPurchaseDownloadAssetResultBlock)(NSString *PF_NULLABLE_S filePath, NSError *PF_NULLABLE_S error); - -/*! - `PFPurchase` provides a set of APIs for working with in-app purchases. - - This class is currently for iOS only. - */ -@interface PFPurchase : NSObject - -/*! - @abstract Add application logic block which is run when buying a product. - - @discussion This method should be called once for each product, and should be called before - calling . All invocations to should happen within - the same method, and on the main thread. It is recommended to place all invocations of this method - in `application:didFinishLaunchingWithOptions:`. - - @param productIdentifier the product identifier - @param block The block to be run when buying a product. - */ -+ (void)addObserverForProduct:(NSString *)productIdentifier block:(PFPurchaseProductObservationBlock)block; - -/*! - @abstract *Asynchronously* initiates the purchase for the product. - - @param productIdentifier the product identifier - @param block the completion block. - */ -+ (void)buyProduct:(NSString *)productIdentifier block:(PFPurchaseBuyProductResultBlock)block; - -/*! - @abstract *Asynchronously* download the purchased asset, which is stored on Parse's server. - - @discussion Parse verifies the receipt with Apple and delivers the content only if the receipt is valid. - - @param transaction the transaction, which contains the receipt. - @param completion the completion block. - */ -+ (void)downloadAssetForTransaction:(SKPaymentTransaction *)transaction - completion:(PFPurchaseDownloadAssetResultBlock)completion; - -/*! - @abstract *Asynchronously* download the purchased asset, which is stored on Parse's server. - - @discussion Parse verifies the receipt with Apple and delivers the content only if the receipt is valid. - - @param transaction the transaction, which contains the receipt. - @param completion the completion block. - @param progress the progress block, which is called multiple times to reveal progress of the download. - */ -+ (void)downloadAssetForTransaction:(SKPaymentTransaction *)transaction - completion:(PFPurchaseDownloadAssetResultBlock)completion - progress:(PF_NULLABLE PFProgressBlock)progress; - -/*! - @abstract *Asynchronously* restore completed transactions for the current user. - - @discussion Only nonconsumable purchases are restored. If observers for the products have been added before - calling this method, invoking the method reruns the application logic associated with the purchase. - - @warning This method is only important to developers who want to preserve purchase states across - different installations of the same app. - */ -+ (void)restore; - -/*! - @abstract Returns a content path of the asset of a product, if it was purchased and downloaded. - - @discussion To download and verify purchases use . - - @warning This method will return `nil`, if the purchase wasn't verified or if the asset was not downloaded. - */ -+ (PF_NULLABLE NSString *)assetContentPathForProduct:(PFProduct *)product; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFPurchase.m b/FoodbLog/Pods/Parse/Parse/PFPurchase.m deleted file mode 100644 index 52ee0f8..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFPurchase.m +++ /dev/null @@ -1,89 +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. - */ - -#import "PFPurchase.h" - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFConstants.h" -#import "PFPaymentTransactionObserver.h" -#import "PFProduct.h" -#import "PFPurchaseController.h" -#import "PFUserPrivate.h" -#import "Parse_Private.h" - -@implementation PFPurchase - -///-------------------------------------- -#pragma mark - Public -///-------------------------------------- - -+ (void)addObserverForProduct:(NSString *)productIdentifier block:(PFPurchaseProductObservationBlock)block { - // We require the following method to run on the main thread because we want to add the observer - // *after* all products handlers have been added. Developers might be calling this method multiple - // times; and if the observer is added after the first call, the observer might not know how to - // handle some purchases. - - PFConsistencyAssert([NSThread isMainThread], @"%@ must be called on the main thread.", NSStringFromSelector(_cmd)); - PFParameterAssert(productIdentifier, @"You must pass in a valid product identifier."); - PFParameterAssert(block, @"You must pass in a valid block for the product."); - - [[Parse _currentManager].purchaseController.transactionObserver handle:productIdentifier block:block]; -} - -+ (void)buyProduct:(NSString *)productIdentifier block:(PFPurchaseBuyProductResultBlock)completion { - [[[self _purchaseController] buyProductAsyncWithIdentifier:productIdentifier] continueWithBlock:^id(BFTask *task) { - if (completion) { - completion(task.error); - } - return nil; - }]; -} - -+ (void)restore { - [[self _purchaseController].paymentQueue restoreCompletedTransactions]; -} - -+ (void)downloadAssetForTransaction:(SKPaymentTransaction *)transaction - completion:(PFPurchaseDownloadAssetResultBlock)completion { - [self downloadAssetForTransaction:transaction completion:completion progress:nil]; -} - -+ (void)downloadAssetForTransaction:(SKPaymentTransaction *)transaction - completion:(PFPurchaseDownloadAssetResultBlock)completion - progress:(PFProgressBlock)progress { - @weakify(self); - [[[PFUser _getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { - @strongify(self); - NSString *sessionToken = task.result; - return [[self _purchaseController] downloadAssetAsyncForTransaction:transaction - withProgressBlock:progress - sessionToken:sessionToken]; - }] continueWithMainThreadResultBlock:completion executeIfCancelled:YES]; -} - -+ (NSString *)assetContentPathForProduct:(PFProduct *)product { - NSString *path = [[self _purchaseController] assetContentPathForProductWithIdentifier:product.productIdentifier - fileName:product.downloadName]; - if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { - return path; - } - - return nil; -} - -///-------------------------------------- -#pragma mark - Purchase Controller -///-------------------------------------- - -+ (PFPurchaseController *)_purchaseController { - return [Parse _currentManager].purchaseController; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFPush.h b/FoodbLog/Pods/Parse/Parse/PFPush.h deleted file mode 100644 index 6cff85b..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFPush.h +++ /dev/null @@ -1,532 +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. - */ - -#import - -#import - -#import -#import - -@class PFQuery PF_GENERIC(PFGenericObject : PFObject *); - -PF_ASSUME_NONNULL_BEGIN - -/*! - The `PFPush` class defines a push notification that can be sent from a client device. - - The preferred way of modifying or retrieving channel subscriptions is to use - the class, instead of the class methods in `PFPush`. - */ -@interface PFPush : NSObject - -///-------------------------------------- -/// @name Creating a Push Notification -///-------------------------------------- - -+ (instancetype)push; - -///-------------------------------------- -/// @name Configuring a Push Notification -///-------------------------------------- - -/*! - @abstract Sets the channel on which this push notification will be sent. - - @param channel The channel to set for this push. - The channel name must start with a letter and contain only letters, numbers, dashes, and underscores. - */ -- (void)setChannel:(PF_NULLABLE NSString *)channel; - -/*! - @abstract Sets the array of channels on which this push notification will be sent. - - @param channels The array of channels to set for this push. - Each channel name must start with a letter and contain only letters, numbers, dashes, and underscores. - */ -- (void)setChannels:(PF_NULLABLE NSArray PF_GENERIC(NSString *) *)channels; - -/*! - @abstract Sets an installation query to which this push notification will be sent. - - @discussion The query should be created via <[PFInstallation query]> and should not specify a skip, limit, or order. - - @param query The installation query to set for this push. - */ -- (void)setQuery:(PF_NULLABLE PFQuery PF_GENERIC(PFInstallation *) *)query; - -/*! - @abstract Sets an alert message for this push notification. - - @warning This will overwrite any data specified in setData. - - @param message The message to send in this push. - */ -- (void)setMessage:(PF_NULLABLE NSString *)message; - -/*! - @abstract Sets an arbitrary data payload for this push notification. - - @discussion See the guide for information about the dictionary structure. - - @warning This will overwrite any data specified in setMessage. - - @param data The data to send in this push. - */ -- (void)setData:(PF_NULLABLE NSDictionary *)data; - -/*! - @abstract Sets whether this push will go to Android devices. - - @param pushToAndroid Whether this push will go to Android devices. - - @deprecated Please use a `[PFInstallation query]` with a constraint on deviceType instead. - */ -- (void)setPushToAndroid:(BOOL)pushToAndroid PARSE_DEPRECATED("Please use a [PFInstallation query] with a constraint on deviceType. This method is deprecated and won't do anything."); - -/*! - @abstract Sets whether this push will go to iOS devices. - - @param pushToIOS Whether this push will go to iOS devices. - - @deprecated Please use a `[PFInstallation query]` with a constraint on deviceType instead. - */ -- (void)setPushToIOS:(BOOL)pushToIOS PARSE_DEPRECATED("Please use a [PFInstallation query] with a constraint on deviceType. This method is deprecated and won't do anything."); - -/*! - @abstract Sets the expiration time for this notification. - - @discussion The notification will be sent to devices which are either online - at the time the notification is sent, or which come online before the expiration time is reached. - Because device clocks are not guaranteed to be accurate, - most applications should instead use . - - @see expireAfterTimeInterval: - - @param date The time at which the notification should expire. - */ -- (void)expireAtDate:(PF_NULLABLE NSDate *)date; - -/*! - @abstract Sets the time interval after which this notification should expire. - - @discussion This notification will be sent to devices which are either online at - the time the notification is sent, or which come online within the given - time interval of the notification being received by Parse's server. - An interval which is less than or equal to zero indicates that the - message should only be sent to devices which are currently online. - - @param timeInterval The interval after which the notification should expire. - */ -- (void)expireAfterTimeInterval:(NSTimeInterval)timeInterval; - -/*! - @abstract Clears both expiration values, indicating that the notification should never expire. - */ -- (void)clearExpiration; - -///-------------------------------------- -/// @name Sending Push Notifications -///-------------------------------------- - -/*! - @abstract *Synchronously* send a push message to a channel. - - @param channel The channel to send to. The channel name must start with - a letter and contain only letters, numbers, dashes, and underscores. - @param message The message to send. - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns whether the send succeeded. - */ -+ (BOOL)sendPushMessageToChannel:(NSString *)channel - withMessage:(NSString *)message - error:(NSError **)error; - -/*! - @abstract *Asynchronously* send a push message to a channel. - - @param channel The channel to send to. The channel name must start with - a letter and contain only letters, numbers, dashes, and underscores. - @param message The message to send. - - @returns The task, that encapsulates the work being done. - */ -+ (BFTask PF_GENERIC(NSNumber *)*)sendPushMessageToChannelInBackground:(NSString *)channel - withMessage:(NSString *)message; - -/*! - @abstract *Asynchronously* sends a push message to a channel and calls the given block. - - @param channel The channel to send to. The channel name must start with - a letter and contain only letters, numbers, dashes, and underscores. - @param message The message to send. - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)` - */ -+ (void)sendPushMessageToChannelInBackground:(NSString *)channel - withMessage:(NSString *)message - block:(PF_NULLABLE PFBooleanResultBlock)block; - -/* - @abstract *Asynchronously* send a push message to a channel. - - @param channel The channel to send to. The channel name must start with - a letter and contain only letters, numbers, dashes, and underscores. - @param message The message to send. - @param target The object to call selector on. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - `[result boolValue]` will tell you whether the call succeeded or not. - */ -+ (void)sendPushMessageToChannelInBackground:(NSString *)channel - withMessage:(NSString *)message - target:(PF_NULLABLE_S id)target - selector:(PF_NULLABLE_S SEL)selector; - -/*! - @abstract Send a push message to a query. - - @param query The query to send to. The query must be a query created with <[PFInstallation query]>. - @param message The message to send. - @param error Pointer to an NSError that will be set if necessary. - - @returns Returns whether the send succeeded. - */ -+ (BOOL)sendPushMessageToQuery:(PFQuery PF_GENERIC(PFInstallation *) *)query - withMessage:(NSString *)message - error:(NSError **)error; - -/*! - @abstract *Asynchronously* send a push message to a query. - - @param query The query to send to. The query must be a query created with <[PFInstallation query]>. - @param message The message to send. - - @returns The task, that encapsulates the work being done. - */ -+ (BFTask PF_GENERIC(NSNumber *)*)sendPushMessageToQueryInBackground:(PFQuery PF_GENERIC(PFInstallation *) *)query - withMessage:(NSString *)message; - -/*! - @abstract *Asynchronously* sends a push message to a query and calls the given block. - - @param query The query to send to. The query must be a PFInstallation query - created with [PFInstallation query]. - @param message The message to send. - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)` - */ -+ (void)sendPushMessageToQueryInBackground:(PFQuery PF_GENERIC(PFInstallation *) *)query - withMessage:(NSString *)message - block:(PF_NULLABLE PFBooleanResultBlock)block; - -/*! - @abstract *Synchronously* send this push message. - - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns whether the send succeeded. - */ -- (BOOL)sendPush:(NSError **)error; - -/*! - @abstract *Asynchronously* send this push message. - @returns The task, that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(NSNumber *)*)sendPushInBackground; - -/*! - @abstract *Asynchronously* send this push message and executes the given callback block. - - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - */ -- (void)sendPushInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block; - -/* - @abstract *Asynchronously* send this push message and calls the given callback. - - @param target The object to call selector on. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - `[result boolValue]` will tell you whether the call succeeded or not. - */ -- (void)sendPushInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; - -/*! - @abstract *Synchronously* send a push message with arbitrary data to a channel. - - @discussion See the guide for information about the dictionary structure. - - @param channel The channel to send to. The channel name must start with - a letter and contain only letters, numbers, dashes, and underscores. - @param data The data to send. - @param error Pointer to an NSError that will be set if necessary. - - @returns Returns whether the send succeeded. - */ -+ (BOOL)sendPushDataToChannel:(NSString *)channel - withData:(NSDictionary *)data - error:(NSError **)error; - -/*! - @abstract *Asynchronously* send a push message with arbitrary data to a channel. - - @discussion See the guide for information about the dictionary structure. - - @param channel The channel to send to. The channel name must start with - a letter and contain only letters, numbers, dashes, and underscores. - @param data The data to send. - - @returns The task, that encapsulates the work being done. - */ -+ (BFTask PF_GENERIC(NSNumber *)*)sendPushDataToChannelInBackground:(NSString *)channel - withData:(NSDictionary *)data; - -/*! - @abstract Asynchronously sends a push message with arbitrary data to a channel and calls the given block. - - @discussion See the guide for information about the dictionary structure. - - @param channel The channel to send to. The channel name must start with - a letter and contain only letters, numbers, dashes, and underscores. - @param data The data to send. - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - */ -+ (void)sendPushDataToChannelInBackground:(NSString *)channel - withData:(NSDictionary *)data - block:(PF_NULLABLE PFBooleanResultBlock)block; - -/* - @abstract *Asynchronously* send a push message with arbitrary data to a channel. - - @discussion See the guide for information about the dictionary structure. - - @param channel The channel to send to. The channel name must start with - a letter and contain only letters, numbers, dashes, and underscores. - @param data The data to send. - @param target The object to call selector on. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - `[result boolValue]` will tell you whether the call succeeded or not. - */ -+ (void)sendPushDataToChannelInBackground:(NSString *)channel - withData:(NSDictionary *)data - target:(PF_NULLABLE_S id)target - selector:(PF_NULLABLE_S SEL)selector; - -/*! - @abstract *Synchronously* send a push message with arbitrary data to a query. - - @discussion See the guide for information about the dictionary structure. - - @param query The query to send to. The query must be a query - created with <[PFInstallation query]>. - @param data The data to send. - @param error Pointer to an NSError that will be set if necessary. - - @returns Returns whether the send succeeded. - */ -+ (BOOL)sendPushDataToQuery:(PFQuery PF_GENERIC(PFInstallation *) *)query - withData:(NSDictionary *)data - error:(NSError **)error; - -/*! - @abstract Asynchronously send a push message with arbitrary data to a query. - - @discussion See the guide for information about the dictionary structure. - - @param query The query to send to. The query must be a query - created with <[PFInstallation query]>. - @param data The data to send. - - @returns The task, that encapsulates the work being done. - */ -+ (BFTask PF_GENERIC(NSNumber *)*)sendPushDataToQueryInBackground:(PFQuery PF_GENERIC(PFInstallation *) *)query - withData:(NSDictionary *)data; - -/*! - @abstract *Asynchronously* sends a push message with arbitrary data to a query and calls the given block. - - @discussion See the guide for information about the dictionary structure. - - @param query The query to send to. The query must be a query - created with <[PFInstallation query]>. - @param data The data to send. - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - */ -+ (void)sendPushDataToQueryInBackground:(PFQuery PF_GENERIC(PFInstallation *) *)query - withData:(NSDictionary *)data - block:(PF_NULLABLE PFBooleanResultBlock)block; - -///-------------------------------------- -/// @name Handling Notifications -///-------------------------------------- - -/*! - @abstract A default handler for push notifications while the app is active that - could be used to mimic the behavior of iOS push notifications while the app is backgrounded or not running. - - @discussion Call this from `application:didReceiveRemoteNotification:`. - If push has a dictionary containing loc-key and loc-args in the alert, - we support up to 10 items in loc-args (`NSRangeException` if limit exceeded). - - @warning This method is available only on iOS. - - @param userInfo The userInfo dictionary you get in `appplication:didReceiveRemoteNotification:`. - */ -+ (void)handlePush:(PF_NULLABLE NSDictionary *)userInfo NS_AVAILABLE_IOS(3_0) PF_EXTENSION_UNAVAILABLE(""); - -///-------------------------------------- -/// @name Managing Channel Subscriptions -///-------------------------------------- - -/*! - @abstract Store the device token locally for push notifications. - - @discussion Usually called from you main app delegate's `didRegisterForRemoteNotificationsWithDeviceToken:`. - - @param deviceToken Either as an `NSData` straight from `application:didRegisterForRemoteNotificationsWithDeviceToken:` - or as an `NSString` if you converted it yourself. - */ -+ (void)storeDeviceToken:(id)deviceToken; - -/*! - @abstract *Synchronously* get all the channels that this device is subscribed to. - - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns an `NSSet` containing all the channel names this device is subscribed to. - */ -+ (PF_NULLABLE NSSet *)getSubscribedChannels:(NSError **)error; - -/*! - @abstract *Asynchronously* get all the channels that this device is subscribed to. - - @returns The task, that encapsulates the work being done. - */ -+ (BFTask PF_GENERIC(NSSet *)*)getSubscribedChannelsInBackground; - -/*! - @abstract *Asynchronously* get all the channels that this device is subscribed to. - @param block The block to execute. - It should have the following argument signature: `^(NSSet *channels, NSError *error)`. - */ -+ (void)getSubscribedChannelsInBackgroundWithBlock:(PFSetResultBlock)block; - -/* - @abstract *Asynchronously* get all the channels that this device is subscribed to. - - @param target The object to call selector on. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(NSSet *)result error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - */ -+ (void)getSubscribedChannelsInBackgroundWithTarget:(id)target - selector:(SEL)selector; - -/*! - @abstract *Synchrnously* subscribes the device to a channel of push notifications. - - @param channel The channel to subscribe to. The channel name must start with - a letter and contain only letters, numbers, dashes, and underscores. - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns whether the subscribe succeeded. - */ -+ (BOOL)subscribeToChannel:(NSString *)channel error:(NSError **)error; - -/*! - @abstract *Asynchronously* subscribes the device to a channel of push notifications. - - @param channel The channel to subscribe to. The channel name must start with - a letter and contain only letters, numbers, dashes, and underscores. - - @returns The task, that encapsulates the work being done. - */ -+ (BFTask PF_GENERIC(NSNumber *)*)subscribeToChannelInBackground:(NSString *)channel; - -/*! - @abstract *Asynchronously* subscribes the device to a channel of push notifications and calls the given block. - - @param channel The channel to subscribe to. The channel name must start with - a letter and contain only letters, numbers, dashes, and underscores. - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)` - */ -+ (void)subscribeToChannelInBackground:(NSString *)channel - block:(PF_NULLABLE PFBooleanResultBlock)block; - -/* - @abstract *Asynchronously* subscribes the device to a channel of push notifications and calls the given callback. - - @param channel The channel to subscribe to. The channel name must start with - a letter and contain only letters, numbers, dashes, and underscores. - @param target The object to call selector on. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - `[result boolValue]` will tell you whether the call succeeded or not. - */ -+ (void)subscribeToChannelInBackground:(NSString *)channel - target:(PF_NULLABLE_S id)target - selector:(PF_NULLABLE_S SEL)selector; - -/*! - @abstract *Synchronously* unsubscribes the device to a channel of push notifications. - - @param channel The channel to unsubscribe from. - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns whether the unsubscribe succeeded. - */ -+ (BOOL)unsubscribeFromChannel:(NSString *)channel error:(NSError **)error; - -/*! - @abstract *Asynchronously* unsubscribes the device from a channel of push notifications. - - @param channel The channel to unsubscribe from. - - @returns The task, that encapsulates the work being done. - */ -+ (BFTask PF_GENERIC(NSNumber *)*)unsubscribeFromChannelInBackground:(NSString *)channel; - -/*! - @abstract *Asynchronously* unsubscribes the device from a channel of push notifications and calls the given block. - - @param channel The channel to unsubscribe from. - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - */ -+ (void)unsubscribeFromChannelInBackground:(NSString *)channel - block:(PF_NULLABLE PFBooleanResultBlock)block; - -/* - @abstract *Asynchronously* unsubscribes the device from a channel of push notifications and calls the given callback. - - @param channel The channel to unsubscribe from. - @param target The object to call selector on. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - `[result boolValue]` will tell you whether the call succeeded or not. - */ -+ (void)unsubscribeFromChannelInBackground:(NSString *)channel - target:(PF_NULLABLE_S id)target - selector:(PF_NULLABLE_S SEL)selector; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFPush.m b/FoodbLog/Pods/Parse/Parse/PFPush.m deleted file mode 100644 index e5101dd..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFPush.m +++ /dev/null @@ -1,464 +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. - */ - -#import "PFPush.h" -#import "PFPushPrivate.h" - -#import - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFEncoder.h" -#import "PFHash.h" -#import "PFInstallationPrivate.h" -#import "PFKeychainStore.h" -#import "PFMacros.h" -#import "PFMutablePushState.h" -#import "PFMutableQueryState.h" -#import "PFPushChannelsController.h" -#import "PFPushController.h" -#import "PFPushManager.h" -#import "PFPushUtilities.h" -#import "PFQueryPrivate.h" -#import "PFUserPrivate.h" -#import "Parse_Private.h" - -static Class _pushInternalUtilClass = nil; - -@interface PFPush () - -@property (nonatomic, strong) PFMutablePushState *state; -@property (nonatomic, strong) PFQuery PF_GENERIC(PFInstallation *) *query; - -@end - -@implementation PFPush (Private) - -+ (Class)pushInternalUtilClass { - return _pushInternalUtilClass ?: [PFPushUtilities class]; -} - -+ (void)setPushInternalUtilClass:(Class)utilClass { - if (utilClass) { - PFParameterAssert([utilClass conformsToProtocol:@protocol(PFPushInternalUtils)], - @"utilClass must conform to PFPushInternalUtils protocol"); - } - _pushInternalUtilClass = utilClass; -} - -@end - -@implementation PFPush - -///-------------------------------------- -#pragma mark - Instance -///-------------------------------------- - -#pragma mark Init - -+ (instancetype)push { - return [[self alloc] init]; -} - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _state = [[PFMutablePushState alloc] init]; - - return self; -} - -#pragma mark Accessors - -- (void)setQuery:(PFQuery *)query { - PFParameterAssert(!self.state.channels || !query, @"Can't set both the query and channel(s) properties."); - _query = query; -} - -- (void)setChannelSet:(NSSet *)channelSet { - PFParameterAssert(!self.query || !channelSet, @"Can't set both the query and channel(s) properties."); - self.state.channels = channelSet; -} - -- (void)setChannel:(NSString *)channel { - self.channelSet = PF_SET(channel); -} - -- (void)setChannels:(NSArray *)channels { - self.channelSet = [NSSet setWithArray:channels]; -} - -- (void)setMessage:(NSString *)message { - [self.state setPayloadWithMessage:message]; -} - -- (void)expireAtDate:(NSDate *)date { - self.state.expirationDate = date; - self.state.expirationTimeInterval = nil; -} - -- (void)expireAfterTimeInterval:(NSTimeInterval)timeInterval { - self.state.expirationDate = nil; - self.state.expirationTimeInterval = @(timeInterval); -} - -- (void)clearExpiration { - self.state.expirationDate = nil; - self.state.expirationTimeInterval = nil; -} - -- (void)setData:(NSDictionary *)data { - self.state.payload = data; -} - -#pragma mark Sending - -- (BOOL)sendPush:(NSError **)error { - return [[[self sendPushInBackground] waitForResult:error] boolValue]; -} - -- (BFTask *)sendPushInBackground { - if (self.query) { - PFParameterAssert(!self.query.state.sortKeys, @"Cannot send push notifications to an ordered query."); - PFParameterAssert(self.query.state.limit == -1, @"Cannot send push notifications to a limit query."); - PFParameterAssert(self.query.state.skip == 0, @"Cannot send push notifications to a skip query."); - } - - // Capture state first. - PFPushController *pushController = [[self class] pushController]; - PFPushState *state = [self _currentStateCopy]; - return [[PFUser _getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { - NSString *sessionToken = task.result; - return [pushController sendPushNotificationAsyncWithState:state sessionToken:sessionToken]; - }]; -} - -- (void)sendPushInBackgroundWithTarget:(id)target selector:(SEL)selector { - [self sendPushInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; - }]; -} - -- (void)sendPushInBackgroundWithBlock:(PFBooleanResultBlock)block { - [[self sendPushInBackground] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -#pragma mark Command - -- (PFPushState *)_currentStateCopy { - if (self.query) { - PFMutablePushState *state = [self.state mutableCopy]; - state.queryState = self.query.state; - return [state copy]; - } - return [self.state copy]; -} - -///-------------------------------------- -#pragma mark - NSCopying -///-------------------------------------- - -- (instancetype)copyWithZone:(NSZone *)zone { - PFPush *push = [[PFPush allocWithZone:zone] init]; - push.state = [self.state mutableCopy]; - return push; -} - -///-------------------------------------- -#pragma mark - NSObject -///-------------------------------------- - -- (NSUInteger)hash { - return PFIntegerPairHash([self.query hash], [self.state hash]); -} - -- (BOOL)isEqual:(id)object { - if (self == object) { - return YES; - } - - if (![object isKindOfClass:[PFPush class]]) { - return NO; - } - - PFPush *push = (PFPush *)object; - return (((self.query == nil && push.query == nil) || - [self.query isEqual:push.query]) && - [self.state isEqual:push.state]); -} - -///-------------------------------------- -#pragma mark - Sending Push Notifications -///-------------------------------------- - -#pragma mark To Channel - -+ (BOOL)sendPushMessageToChannel:(NSString *)channel - withMessage:(NSString *)message - error:(NSError **)error { - return [[[self sendPushMessageToChannelInBackground:channel withMessage:message] waitForResult:error] boolValue]; -} - -+ (BFTask *)sendPushMessageToChannelInBackground:(NSString *)channel - withMessage:(NSString *)message { - NSDictionary *data = @{ @"alert" : message }; - return [self sendPushDataToChannelInBackground:channel withData:data]; -} - -+ (void)sendPushMessageToChannelInBackground:(NSString *)channel - withMessage:(NSString *)message - block:(PFBooleanResultBlock)block { - [[self sendPushMessageToChannelInBackground:channel - withMessage:message] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -+ (void)sendPushMessageToChannelInBackground:(NSString *)channel - withMessage:(NSString *)message - target:(id)target - selector:(SEL)selector { - [self sendPushMessageToChannelInBackground:channel withMessage:message block:^(BOOL succeeded, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; - }]; -} - -+ (BOOL)sendPushDataToChannel:(NSString *)channel - withData:(NSDictionary *)data - error:(NSError **)error { - return [[[PFPush sendPushDataToChannelInBackground:channel withData:data] waitForResult:error] boolValue]; -} - -+ (BFTask *)sendPushDataToChannelInBackground:(NSString *)channel withData:(NSDictionary *)data { - PFPush *push = [self push]; - [push setChannel:channel]; - [push setData:data]; - return [push sendPushInBackground]; -} - -+ (void)sendPushDataToChannelInBackground:(NSString *)channel - withData:(NSDictionary *)data - block:(PFBooleanResultBlock)block { - [[self sendPushDataToChannelInBackground:channel withData:data] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -+ (void)sendPushDataToChannelInBackground:(NSString *)channel - withData:(NSDictionary *)data - target:(id)target - selector:(SEL)selector { - [self sendPushDataToChannelInBackground:channel withData:data block:^(BOOL succeeded, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; - }]; -} - -#pragma mark To Query - -+ (BOOL)sendPushMessageToQuery:(PFQuery *)query - withMessage:(NSString *)message - error:(NSError **)error { - PFPush *push = [PFPush push]; - push.query = query; - push.message = message; - return [push sendPush:error]; -} - -+ (BFTask *)sendPushMessageToQueryInBackground:(PFQuery *)query - withMessage:(NSString *)message { - PFPush *push = [PFPush push]; - push.query = query; - push.message = message; - return [push sendPushInBackground]; -} - -+ (void)sendPushMessageToQueryInBackground:(PFQuery *)query - withMessage:(NSString *)message - block:(PFBooleanResultBlock)block { - PFPush *push = [PFPush push]; - push.query = query; - push.message = message; - [push sendPushInBackgroundWithBlock:block]; -} - - -+ (BOOL)sendPushDataToQuery:(PFQuery *)query - withData:(NSDictionary *)data - error:(NSError **)error { - PFPush *push = [PFPush push]; - push.query = query; - push.data = data; - return [push sendPush:error]; -} - -+ (BFTask *)sendPushDataToQueryInBackground:(PFQuery *)query - withData:(NSDictionary *)data { - PFPush *push = [PFPush push]; - push.query = query; - push.data = data; - return [push sendPushInBackground]; -} - -+ (void)sendPushDataToQueryInBackground:(PFQuery *)query - withData:(NSDictionary *)data - block:(PFBooleanResultBlock)block { - PFPush *push = [PFPush push]; - push.query = query; - push.data = data; - [push sendPushInBackgroundWithBlock:block]; -} - -///-------------------------------------- -#pragma mark - Channels -///-------------------------------------- - -#pragma mark Get - -+ (NSSet *)getSubscribedChannels:(NSError **)error { - return [[self getSubscribedChannelsInBackground] waitForResult:error]; -} - -+ (BFTask *)getSubscribedChannelsInBackground { - return [[self channelsController] getSubscribedChannelsAsync]; -} - -+ (void)getSubscribedChannelsInBackgroundWithBlock:(PFSetResultBlock)block { - [[self getSubscribedChannelsInBackground] thenCallBackOnMainThreadAsync:block]; -} - -+ (void)getSubscribedChannelsInBackgroundWithTarget:(id)target selector:(SEL)selector { - [self getSubscribedChannelsInBackgroundWithBlock:^(NSSet *channels, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:channels object:error]; - }]; -} - -#pragma mark Subscribe - -+ (BOOL)subscribeToChannel:(NSString *)channel error:(NSError **)error { - return [[[self subscribeToChannelInBackground:channel] waitForResult:error] boolValue]; -} - -+ (BFTask *)subscribeToChannelInBackground:(NSString *)channel { - return [[self channelsController] subscribeToChannelAsyncWithName:channel]; -} - -+ (void)subscribeToChannelInBackground:(NSString *)channel block:(PFBooleanResultBlock)block { - [[self subscribeToChannelInBackground:channel] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -+ (void)subscribeToChannelInBackground:(NSString *)channel target:(id)target selector:(SEL)selector { - [self subscribeToChannelInBackground:channel block:^(BOOL succeeded, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; - }]; -} - -#pragma mark Unsubscribe - -+ (BOOL)unsubscribeFromChannel:(NSString *)channel error:(NSError **)error { - return [[[self unsubscribeFromChannelInBackground:channel] waitForResult:error] boolValue]; -} - -+ (BFTask *)unsubscribeFromChannelInBackground:(NSString *)channel { - return [[self channelsController] unsubscribeFromChannelAsyncWithName:channel]; -} - -+ (void)unsubscribeFromChannelInBackground:(NSString *)channel block:(PFBooleanResultBlock)block { - [[self unsubscribeFromChannelInBackground:channel] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -+ (void)unsubscribeFromChannelInBackground:(NSString *)channel target:(id)target selector:(SEL)selector { - [self unsubscribeFromChannelInBackground:channel block:^(BOOL succeeded, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; - }]; -} - -///-------------------------------------- -#pragma mark - Handling Notifications -///-------------------------------------- - -#if PARSE_IOS_ONLY -+ (void)handlePush:(NSDictionary *)userInfo { - UIApplication *application = [UIApplication sharedApplication]; - if ([application applicationState] != UIApplicationStateActive) { - return; - } - - NSDictionary *aps = userInfo[@"aps"]; - id alert = aps[@"alert"]; - - if (alert) { - NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:(__bridge NSString *)kCFBundleNameKey]; - NSString *message = nil; - if ([alert isKindOfClass:[NSString class]]) { - message = alert; - } else if ([alert isKindOfClass:[NSDictionary class]]) { - NSDictionary *alertDict = alert; - NSString *locKey = alertDict[@"loc-key"]; - if (locKey) { - NSString *format = [[NSBundle mainBundle] localizedStringForKey:locKey value:@"" table:nil]; - message = [PFInternalUtils _stringWithFormat:format arguments:alertDict[@"loc-args"]]; - } - } - if (message) { - [[self pushInternalUtilClass] showAlertViewWithTitle:appName message:message]; - } - } - - NSNumber *badgeNumber = aps[@"badge"]; - if (badgeNumber) { - NSInteger number = [aps[@"badge"] integerValue]; - [application setApplicationIconBadgeNumber:number]; - } - - NSString *soundName = aps[@"sound"]; - - // Vibrate or play sound only if `sound` is specified. - if ([soundName isKindOfClass:[NSString class]] && soundName.length != 0) { - // Vibrate if the sound is `default`, otherwise - play the sound name. - if ([soundName isEqualToString:@"default"]) { - [[self pushInternalUtilClass] playVibrate]; - } else { - [[self pushInternalUtilClass] playAudioWithName:soundName]; - } - } -} -#endif - -///-------------------------------------- -#pragma mark - Store Token -///-------------------------------------- - -+ (void)storeDeviceToken:(id)deviceToken { - NSString *deviceTokenString = [[self pushInternalUtilClass] convertDeviceTokenToString:deviceToken]; - [PFInstallation currentInstallation].deviceToken = deviceTokenString; -} - -///-------------------------------------- -#pragma mark - Deprecated -///-------------------------------------- - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -- (void)setPushToIOS:(BOOL)pushToIOS { -} - -- (void)setPushToAndroid:(BOOL)pushToAndroid { -} -#pragma clang diagnostic pop - -///-------------------------------------- -#pragma mark - Push Manager -///-------------------------------------- - -+ (PFPushController *)pushController { - return [Parse _currentManager].pushManager.pushController; -} - -+ (PFPushChannelsController *)channelsController { - return [Parse _currentManager].pushManager.channelsController; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFQuery.h b/FoodbLog/Pods/Parse/Parse/PFQuery.h deleted file mode 100644 index 661399a..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFQuery.h +++ /dev/null @@ -1,892 +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. - */ - -#import - -#import - -#import -#import -#import -#import - -PF_ASSUME_NONNULL_BEGIN - -/*! - The `PFQuery` class defines a query that is used to query for s. - */ -@interface PFQuery PF_GENERIC(PFGenericObject : PFObject *) : NSObject - -///-------------------------------------- -/// @name Blocks -///-------------------------------------- - -typedef void (^PFQueryArrayResultBlock)(NSArray PF_GENERIC(PFGenericObject) * PF_NULLABLE_S objects, NSError * PF_NULLABLE_S error); - -///-------------------------------------- -/// @name Creating a Query for a Class -///-------------------------------------- - -/*! - @abstract Initializes the query with a class name. - - @param className The class name. - */ -- (instancetype)initWithClassName:(NSString *)className; - -/*! - @abstract Returns a `PFQuery` for a given class. - - @param className The class to query on. - - @returns A `PFQuery` object. - */ -+ (instancetype)queryWithClassName:(NSString *)className; - -/*! - @abstract Creates a PFQuery with the constraints given by predicate. - - @discussion The following types of predicates are supported: - - - Simple comparisons such as `=`, `!=`, `<`, `>`, `<=`, `>=`, and `BETWEEN` with a key and a constant. - - Containment predicates, such as `x IN {1, 2, 3}`. - - Key-existence predicates, such as `x IN SELF`. - - BEGINSWITH expressions. - - Compound predicates with `AND`, `OR`, and `NOT`. - - SubQueries with `key IN %@`, subquery. - - The following types of predicates are NOT supported: - - - Aggregate operations, such as `ANY`, `SOME`, `ALL`, or `NONE`. - - Regular expressions, such as `LIKE`, `MATCHES`, `CONTAINS`, or `ENDSWITH`. - - Predicates comparing one key to another. - - Complex predicates with many ORed clauses. - - @param className The class to query on. - @param predicate The predicate to create conditions from. - */ -+ (instancetype)queryWithClassName:(NSString *)className predicate:(PF_NULLABLE NSPredicate *)predicate; - -/*! - The class name to query for. - */ -@property (nonatomic, strong) NSString *parseClassName; - -///-------------------------------------- -/// @name Adding Basic Constraints -///-------------------------------------- - -/*! - @abstract Make the query include PFObjects that have a reference stored at the provided key. - - @discussion This has an effect similar to a join. You can use dot notation to specify which fields in - the included object are also fetch. - - @param key The key to load child s for. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)includeKey:(NSString *)key; - -/*! - @abstract Make the query restrict the fields of the returned s to include only the provided keys. - - @discussion If this is called multiple times, then all of the keys specified in each of the calls will be included. - - @param keys The keys to include in the result. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)selectKeys:(NSArray PF_GENERIC(NSString *) *)keys; - -/*! - @abstract Add a constraint that requires a particular key exists. - - @param key The key that should exist. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKeyExists:(NSString *)key; - -/*! - @abstract Add a constraint that requires a key not exist. - - @param key The key that should not exist. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKeyDoesNotExist:(NSString *)key; - -/*! - @abstract Add a constraint to the query that requires a particular key's object to be equal to the provided object. - - @param key The key to be constrained. - @param object The object that must be equalled. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key equalTo:(id)object; - -/*! - @abstract Add a constraint to the query that requires a particular key's object to be less than the provided object. - - @param key The key to be constrained. - @param object The object that provides an upper bound. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key lessThan:(id)object; - -/*! - @abstract Add a constraint to the query that requires a particular key's object - to be less than or equal to the provided object. - - @param key The key to be constrained. - @param object The object that must be equalled. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key lessThanOrEqualTo:(id)object; - -/*! - @abstract Add a constraint to the query that requires a particular key's object - to be greater than the provided object. - - @param key The key to be constrained. - @param object The object that must be equalled. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key greaterThan:(id)object; - -/*! - @abstract Add a constraint to the query that requires a particular key's - object to be greater than or equal to the provided object. - - @param key The key to be constrained. - @param object The object that must be equalled. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key greaterThanOrEqualTo:(id)object; - -/*! - @abstract Add a constraint to the query that requires a particular key's object - to be not equal to the provided object. - - @param key The key to be constrained. - @param object The object that must not be equalled. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key notEqualTo:(id)object; - -/*! - @abstract Add a constraint to the query that requires a particular key's object - to be contained in the provided array. - - @param key The key to be constrained. - @param array The possible values for the key's object. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key containedIn:(NSArray *)array; - -/*! - @abstract Add a constraint to the query that requires a particular key's object - not be contained in the provided array. - - @param key The key to be constrained. - @param array The list of values the key's object should not be. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key notContainedIn:(NSArray *)array; - -/*! - @abstract Add a constraint to the query that requires a particular key's array - contains every element of the provided array. - - @param key The key to be constrained. - @param array The array of values to search for. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key containsAllObjectsInArray:(NSArray *)array; - -///-------------------------------------- -/// @name Adding Location Constraints -///-------------------------------------- - -/*! - @abstract Add a constraint to the query that requires a particular key's coordinates (specified via ) - be near a reference point. - - @discussion Distance is calculated based on angular distance on a sphere. Results will be sorted by distance - from reference point. - - @param key The key to be constrained. - @param geopoint The reference point represented as a . - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key nearGeoPoint:(PFGeoPoint *)geopoint; - -/*! - @abstract Add a constraint to the query that requires a particular key's coordinates (specified via ) - be near a reference point and within the maximum distance specified (in miles). - - @discussion Distance is calculated based on a spherical coordinate system. - Results will be sorted by distance (nearest to farthest) from the reference point. - - @param key The key to be constrained. - @param geopoint The reference point represented as a . - @param maxDistance Maximum distance in miles. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key - nearGeoPoint:(PFGeoPoint *)geopoint - withinMiles:(double)maxDistance; - -/*! - @abstract Add a constraint to the query that requires a particular key's coordinates (specified via ) - be near a reference point and within the maximum distance specified (in kilometers). - - @discussion Distance is calculated based on a spherical coordinate system. - Results will be sorted by distance (nearest to farthest) from the reference point. - - @param key The key to be constrained. - @param geopoint The reference point represented as a . - @param maxDistance Maximum distance in kilometers. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key - nearGeoPoint:(PFGeoPoint *)geopoint - withinKilometers:(double)maxDistance; - -/*! - Add a constraint to the query that requires a particular key's coordinates (specified via ) be near - a reference point and within the maximum distance specified (in radians). Distance is calculated based on - angular distance on a sphere. Results will be sorted by distance (nearest to farthest) from the reference point. - - @param key The key to be constrained. - @param geopoint The reference point as a . - @param maxDistance Maximum distance in radians. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key - nearGeoPoint:(PFGeoPoint *)geopoint - withinRadians:(double)maxDistance; - -/*! - @abstract Add a constraint to the query that requires a particular key's coordinates (specified via ) be - contained within a given rectangular geographic bounding box. - - @param key The key to be constrained. - @param southwest The lower-left inclusive corner of the box. - @param northeast The upper-right inclusive corner of the box. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key withinGeoBoxFromSouthwest:(PFGeoPoint *)southwest toNortheast:(PFGeoPoint *)northeast; - -///-------------------------------------- -/// @name Adding String Constraints -///-------------------------------------- - -/*! - @abstract Add a regular expression constraint for finding string values that match the provided regular expression. - - @warning This may be slow for large datasets. - - @param key The key that the string to match is stored in. - @param regex The regular expression pattern to match. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key matchesRegex:(NSString *)regex; - -/*! - @abstract Add a regular expression constraint for finding string values that match the provided regular expression. - - @warning This may be slow for large datasets. - - @param key The key that the string to match is stored in. - @param regex The regular expression pattern to match. - @param modifiers Any of the following supported PCRE modifiers: - - `i` - Case insensitive search - - `m` - Search across multiple lines of input - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key - matchesRegex:(NSString *)regex - modifiers:(PF_NULLABLE NSString *)modifiers; - -/*! - @abstract Add a constraint for finding string values that contain a provided substring. - - @warning This will be slow for large datasets. - - @param key The key that the string to match is stored in. - @param substring The substring that the value must contain. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key containsString:(PF_NULLABLE NSString *)substring; - -/*! - @abstract Add a constraint for finding string values that start with a provided prefix. - - @discussion This will use smart indexing, so it will be fast for large datasets. - - @param key The key that the string to match is stored in. - @param prefix The substring that the value must start with. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key hasPrefix:(PF_NULLABLE NSString *)prefix; - -/*! - @abstract Add a constraint for finding string values that end with a provided suffix. - - @warning This will be slow for large datasets. - - @param key The key that the string to match is stored in. - @param suffix The substring that the value must end with. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key hasSuffix:(PF_NULLABLE NSString *)suffix; - -///-------------------------------------- -/// @name Adding Subqueries -///-------------------------------------- - -/*! - Returns a `PFQuery` that is the `or` of the passed in queries. - - @param queries The list of queries to or together. - - @returns An instance of `PFQuery` that is the `or` of the passed in queries. - */ -+ (instancetype)orQueryWithSubqueries:(NSArray PF_GENERIC(PFQuery *) *)queries; - -/*! - @abstract Adds a constraint that requires that a key's value matches a value in another key - in objects returned by a sub query. - - @param key The key that the value is stored. - @param otherKey The key in objects in the returned by the sub query whose value should match. - @param query The query to run. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key - matchesKey:(NSString *)otherKey - inQuery:(PFQuery *)query; - -/*! - @abstract Adds a constraint that requires that a key's value `NOT` match a value in another key - in objects returned by a sub query. - - @param key The key that the value is stored. - @param otherKey The key in objects in the returned by the sub query whose value should match. - @param query The query to run. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key - doesNotMatchKey:(NSString *)otherKey - inQuery:(PFQuery *)query; - -/*! - @abstract Add a constraint that requires that a key's value matches a `PFQuery` constraint. - - @warning This only works where the key's values are s or arrays of s. - - @param key The key that the value is stored in - @param query The query the value should match - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key matchesQuery:(PFQuery *)query; - -/*! - @abstract Add a constraint that requires that a key's value to not match a `PFQuery` constraint. - - @warning This only works where the key's values are s or arrays of s. - - @param key The key that the value is stored in - @param query The query the value should not match - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)whereKey:(NSString *)key doesNotMatchQuery:(PFQuery *)query; - -///-------------------------------------- -/// @name Sorting -///-------------------------------------- - -/*! - @abstract Sort the results in *ascending* order with the given key. - - @param key The key to order by. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)orderByAscending:(NSString *)key; - -/*! - @abstract Additionally sort in *ascending* order by the given key. - - @discussion The previous keys provided will precedence over this key. - - @param key The key to order by. - */ -- (instancetype)addAscendingOrder:(NSString *)key; - -/*! - @abstract Sort the results in *descending* order with the given key. - - @param key The key to order by. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)orderByDescending:(NSString *)key; - -/*! - @abstract Additionally sort in *descending* order by the given key. - - @discussion The previous keys provided will precedence over this key. - - @param key The key to order by. - */ -- (instancetype)addDescendingOrder:(NSString *)key; - -/*! - @abstract Sort the results using a given sort descriptor. - - @warning If a `sortDescriptor` has custom `selector` or `comparator` - they aren't going to be used. - - @param sortDescriptor The `NSSortDescriptor` to use to sort the results of the query. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)orderBySortDescriptor:(NSSortDescriptor *)sortDescriptor; - -/*! - @abstract Sort the results using a given array of sort descriptors. - - @warning If a `sortDescriptor` has custom `selector` or `comparator` - they aren't going to be used. - - @param sortDescriptors An array of `NSSortDescriptor` objects to use to sort the results of the query. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)orderBySortDescriptors:(PF_NULLABLE NSArray PF_GENERIC(NSSortDescriptor *) *)sortDescriptors; - -///-------------------------------------- -/// @name Getting Objects by ID -///-------------------------------------- - -/*! - @abstract Returns a with a given class and id. - - @param objectClass The class name for the object that is being requested. - @param objectId The id of the object that is being requested. - - @returns The if found. Returns `nil` if the object isn't found, or if there was an error. - */ -+ (PF_NULLABLE PFGenericObject)getObjectOfClass:(NSString *)objectClass - objectId:(NSString *)objectId PF_SWIFT_UNAVAILABLE; - -/*! - @abstract Returns a with a given class and id and sets an error if necessary. - - @param objectClass The class name for the object that is being requested. - @param objectId The id of the object that is being requested. - @param error Pointer to an `NSError` that will be set if necessary. - - @returns The if found. Returns `nil` if the object isn't found, or if there was an `error`. - */ -+ (PF_NULLABLE PFGenericObject)getObjectOfClass:(NSString *)objectClass - objectId:(NSString *)objectId - error:(NSError **)error; - -/*! - @abstract Returns a with the given id. - - @warning This method mutates the query. - It will reset limit to `1`, skip to `0` and remove all conditions, leaving only `objectId`. - - @param objectId The id of the object that is being requested. - - @returns The if found. Returns nil if the object isn't found, or if there was an error. - */ -- (PF_NULLABLE PFGenericObject)getObjectWithId:(NSString *)objectId PF_SWIFT_UNAVAILABLE; - -/*! - @abstract Returns a with the given id and sets an error if necessary. - - @warning This method mutates the query. - It will reset limit to `1`, skip to `0` and remove all conditions, leaving only `objectId`. - - @param objectId The id of the object that is being requested. - @param error Pointer to an `NSError` that will be set if necessary. - - @returns The if found. Returns nil if the object isn't found, or if there was an error. - */ -- (PF_NULLABLE PFGenericObject)getObjectWithId:(NSString *)objectId error:(NSError **)error; - -/*! - @abstract Gets a asynchronously and calls the given block with the result. - - @warning This method mutates the query. - It will reset limit to `1`, skip to `0` and remove all conditions, leaving only `objectId`. - - @param objectId The id of the object that is being requested. - - @returns The task, that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(PFGenericObject) *)getObjectInBackgroundWithId:(NSString *)objectId; - -/*! - @abstract Gets a asynchronously and calls the given block with the result. - - @warning This method mutates the query. - It will reset limit to `1`, skip to `0` and remove all conditions, leaving only `objectId`. - - @param objectId The id of the object that is being requested. - @param block The block to execute. - The block should have the following argument signature: `^(NSArray *object, NSError *error)` - */ -- (void)getObjectInBackgroundWithId:(NSString *)objectId - block:(PF_NULLABLE void(^)(PFGenericObject PF_NULLABLE_S object, NSError *PF_NULLABLE_S error))block; - -/* - @abstract Gets a asynchronously. - - This mutates the PFQuery. It will reset limit to `1`, skip to `0` and remove all conditions, leaving only `objectId`. - - @param objectId The id of the object being requested. - @param target The target for the callback selector. - @param selector The selector for the callback. - It should have the following signature: `(void)callbackWithResult:(id)result error:(NSError *)error`. - Result will be `nil` if error is set and vice versa. - */ -- (void)getObjectInBackgroundWithId:(NSString *)objectId - target:(PF_NULLABLE_S id)target - selector:(PF_NULLABLE_S SEL)selector; - -///-------------------------------------- -/// @name Getting User Objects -///-------------------------------------- - -/*! - @abstract Returns a with a given id. - - @param objectId The id of the object that is being requested. - - @returns The PFUser if found. Returns nil if the object isn't found, or if there was an error. - */ -+ (PF_NULLABLE PFUser *)getUserObjectWithId:(NSString *)objectId PF_SWIFT_UNAVAILABLE; - -/*! - Returns a PFUser with a given class and id and sets an error if necessary. - @param objectId The id of the object that is being requested. - @param error Pointer to an NSError that will be set if necessary. - @result The PFUser if found. Returns nil if the object isn't found, or if there was an error. - */ -+ (PF_NULLABLE PFUser *)getUserObjectWithId:(NSString *)objectId error:(NSError **)error; - -/*! - @deprecated Please use [PFUser query] instead. - */ -+ (instancetype)queryForUser PARSE_DEPRECATED("Use [PFUser query] instead."); - -///-------------------------------------- -/// @name Getting all Matches for a Query -///-------------------------------------- - -/*! - @abstract Finds objects *synchronously* based on the constructed query. - - @returns Returns an array of objects that were found. - */ -- (PF_NULLABLE NSArray PF_GENERIC(PFGenericObject) *)findObjects PF_SWIFT_UNAVAILABLE; - -/*! - @abstract Finds objects *synchronously* based on the constructed query and sets an error if there was one. - - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns an array of objects that were found. - */ -- (PF_NULLABLE NSArray PF_GENERIC(PFGenericObject) *)findObjects:(NSError **)error; - -/*! - @abstract Finds objects *asynchronously* and sets the `NSArray` of objects as a result of the task. - - @returns The task, that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(NSArray *)*)findObjectsInBackground; - -/*! - @abstract Finds objects *asynchronously* and calls the given block with the results. - - @param block The block to execute. - It should have the following argument signature: `^(NSArray *objects, NSError *error)` - */ -- (void)findObjectsInBackgroundWithBlock:(PF_NULLABLE PFQueryArrayResultBlock)block; - -/* - @abstract Finds objects *asynchronously* and calls the given callback with the results. - - @param target The object to call the selector on. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(id)result error:(NSError *)error`. - Result will be `nil` if error is set and vice versa. - */ -- (void)findObjectsInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; - -///-------------------------------------- -/// @name Getting the First Match in a Query -///-------------------------------------- - -/*! - @abstract Gets an object *synchronously* based on the constructed query. - - @warning This method mutates the query. It will reset the limit to `1`. - - @returns Returns a , or `nil` if none was found. - */ -- (PF_NULLABLE PFGenericObject)getFirstObject PF_SWIFT_UNAVAILABLE; - -/*! - @abstract Gets an object *synchronously* based on the constructed query and sets an error if any occurred. - - @warning This method mutates the query. It will reset the limit to `1`. - - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns a , or `nil` if none was found. - */ -- (PF_NULLABLE PFGenericObject)getFirstObject:(NSError **)error; - -/*! - @abstract Gets an object *asynchronously* and sets it as a result of the task. - - @warning This method mutates the query. It will reset the limit to `1`. - - @returns The task, that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(PFGenericObject) *)getFirstObjectInBackground; - -/*! - @abstract Gets an object *asynchronously* and calls the given block with the result. - - @warning This method mutates the query. It will reset the limit to `1`. - - @param block The block to execute. - It should have the following argument signature: `^(PFObject *object, NSError *error)`. - `result` will be `nil` if `error` is set OR no object was found matching the query. - `error` will be `nil` if `result` is set OR if the query succeeded, but found no results. - */ -- (void)getFirstObjectInBackgroundWithBlock:(PF_NULLABLE void(^)(PFGenericObject PF_NULLABLE_S object, NSError *PF_NULLABLE_S error))block; - -/* - @abstract Gets an object *asynchronously* and calls the given callback with the results. - - @warning This method mutates the query. It will reset the limit to `1`. - - @param target The object to call the selector on. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(PFObject *)result error:(NSError *)error`. - `result` will be `nil` if `error` is set OR no object was found matching the query. - `error` will be `nil` if `result` is set OR if the query succeeded, but found no results. - */ -- (void)getFirstObjectInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; - -///-------------------------------------- -/// @name Counting the Matches in a Query -///-------------------------------------- - -/*! - @abstract Counts objects *synchronously* based on the constructed query. - - @returns Returns the number of objects that match the query, or `-1` if there is an error. - */ -- (NSInteger)countObjects PF_SWIFT_UNAVAILABLE; - -/*! - @abstract Counts objects *synchronously* based on the constructed query and sets an error if there was one. - - @param error Pointer to an `NSError` that will be set if necessary. - - @returns Returns the number of objects that match the query, or `-1` if there is an error. - */ -- (NSInteger)countObjects:(NSError **)error; - -/*! - @abstract Counts objects *asynchronously* and sets `NSNumber` with count as a result of the task. - - @returns The task, that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(NSNumber *)*)countObjectsInBackground; - -/*! - @abstract Counts objects *asynchronously* and calls the given block with the counts. - - @param block The block to execute. - It should have the following argument signature: `^(int count, NSError *error)` - */ -- (void)countObjectsInBackgroundWithBlock:(PF_NULLABLE PFIntegerResultBlock)block; - -/* - @abstract Counts objects *asynchronously* and calls the given callback with the count. - - @param target The object to call the selector on. - @param selector The selector to call. - It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. - */ -- (void)countObjectsInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; - -///-------------------------------------- -/// @name Cancelling a Query -///-------------------------------------- - -/*! - @abstract Cancels the current network request (if any). Ensures that callbacks won't be called. - */ -- (void)cancel; - -///-------------------------------------- -/// @name Paginating Results -///-------------------------------------- - -/*! - @abstract A limit on the number of objects to return. The default limit is `100`, with a - maximum of 1000 results being returned at a time. - - @warning If you are calling `findObjects` with `limit = 1`, you may find it easier to use `getFirst` instead. - */ -@property (nonatomic, assign) NSInteger limit; - -/*! - @abstract The number of objects to skip before returning any. - */ -@property (nonatomic, assign) NSInteger skip; - -///-------------------------------------- -/// @name Controlling Caching Behavior -///-------------------------------------- - -/*! - @abstract The cache policy to use for requests. - - Not allowed when Pinning is enabled. - - @see fromLocalDatastore - @see fromPin - @see fromPinWithName: - */ -@property (assign, readwrite) PFCachePolicy cachePolicy; - -/*! - @abstract The age after which a cached value will be ignored - */ -@property (assign, readwrite) NSTimeInterval maxCacheAge; - -/*! - @abstract Returns whether there is a cached result for this query. - - @result `YES` if there is a cached result for this query, otherwise `NO`. - */ -- (BOOL)hasCachedResult; - -/*! - @abstract Clears the cached result for this query. If there is no cached result, this is a noop. - */ -- (void)clearCachedResult; - -/*! - @abstract Clears the cached results for all queries. - */ -+ (void)clearAllCachedResults; - -///-------------------------------------- -/// @name Query Source -///-------------------------------------- - -/*! - @abstract Change the source of this query to all pinned objects. - - @warning Requires Local Datastore to be enabled. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - - @see cachePolicy - */ -- (instancetype)fromLocalDatastore; - -/*! - @abstract Change the source of this query to the default group of pinned objects. - - @warning Requires Local Datastore to be enabled. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - - @see PFObjectDefaultPin - @see cachePolicy - */ -- (instancetype)fromPin; - -/*! - @abstract Change the source of this query to a specific group of pinned objects. - - @warning Requires Local Datastore to be enabled. - - @param name The pinned group. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - - @see PFObjectDefaultPin - @see cachePolicy - */ -- (instancetype)fromPinWithName:(PF_NULLABLE NSString *)name; - -/*! - @abstract Ignore ACLs when querying from the Local Datastore. - - @discussion This is particularly useful when querying for objects with Role based ACLs set on them. - - @warning Requires Local Datastore to be enabled. - - @returns The same instance of `PFQuery` as the receiver. This allows method chaining. - */ -- (instancetype)ignoreACLs; - -///-------------------------------------- -/// @name Advanced Settings -///-------------------------------------- - -/*! - @abstract Whether or not performance tracing should be done on the query. - - @warning This should not be set to `YES` in most cases. - */ -@property (nonatomic, assign) BOOL trace; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFQuery.m b/FoodbLog/Pods/Parse/Parse/PFQuery.m deleted file mode 100644 index 0fb3995..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFQuery.m +++ /dev/null @@ -1,1136 +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. - */ - -#import "PFQuery.h" - -#import -#import - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFCommandResult.h" -#import "PFCoreManager.h" -#import "PFCurrentUserController.h" -#import "PFGeoPointPrivate.h" -#import "PFInternalUtils.h" -#import "PFKeyValueCache.h" -#import "PFMutableQueryState.h" -#import "PFObject.h" -#import "PFObjectPrivate.h" -#import "PFOfflineStore.h" -#import "PFPin.h" -#import "PFQueryController.h" -#import "PFQueryUtilities.h" -#import "PFRESTQueryCommand.h" -#import "PFUserPrivate.h" -#import "ParseInternal.h" -#import "Parse_Private.h" - -NSString *const PFQueryKeyNotEqualTo = @"$ne"; -NSString *const PFQueryKeyLessThan = @"$lt"; -NSString *const PFQueryKeyLessThanEqualTo = @"$lte"; -NSString *const PFQueryKeyGreaterThan = @"$gt"; -NSString *const PFQueryKeyGreaterThanOrEqualTo = @"$gte"; -NSString *const PFQueryKeyContainedIn = @"$in"; -NSString *const PFQueryKeyNotContainedIn = @"$nin"; -NSString *const PFQueryKeyContainsAll = @"$all"; -NSString *const PFQueryKeyNearSphere = @"$nearSphere"; -NSString *const PFQueryKeyWithin = @"$within"; -NSString *const PFQueryKeyRegex = @"$regex"; -NSString *const PFQueryKeyExists = @"$exists"; -NSString *const PFQueryKeyInQuery = @"$inQuery"; -NSString *const PFQueryKeyNotInQuery = @"$notInQuery"; -NSString *const PFQueryKeySelect = @"$select"; -NSString *const PFQueryKeyDontSelect = @"$dontSelect"; -NSString *const PFQueryKeyRelatedTo = @"$relatedTo"; -NSString *const PFQueryKeyOr = @"$or"; -NSString *const PFQueryKeyQuery = @"query"; -NSString *const PFQueryKeyKey = @"key"; -NSString *const PFQueryKeyObject = @"object"; - -NSString *const PFQueryOptionKeyMaxDistance = @"$maxDistance"; -NSString *const PFQueryOptionKeyBox = @"$box"; -NSString *const PFQueryOptionKeyRegexOptions = @"$options"; - -/*! - Checks if an object can be used as value for query equality clauses. - */ -static void PFQueryAssertValidEqualityClauseClass(id object) { - static NSArray *classes; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - classes = @[ [NSString class], [NSNumber class], [NSDate class], [NSNull class], - [PFObject class], [PFGeoPoint class] ]; - }); - - for (Class class in classes) { - if ([object isKindOfClass:class]) { - return; - } - } - - PFParameterAssert(NO, @"Cannot do a comparison query for type: %@", [object class]); -} - -/*! - Checks if an object can be used as value for query ordering clauses. - */ -static void PFQueryAssertValidOrderingClauseClass(id object) { - static NSArray *classes; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - classes = @[ [NSString class], [NSNumber class], [NSDate class] ]; - }); - - for (Class class in classes) { - if ([object isKindOfClass:class]) { - return; - } - } - - PFParameterAssert(NO, @"Cannot do a query that requires ordering for type: %@", [object class]); -} - -@interface PFQuery () { - BFCancellationTokenSource *_cancellationTokenSource; -} - -@property (nonatomic, strong, readwrite) PFMutableQueryState *state; - -@end - -@implementation PFQuery - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithState:(PFQueryState *)state { - self = [super init]; - if (!self) return nil; - - _state = [state mutableCopy]; - - return self; -} - -- (instancetype)initWithClassName:(NSString *)className { - self = [super init]; - if (!self) return nil; - - _state = [PFMutableQueryState stateWithParseClassName:className]; - - return self; -} - -///-------------------------------------- -#pragma mark - Public Accessors -///-------------------------------------- - -#pragma mark Basic - -- (NSString *)parseClassName { - return self.state.parseClassName; -} - -- (void)setParseClassName:(NSString *)parseClassName { - [self checkIfCommandIsRunning]; - self.state.parseClassName = parseClassName; -} - -#pragma mark Limit - -- (void)setLimit:(NSInteger)limit { - self.state.limit = limit; -} - -- (NSInteger)limit { - return self.state.limit; -} - -#pragma mark Skip - -- (void)setSkip:(NSInteger)skip { - self.state.skip = skip; -} - -- (NSInteger)skip { - return self.state.skip; -} - -#pragma mark Cache Policy - -- (void)setCachePolicy:(PFCachePolicy)cachePolicy { - [self _checkPinningEnabled:NO]; - [self checkIfCommandIsRunning]; - - self.state.cachePolicy = cachePolicy; -} - -- (PFCachePolicy)cachePolicy { - [self _checkPinningEnabled:NO]; - [self checkIfCommandIsRunning]; - - return self.state.cachePolicy; -} - -#pragma mark Cache Policy - -- (void)setMaxCacheAge:(NSTimeInterval)maxCacheAge { - self.state.maxCacheAge = maxCacheAge; -} - -- (NSTimeInterval)maxCacheAge { - return self.state.maxCacheAge; -} - -#pragma mark Trace - -- (void)setTrace:(BOOL)trace { - self.state.trace = trace; -} - -- (BOOL)trace { - return self.state.trace; -} - -///-------------------------------------- -#pragma mark - Order -///-------------------------------------- - -- (instancetype)orderByAscending:(NSString *)key { - [self checkIfCommandIsRunning]; - [self.state sortByKey:key ascending:YES]; - return self; -} - -- (instancetype)addAscendingOrder:(NSString *)key { - [self checkIfCommandIsRunning]; - [self.state addSortKey:key ascending:YES]; - return self; -} - -- (instancetype)orderByDescending:(NSString *)key { - [self checkIfCommandIsRunning]; - [self.state sortByKey:key ascending:NO]; - return self; -} - -- (instancetype)addDescendingOrder:(NSString *)key { - [self checkIfCommandIsRunning]; - [self.state addSortKey:key ascending:NO]; - return self; -} - -- (instancetype)orderBySortDescriptor:(NSSortDescriptor *)sortDescriptor { - NSString *key = sortDescriptor.key; - if (key) { - if (sortDescriptor.ascending) { - [self orderByAscending:key]; - } else { - [self orderByDescending:key]; - } - } - return self; -} - -- (instancetype)orderBySortDescriptors:(NSArray *)sortDescriptors { - [self.state addSortKeysFromSortDescriptors:sortDescriptors]; - return self; -} - -///-------------------------------------- -#pragma mark - Conditions -///-------------------------------------- - -// Helper for condition queries. -- (instancetype)whereKey:(NSString *)key condition:(NSString *)condition object:(id)object { - [self checkIfCommandIsRunning]; - [self.state setConditionType:condition withObject:object forKey:key]; - return self; -} - -- (instancetype)whereKey:(NSString *)key equalTo:(id)object { - [self checkIfCommandIsRunning]; - PFQueryAssertValidEqualityClauseClass(object); - [self.state setEqualityConditionWithObject:object forKey:key]; - return self; -} - -- (instancetype)whereKey:(NSString *)key greaterThan:(id)object { - PFQueryAssertValidOrderingClauseClass(object); - return [self whereKey:key condition:PFQueryKeyGreaterThan object:object]; -} - -- (instancetype)whereKey:(NSString *)key greaterThanOrEqualTo:(id)object { - PFQueryAssertValidOrderingClauseClass(object); - return [self whereKey:key condition:PFQueryKeyGreaterThanOrEqualTo object:object]; -} - -- (instancetype)whereKey:(NSString *)key lessThan:(id)object { - PFQueryAssertValidOrderingClauseClass(object); - return [self whereKey:key condition:PFQueryKeyLessThan object:object]; -} - -- (instancetype)whereKey:(NSString *)key lessThanOrEqualTo:(id)object { - PFQueryAssertValidOrderingClauseClass(object); - return [self whereKey:key condition:PFQueryKeyLessThanEqualTo object:object]; -} - -- (instancetype)whereKey:(NSString *)key notEqualTo:(id)object { - PFQueryAssertValidEqualityClauseClass(object); - return [self whereKey:key condition:PFQueryKeyNotEqualTo object:object]; -} - -- (instancetype)whereKey:(NSString *)key containedIn:(NSArray *)inArray { - return [self whereKey:key condition:PFQueryKeyContainedIn object:inArray]; -} - -- (instancetype)whereKey:(NSString *)key notContainedIn:(NSArray *)inArray { - return [self whereKey:key condition:PFQueryKeyNotContainedIn object:inArray]; -} - -- (instancetype)whereKey:(NSString *)key containsAllObjectsInArray:(NSArray *)array { - return [self whereKey:key condition:PFQueryKeyContainsAll object:array]; -} - -- (instancetype)whereKey:(NSString *)key nearGeoPoint:(PFGeoPoint *)geopoint { - return [self whereKey:key condition:PFQueryKeyNearSphere object:geopoint]; -} - -- (instancetype)whereKey:(NSString *)key nearGeoPoint:(PFGeoPoint *)geopoint withinRadians:(double)maxDistance { - return [[self whereKey:key condition:PFQueryKeyNearSphere object:geopoint] - whereKey:key condition:PFQueryOptionKeyMaxDistance object:@(maxDistance)]; -} - -- (instancetype)whereKey:(NSString *)key nearGeoPoint:(PFGeoPoint *)geopoint withinMiles:(double)maxDistance { - return [self whereKey:key nearGeoPoint:geopoint withinRadians:(maxDistance/EARTH_RADIUS_MILES)]; -} - -- (instancetype)whereKey:(NSString *)key nearGeoPoint:(PFGeoPoint *)geopoint withinKilometers:(double)maxDistance { - return [self whereKey:key nearGeoPoint:geopoint withinRadians:(maxDistance/EARTH_RADIUS_KILOMETERS)]; -} - -- (instancetype)whereKey:(NSString *)key withinGeoBoxFromSouthwest:(PFGeoPoint *)southwest toNortheast:(PFGeoPoint *)northeast { - NSArray *array = @[ southwest, northeast ]; - NSDictionary *dictionary = @{ PFQueryOptionKeyBox : array }; - return [self whereKey:key condition:PFQueryKeyWithin object:dictionary]; -} - -- (instancetype)whereKey:(NSString *)key matchesRegex:(NSString *)regex { - return [self whereKey:key condition:PFQueryKeyRegex object:regex]; -} - -- (instancetype)whereKey:(NSString *)key matchesRegex:(NSString *)regex modifiers:(NSString *)modifiers { - [self checkIfCommandIsRunning]; - NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:2]; - dictionary[PFQueryKeyRegex] = regex; - if ([modifiers length]) { - dictionary[PFQueryOptionKeyRegexOptions] = modifiers; - } - [self.state setEqualityConditionWithObject:dictionary forKey:key]; - return self; -} - -- (instancetype)whereKey:(NSString *)key containsString:(NSString *)substring { - NSString *regex = [PFQueryUtilities regexStringForString:substring]; - return [self whereKey:key matchesRegex:regex]; -} - -- (instancetype)whereKey:(NSString *)key hasPrefix:(NSString *)prefix { - NSString *regex = [NSString stringWithFormat:@"^%@", [PFQueryUtilities regexStringForString:prefix]]; - return [self whereKey:key matchesRegex:regex]; -} - -- (instancetype)whereKey:(NSString *)key hasSuffix:(NSString *)suffix { - NSString *regex = [NSString stringWithFormat:@"%@$", [PFQueryUtilities regexStringForString:suffix]]; - return [self whereKey:key matchesRegex:regex]; -} - -- (instancetype)whereKeyExists:(NSString *)key { - return [self whereKey:key condition:PFQueryKeyExists object:@YES]; -} - -- (instancetype)whereKeyDoesNotExist:(NSString *)key { - return [self whereKey:key condition:PFQueryKeyExists object:@NO]; -} - -- (instancetype)whereKey:(NSString *)key matchesQuery:(PFQuery *)query { - return [self whereKey:key condition:PFQueryKeyInQuery object:query]; -} - -- (instancetype)whereKey:(NSString *)key doesNotMatchQuery:(PFQuery *)query { - return [self whereKey:key condition:PFQueryKeyNotInQuery object:query]; -} - -- (instancetype)whereKey:(NSString *)key matchesKey:(NSString *)otherKey inQuery:(PFQuery *)query { - NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:2]; - dict[PFQueryKeyQuery] = query; - dict[PFQueryKeyKey] = otherKey; - return [self whereKey:key condition:PFQueryKeySelect object:dict]; -} - -- (instancetype)whereKey:(NSString *)key doesNotMatchKey:(NSString *)otherKey inQuery:(PFQuery *)query { - NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:2]; - dict[PFQueryKeyQuery] = query; - dict[PFQueryKeyKey] = otherKey; - return [self whereKey:key condition:PFQueryKeyDontSelect object:dict]; -} - -- (instancetype)whereRelatedToObject:(PFObject *)parent fromKey:(NSString *)key { - [self.state setRelationConditionWithObject:parent forKey:key]; - return self; -} - -- (void)redirectClassNameForKey:(NSString *)key { - [self.state redirectClassNameForKey:key]; -} - -///-------------------------------------- -#pragma mark - Include -///-------------------------------------- - -- (instancetype)includeKey:(NSString *)key { - [self checkIfCommandIsRunning]; - [self.state includeKey:key]; - return self; -} - -///-------------------------------------- -#pragma mark - Select -///-------------------------------------- - -- (instancetype)selectKeys:(NSArray *)keys { - [self checkIfCommandIsRunning]; - [self.state selectKeys:keys]; - return self; -} - -///-------------------------------------- -#pragma mark - NSPredicate helper methods -///-------------------------------------- - -+ (void)assertKeyPathConstant:(NSComparisonPredicate *)predicate { - PFConsistencyAssert(predicate.leftExpression.expressionType == NSKeyPathExpressionType && - predicate.rightExpression.expressionType == NSConstantValueExpressionType, - @"This predicate must have a key path and a constant. %@", predicate); -} - -// Adds the conditions from an NSComparisonPredicate to a PFQuery. -- (void)whereComparisonPredicate:(NSComparisonPredicate *)predicate { - NSExpression *left = predicate.leftExpression; - NSExpression *right = predicate.rightExpression; - - switch (predicate.predicateOperatorType) { - case NSEqualToPredicateOperatorType: { - [[self class] assertKeyPathConstant:predicate]; - [self whereKey:left.keyPath equalTo:(right.constantValue ?: [NSNull null])]; - return; - } - case NSNotEqualToPredicateOperatorType: { - [[self class] assertKeyPathConstant:predicate]; - [self whereKey:left.keyPath notEqualTo:(right.constantValue ?: [NSNull null])]; - return; - } - case NSLessThanPredicateOperatorType: { - [[self class] assertKeyPathConstant:predicate]; - [self whereKey:left.keyPath lessThan:right.constantValue]; - return; - } - case NSLessThanOrEqualToPredicateOperatorType: { - [[self class] assertKeyPathConstant:predicate]; - [self whereKey:left.keyPath lessThanOrEqualTo:right.constantValue]; - return; - } - case NSGreaterThanPredicateOperatorType: { - [[self class] assertKeyPathConstant:predicate]; - [self whereKey:left.keyPath greaterThan:right.constantValue]; - return; - } - case NSGreaterThanOrEqualToPredicateOperatorType: { - [[self class] assertKeyPathConstant:predicate]; - [self whereKey:left.keyPath greaterThanOrEqualTo:right.constantValue]; - return; - } - case NSInPredicateOperatorType: { - if (left.expressionType == NSKeyPathExpressionType && - right.expressionType == NSConstantValueExpressionType) { - if ([right.constantValue isKindOfClass:[PFQuery class]]) { - // Like "value IN subquery - [self whereKey:left.keyPath matchesQuery:right.constantValue]; - } else { - // Like "value IN %@", @{@1, @2, @3, @4} - [self whereKey:left.keyPath containedIn:right.constantValue]; - } - } else if (left.expressionType == NSKeyPathExpressionType && - right.expressionType == NSAggregateExpressionType && - [right.constantValue isKindOfClass:[NSArray class]]) { - // Like "value IN {1, 2, 3, 4}" - NSArray *constants = right.constantValue; - NSMutableArray *values = [NSMutableArray arrayWithCapacity:constants.count]; - for (NSExpression *expression in constants) { - [values addObject:expression.constantValue]; - } - [self whereKey:left.keyPath containedIn:values]; - } else if (right.expressionType == NSEvaluatedObjectExpressionType && - left.expressionType == NSKeyPathExpressionType) { - // Like "value IN SELF" - [self whereKeyExists:left.keyPath]; - } else { - [NSException raise:NSInternalInconsistencyException - format:@"An IN predicate must have a key path and a constant."]; - } - return; - } - case NSCustomSelectorPredicateOperatorType: { - if (predicate.customSelector != NSSelectorFromString(@"notContainedIn:")) { - [NSException raise:NSInternalInconsistencyException - format:@"Predicates with custom selectors are not supported."]; - } - - if (right.expressionType == NSConstantValueExpressionType && - left.expressionType == NSKeyPathExpressionType) { - if ([right.constantValue isKindOfClass:[PFQuery class]]) { - // Like "NOT (value IN subquery)" - [self whereKey:left.keyPath doesNotMatchQuery:right.constantValue]; - } else { - // Like "NOT (value in %@)", @{@1, @2, @3} - [self whereKey:left.keyPath notContainedIn:right.constantValue]; - } - } else if (left.expressionType == NSKeyPathExpressionType && - right.expressionType == NSAggregateExpressionType && - [right.constantValue isKindOfClass:[NSArray class]]) { - // Like "NOT (value IN {1, 2, 3, 4})" - NSArray *constants = right.constantValue; - NSMutableArray *values = [NSMutableArray arrayWithCapacity:constants.count]; - for (NSExpression *expression in constants) { - [values addObject:expression.constantValue]; - } - [self whereKey:left.keyPath notContainedIn:values]; - } else if (right.expressionType == NSEvaluatedObjectExpressionType && - left.expressionType == NSKeyPathExpressionType) { - // Like "NOT (value IN SELF)" - [self whereKeyDoesNotExist:left.keyPath]; - } else { - [NSException raise:NSInternalInconsistencyException - format:@"A NOT IN predicate must have a key path and a constant array."]; - } - return; - } - case NSBeginsWithPredicateOperatorType: { - [[self class] assertKeyPathConstant:predicate]; - [self whereKey:left.keyPath hasPrefix:right.constantValue]; - return; - } - case NSContainsPredicateOperatorType: { - [NSException raise:NSInternalInconsistencyException - format:@"Regex queries are not supported with " - "[PFQuery queryWithClassName:predicate:]. Please try to structure your " - "data so that you can use an equalTo or containedIn query."]; - } - case NSEndsWithPredicateOperatorType: { - [NSException raise:NSInternalInconsistencyException - format:@"Regex queries are not supported with " - "[PFQuery queryWithClassName:predicate:]. Please try to structure your " - "data so that you can use an equalTo or containedIn query."]; - } - case NSMatchesPredicateOperatorType: { - [NSException raise:NSInternalInconsistencyException - format:@"Regex queries are not supported with " - "[PFQuery queryWithClassName:predicate:]. Please try to structure your " - "data so that you can use an equalTo or containedIn query."]; - } - case NSLikePredicateOperatorType: { - [NSException raise:NSInternalInconsistencyException - format:@"LIKE is not supported by PFQuery."]; - } - default: { - [NSException raise:NSInternalInconsistencyException - format:@"This comparison predicate is not supported. (%zd)", predicate.predicateOperatorType]; - } - } -} - -/*! - Creates a PFQuery with the constraints given by predicate. - This method assumes the predicate has already been normalized. - */ -+ (instancetype)queryWithClassName:(NSString *)className normalizedPredicate:(NSPredicate *)predicate { - if ([predicate isKindOfClass:[NSComparisonPredicate class]]) { - PFQuery *query = [self queryWithClassName:className]; - [query whereComparisonPredicate:(NSComparisonPredicate *)predicate]; - return query; - } else if ([predicate isKindOfClass:[NSCompoundPredicate class]]) { - NSCompoundPredicate *compound = (NSCompoundPredicate *)predicate; - switch (compound.compoundPredicateType) { - case NSAndPredicateType: { - PFQuery *query = nil; - NSMutableArray *subpredicates = [NSMutableArray array]; - // If there's an OR query in here, we'll start with it. - for (NSPredicate *subpredicate in compound.subpredicates) { - if ([subpredicate isKindOfClass:[NSCompoundPredicate class]] && - ((NSCompoundPredicate *)subpredicate).compoundPredicateType == NSOrPredicateType) { - if (query) { - [NSException raise:NSInternalInconsistencyException - format:@"A query had 2 ORs in an AND after normalization. %@", - predicate]; - } - query = [self queryWithClassName:className normalizedPredicate:subpredicate]; - } else { - [subpredicates addObject:subpredicate]; - } - } - // If there was no OR query, then start with an empty query. - if (!query) { - query = [self queryWithClassName:className]; - } - for (NSPredicate *subpredicate in subpredicates) { - if (![subpredicate isKindOfClass:[NSComparisonPredicate class]]) { - // This should never happen. - [NSException raise:NSInternalInconsistencyException - format:@"A predicate had a non-comparison predicate inside an AND " - "after normalization. %@", predicate]; - } - NSComparisonPredicate *comparison = (NSComparisonPredicate *)subpredicate; - [query whereComparisonPredicate:comparison]; - } - return query; - } - case NSOrPredicateType: { - NSMutableArray *subqueries = [NSMutableArray arrayWithCapacity:compound.subpredicates.count]; - if (compound.subpredicates.count > 4) { - [NSException raise:NSInternalInconsistencyException - format:@"This query is too complex. It had an OR with >4 subpredicates " - "after normalization."]; - } - for (NSPredicate *subpredicate in compound.subpredicates) { - [subqueries addObject:[self queryWithClassName:className normalizedPredicate:subpredicate]]; - } - return [self orQueryWithSubqueries:subqueries]; - } - default: { - // This should never happen. - [NSException raise:NSInternalInconsistencyException - format:@"A predicate had a NOT after normalization. %@", predicate]; - return nil; - } - } - } else { - [NSException raise:NSInternalInconsistencyException format:@"Unknown predicate type."]; - return nil; - } -} - -///-------------------------------------- -#pragma mark - Helpers -///-------------------------------------- - -- (void)checkIfCommandIsRunning { - @synchronized (self) { - if (_cancellationTokenSource) { - [NSException raise:NSInternalInconsistencyException - format:@"This query has an outstanding network connection. You have to wait until it's done."]; - } - } -} - -- (void)markAsRunning:(BFCancellationTokenSource *)source { - [self checkIfCommandIsRunning]; - @synchronized (self) { - _cancellationTokenSource = source; - } -} - -///-------------------------------------- -#pragma mark - Constructors -///-------------------------------------- - -+ (instancetype)queryWithClassName:(NSString *)className { - return [[self alloc] initWithClassName:className]; -} - -+ (instancetype)queryWithClassName:(NSString *)className predicate:(NSPredicate *)predicate { - if (!predicate) { - return [self queryWithClassName:className]; - } - - NSPredicate *normalizedPredicate = [PFQueryUtilities predicateByNormalizingPredicate:predicate]; - return [self queryWithClassName:className normalizedPredicate:normalizedPredicate]; -} - -+ (instancetype)orQueryWithSubqueries:(NSArray *)queries { - NSMutableArray *array = [NSMutableArray array]; - NSString *className = nil; - for (id object in queries) { - PFParameterAssert([object isKindOfClass:[PFQuery class]], - @"All elements should be instances of `PFQuery` class."); - - PFQuery *query = (PFQuery *)object; - if (!className) { - className = query.parseClassName; - } else { - PFParameterAssert([query.parseClassName isEqualToString:className], - @"All sub queries of an `or` query should be on the same class."); - } - - [array addObject:query]; - } - PFQuery *query = [self queryWithClassName:className]; - [query.state setEqualityConditionWithObject:array forKey:PFQueryKeyOr]; - return query; -} - -///-------------------------------------- -#pragma mark - Get with objectId -///-------------------------------------- - -+ (PFObject *)getObjectOfClass:(NSString *)objectClass objectId:(NSString *)objectId { - return [self getObjectOfClass:objectClass objectId:objectId error:nil]; -} - -+ (PFObject *)getObjectOfClass:(NSString *)objectClass - objectId:(NSString *)objectId - error:(NSError **)error { - PFQuery *query = [self queryWithClassName:objectClass]; - return [query getObjectWithId:objectId error:error]; -} - -// TODO (hallucinogen): we may want to remove this in 2.0 since we can just use the static counterpart -- (PFObject *)getObjectWithId:(NSString *)objectId { - return [self getObjectWithId:objectId error:nil]; -} - -- (PFObject *)getObjectWithId:(NSString *)objectId error:(NSError **)error { - return [[self getObjectInBackgroundWithId:objectId] waitForResult:error]; -} - -- (BFTask *)getObjectInBackgroundWithId:(NSString *)objectId { - if ([objectId length] == 0) { - return [BFTask taskWithResult:nil]; - } - - PFConsistencyAssert(self.state.cachePolicy != kPFCachePolicyCacheThenNetwork, - @"kPFCachePolicyCacheThenNetwork can only be used with methods that have a callback."); - return [self _getObjectWithIdAsync:objectId cachePolicy:self.state.cachePolicy after:nil]; -} - -- (void)getObjectInBackgroundWithId:(NSString *)objectId block:(PFObjectResultBlock)block { - @synchronized (self) { - if (!self.state.queriesLocalDatastore && self.state.cachePolicy == kPFCachePolicyCacheThenNetwork) { - BFTask *cacheTask = [[self _getObjectWithIdAsync:objectId - cachePolicy:kPFCachePolicyCacheOnly - after:nil] thenCallBackOnMainThreadAsync:block]; - [[self _getObjectWithIdAsync:objectId - cachePolicy:kPFCachePolicyNetworkOnly - after:cacheTask] thenCallBackOnMainThreadAsync:block]; - } else { - [[self getObjectInBackgroundWithId:objectId] thenCallBackOnMainThreadAsync:block]; - } - } -} - -- (void)getObjectInBackgroundWithId:(NSString *)objectId target:(id)target selector:(SEL)selector { - [self getObjectInBackgroundWithId:objectId block:^(PFObject *object, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:object object:error]; - }]; -} - -- (BFTask *)_getObjectWithIdAsync:(NSString *)objectId cachePolicy:(PFCachePolicy)cachePolicy after:(BFTask *)task { - self.limit = 1; - self.skip = 0; - [self.state removeAllConditions]; - [self.state setEqualityConditionWithObject:objectId forKey:@"objectId"]; - - PFQueryState *state = [self _queryStateCopyWithCachePolicy:cachePolicy]; - return [[self _findObjectsAsyncForQueryState:state - after:task] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *objects = task.result; - if (objects.count == 0) { - return [BFTask taskWithError:[PFQueryUtilities objectNotFoundError]]; - } - - return [BFTask taskWithResult:objects.lastObject]; - }]; -} - -///-------------------------------------- -#pragma mark - Get Users (Deprecated) -///-------------------------------------- - -+ (PFUser *)getUserObjectWithId:(NSString *)objectId { - return [self getUserObjectWithId:objectId error:nil]; -} - -+ (PFUser *)getUserObjectWithId:(NSString *)objectId error:(NSError **)error { - PFQuery *query = [PFUser query]; - PFUser *object = (PFUser *)[query getObjectWithId:objectId error:error]; - - return object; -} - -+ (instancetype)queryForUser { - return [PFUser query]; -} - -///-------------------------------------- -#pragma mark - Find Objects -///-------------------------------------- - -- (NSArray *)findObjects { - return [self findObjects:nil]; -} - -- (NSArray *)findObjects:(NSError **)error { - return [[self findObjectsInBackground] waitForResult:error]; -} - -- (BFTask *)findObjectsInBackground { - PFQueryState *state = [self _queryStateCopy]; - - PFConsistencyAssert(state.cachePolicy != kPFCachePolicyCacheThenNetwork, - @"kPFCachePolicyCacheThenNetwork can only be used with methods that have a callback."); - return [self _findObjectsAsyncForQueryState:state after:nil]; -} - -- (void)findObjectsInBackgroundWithBlock:(PFQueryArrayResultBlock)block { - @synchronized (self) { - if (!self.state.queriesLocalDatastore && self.state.cachePolicy == kPFCachePolicyCacheThenNetwork) { - PFQueryState *cacheQueryState = [self _queryStateCopyWithCachePolicy:kPFCachePolicyCacheOnly]; - BFTask *cacheTask = [[self _findObjectsAsyncForQueryState:cacheQueryState - after:nil] thenCallBackOnMainThreadAsync:block]; - - PFQueryState *remoteQueryState = [self _queryStateCopyWithCachePolicy:kPFCachePolicyNetworkOnly]; - [[self _findObjectsAsyncForQueryState:remoteQueryState - after:cacheTask] thenCallBackOnMainThreadAsync:block]; - } else { - [[self findObjectsInBackground] thenCallBackOnMainThreadAsync:block]; - } - } -} - -- (void)findObjectsInBackgroundWithTarget:(id)target selector:(SEL)selector { - [self findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:objects object:error]; - }]; -} - -- (BFTask *)_findObjectsAsyncForQueryState:(PFQueryState *)queryState after:(BFTask *)previous { - BFCancellationTokenSource *cancellationTokenSource = _cancellationTokenSource; - if (!previous) { - cancellationTokenSource = [BFCancellationTokenSource cancellationTokenSource]; - [self markAsRunning:cancellationTokenSource]; - } - - BFTask *start = (previous ?: [BFTask taskWithResult:nil]); - - [self _validateQueryState]; - @weakify(self); - return [[[start continueWithBlock:^id(BFTask *task) { - @strongify(self); - return [[self class] _getCurrentUserForQueryState:queryState]; - }] continueWithBlock:^id(BFTask *task) { - @strongify(self); - PFUser *user = task.result; - return [[[self class] queryController] findObjectsAsyncForQueryState:queryState - withCancellationToken:cancellationTokenSource.token - user:user]; - }] continueWithBlock:^id(BFTask *task) { - @strongify(self); - if (!self) { - return task; - } - @synchronized (self) { - if (_cancellationTokenSource == cancellationTokenSource) { - _cancellationTokenSource = nil; - } - } - return task; - }]; -} - -///-------------------------------------- -#pragma mark - Get Object -///-------------------------------------- - -- (PFObject *)getFirstObject { - return [self getFirstObject:nil]; -} - -- (PFObject *)getFirstObject:(NSError **)error { - return [[self getFirstObjectInBackground] waitForResult:error]; -} - -- (BFTask *)getFirstObjectInBackground { - PFConsistencyAssert(self.state.cachePolicy != kPFCachePolicyCacheThenNetwork, - @"kPFCachePolicyCacheThenNetwork can only be used with methods that have a callback."); - return [self _getFirstObjectAsyncWithCachePolicy:self.state.cachePolicy after:nil]; -} - -- (void)getFirstObjectInBackgroundWithBlock:(PFObjectResultBlock)block { - @synchronized (self) { - if (!self.state.queriesLocalDatastore && self.state.cachePolicy == kPFCachePolicyCacheThenNetwork) { - BFTask *cacheTask = [[self _getFirstObjectAsyncWithCachePolicy:kPFCachePolicyCacheOnly - after:nil] thenCallBackOnMainThreadAsync:block]; - [[self _getFirstObjectAsyncWithCachePolicy:kPFCachePolicyNetworkOnly - after:cacheTask] thenCallBackOnMainThreadAsync:block]; - } else { - [[self getFirstObjectInBackground] thenCallBackOnMainThreadAsync:block]; - } - } -} - -- (void)getFirstObjectInBackgroundWithTarget:(id)target selector:(SEL)selector { - [self getFirstObjectInBackgroundWithBlock:^(PFObject *result, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:result object:error]; - }]; -} - -- (BFTask *)_getFirstObjectAsyncWithCachePolicy:(PFCachePolicy)cachePolicy after:(BFTask *)task { - self.limit = 1; - - PFQueryState *state = [self _queryStateCopyWithCachePolicy:cachePolicy]; - return [[self _findObjectsAsyncForQueryState:state after:task] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *objects = task.result; - if (objects.count == 0) { - return [BFTask taskWithError:[PFQueryUtilities objectNotFoundError]]; - } - - return [BFTask taskWithResult:objects.lastObject]; - }]; -} - -///-------------------------------------- -#pragma mark - Count Objects -///-------------------------------------- - -- (NSInteger)countObjects { - return [self countObjects:nil]; -} - -- (NSInteger)countObjects:(NSError **)error { - NSNumber *count = [[self countObjectsInBackground] waitForResult:error]; - if (!count) { - // TODO: (nlutsenko) It's really weird that we are inconsistent in sync vs async methods. - // Leaving for now since some devs might be relying on this. - return -1; - } - - return [count integerValue]; -} - -- (BFTask *)countObjectsInBackground { - PFConsistencyAssert(self.state.cachePolicy != kPFCachePolicyCacheThenNetwork, - @"kPFCachePolicyCacheThenNetwork can only be used with methods that have a callback."); - return [self _countObjectsAsyncForQueryState:[self _queryStateCopy] after:nil]; -} - -- (void)countObjectsInBackgroundWithTarget:(id)target selector:(SEL)selector { - [self countObjectsInBackgroundWithBlock:^(int number, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:@(number) object:error]; - }]; -} - -- (void)countObjectsInBackgroundWithBlock:(PFIntegerResultBlock)block { - PFIdResultBlock callback = nil; - if (block) { - callback = ^(id result, NSError *error) { - block([result intValue], error); - }; - } - - @synchronized (self) { - if (!self.state.queriesLocalDatastore && self.state.cachePolicy == kPFCachePolicyCacheThenNetwork) { - PFQueryState *cacheQueryState = [self _queryStateCopyWithCachePolicy:kPFCachePolicyCacheOnly]; - BFTask *cacheTask = [[self _countObjectsAsyncForQueryState:cacheQueryState - after:nil] thenCallBackOnMainThreadAsync:callback]; - - PFQueryState *remoteQueryState = [self _queryStateCopyWithCachePolicy:kPFCachePolicyNetworkOnly]; - [[self _countObjectsAsyncForQueryState:remoteQueryState - after:cacheTask] thenCallBackOnMainThreadAsync:callback]; - } else { - [[self countObjectsInBackground] thenCallBackOnMainThreadAsync:callback]; - } - } -} - -- (BFTask *)_countObjectsAsyncForQueryState:(PFQueryState *)queryState after:(BFTask *)previousTask { - BFCancellationTokenSource *cancellationTokenSource = _cancellationTokenSource; - if (!previousTask) { - cancellationTokenSource = [BFCancellationTokenSource cancellationTokenSource]; - [self markAsRunning:cancellationTokenSource]; - } - - BFTask *start = (previousTask ?: [BFTask taskWithResult:nil]); - - [self _validateQueryState]; - @weakify(self); - return [[[start continueWithBlock:^id(BFTask *task) { - return [[self class] _getCurrentUserForQueryState:queryState]; - }] continueWithBlock:^id(BFTask *task) { - @strongify(self); - PFUser *user = task.result; - return [[[self class] queryController] countObjectsAsyncForQueryState:queryState - withCancellationToken:cancellationTokenSource.token - user:user]; - }] continueWithBlock:^id(BFTask *task) { - @synchronized(self) { - if (_cancellationTokenSource == cancellationTokenSource) { - _cancellationTokenSource = nil; - } - } - return task; - }]; -} - -///-------------------------------------- -#pragma mark - Cancel -///-------------------------------------- - -- (void)cancel { - @synchronized (self) { - if (_cancellationTokenSource) { - [_cancellationTokenSource cancel]; - _cancellationTokenSource = nil; - } - } -} - -///-------------------------------------- -#pragma mark - NSCopying -///-------------------------------------- - -- (instancetype)copyWithZone:(NSZone *)zone { - return [[[self class] allocWithZone:zone] initWithState:self.state]; -} - -///-------------------------------------- -#pragma mark NSObject -///-------------------------------------- - -- (NSUInteger)hash { - return [self.state hash]; -} - -- (BOOL)isEqual:(id)object { - if (self == object) { - return YES; - } - - if (![object isKindOfClass:[PFQuery class]]) { - return NO; - } - - return [self.state isEqual:((PFQuery *)object).state]; -} - -///-------------------------------------- -#pragma mark - Caching -///-------------------------------------- - -- (BOOL)hasCachedResult { - return [[[self class] queryController] hasCachedResultForQueryState:self.state - sessionToken:[PFUser currentSessionToken]]; -} - -- (void)clearCachedResult { - [[[self class] queryController] clearCachedResultForQueryState:self.state - sessionToken:[PFUser currentSessionToken]]; -} - -+ (void)clearAllCachedResults { - [[self queryController] clearAllCachedResults]; -} - -///-------------------------------------- -#pragma mark - Check Pinning Status -///-------------------------------------- - -/*! - If `enabled` is YES, raise an exception if OfflineStore is not enabled. If `enabled` is NO, raise - an exception if OfflineStore is enabled. - */ -- (void)_checkPinningEnabled:(BOOL)enabled { - BOOL loaded = [Parse _currentManager].offlineStoreLoaded; - if (enabled) { - PFConsistencyAssert(loaded, @"Method requires Pinning enabled."); - } else { - PFConsistencyAssert(!loaded, @"Method not allowed when Pinning is enabled."); - } -} - -///-------------------------------------- -#pragma mark - Query Source -///-------------------------------------- - -- (instancetype)fromLocalDatastore { - return [self fromPinWithName:nil]; -} - -- (instancetype)fromPin { - return [self fromPinWithName:PFObjectDefaultPin]; -} - -- (instancetype)fromPinWithName:(NSString *)name { - [self _checkPinningEnabled:YES]; - [self checkIfCommandIsRunning]; - - self.state.queriesLocalDatastore = YES; - self.state.localDatastorePinName = [name copy]; - - return self; -} - -- (instancetype)ignoreACLs { - [self _checkPinningEnabled:YES]; - [self checkIfCommandIsRunning]; - - self.state.shouldIgnoreACLs = YES; - - return self; -} - -///-------------------------------------- -#pragma mark - Query State -///-------------------------------------- - -- (PFQueryState *)_queryStateCopy { - return [self.state copy]; -} - -- (PFQueryState *)_queryStateCopyWithCachePolicy:(PFCachePolicy)cachePolicy { - PFMutableQueryState *state = [self.state mutableCopy]; - state.cachePolicy = cachePolicy; - return state; -} - -- (void)_validateQueryState { - PFConsistencyAssert(self.state.queriesLocalDatastore || !self.state.shouldIgnoreACLs, - @"`ignoreACLs` can only be used with Local Datastore queries."); -} - -///-------------------------------------- -#pragma mark - Query Controller -///-------------------------------------- - -+ (PFQueryController *)queryController { - return [Parse _currentManager].coreManager.queryController; -} - -///-------------------------------------- -#pragma mark - User -///-------------------------------------- - -+ (BFTask *)_getCurrentUserForQueryState:(PFQueryState *)state { - if (state.shouldIgnoreACLs) { - return [BFTask taskWithResult:nil]; - } - return [[Parse _currentManager].coreManager.currentUserController getCurrentObjectAsync]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFRelation.h b/FoodbLog/Pods/Parse/Parse/PFRelation.h deleted file mode 100644 index af64ff9..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFRelation.h +++ /dev/null @@ -1,58 +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. - */ - -#import - -#import -#import -#import - -PF_ASSUME_NONNULL_BEGIN - -/*! - The `PFRelation` class that is used to access all of the children of a many-to-many relationship. - Each instance of `PFRelation` is associated with a particular parent object and key. - */ -@interface PFRelation : NSObject - -/*! - @abstract The name of the class of the target child objects. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, copy) NSString *targetClass; - -///-------------------------------------- -/// @name Accessing Objects -///-------------------------------------- - -/*! - @abstract Returns a object that can be used to get objects in this relation. - */ -- (PF_NULLABLE PFQuery *)query; - -///-------------------------------------- -/// @name Modifying Relations -///-------------------------------------- - -/*! - @abstract Adds a relation to the passed in object. - - @param object A object to add relation to. - */ -- (void)addObject:(PFObject *)object; - -/*! - @abstract Removes a relation to the passed in object. - - @param object A object to add relation to. - */ -- (void)removeObject:(PFObject *)object; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFRelation.m b/FoodbLog/Pods/Parse/Parse/PFRelation.m deleted file mode 100644 index a6fdb68..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFRelation.m +++ /dev/null @@ -1,236 +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. - */ - -#import "PFRelation.h" -#import "PFRelationPrivate.h" - -#import - -#import "PFAssert.h" -#import "PFFieldOperation.h" -#import "PFInternalUtils.h" -#import "PFMacros.h" -#import "PFMutableRelationState.h" -#import "PFObjectPrivate.h" -#import "PFQueryPrivate.h" - -NSString *const PFRelationKeyClassName = @"className"; -NSString *const PFRelationKeyType = @"__type"; -NSString *const PFRelationKeyObjects = @"objects"; - -@interface PFRelation () { - // - // Use this queue as follows: - // Because state is defined as an atomic property, there's no need to use the queue if you're only reading from - // self.state once during the method. - // - // If you ever need to use self.state more than once, either take a copy at the top of the function, or use a - // dispatch_sync block. - // - // If you are ever changing the state variable, you should use dispatch_sync. - // - dispatch_queue_t _stateAccessQueue; -} - -@property (atomic, copy) PFMutableRelationState *state; - -@end - -@implementation PFRelation - -@dynamic targetClass; - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - _stateAccessQueue = dispatch_queue_create("com.parse.relation.state.access", DISPATCH_QUEUE_SERIAL); - _state = [[PFMutableRelationState alloc] init]; - - return self; -} - -- (instancetype)initWithParent:(PFObject *)newParent key:(NSString *)newKey { - self = [self init]; - if (!self) return nil; - - _state.parent = newParent; - _state.key = newKey; - - return self; -} - -- (instancetype)initWithTargetClass:(NSString *)newTargetClass { - self = [self init]; - if (!self) return nil; - - _state.targetClass = newTargetClass; - - return self; -} - -- (instancetype)initFromDictionary:(NSDictionary *)dictionary withDecoder:(PFDecoder *)decoder { - self = [self init]; - if (!self) return nil; - - NSArray *array = dictionary[PFRelationKeyObjects]; - NSMutableSet *known = [[NSMutableSet alloc] initWithCapacity:array.count]; - - // Decode the result - for (id encodedObject in array) { - [known addObject:[decoder decodeObject:encodedObject]]; - } - - _state.targetClass = dictionary[PFRelationKeyClassName]; - [_state.knownObjects setSet:known]; - - return self; -} - -+ (PFRelation *)relationForObject:(PFObject *)parent forKey:(NSString *)key { - return [[PFRelation alloc] initWithParent:parent key:key]; -} - -+ (PFRelation *)relationWithTargetClass:(NSString *)targetClass { - return [[PFRelation alloc] initWithTargetClass:targetClass]; -} - -+ (PFRelation *)relationFromDictionary:(NSDictionary *)dictionary withDecoder:(PFDecoder *)decoder { - return [[PFRelation alloc] initFromDictionary:dictionary withDecoder:decoder]; -} - -- (void)ensureParentIs:(PFObject *)someParent andKeyIs:(NSString *)someKey { - pf_sync_with_throw(_stateAccessQueue, ^{ - __strong PFObject *sparent = self.state.parent; - - if (!sparent) { - sparent = self.state.parent = someParent; - } - - if (!self.state.key) { - self.state.key = someKey; - } - - PFConsistencyAssert(sparent == someParent, - @"Internal error. One PFRelation retrieved from two different PFObjects."); - - PFConsistencyAssert([self.state.key isEqualToString:someKey], - @"Internal error. One PFRelation retrieved from two different keys."); - }); -} - -- (NSString *)description { - PFRelationState *state = [self.state copy]; - - return [NSString stringWithFormat:@"<%@: %p, %p.%@ -> %@>", - [self class], - self, - state.parent, - state.key, - state.targetClass]; -} - -- (PFQuery *)query { - PFRelationState *state = [self.state copy]; - __strong PFObject *sparent = state.parent; - - PFQuery *query = nil; - if (state.targetClass) { - query = [PFQuery queryWithClassName:state.targetClass]; - } else { - query = [PFQuery queryWithClassName:state.parentClassName]; - [query redirectClassNameForKey:state.key]; - } - if (sparent) { - [query whereRelatedToObject:sparent fromKey:state.key]; - } else if (state.parentClassName) { - PFObject *object = [PFObject objectWithoutDataWithClassName:state.parentClassName - objectId:state.parentObjectId]; - [query whereRelatedToObject:object fromKey:state.key]; - } - - return query; -} - -- (NSString *)targetClass { - return self.state.targetClass; -} - -- (void)setTargetClass:(NSString *)targetClass { - dispatch_sync(_stateAccessQueue, ^{ - self.state.targetClass = targetClass; - }); -} - -- (void)addObject:(PFObject *)object { - pf_sync_with_throw(_stateAccessQueue, ^{ - PFRelationState *state = self.state; - - PFRelationOperation *op = [PFRelationOperation addRelationToObjects:@[ object ]]; - [state.parent performOperation:op forKey:state.key]; - - self.state.targetClass = op.targetClass; - [self.state.knownObjects addObject:object]; - }); -} - -- (void)removeObject:(PFObject *)object { - pf_sync_with_throw(_stateAccessQueue, ^{ - PFRelationState *state = self.state; - - PFRelationOperation *op = [PFRelationOperation removeRelationToObjects:@[ object ]]; - [state.parent performOperation:op forKey:state.key]; - - self.state.targetClass = op.targetClass; - [self.state.knownObjects removeObject:object]; - }); -} - -- (NSDictionary *)encodeIntoDictionary { - PFRelationState *state = [self.state copy]; - NSMutableArray *encodedObjects = [NSMutableArray arrayWithCapacity:state.knownObjects.count]; - - for (PFObject *knownObject in state.knownObjects) { - [encodedObjects addObject:[[PFPointerObjectEncoder objectEncoder] encodeObject:knownObject]]; - } - - return @{ - PFRelationKeyType : @"Relation", - PFRelationKeyClassName : state.targetClass, - PFRelationKeyObjects : encodedObjects - }; -} - -/*! - Returns true if and only if this object was ever known to be in the relation. - This is used for offline caching. - */ -- (BOOL)_hasKnownObject:(PFObject *)object { - __block BOOL results = NO; - - dispatch_sync(_stateAccessQueue, ^{ - results = [self.state.knownObjects containsObject:object]; - }); - - return results; -} - -- (void)_addKnownObject:(PFObject *)object { - dispatch_sync(_stateAccessQueue, ^{ - [self.state.knownObjects addObject:object]; - }); -} - -- (void)_removeKnownObject:(PFObject *)object { - dispatch_sync(_stateAccessQueue, ^{ - [self.state.knownObjects removeObject:object]; - }); -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFRole.h b/FoodbLog/Pods/Parse/Parse/PFRole.h deleted file mode 100644 index 18d21c9..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFRole.h +++ /dev/null @@ -1,100 +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. - */ - -#import - -#import -#import -#import - -PF_ASSUME_NONNULL_BEGIN - -/*! - The `PFRole` class represents a Role on the Parse server. - `PFRoles` represent groupings of objects for the purposes of granting permissions - (e.g. specifying a for a ). - Roles are specified by their sets of child users and child roles, - all of which are granted any permissions that the parent role has. - - Roles must have a name (which cannot be changed after creation of the role), and must specify an ACL. - */ -@interface PFRole : PFObject - -///-------------------------------------- -/// @name Creating a New Role -///-------------------------------------- - -/*! - @abstract Constructs a new `PFRole` with the given name. - If no default ACL has been specified, you must provide an ACL for the role. - - @param name The name of the Role to create. - */ -- (instancetype)initWithName:(NSString *)name; - -/*! - @abstract Constructs a new `PFRole` with the given name. - - @param name The name of the Role to create. - @param acl The ACL for this role. Roles must have an ACL. - */ -- (instancetype)initWithName:(NSString *)name acl:(PF_NULLABLE PFACL *)acl; - -/*! - @abstract Constructs a new `PFRole` with the given name. - - @discussion If no default ACL has been specified, you must provide an ACL for the role. - - @param name The name of the Role to create. - */ -+ (instancetype)roleWithName:(NSString *)name; - -/*! - @abstract Constructs a new `PFRole` with the given name. - - @param name The name of the Role to create. - @param acl The ACL for this role. Roles must have an ACL. - */ -+ (instancetype)roleWithName:(NSString *)name acl:(PF_NULLABLE PFACL *)acl; - -///-------------------------------------- -/// @name Role-specific Properties -///-------------------------------------- - -/*! - @abstract Gets or sets the name for a role. - - @discussion This value must be set before the role has been saved to the server, - and cannot be set once the role has been saved. - - @warning A role's name can only contain alphanumeric characters, `_`, `-`, and spaces. - */ -@property (nonatomic, copy) NSString *name; - -/*! - @abstract Gets the for the objects that are direct children of this role. - - @discussion These users are granted any privileges that this role has been granted - (e.g. read or write access through ACLs). You can add or remove users from - the role through this relation. - */ -@property (nonatomic, strong, readonly) PFRelation *users; - -/*! - @abstract Gets the for the `PFRole` objects that are direct children of this role. - - @discussion These roles' users are granted any privileges that this role has been granted - (e.g. read or write access through ACLs). You can add or remove child roles - from this role through this relation. - */ -@property (nonatomic, strong, readonly) PFRelation *roles; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFRole.m b/FoodbLog/Pods/Parse/Parse/PFRole.m deleted file mode 100644 index bceec77..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFRole.m +++ /dev/null @@ -1,91 +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. - */ - -#import "PFRole.h" - -#import - -#import "PFAssert.h" -#import "PFObject+Subclass.h" -#import "PFObjectPrivate.h" -#import "PFQuery.h" - -@implementation PFRole - -///-------------------------------------- -#pragma mark - Init -///-------------------------------------- - -- (instancetype)initWithName:(NSString *)name { - return [self initWithName:name acl:nil]; -} - -- (instancetype)initWithName:(NSString *)name acl:(PFACL *)acl { - self = [super init]; - if (!self) return nil; - - self.name = name; - self.ACL = acl; - - return self; -} - -+ (instancetype)roleWithName:(NSString *)name { - return [[self alloc] initWithName:name]; -} - -+ (instancetype)roleWithName:(NSString *)name acl:(PFACL *)acl { - return [[self alloc] initWithName:name acl:acl]; -} - -///-------------------------------------- -#pragma mark - Role-specific Properties -///-------------------------------------- - -@dynamic name; - -// Dynamic synthesizers would use objectForKey, not relationForKey -- (PFRelation *)roles { - return [self relationForKey:@keypath(PFRole, roles)]; -} - -- (PFRelation *)users { - return [self relationForKey:@keypath(PFRole, users)]; -} - -///-------------------------------------- -#pragma mark - PFObject Overrides -///-------------------------------------- - -- (void)setObject:(id)object forKey:(NSString *)key { - if ([key isEqualToString:@keypath(PFRole, name)]) { - PFConsistencyAssert(!self.objectId, @"A role's name can only be set before it has been saved."); - PFParameterAssert([object isKindOfClass:[NSString class]], @"A role's name must be an NSString."); - PFParameterAssert([object rangeOfString:@"^[0-9a-zA-Z_\\- ]+$" options:NSRegularExpressionSearch].location != NSNotFound, - @"A role's name can only contain alphanumeric characters, _, -, and spaces."); - } - [super setObject:object forKey:key]; -} - -- (BFTask *)saveInBackground { - PFConsistencyAssert(self.objectId || self.name, @"New roles must specify a name."); - return [super saveInBackground]; -} - -// Validates a class name. We override this to only allow the role class name. -+ (void)_assertValidInstanceClassName:(NSString *)className { - PFParameterAssert([className isEqualToString:[self parseClassName]], - @"Cannot initialize a PFRole with a custom class name."); -} - -+ (NSString *)parseClassName { - return @"_Role"; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFSession.h b/FoodbLog/Pods/Parse/Parse/PFSession.h deleted file mode 100644 index 3b5c00c..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFSession.h +++ /dev/null @@ -1,52 +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. - */ - -#import - -#import - -#import -#import - -PF_ASSUME_NONNULL_BEGIN - -@class PFSession; - -typedef void(^PFSessionResultBlock)(PFSession *PF_NULLABLE_S session, NSError *PF_NULLABLE_S error); - -/*! - `PFSession` is a local representation of a session. - This class is a subclass of a , - and retains the same functionality as any other subclass of . - */ -@interface PFSession : PFObject - -/*! - @abstract The session token string for this session. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, copy, readonly) NSString *sessionToken; - -/*! - *Asynchronously* fetches a `PFSession` object related to the current user. - - @returns A task that is `completed` with an instance of `PFSession` class or is `faulted` if the operation fails. - */ -+ (BFTask PF_GENERIC(PFSession *)*)getCurrentSessionInBackground; - -/*! - *Asynchronously* fetches a `PFSession` object related to the current user. - - @param block The block to execute when the operation completes. - It should have the following argument signature: `^(PFSession *session, NSError *error)`. - */ -+ (void)getCurrentSessionInBackgroundWithBlock:(PF_NULLABLE PFSessionResultBlock)block; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFSession.m b/FoodbLog/Pods/Parse/Parse/PFSession.m deleted file mode 100644 index a4af8e8..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFSession.m +++ /dev/null @@ -1,106 +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. - */ - -#import "PFSession.h" - -#import "BFTask+Private.h" -#import "PFAssert.h" -#import "PFCoreManager.h" -#import "PFCurrentUserController.h" -#import "PFObject+Subclass.h" -#import "PFObjectPrivate.h" -#import "PFSessionController.h" -#import "PFUserPrivate.h" -#import "Parse_Private.h" - -static BOOL _PFSessionIsWritablePropertyForKey(NSString *key) { - static NSSet *protectedKeys; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - protectedKeys = [NSSet setWithObjects: - @"sessionToken", - @"restricted", - @"createdWith", - @"installationId", - @"user", - @"expiresAt", nil]; - }); - return ![protectedKeys containsObject:key]; -} - -@implementation PFSession - -@dynamic sessionToken; - -///-------------------------------------- -#pragma mark - PFSubclassing -///-------------------------------------- - -+ (NSString *)parseClassName { - return @"_Session"; -} - -- (BOOL)needsDefaultACL { - return NO; -} - -///-------------------------------------- -#pragma mark - Class -///-------------------------------------- - -+ (void)_assertValidInstanceClassName:(NSString *)className { - PFParameterAssert([className isEqualToString:[PFSession parseClassName]], - @"Cannot initialize a PFSession with a custom class name."); -} - -#pragma mark Get Current Session - -+ (BFTask *)getCurrentSessionInBackground { - PFCurrentUserController *controller = [[self class] currentUserController]; - return [[controller getCurrentUserSessionTokenAsync] continueWithBlock:^id(BFTask *task) { - NSString *sessionToken = task.result; - return [[self sessionController] getCurrentSessionAsyncWithSessionToken:sessionToken]; - }]; -} - -+ (void)getCurrentSessionInBackgroundWithBlock:(PFSessionResultBlock)block { - [[self getCurrentSessionInBackground] thenCallBackOnMainThreadAsync:block]; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (void)setObject:(id)object forKey:(NSString *)key { - PFParameterAssert(_PFSessionIsWritablePropertyForKey(key), - @"Can't change the '%@' field of a PFSession.", key); - [super setObject:object forKey:key]; -} - -- (void)removeObjectForKey:(NSString *)key { - PFParameterAssert(_PFSessionIsWritablePropertyForKey(key), - @"Can't remove the '%@' field of a PFSession.", key); - [super removeObjectForKey:key]; -} - -- (void)removeObjectsInArray:(NSArray *)objects forKey:(NSString *)key { - PFParameterAssert(_PFSessionIsWritablePropertyForKey(key), - @"Can't remove any object from '%@' field of a PFSession.", key); - [super removeObjectsInArray:objects forKey:key]; -} - -///-------------------------------------- -#pragma mark - Session Controller -///-------------------------------------- - -+ (PFSessionController *)sessionController { - return [Parse _currentManager].coreManager.sessionController; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFSubclassing.h b/FoodbLog/Pods/Parse/Parse/PFSubclassing.h deleted file mode 100644 index c07743d..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFSubclassing.h +++ /dev/null @@ -1,87 +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. - */ - -#import - -#import - -@class PFQuery PF_GENERIC(PFGenericObject : PFObject *); - -PF_ASSUME_NONNULL_BEGIN - -/*! - If a subclass of conforms to `PFSubclassing` and calls , - Parse framework will be able to use that class as the native class for a Parse cloud object. - - Classes conforming to this protocol should subclass and - include `PFObject+Subclass.h` in their implementation file. - This ensures the methods in the Subclass category of are exposed in its subclasses only. - */ -@protocol PFSubclassing - -/*! - @abstract Constructs an object of the most specific class known to implement . - - @discussion This method takes care to help subclasses be subclassed themselves. - For example, `[PFUser object]` returns a by default but will return an - object of a registered subclass instead if one is known. - A default implementation is provided by which should always be sufficient. - - @returns Returns the object that is instantiated. - */ -+ (instancetype)object; - -/*! - @abstract Creates a reference to an existing PFObject for use in creating associations between PFObjects. - - @discussion Calling <[PFObject isDataAvailable]> on this object will return `NO` - until <[PFObject fetchIfNeeded]> has been called. No network request will be made. - A default implementation is provided by PFObject which should always be sufficient. - - @param objectId The object id for the referenced object. - - @returns A new without data. - */ -+ (instancetype)objectWithoutDataWithObjectId:(PF_NULLABLE NSString *)objectId; - -/*! - @abstract The name of the class as seen in the REST API. - */ -+ (NSString *)parseClassName; - -/*! - @abstract Create a query which returns objects of this type. - - @discussion A default implementation is provided by which should always be sufficient. - */ -+ (PF_NULLABLE PFQuery *)query; - -/*! - @abstract Returns a query for objects of this type with a given predicate. - - @discussion A default implementation is provided by which should always be sufficient. - - @param predicate The predicate to create conditions from. - - @returns An instance of . - - @see [PFQuery queryWithClassName:predicate:] - */ -+ (PF_NULLABLE PFQuery *)queryWithPredicate:(PF_NULLABLE NSPredicate *)predicate; - -/*! - @abstract Lets Parse know this class should be used to instantiate all objects with class type . - - @warning This method must be called before <[Parse setApplicationId:clientKey:]> - */ -+ (void)registerSubclass; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFUser.h b/FoodbLog/Pods/Parse/Parse/PFUser.h deleted file mode 100644 index 3ae63f6..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFUser.h +++ /dev/null @@ -1,519 +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. - */ - -#import - -#import - -#import -#import -#import - -PF_ASSUME_NONNULL_BEGIN - -typedef void(^PFUserSessionUpgradeResultBlock)(NSError *PF_NULLABLE_S error); -typedef void(^PFUserLogoutResultBlock)(NSError *PF_NULLABLE_S error); - -@class PFQuery PF_GENERIC(PFGenericObject : PFObject *); -@protocol PFUserAuthenticationDelegate; - -/*! - The `PFUser` class is a local representation of a user persisted to the Parse Data. - This class is a subclass of a , and retains the same functionality of a , - but also extends it with various user specific methods, like authentication, signing up, and validation uniqueness. - - Many APIs responsible for linking a `PFUser` with Facebook or Twitter have been deprecated in favor of dedicated - utilities for each social network. See , and for more information. - */ - -@interface PFUser : PFObject - -///-------------------------------------- -/// @name Accessing the Current User -///-------------------------------------- - -/*! - @abstract Gets the currently logged in user from disk and returns an instance of it. - - @returns Returns a `PFUser` that is the currently logged in user. If there is none, returns `nil`. - */ -+ (PF_NULLABLE instancetype)currentUser; - -/*! - @abstract The session token for the `PFUser`. - - @discussion This is set by the server upon successful authentication. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, copy, readonly) NSString *sessionToken; - -/*! - @abstract Whether the `PFUser` was just created from a request. - - @discussion This is only set after a Facebook or Twitter login. - */ -@property (assign, readonly) BOOL isNew; - -/*! - @abstract Whether the user is an authenticated object for the device. - - @discussion An authenticated `PFUser` is one that is obtained via a or method. - An authenticated object is required in order to save (with altered values) or delete it. - - @returns Returns whether the user is authenticated. - */ -- (BOOL)isAuthenticated; - -///-------------------------------------- -/// @name Creating a New User -///-------------------------------------- - -/*! - @abstract Creates a new `PFUser` object. - - @returns Returns a new `PFUser` object. - */ -+ (instancetype)user; - -/*! - @abstract Enables automatic creation of anonymous users. - - @discussion After calling this method, will always have a value. - The user will only be created on the server once the user has been saved, - or once an object with a relation to that user or an ACL that refers to the user has been saved. - - @warning <[PFObject saveEventually]> will not work on if an item being saved has a relation - to an automatic user that has never been saved. - */ -+ (void)enableAutomaticUser; - -/*! - @abstract The username for the `PFUser`. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, strong) NSString *username; - -/**! - @abstract The password for the `PFUser`. - - @discussion This will not be filled in from the server with the password. - It is only meant to be set. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, strong) NSString *password; - -/*! - @abstract The email for the `PFUser`. - */ -@property (PF_NULLABLE_PROPERTY nonatomic, strong) NSString *email; - -/*! - @abstract Signs up the user *synchronously*. - - @discussion This will also enforce that the username isn't already taken. - - @warning Make sure that password and username are set before calling this method. - - @returns Returns `YES` if the sign up was successful, otherwise `NO`. - */ -- (BOOL)signUp PF_SWIFT_UNAVAILABLE; - -/*! - @abstract Signs up the user *synchronously*. - - @discussion This will also enforce that the username isn't already taken. - - @warning Make sure that password and username are set before calling this method. - - @param error Error object to set on error. - - @returns Returns whether the sign up was successful. - */ -- (BOOL)signUp:(NSError **)error; - -/*! - @abstract Signs up the user *asynchronously*. - - @discussion This will also enforce that the username isn't already taken. - - @warning Make sure that password and username are set before calling this method. - - @returns The task, that encapsulates the work being done. - */ -- (BFTask PF_GENERIC(NSNumber *)*)signUpInBackground; - -/*! - @abstract Signs up the user *asynchronously*. - - @discussion This will also enforce that the username isn't already taken. - - @warning Make sure that password and username are set before calling this method. - - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - */ -- (void)signUpInBackgroundWithBlock:(PF_NULLABLE PFBooleanResultBlock)block; - -/*! - @abstract Signs up the user *asynchronously*. - - @discussion This will also enforce that the username isn't already taken. - - @warning Make sure that password and username are set before calling this method. - - @param target Target object for the selector. - @param selector The selector that will be called when the asynchrounous request is complete. - It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - `[result boolValue]` will tell you whether the call succeeded or not. - */ -- (void)signUpInBackgroundWithTarget:(PF_NULLABLE_S id)target selector:(PF_NULLABLE_S SEL)selector; - -///-------------------------------------- -/// @name Logging In -///-------------------------------------- - -/*! - @abstract Makes a *synchronous* request to login a user with specified credentials. - - @discussion Returns an instance of the successfully logged in `PFUser`. - This also caches the user locally so that calls to will use the latest logged in user. - - @param username The username of the user. - @param password The password of the user. - - @returns Returns an instance of the `PFUser` on success. - If login failed for either wrong password or wrong username, returns `nil`. - */ -+ (PF_NULLABLE instancetype)logInWithUsername:(NSString *)username - password:(NSString *)password PF_SWIFT_UNAVAILABLE; - -/*! - @abstract Makes a *synchronous* request to login a user with specified credentials. - - @discussion Returns an instance of the successfully logged in `PFUser`. - This also caches the user locally so that calls to will use the latest logged in user. - - @param username The username of the user. - @param password The password of the user. - @param error The error object to set on error. - - @returns Returns an instance of the `PFUser` on success. - If login failed for either wrong password or wrong username, returns `nil`. - */ -+ (PF_NULLABLE instancetype)logInWithUsername:(NSString *)username - password:(NSString *)password - error:(NSError **)error; - -/*! - @abstract Makes an *asynchronous* request to login a user with specified credentials. - - @discussion Returns an instance of the successfully logged in `PFUser`. - This also caches the user locally so that calls to will use the latest logged in user. - - @param username The username of the user. - @param password The password of the user. - - @returns The task, that encapsulates the work being done. - */ -+ (BFTask PF_GENERIC(__kindof PFUser *)*)logInWithUsernameInBackground:(NSString *)username - password:(NSString *)password; - -/*! - @abstract Makes an *asynchronous* request to login a user with specified credentials. - - @discussion Returns an instance of the successfully logged in `PFUser`. - This also caches the user locally so that calls to will use the latest logged in user. - - @param username The username of the user. - @param password The password of the user. - @param target Target object for the selector. - @param selector The selector that will be called when the asynchrounous request is complete. - It should have the following signature: `(void)callbackWithUser:(PFUser *)user error:(NSError *)error`. - */ -+ (void)logInWithUsernameInBackground:(NSString *)username - password:(NSString *)password - target:(PF_NULLABLE_S id)target - selector:(PF_NULLABLE_S SEL)selector; - -/*! - @abstract Makes an *asynchronous* request to log in a user with specified credentials. - - @discussion Returns an instance of the successfully logged in `PFUser`. - This also caches the user locally so that calls to will use the latest logged in user. - - @param username The username of the user. - @param password The password of the user. - @param block The block to execute. - It should have the following argument signature: `^(PFUser *user, NSError *error)`. - */ -+ (void)logInWithUsernameInBackground:(NSString *)username - password:(NSString *)password - block:(PF_NULLABLE PFUserResultBlock)block; - -///-------------------------------------- -/// @name Becoming a User -///-------------------------------------- - -/*! - @abstract Makes a *synchronous* request to become a user with the given session token. - - @discussion Returns an instance of the successfully logged in `PFUser`. - This also caches the user locally so that calls to will use the latest logged in user. - - @param sessionToken The session token for the user. - - @returns Returns an instance of the `PFUser` on success. - If becoming a user fails due to incorrect token, it returns `nil`. - */ -+ (PF_NULLABLE instancetype)become:(NSString *)sessionToken PF_SWIFT_UNAVAILABLE; - -/*! - @abstract Makes a *synchronous* request to become a user with the given session token. - - @discussion Returns an instance of the successfully logged in `PFUser`. - This will also cache the user locally so that calls to will use the latest logged in user. - - @param sessionToken The session token for the user. - @param error The error object to set on error. - - @returns Returns an instance of the `PFUser` on success. - If becoming a user fails due to incorrect token, it returns `nil`. - */ -+ (PF_NULLABLE instancetype)become:(NSString *)sessionToken error:(NSError **)error; - -/*! - @abstract Makes an *asynchronous* request to become a user with the given session token. - - @discussion Returns an instance of the successfully logged in `PFUser`. - This also caches the user locally so that calls to will use the latest logged in user. - - @param sessionToken The session token for the user. - - @returns The task, that encapsulates the work being done. - */ -+ (BFTask PF_GENERIC(__kindof PFUser *)*)becomeInBackground:(NSString *)sessionToken; - -/*! - @abstract Makes an *asynchronous* request to become a user with the given session token. - - @discussion Returns an instance of the successfully logged in `PFUser`. This also caches the user locally - so that calls to will use the latest logged in user. - - @param sessionToken The session token for the user. - @param block The block to execute. - The block should have the following argument signature: `^(PFUser *user, NSError *error)`. - */ -+ (void)becomeInBackground:(NSString *)sessionToken block:(PF_NULLABLE PFUserResultBlock)block; - -/*! - @abstract Makes an *asynchronous* request to become a user with the given session token. - - @discussion Returns an instance of the successfully logged in `PFUser`. This also caches the user locally - so that calls to will use the latest logged in user. - - @param sessionToken The session token for the user. - @param target Target object for the selector. - @param selector The selector that will be called when the asynchrounous request is complete. - It should have the following signature: `(void)callbackWithUser:(PFUser *)user error:(NSError *)error`. - */ -+ (void)becomeInBackground:(NSString *)sessionToken - target:(PF_NULLABLE_S id)target - selector:(PF_NULLABLE_S SEL)selector; - -///-------------------------------------- -/// @name Revocable Session -///-------------------------------------- - -/*! - @abstract Enables revocable sessions and migrates the currentUser session token to use revocable session if needed. - - @discussion This method is required if you want to use APIs - and you application's 'Require Revocable Session' setting is turned off on `http://parse.com` app settings. - After returned `BFTask` completes - class and APIs will be available for use. - - @returns An instance of `BFTask` that is completed when revocable - sessions are enabled and currentUser token is migrated. - */ -+ (BFTask *)enableRevocableSessionInBackground; - -/*! - @abstract Enables revocable sessions and upgrades the currentUser session token to use revocable session if needed. - - @discussion This method is required if you want to use APIs - and legacy sessions are enabled in your application settings on `http://parse.com/`. - After returned `BFTask` completes - class and APIs will be available for use. - - @param block Block that will be called when revocable sessions are enabled and currentUser token is migrated. - */ -+ (void)enableRevocableSessionInBackgroundWithBlock:(PF_NULLABLE PFUserSessionUpgradeResultBlock)block; - -///-------------------------------------- -/// @name Logging Out -///-------------------------------------- - -/*! - @abstract *Synchronously* logs out the currently logged in user on disk. - */ -+ (void)logOut; - -/*! - @abstract *Asynchronously* logs out the currently logged in user. - - @discussion This will also remove the session from disk, log out of linked services - and all future calls to will return `nil`. This is preferrable to using , - unless your code is already running from a background thread. - - @returns An instance of `BFTask`, that is resolved with `nil` result when logging out completes. - */ -+ (BFTask *)logOutInBackground; - -/*! - @abstract *Asynchronously* logs out the currently logged in user. - - @discussion This will also remove the session from disk, log out of linked services - and all future calls to will return `nil`. This is preferrable to using , - unless your code is already running from a background thread. - - @param block A block that will be called when logging out completes or fails. - */ -+ (void)logOutInBackgroundWithBlock:(PF_NULLABLE PFUserLogoutResultBlock)block; - -///-------------------------------------- -/// @name Requesting a Password Reset -///-------------------------------------- - -/*! - @abstract *Synchronously* Send a password reset request for a specified email. - - @discussion If a user account exists with that email, an email will be sent to that address - with instructions on how to reset their password. - - @param email Email of the account to send a reset password request. - - @returns Returns `YES` if the reset email request is successful. `NO` - if no account was found for the email address. - */ -+ (BOOL)requestPasswordResetForEmail:(NSString *)email PF_SWIFT_UNAVAILABLE; - -/*! - @abstract *Synchronously* send a password reset request for a specified email and sets an error object. - - @discussion If a user account exists with that email, an email will be sent to that address - with instructions on how to reset their password. - - @param email Email of the account to send a reset password request. - @param error Error object to set on error. - @returns Returns `YES` if the reset email request is successful. `NO` - if no account was found for the email address. - */ -+ (BOOL)requestPasswordResetForEmail:(NSString *)email error:(NSError **)error; - -/*! - @abstract Send a password reset request asynchronously for a specified email and sets an - error object. If a user account exists with that email, an email will be sent to - that address with instructions on how to reset their password. - @param email Email of the account to send a reset password request. - @returns The task, that encapsulates the work being done. - */ -+ (BFTask PF_GENERIC(NSNumber *)*)requestPasswordResetForEmailInBackground:(NSString *)email; - -/*! - @abstract Send a password reset request *asynchronously* for a specified email. - - @discussion If a user account exists with that email, an email will be sent to that address - with instructions on how to reset their password. - - @param email Email of the account to send a reset password request. - @param block The block to execute. - It should have the following argument signature: `^(BOOL succeeded, NSError *error)`. - */ -+ (void)requestPasswordResetForEmailInBackground:(NSString *)email - block:(PF_NULLABLE PFBooleanResultBlock)block; - -/*! - @abstract Send a password reset request *asynchronously* for a specified email and sets an error object. - - @discussion If a user account exists with that email, an email will be sent to that address - with instructions on how to reset their password. - - @param email Email of the account to send a reset password request. - @param target Target object for the selector. - @param selector The selector that will be called when the asynchronous request is complete. - It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError *)error`. - `error` will be `nil` on success and set if there was an error. - `[result boolValue]` will tell you whether the call succeeded or not. - */ -+ (void)requestPasswordResetForEmailInBackground:(NSString *)email - target:(PF_NULLABLE_S id)target - selector:(PF_NULLABLE_S SEL)selector; - -///-------------------------------------- -/// @name Third-party Authentication -///-------------------------------------- - -/*! - @abstract Registers a third party authentication delegate. - - @note This method shouldn't be invoked directly unless developing a third party authentication library. - @see PFUserAuthenticationDelegate - - @param delegate The third party authenticaiton delegate to be registered. - @param authType The name of the type of third party authentication source. - */ -+ (void)registerAuthenticationDelegate:(id)delegate forAuthType:(NSString *)authType; - -/*! - @abstract Logs in a user with third party authentication credentials. - - @note This method shouldn't be invoked directly unless developing a third party authentication library. - @see PFUserAuthenticationDelegate - - @param authType The name of the type of third party authentication source. - @param authData The user credentials of the third party authentication source. - - @returns A `BFTask` that is resolved to `PFUser` when logging in completes. - */ -+ (BFTask PF_GENERIC(PFUser *) *)logInWithAuthTypeInBackground:(NSString *)authType authData:(NSDictionary *)authData; - -/*! - @abstract Links this user to a third party authentication library. - - @note This method shouldn't be invoked directly unless developing a third party authentication library. - @see PFUserAuthenticationDelegate - - @param authType The name of the type of third party authentication source. - @param authData The user credentials of the third party authentication source. - - @returns A `BFTask` that is resolved to `@YES` if linking succeeds. - */ -- (BFTask PF_GENERIC(NSNumber *) *)linkWithAuthTypeInBackground:(NSString *)authType authData:(NSDictionary *)authData; - -/*! - @abstract Unlinks this user from a third party authentication library. - - @note This method shouldn't be invoked directly unless developing a third party authentication library. - @see PFUserAuthenticationDelegate - - @param authType The name of the type of third party authentication source. - - @returns A `BFTask` that is resolved to `@YES` if unlinking succeeds. - */ -- (BFTask PF_GENERIC(NSNumber *) *)unlinkWithAuthTypeInBackground:(NSString *)authType; - -/*! - @abstract Indicates whether this user is linked with a third party authentication library of a specific type. - - @note This method shouldn't be invoked directly unless developing a third party authentication library. - @see PFUserAuthenticationDelegate - - @param authType The name of the type of third party authentication source. - - @returns `YES` if the user is linked with a provider, otherwise `NO`. - */ -- (BOOL)isLinkedWithAuthType:(NSString *)authType; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/PFUser.m b/FoodbLog/Pods/Parse/Parse/PFUser.m deleted file mode 100644 index d7a6eac..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFUser.m +++ /dev/null @@ -1,1225 +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. - */ - -#import "PFUser.h" -#import "PFUserPrivate.h" - -#import -#import - -#import "BFTask+Private.h" -#import "PFACLPrivate.h" -#import "PFAnonymousAuthenticationProvider.h" -#import "PFAnonymousUtils_Private.h" -#import "PFAssert.h" -#import "PFCommandResult.h" -#import "PFCommandRunning.h" -#import "PFCoreManager.h" -#import "PFCurrentUserController.h" -#import "PFDecoder.h" -#import "PFErrorUtilities.h" -#import "PFFileManager.h" -#import "PFKeychainStore.h" -#import "PFMultiProcessFileLockController.h" -#import "PFMutableUserState.h" -#import "PFObject+Subclass.h" -#import "PFObjectConstants.h" -#import "PFObjectFilePersistenceController.h" -#import "PFObjectPrivate.h" -#import "PFOfflineStore.h" -#import "PFOperationSet.h" -#import "PFQueryPrivate.h" -#import "PFRESTUserCommand.h" -#import "PFSessionUtilities.h" -#import "PFTaskQueue.h" -#import "PFUserAuthenticationController.h" -#import "PFUserConstants.h" -#import "PFUserController.h" -#import "PFUserFileCodingLogic.h" -#import "Parse_Private.h" - -NSString *const PFUserCurrentUserFileName = @"currentUser"; -NSString *const PFUserCurrentUserPinName = @"_currentUser"; -NSString *const PFUserCurrentUserKeychainItemName = @"currentUser"; - -static BOOL _PFUserIsWritablePropertyForKey(NSString *key) { - return ![PFUserSessionTokenRESTKey isEqualToString:key]; -} - -static BOOL _PFUserIsRemovablePropertyForKey(NSString *key) { - return _PFUserIsWritablePropertyForKey(key) && ![PFUserUsernameRESTKey isEqualToString:key]; -} - -@interface PFUser () - -@property (nonatomic, copy) PFUserState *_state; - -@end - -@implementation PFUser (Private) - -static BOOL revocableSessionEnabled_; - -- (void)setDefaultValues { - [super setDefaultValues]; - self.isCurrentUser = NO; -} - -- (BOOL)needsDefaultACL { - return NO; -} - -///-------------------------------------- -#pragma mark - Current User -///-------------------------------------- - -// Returns the session token for the current user. -+ (NSString *)currentSessionToken { - return [[self _getCurrentUserSessionTokenAsync] waitForResult:nil withMainThreadWarning:NO]; -} - -+ (BFTask *)_getCurrentUserSessionTokenAsync { - return [[self currentUserController] getCurrentUserSessionTokenAsync]; -} - -///-------------------------------------- -#pragma mark - PFObject -///-------------------------------------- - -#pragma mark Validation - -- (BFTask PF_GENERIC(PFVoid) *)_validateDeleteAsync { - return [[super _validateDeleteAsync] continueWithSuccessBlock:^id(BFTask PF_GENERIC(PFVoid) *task) { - if (!self.isAuthenticated) { - NSError *error = [PFErrorUtilities errorWithCode:kPFErrorUserCannotBeAlteredWithoutSession - message:@"User cannot be deleted unless they have been authenticated."]; - return [BFTask taskWithError:error]; - } - return nil; - }]; -} - -- (BFTask PF_GENERIC(PFVoid) *)_validateSaveEventuallyAsync { - return [[super _validateSaveEventuallyAsync] continueWithSuccessBlock:^id(BFTask PF_GENERIC(PFVoid) *task) { - if ([self isDirtyForKey:PFUserPasswordRESTKey]) { - NSError *error = [PFErrorUtilities errorWithCode:kPFErrorOperationForbidden - message:@"Unable to saveEventually a PFUser with dirty password."]; - return [BFTask taskWithError:error]; - } - return nil; - }]; -} - -#pragma mark Else - -- (NSString *)displayClassName { - if ([self isMemberOfClass:[PFUser class]]) { - return @"PFUser"; - } - return NSStringFromClass([self class]); -} - -// Validates a class name. We override this to only allow the user class name. -+ (void)_assertValidInstanceClassName:(NSString *)className { - PFParameterAssert([className isEqualToString:[PFUser parseClassName]], - @"Cannot initialize a PFUser with a custom class name."); -} - -// Checks the properties on the object before saving. -- (void)_checkSaveParametersWithCurrentUser:(PFUser *)currentUser { - @synchronized ([self lock]) { - PFConsistencyAssert(self.objectId || self.isLazy, - @"User cannot be saved unless they are already signed up. Call signUp first."); - - PFConsistencyAssert([self _isAuthenticatedWithCurrentUser:currentUser] || - [self.objectId isEqualToString:currentUser.objectId], - @"User cannot be saved unless they have been authenticated via logIn or signUp", nil); - } -} - -// Checks the properties on the object before signUp. -- (BFTask *)_validateSignUpAsync { - return [BFTask taskFromExecutor:[BFExecutor defaultExecutor] withBlock:^id{ - NSError *error = nil; - @synchronized (self.lock) { - if (!self.username) { - error = [PFErrorUtilities errorWithCode:kPFErrorUsernameMissing - message:@"Cannot sign up without a username."]; - } else if (!self.password) { - error = [PFErrorUtilities errorWithCode:kPFErrorUserPasswordMissing - message:@"Cannot sign up without a password."]; - } else if (![self isDirty:NO] || self.objectId) { - error = [PFErrorUtilities errorWithCode:kPFErrorUsernameTaken - message:@"Cannot sign up an existing user."]; - } - } - if (error) { - return [BFTask taskWithError:error]; - } - return nil; - }]; -} - -- (NSMutableDictionary *)_convertToDictionaryForSaving:(PFOperationSet *)changes - withObjectEncoder:(PFEncoder *)encoder { - @synchronized ([self lock]) { - NSMutableDictionary *serialized = [super _convertToDictionaryForSaving:changes withObjectEncoder:encoder]; - if ([self.authData count] > 0) { - serialized[PFUserAuthDataRESTKey] = [self.authData copy]; - } - return serialized; - } -} - -- (BFTask *)handleSaveResultAsync:(NSDictionary *)result { - return [[super handleSaveResultAsync:result] continueWithSuccessBlock:^id(BFTask *saveTask) { - if (self.isCurrentUser) { - [self cleanUpAuthData]; - PFCurrentUserController *controller = [[self class] currentUserController]; - return [[controller saveCurrentObjectAsync:self] continueWithBlock:^id(BFTask *task) { - return saveTask.result; - }]; - } - return saveTask; - }]; -} - -///-------------------------------------- -#pragma mark - Sign Up -///-------------------------------------- - -- (PFRESTCommand *)_currentSignUpCommandForChanges:(PFOperationSet *)changes { - @synchronized ([self lock]) { - NSDictionary *parameters = [self _convertToDictionaryForSaving:changes - withObjectEncoder:[PFPointerObjectEncoder objectEncoder]]; - return [PFRESTUserCommand signUpUserCommandWithParameters:parameters - revocableSession:[[self class] _isRevocableSessionEnabled] - sessionToken:self.sessionToken]; - } -} - -///-------------------------------------- -#pragma mark - Service Login -///-------------------------------------- - -// Constructs the command for user_signup_or_login. This is used for Facebook, Twitter, and other linking services. -- (PFRESTCommand *)_currentServiceLoginCommandForChanges:(PFOperationSet *)changes { - @synchronized ([self lock]) { - NSDictionary *parameters = [self _convertToDictionaryForSaving:changes - withObjectEncoder:[PFPointerObjectEncoder objectEncoder]]; - return [PFRESTUserCommand serviceLoginUserCommandWithParameters:parameters - revocableSession:[[self class] _isRevocableSessionEnabled] - sessionToken:self.sessionToken]; - } -} - -- (BFTask *)_handleServiceLoginCommandResult:(PFCommandResult *)result { - return [BFTask taskFromExecutor:[BFExecutor defaultExecutor] withBlock:^id{ - NSDictionary *resultDictionary = result.result; - return [[self handleSaveResultAsync:resultDictionary] continueWithBlock:^id(BFTask *task) { - BOOL new = (result.httpResponse.statusCode == 201); // 201 means Created - @synchronized (self.lock) { - if (self._state.isNew != new) { - PFMutableUserState *state = [self._state mutableCopy]; - state.isNew = new; - self._state = state; - } - if (resultDictionary) { - self.isLazy = NO; - - // Serialize the object to disk so we can later access it via currentUser - PFCurrentUserController *controller = [[self class] currentUserController]; - return [[controller saveCurrentObjectAsync:self] continueAsyncWithBlock:^id(BFTask *task) { - [self.saveDelegate invoke:self error:nil]; - return self; - }]; - } - return [BFTask taskWithResult:self]; - } - }]; - }]; -} - -// Override the save result handling with custom user functionality -- (BFTask *)handleSignUpResultAsync:(BFTask *)task { - @synchronized ([self lock]) { - PFCommandResult *commandResult = task.result; - NSDictionary *result = commandResult.result; - BFTask *signUpTask = task; - - // Bail-out early, but still make sure that super class handled the result - if (task.error || task.cancelled || task.exception) { - return [[super handleSaveResultAsync:nil] continueWithBlock:^id(BFTask *task) { - return signUpTask; - }]; - } - __block BOOL saveResult = NO; - return [[[super handleSaveResultAsync:result] continueWithBlock:^id(BFTask *task) { - saveResult = [task.result boolValue]; - if (saveResult) { - @synchronized (self.lock) { - // Save the session information - PFMutableUserState *state = [self._state mutableCopy]; - state.sessionToken = result[PFUserSessionTokenRESTKey]; - state.isNew = YES; - self._state = state; - self.isLazy = NO; - } - } - return signUpTask; - }] continueWithBlock:^id(BFTask *task) { - PFCurrentUserController *controller = [[self class] currentUserController]; - return [[controller saveCurrentObjectAsync:self] continueWithResult:@(saveResult)]; - }]; - } -} - -- (void)cleanUpAuthData { - @synchronized ([self lock]) { - for (NSString *key in [self.authData copy]) { - id linkData = [self.authData objectForKey:key]; - if (!linkData || linkData == [NSNull null]) { - [self.authData removeObjectForKey:key]; - [self.linkedServiceNames removeObject:key]; - - [[[[self class] authenticationController] restoreAuthenticationAsyncWithAuthData:nil - forAuthType:key] waitForResult:nil withMainThreadWarning:NO]; - } - } - } -} - -/*! - Copies special PFUser fields from another user. - */ -- (PFObject *)mergeFromObject:(PFUser *)other { - @synchronized ([self lock]) { - [super mergeFromObject:other]; - - if (self == other) { - // If they point to the same instance, then don't merge. - return self; - } - - PFMutableUserState *state = [self._state mutableCopy]; - state.sessionToken = other.sessionToken; - state.isNew = other._state.isNew; - self._state = state; - - [self.authData removeAllObjects]; - [self.authData addEntriesFromDictionary:other.authData]; - - [self.linkedServiceNames removeAllObjects]; - [self.linkedServiceNames unionSet:other.linkedServiceNames]; - - return self; - } -} - -/* - Merges custom fields from JSON associated with a PFUser: - { - "session_token": string, - "is_new": boolean, - "auth_data": { - "facebook": { - "id": string, - "access_token": string, - "expiration_date": string (represents date) - } - } - } - */ -- (void)_mergeFromServerWithResult:(NSDictionary *)result decoder:(PFDecoder *)decoder completeData:(BOOL)completeData { - @synchronized ([self lock]) { - // save the session token - - PFMutableUserState *state = [self._state mutableCopy]; - - NSString *newSessionToken = result[PFUserSessionTokenRESTKey]; - if (newSessionToken) { - // Save the session token - state.sessionToken = newSessionToken; - } - - self._state = state; - - // Merge the linked service metadata - NSDictionary *newAuthData = [decoder decodeObject:result[PFUserAuthDataRESTKey]]; - if (newAuthData) { - [self.authData removeAllObjects]; - [self.linkedServiceNames removeAllObjects]; - [newAuthData enumerateKeysAndObjectsUsingBlock:^(id key, id linkData, BOOL *stop) { - if (linkData != [NSNull null]) { - [self.authData setObject:linkData forKey:key]; - [self.linkedServiceNames addObject:key]; - [self synchronizeAuthDataWithAuthType:key]; - } else { - [self.authData removeObjectForKey:key]; - [self.linkedServiceNames removeObject:key]; - [self synchronizeAuthDataWithAuthType:key]; - } - }]; - } - - // Strip authData and sessionToken from the data, as those keys are saved in a custom way - NSMutableDictionary *serverData = [result mutableCopy]; - [serverData removeObjectForKey:PFUserSessionTokenRESTKey]; - [serverData removeObjectForKey:PFUserAuthDataRESTKey]; - - // The public fields are handled by the regular mergeFromServer - [super _mergeFromServerWithResult:serverData decoder:decoder completeData:completeData]; - } -} - -- (void)synchronizeAuthDataWithAuthType:(NSString *)authType { - @synchronized ([self lock]) { - if (!self.isCurrentUser) { - return; - } - - NSDictionary *data = self.authData[authType]; - BFTask *restoreTask = [[[self class] authenticationController] restoreAuthenticationAsyncWithAuthData:data - forAuthType:authType]; - [restoreTask waitForResult:nil withMainThreadWarning:NO]; - if (restoreTask.faulted || ![restoreTask.result boolValue]) { // TODO: (nlutsenko) Maybe chain this method? - [self unlinkWithAuthTypeInBackground:authType]; - } - } -} - -- (void)synchronizeAllAuthData { - @synchronized ([self lock]) { - // Ensures that all auth providers have auth data (e.g. access tokens, etc.) that matches this user. - if (self.authData) { - [self.authData enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - [self synchronizeAuthDataWithAuthType:key]; - }]; - } - } -} - -- (BFTask *)resolveLazinessAsync:(BFTask *)toAwait { - @synchronized ([self lock]) { - if (!self.isLazy) { - return [BFTask taskWithResult:self]; - } - if (self.linkedServiceNames.count == 0) { - // If there are no linked services, treat this like a sign-up. - return [[self signUpAsync:toAwait] continueAsyncWithSuccessBlock:^id(BFTask *task) { - self.isLazy = NO; - return self; - }]; - } - - // Otherwise, treat this as a SignUpOrLogIn - PFRESTCommand *command = [self _currentServiceLoginCommandForChanges:[self unsavedChanges]]; - [self startSave]; - - return [[toAwait continueAsyncWithBlock:^id(BFTask *task) { - return [[Parse _currentManager].commandRunner runCommandAsync:command withOptions:0]; - }] continueAsyncWithBlock:^id(BFTask *task) { - PFCommandResult *result = task.result; - - if (task.error || task.cancelled) { - // If there was an error, we want to roll forward the save changes, but return the original task. - return [[self _handleServiceLoginCommandResult:result] continueAsyncWithBlock:^id(BFTask *unused) { - // Return the original task, instead of the new one (in order to have a proper error) - return task; - }]; - } - - if ([result.httpResponse statusCode] == 201) { - return [self _handleServiceLoginCommandResult:result]; - } else { - // Otherwise, treat this as a fresh login, and switch the current user to the new user. - PFUser *newUser = [[self class] _objectFromDictionary:result.result - defaultClassName:[self parseClassName] - completeData:YES]; - @synchronized ([newUser lock]) { - [newUser startSave]; - return [newUser _handleServiceLoginCommandResult:result]; - } - } - }]; - } -} - -- (BFTask *)_logOutAsyncWithAuthType:(NSString *)authType { - return [[[self class] authenticationController] deauthenticateAsyncWithAuthType:authType]; -} - -+ (instancetype)logInLazyUserWithAuthType:(NSString *)authType authData:(NSDictionary *)authData { - PFUser *user = [self user]; - @synchronized ([user lock]) { - [user setIsCurrentUser:YES]; - user.isLazy = YES; - [user.authData setObject:authData forKey:authType]; - [user.linkedServiceNames addObject:authType]; - } - return user; -} - -- (BFTask *)signUpAsync:(BFTask *)toAwait { - PFUser *currentUser = [[self class] currentUser]; - NSString *token = currentUser.sessionToken; - @synchronized ([self lock]) { - if (self.objectId) { - // For anonymous users, there may be an objectId. Setting the userName - // will have removed the anonymous link and set the value in the authData - // object to [NSNull null], so we can just treat it like a save operation. - if (self.authData[PFAnonymousUserAuthenticationType] == [NSNull null]) { - return [self saveAsync:toAwait]; - } - - // Otherwise, return an error - NSError *error = [PFErrorUtilities errorWithCode:kPFErrorUsernameTaken - message:@"Cannot sign up a user that has already signed up."]; - return [BFTask taskWithError:error]; - } - - // If the operationSetQueue is has operation sets in it, then a save or signUp is in progress. - // If there is a signUp or save already in progress, don't allow another one to start. - if ([self _hasOutstandingOperations]) { - NSError *error = [PFErrorUtilities errorWithCode:kPFErrorUsernameTaken - message:@"Cannot sign up a user that is already signing up."]; - return [BFTask taskWithError:error]; - } - - return [[self _validateSignUpAsync] continueWithSuccessBlock:^id(BFTask *task) { - if (currentUser && [PFAnonymousUtils isLinkedWithUser:currentUser]) { - // self doesn't have any outstanding saves, so we can safely merge its operations - // into the current user. - - PFConsistencyAssert(!isCurrentUser, @"Attempt to merge currentUser with itself."); - - [self checkForChangesToMutableContainers]; - @synchronized ([currentUser lock]) { - NSString *oldUsername = [currentUser.username copy]; - NSString *oldPassword = [currentUser.password copy]; - NSArray *oldAnonymousData = currentUser.authData[PFAnonymousUserAuthenticationType]; - - [currentUser checkForChangesToMutableContainers]; - - // Move the changes to this object over to the currentUser object. - PFOperationSet *selfOperations = operationSetQueue[0]; - [operationSetQueue removeAllObjects]; - [operationSetQueue addObject:[[PFOperationSet alloc] init]]; - for (NSString *key in selfOperations) { - [currentUser setObject:[selfOperations objectForKey:key] forKey:key]; - } - - currentUser->dirty = YES; - currentUser.password = self.password; - currentUser.username = self.username; - - [self rebuildEstimatedData]; - [currentUser rebuildEstimatedData]; - - return [[[[currentUser saveInBackground] continueWithBlock:^id(BFTask *task) { - if (task.error || task.cancelled || task.exception) { - @synchronized ([currentUser lock]) { - if (oldUsername) { - currentUser.username = oldUsername; - } - currentUser.password = oldPassword; - [currentUser restoreAnonymity:oldAnonymousData]; - } - - @synchronized(self.lock) { - [operationSetQueue replaceObjectAtIndex:0 withObject:selfOperations]; - [self rebuildEstimatedData]; - } - } - return task; - }] continueWithSuccessBlock:^id(BFTask *task) { - if ([Parse _currentManager].offlineStoreLoaded) { - return [[Parse _currentManager].offlineStore deleteDataForObjectAsync:currentUser]; - } - return nil; - }] continueWithSuccessBlock:^id(BFTask *task) { - [self mergeFromObject:currentUser]; - PFCurrentUserController *controller = [[self class] currentUserController]; - return [[controller saveCurrentObjectAsync:self] continueWithResult:@YES]; - }]; - } - } - // Use a nil session token for objects saved during a signup. - BFTask *saveChildren = [self _saveChildrenInBackgroundWithCurrentUser:currentUser sessionToken:token]; - PFOperationSet *changes = [self unsavedChanges]; - [self startSave]; - - return [[[toAwait continueWithBlock:^id(BFTask *task) { - return saveChildren; - }] continueWithSuccessBlock:^id(BFTask *task) { - // We need to construct the signup command lazily, because saving the children - // may change the way the object itself is serialized. - PFRESTCommand *command = [self _currentSignUpCommandForChanges:changes]; - return [[Parse _currentManager].commandRunner runCommandAsync:command - withOptions:PFCommandRunningOptionRetryIfFailed]; - }] continueWithBlock:^id(BFTask *task) { - return [self handleSignUpResultAsync:task]; - }]; - }]; - } -} - -- (void)stripAnonymity { - @synchronized ([self lock]) { - if ([PFAnonymousUtils isLinkedWithUser:self]) { - NSString *authType = PFAnonymousUserAuthenticationType; - - [self.linkedServiceNames removeObject:authType]; - - if (self.objectId) { - self.authData[authType] = [NSNull null]; - } else { - [self.authData removeObjectForKey:authType]; - } - dirty = YES; - } - } -} - -- (void)restoreAnonymity:(id)anonymousData { - @synchronized ([self lock]) { - if (anonymousData && anonymousData != [NSNull null]) { - NSString *authType = PFAnonymousUserAuthenticationType; - [self.linkedServiceNames addObject:authType]; - self.authData[authType] = anonymousData; - } - } -} - -///-------------------------------------- -#pragma mark - Saving -///-------------------------------------- - -- (PFRESTCommand *)_constructSaveCommandForChanges:(PFOperationSet *)changes - sessionToken:(NSString *)token - objectEncoder:(PFEncoder *)encoder { - // If we are curent user - use the latest available session token, as it might have been changed since - // this command was enqueued. - if ([self isCurrentUser]) { - token = self.sessionToken; - } - return [super _constructSaveCommandForChanges:changes - sessionToken:token - objectEncoder:encoder]; -} - -///-------------------------------------- -#pragma mark - REST operations -///-------------------------------------- - -- (void)mergeFromRESTDictionary:(NSDictionary *)object withDecoder:(PFDecoder *)decoder { - @synchronized ([self lock]) { - NSMutableDictionary *restDictionary = [object mutableCopy]; - - PFMutableUserState *state = [self._state mutableCopy]; - if (object[PFUserSessionTokenRESTKey] != nil) { - state.sessionToken = object[PFUserSessionTokenRESTKey]; - [restDictionary removeObjectForKey:PFUserSessionTokenRESTKey]; - } - - if (object[PFUserAuthDataRESTKey] != nil) { - NSDictionary *newAuthData = object[PFUserAuthDataRESTKey]; - [newAuthData enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - self.authData[key] = obj; - if (obj != nil) { - [self.linkedServiceNames addObject:key]; - } - [self synchronizeAuthDataWithAuthType:key]; - }]; - - [restDictionary removeObjectForKey:PFUserAuthDataRESTKey]; - } - - self._state = state; - - [super mergeFromRESTDictionary:restDictionary withDecoder:decoder]; - } -} - -- (NSDictionary *)RESTDictionaryWithObjectEncoder:(PFEncoder *)objectEncoder - operationSetUUIDs:(NSArray **)operationSetUUIDs - state:(PFObjectState *)state - operationSetQueue:(NSArray *)queue { - @synchronized (self.lock) { - NSMutableArray *cleanQueue = [queue mutableCopy]; - [queue enumerateObjectsUsingBlock:^(PFOperationSet *operationSet, NSUInteger idx, BOOL *stop) { - // Remove operations for `password` field, to not let it persist to LDS. - if (operationSet[PFUserPasswordRESTKey]) { - operationSet = [operationSet copy]; - [operationSet removeObjectForKey:PFUserPasswordRESTKey]; - - cleanQueue[idx] = operationSet; - } - }]; - return [super RESTDictionaryWithObjectEncoder:objectEncoder - operationSetUUIDs:operationSetUUIDs - state:state - operationSetQueue:cleanQueue]; - } -} - -///-------------------------------------- -#pragma mark - Revocable Session -///-------------------------------------- - -+ (dispatch_queue_t)_revocableSessionSynchronizationQueue { - static dispatch_queue_t queue; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - queue = dispatch_queue_create("com.parse.user.revocableSession", DISPATCH_QUEUE_CONCURRENT); - }); - return queue; -} - -+ (BOOL)_isRevocableSessionEnabled { - __block BOOL value = NO; - dispatch_sync([self _revocableSessionSynchronizationQueue], ^{ - value = revocableSessionEnabled_; - }); - return value; -} - -+ (void)_setRevocableSessionEnabled:(BOOL)enabled { - dispatch_barrier_sync([self _revocableSessionSynchronizationQueue], ^{ - revocableSessionEnabled_ = enabled; - }); -} - -+ (BFTask *)_upgradeToRevocableSessionInBackground { - PFCurrentUserController *controller = [[self class] currentUserController]; - return [[controller getCurrentUserAsyncWithOptions:0] continueWithSuccessBlock:^id(BFTask *task) { - PFUser *currentUser = task.result; - NSString *sessionToken = currentUser.sessionToken; - - // Bail-out early if session token is already revocable. - if ([PFSessionUtilities isSessionTokenRevocable:sessionToken]) { - return [BFTask taskWithResult:currentUser]; - } - return [currentUser _upgradeToRevocableSessionInBackground]; - }]; -} - -- (BFTask *)_upgradeToRevocableSessionInBackground { - @weakify(self); - return [self.taskQueue enqueue:^BFTask *(BFTask *toAwait) { - return [toAwait continueAsyncWithBlock:^id(BFTask *task) { - @strongify(self); - - NSString *token = nil; - @synchronized(self.lock) { - token = self.sessionToken; - } - - // Check session token here as well, to make sure we didn't upgrade the token in between. - if ([PFSessionUtilities isSessionTokenRevocable:token]) { - return [BFTask taskWithResult:self]; - } - - PFRESTCommand *command = [PFRESTUserCommand upgradeToRevocableSessionCommandWithSessionToken:token]; - return [[[Parse _currentManager].commandRunner runCommandAsync:command - withOptions:0] continueWithSuccessBlock:^id(BFTask *task) { - NSDictionary *dictionary = [task.result result]; - PFSession *session = [PFSession _objectFromDictionary:dictionary - defaultClassName:[PFSession parseClassName] - completeData:YES]; - @synchronized(self.lock) { - PFMutableUserState *state = [self._state mutableCopy]; - state.sessionToken = session.sessionToken; - self._state = state; - } - PFCurrentUserController *controller = [[self class] currentUserController]; - return [controller saveCurrentObjectAsync:self]; - }]; - }]; - }]; -} - -///-------------------------------------- -#pragma mark - Data Source -///-------------------------------------- - -+ (PFObjectFileCodingLogic *)objectFileCodingLogic { - return [PFUserFileCodingLogic codingLogic]; -} - -+ (PFUserAuthenticationController *)authenticationController { - return [Parse _currentManager].coreManager.userAuthenticationController; -} - -+ (PFUserController *)userController { - return [Parse _currentManager].coreManager.userController; -} - -@end - -@implementation PFUser - -@dynamic _state; - -// PFUser: -@dynamic username; -@dynamic email; -@dynamic password; - -// PFUser (Private): -@dynamic authData; -@dynamic linkedServiceNames; -@dynamic isLazy; - -+ (NSString *)parseClassName { - return @"_User"; -} - -+ (instancetype)currentUser { - PFCurrentUserController *controller = [[self class] currentUserController]; - return [[controller getCurrentObjectAsync] waitForResult:nil withMainThreadWarning:NO]; -} - -- (BOOL)isCurrentUser { - @synchronized (self.lock) { - return isCurrentUser; - } -} - -- (void)setIsCurrentUser:(BOOL)aBool { - @synchronized (self.lock) { - isCurrentUser = aBool; - } -} - -///-------------------------------------- -#pragma mark - Log In -///-------------------------------------- - -+ (instancetype)logInWithUsername:(NSString *)username password:(NSString *)password { - return [self logInWithUsername:username password:password error:nil]; -} - -+ (instancetype)logInWithUsername:(NSString *)username password:(NSString *)password error:(NSError **)error { - return [[self logInWithUsernameInBackground:username password:password] waitForResult:error]; -} - -+ (BFTask *)logInWithUsernameInBackground:(NSString *)username password:(NSString *)password { - return [[self userController] logInCurrentUserAsyncWithUsername:username - password:password - revocableSession:[self _isRevocableSessionEnabled]]; -} - -+ (void)logInWithUsernameInBackground:(NSString *)username - password:(NSString *)password - block:(PFUserResultBlock)block { - [[self logInWithUsernameInBackground:username password:password] thenCallBackOnMainThreadAsync:block]; -} - -+ (void)logInWithUsernameInBackground:(NSString *)username - password:(NSString *)password - target:(id)target - selector:(SEL)selector { - [self logInWithUsernameInBackground:username password:password block:^(PFUser *user, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:user object:error]; - }]; -} - -///-------------------------------------- -#pragma mark - Third-party Authentication -///-------------------------------------- - -+ (void)registerAuthenticationDelegate:(id)delegate forAuthType:(NSString *)authType { - [[self authenticationController] registerAuthenticationDelegate:delegate forAuthType:authType]; -} - -#pragma mark Log In - -+ (BFTask *)logInWithAuthTypeInBackground:(NSString *)authType authData:(NSDictionary *)authData { - PFParameterAssert(authType, @"Can't log in without `authType`."); - PFParameterAssert(authData, @"Can't log in without `authData`."); - PFUserAuthenticationController *controller = [self authenticationController]; - PFConsistencyAssert([controller authenticationDelegateForAuthType:authType], - @"No registered authentication delegate found for `%@` authentication type. " - @"Register a delegate first via PFUser.registerAuthenticationDelegate(delegate, forAuthType:)", authType); - return [[self authenticationController] logInUserAsyncWithAuthType:authType authData:authData]; -} - -#pragma mark Link - -- (BFTask *)linkWithAuthTypeInBackground:(NSString *)authType authData:(NSDictionary *)newAuthData { - PFParameterAssert(authType, @"Can't link without `authType`."); - PFParameterAssert(authData, @"Can't link without `authData`."); - PFUserAuthenticationController *controller = [[self class] authenticationController]; - PFConsistencyAssert([controller authenticationDelegateForAuthType:authType], - @"No registered authentication delegate found for `%@` authentication type. " - @"Register a delegate first via PFUser.registerAuthenticationDelegate(delegate, forAuthType:)", authType); - - @weakify(self); - return [self.taskQueue enqueue:^BFTask *(BFTask *toAwait) { - return [toAwait continueWithBlock:^id(BFTask *task) { - @strongify(self); - - NSDictionary *oldAnonymousData = nil; - - @synchronized (self.lock) { - self.authData[authType] = newAuthData; - [self.linkedServiceNames addObject:authType]; - - oldAnonymousData = self.authData[PFAnonymousUserAuthenticationType]; - [self stripAnonymity]; - - dirty = YES; - } - - return [[self saveAsync:nil] continueAsyncWithBlock:^id(BFTask *task) { - if (task.result) { - [self synchronizeAuthDataWithAuthType:authType]; - } else { - @synchronized (self.lock) { - [self.authData removeObjectForKey:authType]; - [self.linkedServiceNames removeObject:authType]; - [self restoreAnonymity:oldAnonymousData]; - } - } - return task; - }]; - }]; - }]; -} - -#pragma mark Unlink - -- (BFTask *)unlinkWithAuthTypeInBackground:(NSString *)authType { - return [BFTask taskFromExecutor:[BFExecutor defaultPriorityBackgroundExecutor] withBlock:^id{ - @synchronized (self.lock) { - if (self.authData[authType]) { - self.authData[authType] = [NSNull null]; - dirty = YES; - return [self saveInBackground]; - } - } - return @YES; - }]; -} - -#pragma mark Linked - -- (BOOL)isLinkedWithAuthType:(NSString *)authType { - PFParameterAssert(authType, @"Authentication type can't be `nil`."); - @synchronized(self.lock) { - return [self.linkedServiceNames containsObject:authType]; - } -} - -#pragma mark Private - -+ (void)_unregisterAuthenticationDelegateForAuthType:(NSString *)authType { - [[[self class] authenticationController] unregisterAuthenticationDelegateForAuthType:authType]; -} - -///-------------------------------------- -#pragma mark - Become -///-------------------------------------- - -+ (instancetype)become:(NSString *)sessionToken { - return [self become:sessionToken error:nil]; -} - -+ (instancetype)become:(NSString *)sessionToken error:(NSError **)error { - return [[self becomeInBackground:sessionToken] waitForResult:error]; -} - -+ (BFTask *)becomeInBackground:(NSString *)sessionToken { - PFParameterAssert(sessionToken, @"Session Token must be provided for login."); - return [[self userController] logInCurrentUserAsyncWithSessionToken:sessionToken]; -} - -+ (void)becomeInBackground:(NSString *)sessionToken block:(PFUserResultBlock)block { - [[self becomeInBackground:sessionToken] thenCallBackOnMainThreadAsync:block]; -} - -+ (void)becomeInBackground:(NSString *)sessionToken target:(id)target selector:(SEL)selector { - [self becomeInBackground:sessionToken block:^(PFUser *user, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:user object:error]; - }]; -} - -///-------------------------------------- -#pragma mark - Revocable Sessions -///-------------------------------------- - -+ (BFTask *)enableRevocableSessionInBackground { - if ([self _isRevocableSessionEnabled]) { - return [BFTask taskWithResult:nil]; - } - [self _setRevocableSessionEnabled:YES]; - return [self _upgradeToRevocableSessionInBackground]; -} - -+ (void)enableRevocableSessionInBackgroundWithBlock:(PFUserSessionUpgradeResultBlock)block { - [[self enableRevocableSessionInBackground] continueWithBlock:^id(BFTask *task) { - block(task.error); - return nil; - }]; -} - -///-------------------------------------- -#pragma mark - Request Password Reset -///-------------------------------------- - -+ (BOOL)requestPasswordResetForEmail:(NSString *)email { - return [self requestPasswordResetForEmail:email error:nil]; -} - -+ (BOOL)requestPasswordResetForEmail:(NSString *)email error:(NSError **)error { - return [[[self requestPasswordResetForEmailInBackground:email] waitForResult:error] boolValue]; -} - -+ (BFTask *)requestPasswordResetForEmailInBackground:(NSString *)email { - PFParameterAssert(email, @"Email should be provided to request password reset."); - return [[[self userController] requestPasswordResetAsyncForEmail:email] continueWithSuccessResult:@YES]; -} - -+ (void)requestPasswordResetForEmailInBackground:(NSString *)email block:(PFBooleanResultBlock)block { - [[self requestPasswordResetForEmailInBackground:email] thenCallBackOnMainThreadWithBoolValueAsync:block]; -} - -+ (void)requestPasswordResetForEmailInBackground:(NSString *)email target:(id)target selector:(SEL)selector { - [self requestPasswordResetForEmailInBackground:email block:^(BOOL succeeded, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; - }]; -} - -///-------------------------------------- -#pragma mark - Logging out -///-------------------------------------- - -+ (void)logOut { - [[self logOutInBackground] waitForResult:nil withMainThreadWarning:NO]; -} - -+ (BFTask *)logOutInBackground { - PFCurrentUserController *controller = [[self class] currentUserController]; - return [controller logOutCurrentUserAsync]; -} - -+ (void)logOutInBackgroundWithBlock:(PFUserLogoutResultBlock)block { - [[self logOutInBackground] continueWithExecutor:[BFExecutor mainThreadExecutor] withBlock:^id(BFTask *task) { - block(task.error); - return nil; - }]; -} - -- (BFTask *)_logOutAsync { - //TODO: (nlutsenko) Maybe add this to `taskQueue`? - - NSString *token = nil; - NSMutableArray *tasks = [NSMutableArray array]; - @synchronized(self.lock) { - [self.authData enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - BFTask *task = [self _logOutAsyncWithAuthType:key]; - [tasks addObject:task]; - }]; - - self.isCurrentUser = NO; - - token = [self.sessionToken copy]; - - PFMutableUserState *state = [self._state mutableCopy]; - state.sessionToken = nil; - self._state = state; - } - - BFTask *task = [BFTask taskForCompletionOfAllTasks:tasks]; - - if ([PFSessionUtilities isSessionTokenRevocable:token]) { - return [task continueWithExecutor:[BFExecutor defaultExecutor] withBlock:^id(BFTask *task) { - return [[[self class] userController] logOutUserAsyncWithSessionToken:token]; - }]; - } - return task; -} - -///-------------------------------------- -#pragma mark - Accessors -///-------------------------------------- - -- (void)setObject:(id)object forKey:(NSString *)key { - PFParameterAssert(_PFUserIsWritablePropertyForKey(key), - @"Can't remove the '%@' field of a PFUser.", key); - if ([key isEqualToString:PFUserUsernameRESTKey]) { - [self stripAnonymity]; - } - [super setObject:object forKey:key]; -} - -- (void)removeObjectForKey:(NSString *)key { - PFParameterAssert(_PFUserIsRemovablePropertyForKey(key), - @"Can't remove the '%@' field of a PFUser.", key); - [super removeObjectForKey:key]; -} - -- (NSMutableDictionary *)authData { - @synchronized ([self lock]) { - if (!authData) { - authData = [[NSMutableDictionary alloc] init]; - } - } - return authData; -} - -- (NSMutableSet *)linkedServiceNames { - @synchronized ([self lock]) { - if (!linkedServiceNames) { - linkedServiceNames = [[NSMutableSet alloc] init]; - } - } - return linkedServiceNames; -} - -+ (instancetype)user { - return [self object]; -} - -- (BFTask *)saveAsync:(BFTask *)toAwait { - if (!toAwait) { - toAwait = [BFTask taskWithResult:nil]; - } - - // This breaks a rare deadlock scenario where on one thread, user.lock is acquired before taskQueue.lock sometimes, - // but not always. Using continueAsyncWithBlock unlocks from the taskQueue, and solves the proplem. - return [toAwait continueAsyncWithBlock:^id(BFTask *task) { - @synchronized ([self lock]) { - if (self.isLazy) { - return [[self resolveLazinessAsync:toAwait] continueAsyncWithSuccessBlock:^id(BFTask *task) { - return @(!!task.result); - }]; - } - } - - return [super saveAsync:toAwait]; - }]; -} - -- (BFTask *)fetchAsync:(BFTask *)toAwait { - if ([self isLazy]) { - return [BFTask taskWithResult:@YES]; - } - - return [[super fetchAsync:toAwait] continueAsyncWithSuccessBlock:^id(BFTask *fetchAsyncTask) { - if ([self isCurrentUser]) { - [self cleanUpAuthData]; - PFCurrentUserController *controller = [[self class] currentUserController]; - return [[controller saveCurrentObjectAsync:self] continueAsyncWithBlock:^id(BFTask *task) { - return fetchAsyncTask.result; - }]; - } - return fetchAsyncTask.result; - }]; -} - -- (instancetype)fetch:(NSError **)error { - if (self.isLazy) { - return self; - } - return [super fetch:error]; -} - -- (void)fetchInBackgroundWithBlock:(PFObjectResultBlock)block { - if (self.isLazy) { - if (block) { - block(self, nil); - return; - } - } - [super fetchInBackgroundWithBlock:^(PFObject *result, NSError *error) { - if (block) { - block(result, error); - } - }]; -} - -- (BOOL)signUp { - return [self signUp:nil]; -} - -- (BOOL)signUp:(NSError **)error { - return [[[self signUpInBackground] waitForResult:error] boolValue]; -} - -- (BFTask *)signUpInBackground { - return [self.taskQueue enqueue:^BFTask *(BFTask *toAwait) { - return [self signUpAsync:toAwait]; - }]; -} - -- (void)signUpInBackgroundWithTarget:(id)target selector:(SEL)selector { - [self signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { - [PFInternalUtils safePerformSelector:selector withTarget:target object:@(succeeded) object:error]; - }]; -} - -- (BOOL)isAuthenticated { - PFUser *currentUser = [[self class] currentUser]; - return [self _isAuthenticatedWithCurrentUser:currentUser]; -} - -- (BOOL)_isAuthenticatedWithCurrentUser:(PFUser *)currentUser { - @synchronized ([self lock]) { - BOOL authenticated = self.isLazy || self.sessionToken; - if (!authenticated && currentUser != nil) { - authenticated = [self.objectId isEqualToString:currentUser.objectId]; - } else { - authenticated = self.isCurrentUser; - } - return authenticated; - } -} - -- (BOOL)isNew { - return self._state.isNew; -} - -- (NSString *)sessionToken { - return self._state.sessionToken; -} - -- (void)signUpInBackgroundWithBlock:(PFBooleanResultBlock)block { - @synchronized ([self lock]) { - if (self.objectId) { - // For anonymous users, there may be an objectId. Setting the userName - // will have removed the anonymous link and set the value in the authData - // object to [NSNull null], so we can just treat it like a save operation. - if (authData[PFAnonymousUserAuthenticationType] == [NSNull null]) { - [self saveInBackgroundWithBlock:block]; - return; - } - } - [[self signUpInBackground] thenCallBackOnMainThreadWithBoolValueAsync:block]; - } -} - -+ (void)enableAutomaticUser { - [Parse _currentManager].coreManager.currentUserController.automaticUsersEnabled = YES; -} - -///-------------------------------------- -#pragma mark - PFObjectPrivateSubclass -///-------------------------------------- - -#pragma mark State - -+ (PFObjectState *)_newObjectStateWithParseClassName:(NSString *)className - objectId:(NSString *)objectId - isComplete:(BOOL)complete { - return [PFUserState stateWithParseClassName:className objectId:objectId isComplete:complete]; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/PFUserAuthenticationDelegate.h b/FoodbLog/Pods/Parse/Parse/PFUserAuthenticationDelegate.h deleted file mode 100644 index d51c107..0000000 --- a/FoodbLog/Pods/Parse/Parse/PFUserAuthenticationDelegate.h +++ /dev/null @@ -1,36 +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. - */ - -#import - -#import - -PF_ASSUME_NONNULL_BEGIN - -/*! - Provides a general interface for delegation of third party authentication with s. - */ -@protocol PFUserAuthenticationDelegate - -/*! - @abstract Called when restoring third party authentication credentials that have been serialized, - such as session keys, user id, etc. - - @note This method will be executed on a background thread. - - @param authData The auth data for the provider. This value may be `nil` when unlinking an account. - - @returns `YES` - if the `authData` was succesfully synchronized, - or `NO` if user should not longer be associated because of bad `authData`. - */ -- (BOOL)restoreAuthenticationWithAuthData:(PF_NULLABLE NSDictionary PF_GENERIC(NSString *, NSString *) *)authData; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Parse.h b/FoodbLog/Pods/Parse/Parse/Parse.h deleted file mode 100644 index 52cd000..0000000 --- a/FoodbLog/Pods/Parse/Parse/Parse.h +++ /dev/null @@ -1,195 +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. - */ - -#import - -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import - -#if !TARGET_OS_WATCH - -#import -#import - -#endif - -#if TARGET_OS_IOS - -#import -#import -#import - -#endif - -PF_ASSUME_NONNULL_BEGIN - -/*! - The `Parse` class contains static functions that handle global configuration for the Parse framework. - */ -@interface Parse : NSObject - -///-------------------------------------- -/// @name Connecting to Parse -///-------------------------------------- - -/*! - @abstract Sets the applicationId and clientKey of your application. - - @param applicationId The application id of your Parse application. - @param clientKey The client key of your Parse application. - */ -+ (void)setApplicationId:(NSString *)applicationId clientKey:(NSString *)clientKey; - -/*! - @abstract The current application id that was used to configure Parse framework. - */ -+ (NSString *)getApplicationId; - -/*! - @abstract The current client key that was used to configure Parse framework. - */ -+ (NSString *)getClientKey; - -///-------------------------------------- -/// @name Enabling Local Datastore -///-------------------------------------- - -/*! - @abstract Enable pinning in your application. This must be called before your application can use - pinning. The recommended way is to call this method before `setApplicationId:clientKey:`. - */ -+ (void)enableLocalDatastore; - -/*! - @abstract Flag that indicates whether Local Datastore is enabled. - - @returns `YES` if Local Datastore is enabled, otherwise `NO`. - */ -+ (BOOL)isLocalDatastoreEnabled; - -///-------------------------------------- -/// @name Enabling Extensions Data Sharing -///-------------------------------------- - -/*! - @abstract Enables data sharing with an application group identifier. - - @discussion After enabling - Local Datastore, `currentUser`, `currentInstallation` and all eventually commands - are going to be available to every application/extension in a group that have the same Parse applicationId. - - @warning This method is required to be called before . - - @param groupIdentifier Application Group Identifier to share data with. - */ -+ (void)enableDataSharingWithApplicationGroupIdentifier:(NSString *)groupIdentifier PF_EXTENSION_UNAVAILABLE("Use `enableDataSharingWithApplicationGroupIdentifier:containingApplication:`.") PF_WATCH_UNAVAILABLE; - -/*! - @abstract Enables data sharing with an application group identifier. - - @discussion After enabling - Local Datastore, `currentUser`, `currentInstallation` and all eventually commands - are going to be available to every application/extension in a group that have the same Parse applicationId. - - @warning This method is required to be called before . - This method can only be used by application extensions. - - @param groupIdentifier Application Group Identifier to share data with. - @param bundleIdentifier Bundle identifier of the containing application. - */ -+ (void)enableDataSharingWithApplicationGroupIdentifier:(NSString *)groupIdentifier - containingApplication:(NSString *)bundleIdentifier PF_WATCH_UNAVAILABLE; - -/*! - @abstract Application Group Identifier for Data Sharing - - @returns `NSString` value if data sharing is enabled, otherwise `nil`. - */ -+ (NSString *)applicationGroupIdentifierForDataSharing PF_WATCH_UNAVAILABLE; - -/*! - @abstract Containing application bundle identifier. - - @returns `NSString` value if data sharing is enabled, otherwise `nil`. - */ -+ (NSString *)containingApplicationBundleIdentifierForDataSharing PF_WATCH_UNAVAILABLE; - -#if PARSE_IOS_ONLY - -///-------------------------------------- -/// @name Configuring UI Settings -///-------------------------------------- - -/*! - @abstract Set whether to show offline messages when using a Parse view or view controller related classes. - - @param enabled Whether a `UIAlertView` should be shown when the device is offline - and network access is required from a view or view controller. - - @deprecated This method has no effect. - */ -+ (void)offlineMessagesEnabled:(BOOL)enabled PARSE_DEPRECATED("This method is deprecated and has no effect."); - -/*! - @abstract Set whether to show an error message when using a Parse view or view controller related classes - and a Parse error was generated via a query. - - @param enabled Whether a `UIAlertView` should be shown when an error occurs. - - @deprecated This method has no effect. - */ -+ (void)errorMessagesEnabled:(BOOL)enabled PARSE_DEPRECATED("This method is deprecated and has no effect."); - -#endif - -///-------------------------------------- -/// @name Logging -///-------------------------------------- - -/*! - @abstract Sets the level of logging to display. - - @discussion By default: - - If running inside an app that was downloaded from iOS App Store - it is set to - - All other cases - it is set to - - @param logLevel Log level to set. - @see PFLogLevel - */ -+ (void)setLogLevel:(PFLogLevel)logLevel; - -/*! - @abstract Log level that will be displayed. - - @discussion By default: - - If running inside an app that was downloaded from iOS App Store - it is set to - - All other cases - it is set to - - @returns A value. - @see PFLogLevel - */ -+ (PFLogLevel)logLevel; - -@end - -PF_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/Parse/Parse/Parse.m b/FoodbLog/Pods/Parse/Parse/Parse.m deleted file mode 100644 index 4bafd45..0000000 --- a/FoodbLog/Pods/Parse/Parse/Parse.m +++ /dev/null @@ -1,235 +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. - */ - -#import "BFTask+Private.h" -#import "Parse.h" -#import "ParseInternal.h" -#import "ParseManager.h" -#import "PFEventuallyPin.h" -#import "PFObject+Subclass.h" -#import "PFOfflineStore.h" -#import "PFPin.h" -#import "PFPinningEventuallyQueue.h" -#import "PFUserPrivate.h" -#import "PFLogger.h" -#import "PFSession.h" -#import "PFFileManager.h" -#import "PFApplication.h" -#import "PFKeychainStore.h" -#import "PFLogging.h" -#import "PFObjectSubclassingController.h" - -#if !TARGET_OS_WATCH -#import "PFInstallationPrivate.h" -#if TARGET_OS_IOS -#import "PFProduct+Private.h" -#endif -#endif - -#import "PFCategoryLoader.h" - -@implementation Parse - -static ParseManager *currentParseManager_; - -static BOOL shouldEnableLocalDatastore_; - -static NSString *applicationGroupIdentifier_; -static NSString *containingApplicationBundleIdentifier_; - -+ (void)initialize { - if (self == [Parse class]) { - // Load all private categories, that we have... - // Without this call - private categories - will require `-ObjC` in linker flags. - // By explicitly calling empty method - we can avoid that. - [PFCategoryLoader loadPrivateCategories]; - } -} - -///-------------------------------------- -#pragma mark - Connect -///-------------------------------------- - -+ (void)setApplicationId:(NSString *)applicationId clientKey:(NSString *)clientKey { - PFConsistencyAssert([applicationId length], @"'applicationId' should not be nil."); - PFConsistencyAssert([clientKey length], @"'clientKey' should not be nil."); - - // Setup new manager first, so it's 100% ready whenever someone sends a request for anything. - ParseManager *manager = [[ParseManager alloc] initWithApplicationId:applicationId clientKey:clientKey]; - [manager configureWithApplicationGroupIdentifier:applicationGroupIdentifier_ - containingApplicationIdentifier:containingApplicationBundleIdentifier_ - enabledLocalDataStore:shouldEnableLocalDatastore_]; - currentParseManager_ = manager; - - shouldEnableLocalDatastore_ = NO; - - PFObjectSubclassingController *subclassingController = [PFObjectSubclassingController defaultController]; - // Register built-in subclasses of PFObject so they get used. - // We're forced to register subclasses directly this way, in order to prevent a deadlock. - // If we ever switch to bundle scanning, this code can go away. - [subclassingController registerSubclass:[PFUser class]]; - [subclassingController registerSubclass:[PFSession class]]; - [subclassingController registerSubclass:[PFRole class]]; - [subclassingController registerSubclass:[PFPin class]]; - [subclassingController registerSubclass:[PFEventuallyPin class]]; -#if !TARGET_OS_WATCH - [subclassingController registerSubclass:[PFInstallation class]]; -#if TARGET_OS_IOS - [subclassingController registerSubclass:[PFProduct class]]; -#endif -#endif - -#if TARGET_OS_IOS - [PFNetworkActivityIndicatorManager sharedManager].enabled = YES; -#endif - - [currentParseManager_ preloadDiskObjectsToMemoryAsync]; - - [[self parseModulesCollection] parseDidInitializeWithApplicationId:applicationId clientKey:clientKey]; -} - -+ (NSString *)getApplicationId { - PFConsistencyAssert(currentParseManager_, - @"You have to call setApplicationId:clientKey: on Parse to configure Parse."); - return currentParseManager_.applicationId; -} - -+ (NSString *)getClientKey { - PFConsistencyAssert(currentParseManager_, - @"You have to call setApplicationId:clientKey: on Parse to configure Parse."); - return currentParseManager_.clientKey; -} - -///-------------------------------------- -#pragma mark - Extensions Data Sharing -///-------------------------------------- - -+ (void)enableDataSharingWithApplicationGroupIdentifier:(NSString *)groupIdentifier { - PFConsistencyAssert(!currentParseManager_, - @"'enableDataSharingWithApplicationGroupIdentifier:' must be called before 'setApplicationId:clientKey'"); - PFParameterAssert([groupIdentifier length], @"'groupIdentifier' should not be nil."); - PFConsistencyAssert(![PFApplication currentApplication].extensionEnvironment, @"This method cannot be used in application extensions."); - PFConsistencyAssert([PFFileManager isApplicationGroupContainerReachableForGroupIdentifier:groupIdentifier], - @"ApplicationGroupContainer is unreachable. Please double check your Xcode project settings."); - applicationGroupIdentifier_ = [groupIdentifier copy]; -} - -+ (void)enableDataSharingWithApplicationGroupIdentifier:(NSString *)groupIdentifier - containingApplication:(NSString *)bundleIdentifier { - PFConsistencyAssert(!currentParseManager_, - @"'enableDataSharingWithApplicationGroupIdentifier:containingApplication:' must be called before 'setApplicationId:clientKey'"); - PFParameterAssert([groupIdentifier length], @"'groupIdentifier' should not be nil."); - PFParameterAssert([bundleIdentifier length], @"Containing application bundle identifier should not be nil."); - PFConsistencyAssert([PFApplication currentApplication].extensionEnvironment, @"This method can only be used in application extensions."); - PFConsistencyAssert([PFFileManager isApplicationGroupContainerReachableForGroupIdentifier:groupIdentifier], - @"ApplicationGroupContainer is unreachable. Please double check your Xcode project settings."); - - applicationGroupIdentifier_ = groupIdentifier; - containingApplicationBundleIdentifier_ = bundleIdentifier; -} - -+ (NSString *)applicationGroupIdentifierForDataSharing { - return applicationGroupIdentifier_; -} - -+ (NSString *)containingApplicationBundleIdentifierForDataSharing { - return containingApplicationBundleIdentifier_; -} - -+ (void)_resetDataSharingIdentifiers { - applicationGroupIdentifier_ = nil; - containingApplicationBundleIdentifier_ = nil; -} - -///-------------------------------------- -#pragma mark - Local Datastore -///-------------------------------------- - -+ (void)enableLocalDatastore { - PFConsistencyAssert(!currentParseManager_, - @"'enableLocalDataStore' must be called before 'setApplicationId:clientKey:'"); - - // Lazily enableLocalDatastore after init. We can't use ParseModule because - // ParseModule isn't processed in main thread and may cause race condition. - shouldEnableLocalDatastore_ = YES; -} - -+ (BOOL)isLocalDatastoreEnabled { - if (!currentParseManager_) { - return shouldEnableLocalDatastore_; - } - return currentParseManager_.offlineStoreLoaded; -} - -///-------------------------------------- -#pragma mark - User Interface -///-------------------------------------- - -#if PARSE_IOS_ONLY - -+ (void)offlineMessagesEnabled:(BOOL)enabled { - // Deprecated method - shouldn't do anything. -} - -+ (void)errorMessagesEnabled:(BOOL)enabled { - // Deprecated method - shouldn't do anything. -} - -#endif - -///-------------------------------------- -#pragma mark - Logging -///-------------------------------------- - -+ (void)setLogLevel:(PFLogLevel)logLevel { - [PFLogger sharedLogger].logLevel = logLevel; -} - -+ (PFLogLevel)logLevel { - return [PFLogger sharedLogger].logLevel; -} - -///-------------------------------------- -#pragma mark - Private -///-------------------------------------- - -+ (ParseManager *)_currentManager { - return currentParseManager_; -} - -+ (void)_clearCurrentManager { - currentParseManager_ = nil; -} - -///-------------------------------------- -#pragma mark - Modules -///-------------------------------------- - -+ (void)enableParseModule:(id)module { - [[self parseModulesCollection] addParseModule:module]; -} - -+ (void)disableParseModule:(id)module { - [[self parseModulesCollection] removeParseModule:module]; -} - -+ (BOOL)isModuleEnabled:(id)module { - return [[self parseModulesCollection] containsModule:module]; -} - -+ (ParseModuleCollection *)parseModulesCollection { - static ParseModuleCollection *collection; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - collection = [[ParseModuleCollection alloc] init]; - }); - return collection; -} - -@end diff --git a/FoodbLog/Pods/Parse/Parse/Resources/en.lproj/Parse.strings b/FoodbLog/Pods/Parse/Parse/Resources/en.lproj/Parse.strings deleted file mode 100644 index c1c3414638244fb653c7afba152e4094c69d44b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmXwwI|_g>5JX>{Q!JJ#^Z;UKXW<#5Lr#-Qu0S(TY~65g*;&Qswi=;_2pBmAyb<9GnI@e~XI diff --git a/FoodbLog/Pods/Parse/README.md b/FoodbLog/Pods/Parse/README.md deleted file mode 100644 index c8e506b..0000000 --- a/FoodbLog/Pods/Parse/README.md +++ /dev/null @@ -1,106 +0,0 @@ -# Parse SDK for iOS/OS X - -[![Build Status][build-status-svg]][build-status-link] -[![Coverage Status][coverage-status-svg]][coverage-status-link] -[![Podspec][podspec-svg]][podspec-link] -[![License][license-svg]][license-link] -![Platforms][platforms-svg] -[![Dependencies][dependencies-svg]][dependencies-link] -[![References][references-svg]][references-link] - -A library that gives you access to the powerful Parse cloud platform from your iOS or OS X app. -For more information Parse and its features, see [the website][parse.com] and [getting started][docs]. - -## Other Parse Projects - - - [ParseUI for iOS][parseui-ios-link] - - [Parse SDK for Android][android-sdk-link] - -## Getting Started - -To use parse, head on over to the [releases][releases] page, and download the latest build. -And you're off! Take a look at the public [documentation][docs] and start building. - -**Other Installation Options** - - 1. **CocoaPods** - - Add the following line to your podfile: - - pod 'Parse' - - Run pod install, and you should now have the latest parse release. - - 2. **Compiling for yourself** - - If you want to manually compile the SDK, clone it locally, and run the following commands in the root directory of the repository: - - # To pull in extra dependencies (Bolts and OCMock) - git submodule update --init --recursive - - # To install all the gems - bundle install - - # Build & Package the Frameworks - rake package:frameworks - - Compiled frameworks will be in 2 archives: `Parse-iOS.zip` and `Parse-OSX.zip` inside the `build/release` folder, and you can link them as you'd please. - - 3. **Using Parse as a sub-project** - - You can also include parse as a subproject inside of your application if you'd prefer, although we do not recommend this, as it will increase your indexing time significantly. To do so, just drag and drop the Parse.xcodeproj file into your workspace. Note that unit tests will be unavailable if you use Parse like this, as OCMock will be unable to be found. - -## How Do I Contribute? - -We want to make contributing to this project as easy and transparent as possible. Please refer to the [Contribution Guidelines][contributing]. - -## Dependencies - -We use the following libraries as dependencies inside of Parse: - - - [Bolts][bolts-framework], for task management. - - [OCMock][ocmock-framework], for unit testing. - -## License - -``` -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. -``` - - [parse.com]: https://www.parse.com/products/ios - [docs]: https://www.parse.com/docs/ios/guide - [blog]: https://blog.parse.com/ - - [parseui-ios-link]: https://github.com/ParsePlatform/ParseUI-iOS - [android-sdk-link]: https://github.com/ParsePlatform/Parse-SDK-Android - - [releases]: https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/releases - [contributing]: https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/blob/master/CONTRIBUTING.md - - [bolts-framework]: https://github.com/BoltsFramework/Bolts-iOS - [ocmock-framework]: http://ocmock.org - - [build-status-svg]: https://travis-ci.org/ParsePlatform/Parse-SDK-iOS-OSX.svg - [build-status-link]: https://travis-ci.org/ParsePlatform/Parse-SDK-iOS-OSX/branches - - [coverage-status-svg]: https://codecov.io/github/ParsePlatform/Parse-SDK-iOS-OSX/coverage.svg?branch=master - [coverage-status-link]: https://codecov.io/github/ParsePlatform/Parse-SDK-iOS-OSX?branch=master - - [license-svg]: https://img.shields.io/badge/license-BSD-lightgrey.svg - [license-link]: https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/blob/master/LICENSE - - [podspec-svg]: https://img.shields.io/cocoapods/v/Parse.svg - [podspec-link]: https://cocoapods.org/pods/Parse - - [platforms-svg]: https://img.shields.io/badge/platform-ios%20%7C%20osx-lightgrey.svg - - [dependencies-svg]: https://img.shields.io/badge/dependencies-2-yellowgreen.svg - [dependencies-link]: https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/blob/master/Vendor - - [references-svg]: https://www.versioneye.com/objective-c/parse/reference_badge.svg - [references-link]: https://www.versioneye.com/objective-c/parse/references diff --git a/FoodbLog/Pods/ParseUI/LICENSE b/FoodbLog/Pods/ParseUI/LICENSE deleted file mode 100644 index 31425ea..0000000 --- a/FoodbLog/Pods/ParseUI/LICENSE +++ /dev/null @@ -1,17 +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. diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.h deleted file mode 100644 index 9abb31e..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/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 - -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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFCollectionViewCell.m deleted file mode 100644 index 6fb1f46..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.h deleted file mode 100644 index 88e0e85..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/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 -#import - -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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.m deleted file mode 100644 index 6ff164c..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFPurchaseTableViewCell.m +++ /dev/null @@ -1,154 +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 { - if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { - 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 = floorf(0.8f * CGRectGetHeight(bounds)); - CGFloat iconMarginY = floorf((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 = floorf((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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h deleted file mode 100644 index fe62c78..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.h +++ /dev/null @@ -1,46 +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 -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - The `PFTableViewCell` class represents a table view cell which can download and display remote images stored on Parse. - - When used in a `PFQueryTableViewController` - downloading and - displaying of the remote images are automatically managed by the controller. - */ -@interface PFTableViewCell : UITableViewCell - -/** - The imageView of the table view cell. - - @see `PFImageView` - */ -@property (nullable, nonatomic, strong, readonly) PFImageView *imageView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.m deleted file mode 100644 index 65f67cd..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Cells/PFTableViewCell.m +++ /dev/null @@ -1,120 +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 "PFTableViewCell.h" - -#import "PFRect.h" - -@interface PFTableViewCell () - -@property (nonatomic, assign) UITableViewCellStyle style; -@property (nonatomic, strong) PFImageView *customImageView; - -@end - -@implementation PFTableViewCell - -#pragma mark - -#pragma mark NSObject - -- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - _style = style; - - _customImageView = [[PFImageView alloc] initWithFrame:CGRectZero]; - [self.contentView addSubview:_customImageView]; - } - return self; -} - -#pragma mark - -#pragma mark UIView - -- (void)layoutSubviews { - [super layoutSubviews]; - - // We cannot depend on the parent class to lay out things perfectly because - // UITableViewCell layoutSubviews use its internal imageView member rather than via - // its self.imageView property, so we need to lay out things manually - - // Don't relayout anything if there is no file/image - if (!self.imageView.file && !self.imageView.image) { - return; - } - - // Value2 ignores imageView entirely - if (self.style == UITableViewCellStyleValue2) { - return; - } - - const CGRect bounds = self.contentView.bounds; - - CGFloat imageHeight = MIN(CGRectGetWidth(bounds), CGRectGetHeight(bounds)); - CGFloat imageWidth = floorf(13.0f * imageHeight / 9.0f); // Default is 13/9 aspect ratio - _customImageView.frame = PFRectMakeWithSize(CGSizeMake(imageWidth, imageHeight)); - - CGFloat imageViewRightInset = 10.0f; - CGFloat textOrigin = CGRectGetMaxX(_customImageView.frame) + imageViewRightInset; - - CGRect textLabelFrame = self.textLabel.frame; - CGRect detailTextLabelFrame = self.detailTextLabel.frame; - - switch (self.style) { - case UITableViewCellStyleDefault: - case UITableViewCellStyleSubtitle: - { - CGFloat originalTextLabelInset = CGRectGetMinX(textLabelFrame); - CGFloat originalDetailTextLabelInset = CGRectGetMinX(detailTextLabelFrame); - - CGFloat maxTextLabelWidth = CGRectGetMaxX(bounds) - textOrigin - originalTextLabelInset; - CGFloat maxDetailTextLabelWidth = CGRectGetMaxX(bounds) - textOrigin - originalDetailTextLabelInset; - - textLabelFrame.origin.x = textOrigin; - textLabelFrame.size.width = MIN(maxTextLabelWidth, CGRectGetWidth(textLabelFrame)); - - detailTextLabelFrame.origin.x = textOrigin; - detailTextLabelFrame.size.width = MIN(maxDetailTextLabelWidth, CGRectGetWidth(detailTextLabelFrame)); - } - break; - case UITableViewCellStyleValue1: - { - CGFloat maxTextLabelWidth = CGRectGetMinX(detailTextLabelFrame) - textOrigin; - - textLabelFrame.origin.x = textOrigin; - textLabelFrame.size.width = MIN(maxTextLabelWidth, CGRectGetWidth(textLabelFrame)); - } - break; - default: - break; - } - self.textLabel.frame = textLabelFrame; - self.detailTextLabel.frame = detailTextLabelFrame; -} - -#pragma mark - -#pragma mark PFImageTableViewCell - -- (PFImageView *)imageView { - return _customImageView; -} - -@end diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h deleted file mode 100644 index 4400449..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m deleted file mode 100644 index 3385edd..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h deleted file mode 100644 index e1cd474..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.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 - -#import - -/** - 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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m deleted file mode 100644 index b825bd1..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.h deleted file mode 100644 index bcf4f10..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.h +++ /dev/null @@ -1,50 +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 *)facebookButtonBackgroundColor; -+ (UIColor *)twitterButtonBackgroundColor; - -@end diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.m deleted file mode 100644 index 467d9ee..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFColor.m +++ /dev/null @@ -1,86 +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 *)facebookButtonBackgroundColor { - return [UIColor colorWithRed:58.0f/255.0f - green:89.0f/255.0f - blue:152.0f/255.0f - alpha:1.0f]; -} - -+ (UIColor *)twitterButtonBackgroundColor { - return [UIColor colorWithRed:45.0f/255.0f - green:170.0f/255.0f - blue:1.0f - alpha:1.0f]; -} - -@end diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.h deleted file mode 100644 index b7d5222..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFImage.m deleted file mode 100644 index ac01c1e..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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)ceilf([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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.h deleted file mode 100644 index e6c1f05..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFRect.m deleted file mode 100644 index 0aeb75c..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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(floorf(center.x - size.width / 2.0f), - floorf(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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.h deleted file mode 100644 index f6742b3..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Extensions/PFUIAlertView.m deleted file mode 100644 index 155f70d..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.h deleted file mode 100644 index 38c184e..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/PFImageCache.m deleted file mode 100644 index 260cd50..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/PFLocalization.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/PFLocalization.h deleted file mode 100644 index 7c0258b..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/PFLocalization.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. - * - */ - -#ifndef ParseUI_PFLocalization_h -#define ParseUI_PFLocalization_h - -#define PFLocalizedString(key, comment) \ -[[NSBundle bundleForClass:[self class]] localizedStringForKey:key value:nil table:@"ParseUI"] - -#endif diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h deleted file mode 100644 index c9772ef..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m deleted file mode 100644 index 76d2191..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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 *configuration; - -- (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; - - _buttonStyle = buttonStyle; - configuration = 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.configuration 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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h deleted file mode 100644 index c34e4db..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m deleted file mode 100644 index ba40367..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h deleted file mode 100644 index 8517180..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m deleted file mode 100644 index 5c5a076..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h deleted file mode 100644 index 75db8f2..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m deleted file mode 100644 index 9ada726..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.h deleted file mode 100644 index 2663181..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.m deleted file mode 100644 index 0e511e3..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Internal/Views/PFLoadingView.m +++ /dev/null @@ -1,80 +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 { - if (self = [super initWithFrame:frame]) { - _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 = floorf((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/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h deleted file mode 100644 index a2bce3d..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.h +++ /dev/null @@ -1,186 +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 - -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, - /** Button to login with Facebook. */ - PFLogInFieldsFacebook = 1 << 3, - /** Button to login with Twitter. */ - PFLogInFieldsTwitter = 1 << 4, - /** Signup Button. */ - PFLogInFieldsSignUpButton = 1 << 5, - /** Dismiss Button. */ - PFLogInFieldsDismissButton = 1 << 6, - - /** 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 PFLogInViewTwitterButtonAccessibilityIdentifier; -extern NSString *const PFLogInViewFacebookButtonAccessibilityIdentifier; -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 Facebook button. It is `nil` if the element is not enabled. - */ -@property (nullable, nonatomic, strong, readonly) UIButton *facebookButton; - -/** - The Twitter button. It is `nil` if the element is not enabled. - */ -@property (nullable, nonatomic, strong, readonly) UIButton *twitterButton; - -/** - 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; - -/** - The facebook/twitter login label. - - @deprecated This property is deprecated and will always be nil. - */ -@property (nullable, nonatomic, strong, readonly) UILabel *externalLogInLabel __attribute__(PARSE_UI_DEPRECATED("This property is deprecated and will always be nil.")); - -/** - The sign up label. - - @deprecated This property is deprecated and will always be nil. - */ -@property (nullable, nonatomic, strong, readonly) UILabel *signUpLabel __attribute__(PARSE_UI_DEPRECATED("This property is deprecated and will always be nil.")); - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.m deleted file mode 100644 index 4dfbc5c..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView.m +++ /dev/null @@ -1,509 +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 PFLogInViewDefaultFacebookButtonImageName = @"facebook_icon.png"; -static NSString *const PFLogInViewDefaultTwitterButtonImageName = @"twitter_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 PFLogInViewTwitterButtonAccessibilityIdentifier = @"PFLogInViewTwitterButtonAccessibilityIdentifier"; -NSString *const PFLogInViewFacebookButtonAccessibilityIdentifier = @"PFLogInViewFacebookButtonAccessibilityIdentifier"; -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 *)_defaultFacebookButtonConfiguration { - PFActionButtonConfiguration *configuration = [[PFActionButtonConfiguration alloc] initWithBackgroundImageColor:[PFColor facebookButtonBackgroundColor] - image:[PFImage imageNamed:PFLogInViewDefaultFacebookButtonImageName]]; - - [configuration setTitle:PFLocalizedString(@"Facebook", @"Facebook") - forButtonStyle:PFActionButtonStyleNormal]; - [configuration setTitle:PFLocalizedString(@"Log In with Facebook", @"Log In with Facebook") - - forButtonStyle:PFActionButtonStyleWide]; - - return configuration; -} - -+ (PFActionButtonConfiguration *)_defaultTwitterButtonConfiguration { - PFActionButtonConfiguration *configuration = [[PFActionButtonConfiguration alloc] initWithBackgroundImageColor:[PFColor twitterButtonBackgroundColor] - image:[PFImage imageNamed:PFLogInViewDefaultTwitterButtonImageName]]; - - [configuration setTitle:PFLocalizedString(@"Twitter", @"Twitter") - forButtonStyle:PFActionButtonStyleNormal]; - [configuration setTitle:PFLocalizedString(@"Log In with Twitter", @"Log In with Twitter") - - 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 & PFLogInFieldsFacebook) { - if (!_facebookButton) { - _facebookButton = [[PFActionButton alloc] initWithConfiguration:[[self class] _defaultFacebookButtonConfiguration] - buttonStyle:PFActionButtonStyleNormal]; - _facebookButton.accessibilityIdentifier = PFLogInViewFacebookButtonAccessibilityIdentifier; - [self addSubview:_facebookButton]; - } - } else { - [_facebookButton removeFromSuperview]; - _facebookButton = nil; - } - - if (_fields & PFLogInFieldsTwitter) { - if (!_twitterButton) { - _twitterButton = [[PFActionButton alloc] initWithConfiguration:[[self class] _defaultTwitterButtonConfiguration] - buttonStyle:PFActionButtonStyleNormal]; - _twitterButton.accessibilityIdentifier = PFLogInViewTwitterButtonAccessibilityIdentifier; - [self addSubview:_twitterButton]; - } - } else { - [_twitterButton removeFromSuperview]; - _twitterButton = 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); - - // 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 ([self.presentingViewController respondsToSelector:@selector(topLayoutGuide)]) { - origin.y += self.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 (_facebookButton && _twitterButton) { - CGSize buttonSize = [_facebookButton sizeThatFits:socialButtonsRect.size]; - buttonSize.width = (socialButtonsRect.size.width - socialButtonsDefaultInset) / 2.0f; - - CGRect frame = PFRectMakeWithOriginSize(socialButtonsRect.origin, buttonSize); - frame.origin.y = CGRectGetMaxY(socialButtonsRect) - buttonSize.height - socialButtonsDefaultInset; - [(PFActionButton *)_facebookButton setButtonStyle:PFActionButtonStyleNormal]; - _facebookButton.frame = frame; - - frame.origin.x = CGRectGetMaxX(frame) + socialButtonsDefaultInset; - [(PFActionButton *)_twitterButton setButtonStyle:PFActionButtonStyleNormal]; - _twitterButton.frame = frame; - - contentRect.size.height = CGRectGetMinY(frame) - CGRectGetMinY(contentRect); - socialButtonsRect = UIEdgeInsetsInsetRect(contentRect, socialButtonsRectInsets); - } else if (_facebookButton) { - CGSize buttonSize = [_facebookButton sizeThatFits:socialButtonsRect.size]; - CGRect frame = PFRectMakeWithOriginSize(socialButtonsRect.origin, buttonSize); - frame.origin.y = CGRectGetMaxY(socialButtonsRect) - buttonSize.height - socialButtonsDefaultInset; - _facebookButton.frame = frame; - - [(PFActionButton *)_facebookButton setButtonStyle:PFActionButtonStyleWide]; - - contentRect.size.height = CGRectGetMinY(frame) - CGRectGetMinY(contentRect); - socialButtonsRect = UIEdgeInsetsInsetRect(contentRect, socialButtonsRectInsets); - } else if (_twitterButton) { - CGSize buttonSize = [_twitterButton sizeThatFits:socialButtonsRect.size]; - CGRect frame = PFRectMakeWithOriginSize(socialButtonsRect.origin, buttonSize); - frame.origin.y = CGRectGetMaxY(socialButtonsRect) - buttonSize.height - socialButtonsDefaultInset; - _twitterButton.frame = frame; - - [(PFActionButton *)_twitterButton setButtonStyle:PFActionButtonStyleWide]; - - contentRect.size.height = CGRectGetMinY(frame) - CGRectGetMinY(contentRect); - socialButtonsRect = UIEdgeInsetsInsetRect(contentRect, socialButtonsRectInsets); - } - - if (_signUpButton || _facebookButton || _twitterButton) { - 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 = floorf(36.0f * contentSizeScale.height); - - CGFloat logoAvailableHeight = floorf(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 = floorf(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 = floorf(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 = floorf(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 = floorf(36.0f * contentSizeScale.height); - CGFloat logoBottomInset = floorf(36.0f * contentSizeScale.height); - - CGFloat logoAvailableHeight = floorf(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 = floorf(size.width); - size.height = floorf(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/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h deleted file mode 100644 index 72d4ff3..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.h +++ /dev/null @@ -1,177 +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 - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@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 facebook permissions that Facebook log in requests for. - - If unspecified, the default is basic facebook permissions. - */ -@property (nullable, nonatomic, copy) NSArray *facebookPermissions; - -/** - 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; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.m deleted file mode 100644 index 34e9d8b..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInViewController.m +++ /dev/null @@ -1,593 +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 - -#import "PFActionButton.h" -#import "PFUIAlertView.h" -#import "PFLocalization.h" -#import "PFPrimaryButton.h" -#import "PFSignUpViewController.h" -#import "PFTextField.h" -#import "PFLogInView_Private.h" - -NSString *const PFLogInSuccessNotification = @"com.parse.ui.login.success"; -NSString *const PFLogInFailureNotification = @"com.parse.ui.login.failure"; -NSString *const PFLogInCancelNotification = @"com.parse.ui.login.cancel"; - -/** - This protocol exists so that we can weakly refer to messages to pass to PFFacebookUtils without - actually taking a dependency on the symbols. - */ -@protocol WeaklyReferencedFBUtils - -// FBSDKv3 -+ (void)logInWithPermissions:(NSArray *)permissions block:(PFUserResultBlock)block; -// FBSDKv4 -+ (void)logInInBackgroundWithReadPermissions:(NSArray *)permissions block:(PFUserResultBlock)block; -+ (void)logInInBackgroundWithPublishPermissions:(NSArray *)permissions block:(PFUserResultBlock)block; - -@end - -@protocol WeaklyReferenceTwitterUtils - -+ (void)logInWithBlock:(PFUserResultBlock)block; - -@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 { - if (self = [super init]) { - [self _commonInit]; - } - return self; -} - -- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { - if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { - [self _commonInit]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)decoder { - if (self = [super initWithCoder:decoder]) { - [self _commonInit]; - } - return self; -} - -- (void)_commonInit { - self.modalTransitionStyle = UIModalTransitionStyleCoverVertical; - self.modalPresentationStyle = UIModalPresentationFormSheet; - _fields = PFLogInFieldsDefault; - - _facebookPermissions = @[ @"public_profile" ]; - - 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]; - self.view = _logInView; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - [self setupHandlers]; -} - -- (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; - } - } -} - -- (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)setupHandlers { - [_logInView.dismissButton addTarget:self - action:@selector(_dismissAction) - forControlEvents:UIControlEventTouchUpInside]; - - _logInView.usernameField.delegate = self; - _logInView.passwordField.delegate = self; - [_logInView.logInButton addTarget:self action:@selector(_loginAction) forControlEvents:UIControlEventTouchUpInside]; - [_logInView.passwordForgottenButton addTarget:self - action:@selector(_forgotPasswordAction) - forControlEvents:UIControlEventTouchUpInside]; - - [_logInView.facebookButton addTarget:self - action:@selector(_loginWithFacebook) - forControlEvents:UIControlEventTouchUpInside]; - [_logInView.twitterButton addTarget:self - action:@selector(_loginWithTwitter) - forControlEvents:UIControlEventTouchUpInside]; - - [_logInView.signUpButton addTarget:self - action:@selector(_signupAction) - forControlEvents:UIControlEventTouchUpInside]; - - UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self - action:@selector(_dismissKeyboard)]; - [_logInView addGestureRecognizer:gestureRecognizer]; - gestureRecognizer.cancelsTouchesInView = NO; -} - -- (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 Log In With Facebook - -- (void)_loginWithFacebook { - if (self.loading) { - return; - } - - self.loading = YES; - if ([_logInView.facebookButton isKindOfClass:[PFActionButton class]]) { - [(PFActionButton *)_logInView.facebookButton setLoading:YES]; - } - - __weak typeof(self) wself = self; - PFUserResultBlock resultBlock = ^(PFUser *user, NSError *error) { - __strong typeof(wself) sself = wself; - sself.loading = NO; - if ([_logInView.facebookButton isKindOfClass:[PFActionButton class]]) { - [(PFActionButton *)_logInView.facebookButton setLoading:NO]; - } - - if (user) { - [sself _loginDidSucceedWithUser:user]; - } else if (error) { - [sself _loginDidFailWithError:error]; - } else { - // User cancelled login. - } - }; - - Class fbUtils = NSClassFromString(@"PFFacebookUtils"); - if ([fbUtils respondsToSelector:@selector(logInWithPermissions:block:)]) { - // Facebook SDK v3 Login - [fbUtils logInWithPermissions:_facebookPermissions block:resultBlock]; - } else if ([fbUtils respondsToSelector:@selector(logInInBackgroundWithReadPermissions:block:)]) { - // Facebook SDK v4 Login - if ([self _permissionsContainsFacebookPublishPermission:_facebookPermissions]) { - [fbUtils logInInBackgroundWithPublishPermissions:_facebookPermissions block:resultBlock]; - } else { - [fbUtils logInInBackgroundWithReadPermissions:_facebookPermissions block:resultBlock]; - } - } else { - [NSException raise:NSInternalInconsistencyException - format:@"Can't find PFFacebookUtils. Please link with ParseFacebookUtils or ParseFacebookUtilsV4 to enable login with Facebook."]; - } -} - -- (BOOL)_permissionsContainsFacebookPublishPermission:(NSArray *)permissions { - for (NSString *permission in permissions) { - if ([permission hasPrefix:@"publish"] || - [permission hasPrefix:@"manage"] || - [permission isEqualToString:@"ads_management"] || - [permission isEqualToString:@"create_event"] || - [permission isEqualToString:@"rsvp_event"]) { - return YES; - } - } - return NO; -} - -#pragma mark Log In With Twitter - -- (void)_loginWithTwitter { - if (self.loading) { - return; - } - - if ([_logInView.facebookButton isKindOfClass:[PFActionButton class]]) { - [(PFActionButton *)_logInView.twitterButton setLoading:YES]; - } - self.loading = YES; - - Class twitterUtils = NSClassFromString(@"PFTwitterUtils"); - if (twitterUtils && [twitterUtils respondsToSelector:@selector(logInWithBlock:)]) { - [twitterUtils logInWithBlock:^(PFUser *user, NSError *error) { - self.loading = NO; - if ([_logInView.facebookButton isKindOfClass:[PFActionButton class]]) { - [(PFActionButton *)_logInView.twitterButton setLoading:NO]; - } - - if (user) { - [self _loginDidSucceedWithUser:user]; - } else if (error) { - [self _loginDidFailWithError:error]; - } else { - // User cancelled login. - } - }]; - } else { - [NSException raise:NSInternalInconsistencyException - format:@"Can't find PFTwitterUtils. Please link with ParseTwitterUtils to enable login with Twitter."]; - } -} - -#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 ([_logInView.logInButton isKindOfClass:[PFPrimaryButton class]]) { - [(PFPrimaryButton *)_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/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView_Private.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/PFLogInView_Private.h deleted file mode 100644 index 7069832..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/LogInViewController/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 - -@interface PFLogInView (Private) - -@property (nonatomic, assign, readwrite) PFLogInFields fields; - -@end diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h deleted file mode 100644 index 6ee0849..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/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 -#import - -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/FoodbLog/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m deleted file mode 100644 index 544a38d..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m +++ /dev/null @@ -1,249 +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 -#import -#import - -#import "PFUIAlertView.h" -#import "PFLocalization.h" -#import "PFPurchaseTableViewCell.h" - -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 { - if (self = [super initWithStyle:UITableViewStylePlain className:[PFProduct parseClassName]]) { - 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 *error) { - if (!error) { - cell.state = PFPurchaseTableViewCellStateDownloaded; - } else { - cell.state = PFPurchaseTableViewCellStateNormal; - - NSString *title = PFLocalizedString(@"Download Error", - @"Download Error"); - [PFUIAlertView presentAlertInViewController:self withTitle:title error:error]; - } - } - progress:^(int percentDone) { - _productProgressDictionary[product.productIdentifier] = @(percentDone); - [cell.progressView setProgress:percentDone/100.0f animated:YES]; - }]; - }]; - }]; -} - -#pragma mark - -#pragma mark UITableViewDataSource - -- (UITableViewCell *)tableView:(UITableView *)tableView - cellForRowAtIndexPath:(NSIndexPath *)indexPath - object:(PFProduct *)product { - 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 }; - _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/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h deleted file mode 100644 index a09589c..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/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 -#import - -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; - -/** - 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/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m deleted file mode 100644 index 6df7599..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m +++ /dev/null @@ -1,435 +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" - -#import -#import - -#import - -#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) UIRefreshControl *refreshControl; - -@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 (self.pullToRefreshEnabled) { - self.refreshControl = [[UIRefreshControl alloc] init]; - [self.refreshControl addTarget:self - action:@selector(_refreshControlValueChanged:) - forControlEvents:UIControlEventValueChanged]; - [self.collectionView addSubview:self.refreshControl]; - 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) { - self.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) { - if (![Parse isLocalDatastoreEnabled] && - query.cachePolicy != kPFCachePolicyCacheOnly && - error.code == kPFErrorCacheMiss) { - // no-op on cache miss - return; - } - - self.loading = NO; - - if (error) { - _lastLoadCount = -1; - _currentNextPageView.animating = NO; - } else { - _currentPage = page; - _lastLoadCount = [foundObjects count]; - - if (clear) { - [_mutableObjects removeAllObjects]; - } - - [_mutableObjects addObjectsFromArray:foundObjects]; - [self.collectionView reloadData]; - } - - [self objectsDidLoad:error]; - [self.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/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h deleted file mode 100644 index 62d4a01..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h +++ /dev/null @@ -1,259 +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 -#import - -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 - -///-------------------------------------- -/// @name Creating a PFQueryTableViewController -///-------------------------------------- - -/** - Initializes with a class name of the `PFObject` that will be associated with this table. - - @param style The UITableViewStyle for the table - @param className The class name of the instances of `PFObject` that this table will display. - - @return An initialized `PFQueryTableViewController` object or `nil` if the object couldn't be created. - */ -- (instancetype)initWithStyle:(UITableViewStyle)style - className:(nullable NSString *)className NS_DESIGNATED_INITIALIZER; - -/** - Initializes with a class name of the PFObjects that will be associated with this table. - - @param className The class name of the instances of `PFObject` that this table will display. - - @return An initialized `PFQueryTableViewController` object or `nil` if the object couldn't be created. - */ -- (instancetype)initWithClassName:(nullable NSString *)className; - -///-------------------------------------- -/// @name Configuring Behavior -///-------------------------------------- - -/** - The class name of the `PFObject` this table will use as a datasource. - */ -@property (nullable, nonatomic, copy) IBInspectable NSString *parseClassName; - -/** - The key to use to display for the cell text label. - - This won't apply if you override `-tableView:cellForRowAtIndexPath:object:` - */ -@property (nullable, nonatomic, copy) IBInspectable NSString *textKey; - -/** - The key to use to display for the cell image view. - - This won't apply if you override `-tableView:cellForRowAtIndexPath:object:` - */ -@property (nullable, nonatomic, copy) IBInspectable NSString *imageKey; - -/** - The image to use as a placeholder for the cell images. - - This won't apply if you override `-tableView:cellForRowAtIndexPath:object:` - */ -@property (nullable, nonatomic, strong) IBInspectable UIImage *placeholderImage; - -/** - Whether the table should use the default loading view. Default - `YES`. - */ -@property (nonatomic, assign) IBInspectable BOOL loadingViewEnabled; - -/** - Whether the table should use the built-in pull-to-refresh feature. Default - `YES`. - */ -@property (nonatomic, assign) IBInspectable BOOL pullToRefreshEnabled; - -/** - Whether the table 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 table is actively loading new data from the server. - */ -@property (nonatomic, assign, getter=isLoading) BOOL loading; - -///-------------------------------------- -/// @name Responding to Events -///-------------------------------------- - -/** - Called when objects will loaded from Parse. If you override this method, you must - call [super objectsWillLoad] in your implementation. - */ -- (void)objectsWillLoad; - -/** - 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; - -///-------------------------------------- -/// @name Accessing Results -///-------------------------------------- - -/** - The array of instances of `PFObject` that is used as a data source. - */ -@property (nullable, nonatomic, copy, readonly) NSArray<__kindof PFObject *> *objects; - -/** - Returns an object at a particular indexPath. - - The default impementation returns the object at `indexPath.row`. - If you want to return objects in a different indexPath order, like for sections, override this method. - - @param indexPath The indexPath. - - @return The object at the specified index - */ -- (nullable PFObject *)objectAtIndexPath:(nullable NSIndexPath *)indexPath; - -/** - Removes an object at the specified index path, animated. - */ -- (void)removeObjectAtIndexPath:(nullable NSIndexPath *)indexPath; - -/** - Removes an object at the specified index path, with or without animation. - */ -- (void)removeObjectAtIndexPath:(nullable NSIndexPath *)indexPath animated:(BOOL)animated; - -/** - Removes all objects at the specified index paths, animated. - */ -- (void)removeObjectsAtIndexPaths:(nullable NSArray *)indexPaths; - -/** - Removes all objects at the specified index paths, with or without animation. - */ -- (void)removeObjectsAtIndexPaths:(nullable NSArray *)indexPaths animated:(BOOL)animated; - -/** - Clears the table of all objects. - */ -- (void)clear; - -/** - Clears the table and loads the first page of objects. - - @return An awaitable task that completes when the reload succeeds - */ -- (BFTask *> *)loadObjects; - -/** - Loads the objects of the className at the specified page and appends it to the - objects already loaded and refreshes the table. - - @param page The page of objects to load. - @param clear Whether to clear the table 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; - -///-------------------------------------- -/// @name Querying -///-------------------------------------- - -/** - Override to construct your own custom PFQuery to get the objects. - @result PFQuery that loadObjects will use to the objects for this table. - */ -- (PFQuery *)queryForTable; - -///-------------------------------------- -/// @name Data Source Methods -///-------------------------------------- - -/** - Override this method to customize each cell given a PFObject that is loaded. - - If you don't override this method, it will use a default style cell and display either - the first data key from the object, or it will display the key as specified with `textKey`, `imageKey`. - - @warning The cell should inherit from `PFTableViewCell` which is a subclass of `UITableViewCell`. - - @param tableView The table 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 PFTableViewCell *)tableView:(UITableView *)tableView - cellForRowAtIndexPath:(NSIndexPath *)indexPath - object:(nullable PFObject *)object; - -/** - Override this method to customize the cell that allows the user to load the - next page when pagination is turned on. - - @param tableView The table view object associated with this controller. - @param indexPath The indexPath of the cell. - - @return The cell that allows the user to paginate. - */ -- (nullable PFTableViewCell *)tableView:(UITableView *)tableView cellForNextPageAtIndexPath:(NSIndexPath *)indexPath; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m deleted file mode 100644 index bf7a0d0..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m +++ /dev/null @@ -1,570 +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 "PFQueryTableViewController.h" - -#import -#import -#import - -#import - -#import "PFActivityIndicatorTableViewCell.h" -#import "PFImageView.h" -#import "PFLoadingView.h" -#import "PFLocalization.h" -#import "PFTableViewCell.h" -#import "PFUIAlertView.h" - -// Add headers to kill any warnings. -// `initWithStyle:` is a UITableViewController method. -// `initWithCoder:`/`initWithNibName:bundle:` are UIViewController methods and are, for sure, available. -@interface UITableViewController () - -- (instancetype)initWithStyle:(UITableViewStyle)style NS_DESIGNATED_INITIALIZER; -- (instancetype)initWithCoder:(NSCoder *)decoder NS_DESIGNATED_INITIALIZER; -- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil NS_DESIGNATED_INITIALIZER; - -@end - -@interface PFQueryTableViewController () { - 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. - // Set to -1 when objects haven't loaded, or there was an error. - UITableViewCellSeparatorStyle _savedSeparatorStyle; -} - -@property (nonatomic, strong) PFLoadingView *loadingView; - -- (instancetype)initWithCoder:(NSCoder *)decoder NS_DESIGNATED_INITIALIZER; -- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil NS_DESIGNATED_INITIALIZER; - -@end - -@implementation PFQueryTableViewController - -#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 - if (self = [super initWithCoder:decoder]) { - [self _setupWithClassName:nil]; - } - return self; -} - -- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { - // This is used by interface builder - if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { - [self _setupWithClassName:nil]; - } - return self; -} - -- (instancetype)initWithStyle:(UITableViewStyle)style { - return [self initWithStyle:style className:nil]; -} - -- (instancetype)initWithClassName:(NSString *)className { - return [self initWithStyle:UITableViewStylePlain className:className]; -} - -- (instancetype)initWithStyle:(UITableViewStyle)style className:(NSString *)className { - if (self = [super initWithStyle:style]) { - [self _setupWithClassName:className]; - } - return self; -} - -- (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]; - - // Setup the Pull to Refresh UI if needed - if (self.pullToRefreshEnabled) { - UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; - [refreshControl addTarget:self - action:@selector(_refreshControlValueChanged:) - forControlEvents:UIControlEventValueChanged]; - self.refreshControl = refreshControl; - } -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - [self loadObjects]; -} - -- (void)viewDidLayoutSubviews { - [super viewDidLayoutSubviews]; - - self.loadingView.frame = self.tableView.bounds; -} - -- (void)setEditing:(BOOL)editing animated:(BOOL)animated { - [self.tableView beginUpdates]; - - // If we're currently showing the pagination cell, we need to hide it during editing. - if ([self paginationEnabled] && [self _shouldShowPaginationCell]) { - [self.tableView deleteRowsAtIndexPaths:@[ [self _indexPathForPaginationCell] ] - withRowAnimation:UITableViewRowAnimationAutomatic]; - } - - [super setEditing:editing animated:animated]; - - // Ensure proper re-insertion of the pagination cell. - if ([self paginationEnabled] && [self _shouldShowPaginationCell]) { - [self.tableView insertRowsAtIndexPaths:@[ [self _indexPathForPaginationCell] ] - withRowAnimation:UITableViewRowAnimationAutomatic]; - } - - [self.tableView endUpdates]; -} - -#pragma mark - -#pragma mark Data - -- (void)objectsWillLoad { - if (_firstLoad) { - _savedSeparatorStyle = self.tableView.separatorStyle; - self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - } - [self _refreshLoadingView]; -} - -- (void)objectsDidLoad:(NSError *)error { - if (_firstLoad) { - _firstLoad = NO; - self.tableView.separatorStyle = _savedSeparatorStyle; - } - [self _refreshLoadingView]; -} - -- (PFQuery *)queryForTable { - 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; -} - -// Alters a query to add functionality like pagination -- (void)_alterQuery:(PFQuery *)query forLoadingPage:(NSInteger)page { - if (self.paginationEnabled && self.objectsPerPage) { - query.limit = self.objectsPerPage; - query.skip = page * self.objectsPerPage; - } -} - -- (void)clear { - [_mutableObjects removeAllObjects]; - [self.tableView reloadData]; - _currentPage = 0; -} - -- (BFTask *> *)loadObjects { - return [self loadObjects:0 clear:YES]; -} - -- (BFTask *> *)loadObjects:(NSInteger)page clear:(BOOL)clear { - self.loading = YES; - [self objectsWillLoad]; - - PFQuery *query = [self queryForTable]; - [self _alterQuery:query forLoadingPage:page]; - - BFTaskCompletionSource *> *source = [BFTaskCompletionSource taskCompletionSource]; - [query findObjectsInBackgroundWithBlock:^(NSArray *foundObjects, NSError *error) { - if (![Parse isLocalDatastoreEnabled] && - query.cachePolicy != kPFCachePolicyCacheOnly && - error.code == kPFErrorCacheMiss) { - // no-op on cache miss - return; - } - - self.loading = NO; - - if (error) { - _lastLoadCount = -1; - [self _refreshPaginationCell]; - } else { - _currentPage = page; - _lastLoadCount = [foundObjects count]; - - if (clear) { - [_mutableObjects removeAllObjects]; - } - - [_mutableObjects addObjectsFromArray:foundObjects]; - [self.tableView reloadData]; - } - - [self objectsDidLoad:error]; - [self.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]; - [self _refreshPaginationCell]; - } -} - -#pragma mark - -#pragma mark UIScrollViewDelegate - -// scrollViewDidEndDragging:willDecelerate: is called when a user stops dragging the table view. -- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { - // If the user lets go and the table view has no momentum, - // scrollViewDidEndDragging:willDecelerate: is called with willDecelerate:NO. - // In this case, we trigger a load for all the PFImageViews - // in our PFTableViewCells through _loadImagesForOnscreenRows. - if (!decelerate) { - [self _loadImagesForOnscreenRows]; - } -} - -// If the user lets go and the table view has momentum, -// scrollViewDidEndDragging:willDecelerate: is called with willDecelerate:YES. -// We will defer loading of images until scrollViewDidEndDecelerating: is called. -- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { - [self _loadImagesForOnscreenRows]; -} - -#pragma mark - -#pragma mark UITableViewDataSource - -// Return the number of rows in the section. -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - NSInteger count = [self.objects count]; - - if ([self _shouldShowPaginationCell]) { - count += 1; - } - - return count; -} - -// Default implementation that displays a default style cell -- (PFTableViewCell *)tableView:(UITableView *)tableView - cellForRowAtIndexPath:(NSIndexPath *)indexPath - object:(PFObject *)object { - static NSString *cellIdentifier = @"PFTableViewCell"; - PFTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; - if (!cell) { - cell = [[PFTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; - } - - [self tableView:tableView configureCell:cell atIndexPath:indexPath object:object]; - - return cell; -} - -- (void)tableView:(UITableView *)tableView - configureCell:(PFTableViewCell *)cell - atIndexPath:(NSIndexPath *)indexPath - object:(PFObject *)object { - // Grab a key to display - NSString *key; - if (self.textKey) { - key = self.textKey; - } else if ([[object allKeys] count] > 0) { - key = [[object allKeys] objectAtIndex:0]; - } - - // Configure the cell - if (key) { - cell.textLabel.text = [NSString stringWithFormat:@"%@", [object objectForKey:key]]; - } - - if (self.placeholderImage) { - cell.imageView.image = self.placeholderImage; - } - - if (self.imageKey) { - cell.imageView.file = object[self.imageKey]; - } -} - -- (PFObject *)objectAtIndexPath:(NSIndexPath *)indexPath { - return self.objects[indexPath.row]; -} - -- (void)removeObjectAtIndexPath:(NSIndexPath *)indexPath { - [self removeObjectAtIndexPath:indexPath animated:YES]; -} - -- (void)removeObjectAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated { - [self removeObjectsAtIndexPaths:@[ indexPath ] animated:animated]; -} - -- (void)removeObjectsAtIndexPaths:(NSArray *)indexPaths { - [self removeObjectsAtIndexPaths:indexPaths animated:YES]; -} - -- (void)removeObjectsAtIndexPaths:(NSArray *)indexPaths animated:(BOOL)animated { - 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) { - self.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.tableView deleteRowsAtIndexPaths:indexPaths - withRowAnimation:animated ? UITableViewRowAnimationAutomatic : UITableViewRowAnimationNone]; - - for (id obj in objectsToRemove) { - [allDeletionTasks addObject:[obj deleteInBackground]]; - } - - [[BFTask taskForCompletionOfAllTasks:allDeletionTasks] continueWithExecutor:[BFExecutor mainThreadExecutor] - withBlock:deletionHandlerBlock]; -} - -- (PFTableViewCell *)tableView:(UITableView *)otherTableView cellForNextPageAtIndexPath:(NSIndexPath *)indexPath { - static NSString *cellIdentifier = @"PFTableViewCellNextPage"; - - PFActivityIndicatorTableViewCell *cell = [otherTableView dequeueReusableCellWithIdentifier:cellIdentifier]; - if (cell == nil) { - cell = [[PFActivityIndicatorTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault - reuseIdentifier:cellIdentifier]; - cell.textLabel.text = PFLocalizedString(@"Load more...", @"Load more..."); - } - - cell.animating = self.loading; - - return cell; -} - -- (UITableViewCell *)tableView:(UITableView *)otherTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - PFTableViewCell *cell; - if ([self _shouldShowPaginationCell] && [indexPath isEqual:[self _indexPathForPaginationCell]]) { - // Return the pagination cell on the last cell - cell = [self tableView:otherTableView cellForNextPageAtIndexPath:indexPath]; - } else { - cell = [self tableView:otherTableView - cellForRowAtIndexPath:indexPath - object:[self objectAtIndexPath:indexPath]]; - } - - if ([cell isKindOfClass:[PFTableViewCell class]] && - !otherTableView.dragging && - !otherTableView.decelerating) { - // The reason we dispatch to the main queue is that we want to enable subclasses to override - // tableView:cellForRowAtIndexPath:object:, and we still do image loading after they assign - // the remote image file. - dispatch_async(dispatch_get_main_queue(), ^{ - [cell.imageView loadInBackground]; - }); - } - return cell; -} - -#pragma mark - -#pragma mark UITableViewDelegate - -- (void)tableView:(UITableView *)otherTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - // Handle selection of the next page row - if (!_firstLoad && - self.paginationEnabled && - [indexPath isEqual:[self _indexPathForPaginationCell]]) { - [self loadNextPage]; - } -} - -- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView - editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { - if ([indexPath isEqual:[self _indexPathForPaginationCell]]) { - return UITableViewCellEditingStyleNone; - } - - return UITableViewCellEditingStyleDelete; -} - -- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath { - if ([indexPath isEqual:[self _indexPathForPaginationCell]]) { - return NO; - } - - return YES; -} - -#pragma mark - -#pragma mark Private - -// Whether we need to show the pagination cell -- (BOOL)_shouldShowPaginationCell { - return (self.paginationEnabled && - !self.editing && - [self.objects count] != 0 && - (_lastLoadCount == -1 || _lastLoadCount >= (NSInteger)self.objectsPerPage)); -} - -// Selectively refresh pagination cell -- (void)_refreshPaginationCell { - if ([self _shouldShowPaginationCell]) { - [self.tableView reloadRowsAtIndexPaths:@[ [self _indexPathForPaginationCell] ] - withRowAnimation:UITableViewRowAnimationNone]; - } -} - -// The row of the pagination cell -- (NSIndexPath *)_indexPathForPaginationCell { - return [NSIndexPath indexPathForRow:[self.objects count] inSection:0]; -} - -- (void)_loadImagesForOnscreenRows { - if (self.objects.count > 0) { - NSArray *visiblePaths = [self.tableView indexPathsForVisibleRows]; - for (NSIndexPath *indexPath in visiblePaths) { - [self _loadImageForCellAtIndexPath:indexPath]; - } - } -} - -- (void)_loadImageForCellAtIndexPath:(NSIndexPath *)indexPath { - PFTableViewCell *cell = (PFTableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath]; - if ([cell isKindOfClass:[PFTableViewCell class]]) { - [cell.imageView loadInBackground]; - } -} - -#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 { - [self loadObjects]; -} - -#pragma mark - -#pragma mark Accessors - -- (NSArray<__kindof PFObject *> *)objects { - return _mutableObjects; -} - -#pragma mark - -#pragma mark Loading View - -- (void)_refreshLoadingView { - BOOL showLoadingView = self.loadingViewEnabled && self.loading && _firstLoad; - - if (showLoadingView) { - [self.tableView 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/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h deleted file mode 100644 index e203515..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.h +++ /dev/null @@ -1,156 +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 - -NS_ASSUME_NONNULL_BEGIN - -/** - `PFSignUpFields` bitmask specifies the sign up elements which are enabled in the view. - - @see PFSignUpViewController - @see PFSignUpView - */ -typedef NS_OPTIONS(NSInteger, PFSignUpFields) { - /** Username and password fields. */ - PFSignUpFieldsUsernameAndPassword = 0, - /** Email field. */ - PFSignUpFieldsEmail = 1 << 0, - /** This field can be used for something else. */ - PFSignUpFieldsAdditional = 1 << 1, - /** Sign Up Button */ - PFSignUpFieldsSignUpButton = 1 << 2, - /** Dismiss Button */ - PFSignUpFieldsDismissButton = 1 << 3, - /** Default value. Combines Username, Password, Email, Sign Up and Dismiss Buttons. */ - PFSignUpFieldsDefault = (PFSignUpFieldsUsernameAndPassword | - PFSignUpFieldsEmail | - PFSignUpFieldsSignUpButton | - PFSignUpFieldsDismissButton) -}; - -/** - `PFSignUpFields`'s accessibity identifiers - - @see PFSignUpView - */ -extern NSString *const PFSignUpViewUsernameFieldAccessibilityIdentifier; -extern NSString *const PFSignUpViewEmailFieldAccessibilityIdentifier; -extern NSString *const PFSignUpViewPasswordFieldAccessibilityIdentifier; -extern NSString *const PFSignUpViewAdditionalFieldAccessibilityIdentifier; -extern NSString *const PFSignUpViewSignUpButtonAccessibilityIdentifier; -extern NSString *const PFSignUpViewDismissButtonAccessibilityIdentifier; - -@class PFTextField; - -/** - The `PFSignUpView` class provides a standard sign up interface for authenticating a `PFUser`. - */ -@interface PFSignUpView : UIScrollView - -///-------------------------------------- -/// @name Creating SignUp View -///-------------------------------------- - -/** - Initializes the view with the specified sign up elements. - - @param fields A bitmask specifying the sign up elements which are enabled in the view - - @return An initialized `PFSignUpView` object or `nil` if the object couldn't be created. - - @see PFSignUpFields - */ -- (instancetype)initWithFields:(PFSignUpFields)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 Sign Up Elements -///-------------------------------------- - -/** - The bitmask which specifies the enabled sign up elements in the view - */ -@property (nonatomic, assign, readonly) PFSignUpFields fields; - -/** - The username text field. - */ -@property (nullable, nonatomic, strong, readonly) PFTextField *usernameField; - -/** - The password text field. - */ -@property (nullable, nonatomic, strong, readonly) PFTextField *passwordField; - -/** - The email text field. It is `nil` if the element is not enabled. - */ -@property (nullable, nonatomic, strong, readonly) PFTextField *emailField; - -/** - The additional text field. It is `nil` if the element is not enabled. - - This field is intended to be customized. - */ -@property (nullable, nonatomic, strong, readonly) PFTextField *additionalField; - -/** - The sign up button. It is `nil` if the element is not enabled. - */ -@property (nullable, nonatomic, strong, readonly) UIButton *signUpButton; - -/** - The dismiss button. It is `nil` if the element is not enabled. - */ -@property (nullable, nonatomic, strong, readonly) UIButton *dismissButton; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.m deleted file mode 100644 index 5a35639..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpView.m +++ /dev/null @@ -1,336 +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 "PFSignUpView.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 PFSignUpViewDefaultLogoImageName = @"parse_logo.png"; - -///-------------------------------------- -#pragma mark - Accessibility Identifiers -///-------------------------------------- - -NSString *const PFSignUpViewUsernameFieldAccessibilityIdentifier = @"PFSignUpViewUsernameFieldAccessibilityIdentifier"; -NSString *const PFSignUpViewEmailFieldAccessibilityIdentifier = @"PFSignUpViewEmailFieldAccessibilityIdentifier"; -NSString *const PFSignUpViewPasswordFieldAccessibilityIdentifier = @"PFSignUpViewPasswordFieldAccessibilityIdentifier"; -NSString *const PFSignUpViewAdditionalFieldAccessibilityIdentifier = @"PFSignUpViewAdditionalFieldAccessibilityIdentifier"; -NSString *const PFSignUpViewSignUpButtonAccessibilityIdentifier = @"PFSignUpViewSignUpButtonAccessibilityIdentifier"; -NSString *const PFSignUpViewDismissButtonAccessibilityIdentifier = @"PFSignUpViewDismissButtonAccessibilityIdentifier"; - -@implementation PFSignUpView - -#pragma mark - -#pragma mark NSObject - -- (instancetype)initWithFields:(PFSignUpFields)otherFields { - self = [super init]; - if (!self) return nil; - - _fields = otherFields; - - self.opaque = YES; - self.backgroundColor = [PFColor commonBackgroundColor]; - - _logo = [[UIImageView alloc] initWithImage:[PFImage imageNamed:PFSignUpViewDefaultLogoImageName]]; - _logo.contentMode = UIViewContentModeScaleAspectFit; - [self addSubview:_logo]; - - if (_fields & PFSignUpFieldsDismissButton) { - _dismissButton = [[PFDismissButton alloc] initWithFrame:CGRectZero]; - _dismissButton.accessibilityIdentifier = PFSignUpViewDismissButtonAccessibilityIdentifier; - [self addSubview:_dismissButton]; - } - - _usernameField = [[PFTextField alloc] initWithFrame:CGRectZero - separatorStyle:(PFTextFieldSeparatorStyleTop | - PFTextFieldSeparatorStyleBottom)]; - _usernameField.accessibilityIdentifier = PFSignUpViewUsernameFieldAccessibilityIdentifier; - _usernameField.autocorrectionType = UITextAutocorrectionTypeNo; - _usernameField.autocapitalizationType = UITextAutocapitalizationTypeNone; - _usernameField.returnKeyType = UIReturnKeyNext; - [self addSubview:_usernameField]; - [self _updateUsernameFieldStyle]; - - _passwordField = [[PFTextField alloc] initWithFrame:CGRectZero - separatorStyle:PFTextFieldSeparatorStyleBottom]; - _passwordField.accessibilityIdentifier = PFSignUpViewPasswordFieldAccessibilityIdentifier; - _passwordField.placeholder = PFLocalizedString(@"Password", @"Password"); - _passwordField.secureTextEntry = YES; - _passwordField.autocorrectionType = UITextAutocorrectionTypeNo; - _passwordField.autocapitalizationType = UITextAutocapitalizationTypeNone; - if (!(_fields & PFSignUpFieldsEmail) && !(_fields & PFSignUpFieldsAdditional)) { - _passwordField.returnKeyType = UIReturnKeyDone; - } else { - _passwordField.returnKeyType = UIReturnKeyNext; - } - [self addSubview:_passwordField]; - - if (_fields & PFSignUpFieldsEmail) { - _emailField = [[PFTextField alloc] initWithFrame:CGRectZero - separatorStyle:PFTextFieldSeparatorStyleBottom]; - _emailField.accessibilityIdentifier = PFSignUpViewEmailFieldAccessibilityIdentifier; - _emailField.autocorrectionType = UITextAutocorrectionTypeNo; - _emailField.autocapitalizationType = UITextAutocapitalizationTypeNone; - _emailField.keyboardType = UIKeyboardTypeEmailAddress; - _emailField.placeholder = PFLocalizedString(@"Email", @"Email"); - if (!(_fields & PFSignUpFieldsAdditional)) { - _emailField.returnKeyType = UIReturnKeyDone; - } else { - _emailField.returnKeyType = UIReturnKeyNext; - } - [self addSubview:_emailField]; - } - - if (_fields & PFSignUpFieldsAdditional) { - _additionalField = [[PFTextField alloc] initWithFrame:CGRectZero - separatorStyle:PFTextFieldSeparatorStyleBottom]; - _additionalField.accessibilityIdentifier = PFSignUpViewAdditionalFieldAccessibilityIdentifier; - _additionalField.autocorrectionType = UITextAutocorrectionTypeNo; - _additionalField.autocapitalizationType = UITextAutocapitalizationTypeNone; - _additionalField.placeholder = PFLocalizedString(@"Additional", @"Additional"); - _additionalField.returnKeyType = UIReturnKeyDone; - [self addSubview:_additionalField]; - } - - if (_fields & PFSignUpFieldsSignUpButton) { - _signUpButton = [[PFPrimaryButton alloc] initWithBackgroundImageColor:[PFColor signupButtonBackgroundColor]]; - _signUpButton.accessibilityIdentifier = PFSignUpViewSignUpButtonAccessibilityIdentifier; - [_signUpButton setTitle:PFLocalizedString(@"Sign Up", @"Sign Up") forState:UIControlStateNormal]; - [self addSubview:_signUpButton]; - } - - return self; -} - -#pragma mark - -#pragma mark UIView - -- (void)layoutSubviews { - [super layoutSubviews]; - - CGRect bounds = self.bounds; - - if (_dismissButton) { - CGPoint origin = CGPointMake(16.0f, 16.0f); - - // In iOS 7+, if the view controller that contains this view - // is presented modally, it's edges extend under the status bar. - // This lets us move down the dismiss button a bit so that it's not covered by the status bar. - if ([self.presentingViewController respondsToSelector:@selector(topLayoutGuide)]) { - origin.y += self.presentingViewController.topLayoutGuide.length; - } - - CGRect frame = PFRectMakeWithOriginSize(origin, [_dismissButton sizeThatFits:bounds.size]); - _dismissButton.frame = frame; - } - - const CGRect contentRect = PFRectMakeWithSizeCenteredInRect([self _contentSizeThatFits:bounds.size], - PFRectMakeWithSize(bounds.size)); - const CGSize contentSize = contentRect.size; - const CGSize contentSizeScale = [self _contentSizeScaleForContentSize:bounds.size]; - - CGFloat currentY = CGRectGetMinY(contentRect); - if (_logo) { - CGFloat logoTopInset = floorf(48.0f * contentSizeScale.height); - CGFloat logoBottomInset = floorf(36.0f * contentSizeScale.height); - - CGFloat logoAvailableHeight = floorf(68.0f * contentSizeScale.height); - - CGSize logoSize = [_logo sizeThatFits:CGSizeMake(contentSize.width, logoAvailableHeight)]; - logoSize.width = MIN(contentSize.width, logoSize.width); - logoSize.height = MIN(logoAvailableHeight, logoSize.height); - - CGRect frame = PFRectMakeWithSizeCenteredInRect(logoSize, contentRect); - frame.origin.y = CGRectGetMinY(contentRect) + logoTopInset; - _logo.frame = CGRectIntegral(frame); - - currentY = floorf(CGRectGetMaxY(frame) + logoBottomInset); - } - - if (_usernameField) { - CGRect frame = PFRectMakeWithSizeCenteredInRect([_usernameField sizeThatFits:contentSize], contentRect); - frame.origin.y = currentY; - _usernameField.frame = frame; - - currentY = CGRectGetMaxY(frame); - } - - if (_passwordField) { - CGRect frame = PFRectMakeWithSizeCenteredInRect([_passwordField sizeThatFits:contentSize], contentRect); - frame.origin.y = currentY; - _passwordField.frame = frame; - - currentY = CGRectGetMaxY(frame); - } - - if (_emailField && !_emailAsUsername) { - CGRect frame = PFRectMakeWithSizeCenteredInRect([_emailField sizeThatFits:contentSize], contentRect); - frame.origin.y = currentY; - _emailField.frame = frame; - - currentY = CGRectGetMaxY(frame); - } - - if (_additionalField) { - CGRect frame = PFRectMakeWithSizeCenteredInRect([_additionalField sizeThatFits:contentSize], contentRect); - frame.origin.y = currentY; - _additionalField.frame = frame; - - currentY = CGRectGetMaxY(frame); - } - - if (_signUpButton) { - CGFloat loginButtonTopInset = floorf(24.0f * contentSizeScale.height); - - CGRect frame = PFRectMakeWithSizeCenteredInRect([_signUpButton sizeThatFits:contentSize], contentRect);; - frame.origin.y = currentY + loginButtonTopInset; - _signUpButton.frame = frame; - - currentY = CGRectGetMaxY(frame); - } -} - -- (CGSize)_contentSizeThatFits:(CGSize)boundingSize { - CGSize maxContentSize = [self _maxContentSize]; - CGSize contentSizeScale = [self _contentSizeScaleForContentSize:boundingSize]; - - CGSize size = PFSizeMin(maxContentSize, boundingSize); - size.height = 0.0f; - if (_logo) { - CGFloat logoTopInset = floorf(36.0f * contentSizeScale.height); - CGFloat logoBottomInset = floorf(36.0f * contentSizeScale.height); - - CGFloat logoAvailableHeight = floorf(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 (_emailField && !_emailAsUsername) { - CGSize fieldSize = [_emailField sizeThatFits:boundingSize]; - size.height += fieldSize.height; - } - if (_additionalField) { - CGSize fieldSize = [_additionalField sizeThatFits:boundingSize]; - size.height += fieldSize.height; - } - if (_signUpButton) { - CGFloat buttonTopInset = floorf(24.0f * contentSizeScale.height); - - CGSize buttonSize = [_signUpButton sizeThatFits:boundingSize]; - - size.height += buttonSize.height + buttonTopInset; - } - - size.width = floorf(size.width); - size.height = floorf(size.height); - - return size; -} - -- (CGSize)_maxContentSize { - return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? - CGSizeMake(420.0f, 500.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 - -#pragma mark PFSignUpView - -- (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; - - if (_emailAsUsername) { - if (_emailField.superview) { - [_emailField removeFromSuperview]; - } - } else { - if (_emailField.superview == nil) { - [self addSubview:_emailField]; - } - [self setNeedsLayout]; - } - [self _updateUsernameFieldStyle]; - } -} - -#pragma mark - -#pragma mark Private - -- (void)_updateUsernameFieldStyle { - UIKeyboardType keyboardType = UIKeyboardTypeDefault; - NSString *placeholder = nil; - if (!_emailAsUsername) { - placeholder = PFLocalizedString(@"Username", @"Username"); - keyboardType = UIKeyboardTypeDefault; - } else { - placeholder = PFLocalizedString(@"Email", @"Email"); - keyboardType = UIKeyboardTypeEmailAddress; - } - - _usernameField.placeholder = placeholder; - _usernameField.keyboardType = keyboardType; -} - -@end diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h deleted file mode 100644 index 23c7779..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.h +++ /dev/null @@ -1,161 +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 - -#import -#import - -@class PFUser; -@protocol PFSignUpViewControllerDelegate; - -NS_ASSUME_NONNULL_BEGIN - -/** - The `PFSignUpViewController` class that presents and manages - a standard authentication interface for signing up a `PFUser`. - */ -@interface PFSignUpViewController : UIViewController - -///-------------------------------------- -/// @name Configuring Sign Up Elements -///-------------------------------------- - -/** - A bitmask specifying the log in elements which are enabled in the view. - - @see PFSignUpFields - */ -@property (nonatomic, assign) PFSignUpFields fields; - -/** - The sign up view. It contains all the enabled log in elements. - - @see PFSignUpView - */ -@property (nullable, nonatomic, strong, readonly) PFSignUpView *signUpView; - -///-------------------------------------- -/// @name Configuring Sign Up Behaviors -///-------------------------------------- - -/** - The delegate that responds to the control events of `PFSignUpViewController`. - - @see PFSignUpViewControllerDelegate - */ -@property (nullable, nonatomic, weak) id delegate; - -/** - Minimum required password length for user signups, defaults to `0`. - */ -@property (nonatomic, assign) NSUInteger minPasswordLength; - -/** - Whether to use the email as username on the attached `signUpView`. - - If set to `YES`, we'll hide the email field, prompt for the email in - the username field, and save the email into both username and email - fields on the new `PFUser` object. By default, this is set to `NO`. - */ -@property (nonatomic, assign) BOOL emailAsUsername; - -@end - -///-------------------------------------- -/// @name Notifications -///-------------------------------------- - -/** - The notification is posted immediately after the sign up succeeds. - */ -extern NSString *const PFSignUpSuccessNotification; - -/** - The notification is posted immediately after the sign up fails. - - If the delegate prevents the sign up to start, the notification is not sent. - */ -extern NSString *const PFSignUpFailureNotification; - -/** - The notification is posted immediately after the user cancels sign up. - */ -extern NSString *const PFSignUpCancelNotification; - -///-------------------------------------- -/// @name PFSignUpViewControllerDelegate -///-------------------------------------- - -/** - The `PFLogInViewControllerDelegate` protocol defines methods a delegate of a `PFSignUpViewController` should implement. - All methods of this protocol are optional. - */ -@protocol PFSignUpViewControllerDelegate - -@optional - -///-------------------------------------- -/// @name Customizing Behavior -///-------------------------------------- - -/** - Sent to the delegate to determine whether the sign up request should be submitted to the server. - - @param signUpController The signup view controller that is requesting the data. - @param info An `NSDictionary` instance which contains all sign up information that the user entered. - - @return A `BOOL` indicating whether the sign up should proceed. - */ -- (BOOL)signUpViewController:(PFSignUpViewController *)signUpController shouldBeginSignUp:(NSDictionary *)info; - -///-------------------------------------- -/// @name Responding to Actions -///-------------------------------------- - -/** - Sent to the delegate when a `PFUser` is signed up. - - @param signUpController The signup view controller where signup finished. - @param user `PFUser` object that is a result of the sign up. - */ -- (void)signUpViewController:(PFSignUpViewController *)signUpController didSignUpUser:(PFUser *)user; - -/** - Sent to the delegate when the sign up attempt fails. - - @param signUpController The signup view controller where signup failed. - @param error `NSError` object representing the error that occured. - */ -- (void)signUpViewController:(PFSignUpViewController *)signUpController didFailToSignUpWithError:(nullable NSError *)error; - -/** - Sent to the delegate when the sign up screen is cancelled. - - @param signUpController The signup view controller where signup was cancelled. - */ -- (void)signUpViewControllerDidCancelSignUp:(PFSignUpViewController *)signUpController; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.m deleted file mode 100644 index 34c77e0..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/SignUpViewController/PFSignUpViewController.m +++ /dev/null @@ -1,513 +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 "PFSignUpViewController.h" - -#import -#import - -#import "PFUIAlertView.h" -#import "PFLocalization.h" -#import "PFPrimaryButton.h" -#import "PFTextField.h" - -NSString *const PFSignUpSuccessNotification = @"com.parse.ui.signup.success"; -NSString *const PFSignUpFailureNotification = @"com.parse.ui.signup.failure"; -NSString *const PFSignUpCancelNotification = @"com.parse.ui.signup.cancel"; - -// Keys that are used to pass information to the delegate on `signUpViewController:shouldBeginSignUp`. -static NSString *const PFSignUpViewControllerDelegateInfoUsernameKey = @"username"; -static NSString *const PFSignUpViewControllerDelegateInfoPasswordKey = @"password"; -static NSString *const PFSignUpViewControllerDelegateInfoEmailKey = @"email"; -static NSString *const PFSignUpViewControllerDelegateInfoAdditionalKey = @"additional"; - -@interface PFSignUpViewController () { - struct { - BOOL shouldSignUp : YES; - BOOL didSignUp : YES; - BOOL didFailToSignUp : YES; - BOOL didCancelSignUp : YES; - } _delegateExistingMethods; -} - -@property (nonatomic, strong, readwrite) PFSignUpView *signUpView; - -@property (nonatomic, assign) BOOL loading; - -@property (nonatomic, assign) CGFloat visibleKeyboardHeight; - -@end - -@implementation PFSignUpViewController - -#pragma mark - -#pragma mark Init - -- (instancetype)init { - if (self = [super init]) { - [self _commonInit]; - } - return self; -} - -- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { - if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { - [self _commonInit]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)decoder { - if (self = [super initWithCoder:decoder]) { - [self _commonInit]; - } - return self; -} - -- (void)_commonInit { - self.modalTransitionStyle = UIModalTransitionStyleCoverVertical; - self.modalPresentationStyle = UIModalPresentationFormSheet; - _fields = PFSignUpFieldsDefault; - - if ([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)]) { - self.automaticallyAdjustsScrollViewInsets = NO; - } -} - -#pragma mark - -#pragma mark Dealloc - -- (void)dealloc { - // Unregister from all notifications - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -#pragma mark - -#pragma mark UIViewController - -- (void)loadView { - _signUpView = [[PFSignUpView alloc] initWithFields:_fields]; - _signUpView.presentingViewController = self; - self.view = _signUpView; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - [self _setupHandlers]; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - [self _registerForKeyboardNotifications]; - if (self.navigationController && - self.fields & PFSignUpFieldsDismissButton) { - self.fields = self.fields & ~PFSignUpFieldsDismissButton; - - [_signUpView.dismissButton removeFromSuperview]; - } -} - -#pragma mark - -#pragma mark Rotation - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations { - if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { - return UIInterfaceOrientationMaskAll; - } - - return UIInterfaceOrientationMaskPortrait; -} - -#pragma mark - -#pragma mark PFSignUpViewController - -- (PFSignUpView *)signUpView { - return (PFSignUpView *)self.view; // self.view will call loadView if the view is nil -} - -- (void)setDelegate:(id)delegate { - if (self.delegate != delegate) { - _delegate = delegate; - - _delegateExistingMethods.shouldSignUp = [delegate respondsToSelector:@selector(signUpViewController: - shouldBeginSignUp:)]; - _delegateExistingMethods.didSignUp = [delegate respondsToSelector:@selector(signUpViewController: - didSignUpUser:)]; - _delegateExistingMethods.didFailToSignUp = [delegate respondsToSelector:@selector(signUpViewController: - didFailToSignUpWithError:)]; - _delegateExistingMethods.didCancelSignUp = [delegate - respondsToSelector:@selector(signUpViewControllerDidCancelSignUp:)]; - } -} - -- (void)setEmailAsUsername:(BOOL)otherEmailAsUsername { - self.signUpView.emailAsUsername = otherEmailAsUsername; -} - -- (BOOL)emailAsUsername { - return self.signUpView.emailAsUsername; -} - -#pragma mark - -#pragma mark UITextFieldDelegate - -- (void)textFieldDidBeginEditing:(UITextField *)textField { - [self _updateSignUpViewContentOffsetAnimated:YES]; -} - -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - if (textField == _signUpView.usernameField) { - [_signUpView.passwordField becomeFirstResponder]; - return YES; - } - - if (textField == _signUpView.passwordField) { - if (_signUpView.emailField) { - [_signUpView.emailField becomeFirstResponder]; - return YES; - } else if (_signUpView.additionalField) { - [_signUpView.additionalField becomeFirstResponder]; - return YES; - } - } - - if (textField == _signUpView.emailField) { - if (_signUpView.additionalField) { - [_signUpView.additionalField becomeFirstResponder]; - return YES; - } - } - - [self _signUpAction]; - - return YES; -} - -#pragma mark - -#pragma mark Private - -- (void)_setupHandlers { - _signUpView.delegate = self; // UIScrollViewDelegate - [_signUpView.dismissButton addTarget:self - action:@selector(_dismissAction) - forControlEvents:UIControlEventTouchUpInside]; - _signUpView.usernameField.delegate = self; - _signUpView.passwordField.delegate = self; - _signUpView.emailField.delegate = self; - _signUpView.additionalField.delegate = self; - [_signUpView.signUpButton addTarget:self - action:@selector(_signUpAction) - forControlEvents:UIControlEventTouchUpInside]; - - UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] - initWithTarget:self - action:@selector(_dismissKeyboard)]; - gestureRecognizer.cancelsTouchesInView = NO; - [_signUpView addGestureRecognizer:gestureRecognizer]; -} - -- (void)_dismissAction { - [self _cancelSignUp]; - - // 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)_signUpAction { - if (self.loading) { - return; - } - - [self _dismissKeyboard]; - - NSString *username = _signUpView.usernameField.text ?: @""; - NSString *password = _signUpView.passwordField.text ?: @""; - NSString *email = (self.emailAsUsername ? username : _signUpView.emailField.text); - email = [email stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - - NSString *additional = _signUpView.additionalField.text; - - NSMutableDictionary *dictionary = [@{ PFSignUpViewControllerDelegateInfoUsernameKey : username, - PFSignUpViewControllerDelegateInfoPasswordKey : password } mutableCopy]; - - if (email) { - dictionary[PFSignUpViewControllerDelegateInfoEmailKey] = email; - } - if (additional) { - dictionary[PFSignUpViewControllerDelegateInfoAdditionalKey] = additional; - } - - if (_delegateExistingMethods.shouldSignUp) { - if (![_delegate signUpViewController:self shouldBeginSignUp:dictionary]) { - return; - } - } - - if ([password length] < _minPasswordLength) { - NSString *errorMessage = PFLocalizedString(@"Password must be at least %d characters.", - @"Password too short error message in PFSignUpViewController"); - errorMessage = [NSString stringWithFormat:errorMessage, (unsigned long)_minPasswordLength]; - NSError *error = [NSError errorWithDomain:PFParseErrorDomain - code:0 - userInfo:@{ NSLocalizedDescriptionKey : errorMessage }]; - [self _signUpDidFailWithError:error]; - [_signUpView.passwordField becomeFirstResponder]; - - return; - } - - PFUser *user = [PFUser user]; - user.username = username; - user.password = password; - - if (email) { - user.email = email; - } - if (additional) { - user[PFSignUpViewControllerDelegateInfoAdditionalKey] = additional; - } - - self.loading = YES; - if ([_signUpView.signUpButton isKindOfClass:[PFPrimaryButton class]]) { - [(PFPrimaryButton *)_signUpView.signUpButton setLoading:YES]; - } - [user signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { - self.loading = NO; - if ([_signUpView.signUpButton isKindOfClass:[PFPrimaryButton class]]) { - [(PFPrimaryButton *)_signUpView.signUpButton setLoading:NO]; - } - - if (succeeded) { - [self _signUpDidSuceedWithUser:user]; - } - else { - [self _signUpDidFailWithError:error]; - } - }]; -} - -- (void)_signUpDidSuceedWithUser:(PFUser *)user { - if (_delegateExistingMethods.didSignUp) { - [_delegate signUpViewController:self didSignUpUser:user]; - } - [[NSNotificationCenter defaultCenter] postNotificationName:PFSignUpSuccessNotification object:self]; -} - -- (void)_signUpDidFailWithError:(NSError *)error { - if (_delegateExistingMethods.didFailToSignUp) { - [_delegate signUpViewController:self didFailToSignUpWithError:error]; - } - [[NSNotificationCenter defaultCenter] postNotificationName:PFSignUpFailureNotification object:self]; - - NSString *title = PFLocalizedString(@"Sign Up Error", @"Sign Up Error"); - - if ([[error domain] isEqualToString:PFParseErrorDomain]) { - NSInteger errorCode = [error code]; - NSString *message = nil; - UIResponder *responder = nil; - - if (errorCode == kPFErrorInvalidEmailAddress) { - message = PFLocalizedString(@"The email address is invalid. Please enter a valid email.", - @"Invalid email address error message in PFSignUpViewControllers"); - responder = _signUpView.emailField ?: _signUpView.usernameField; - } else if (errorCode == kPFErrorUsernameMissing) { - message = PFLocalizedString(@"Please enter a username.", - @"Username missing error message in PFSignUpViewController"); - responder = _signUpView.usernameField; - } else if (errorCode == kPFErrorUserPasswordMissing) { - message = PFLocalizedString(@"Please enter a password.", - @"Password missing error message in PFSignUpViewController"); - responder = _signUpView.passwordField; - } else if (errorCode == kPFErrorUsernameTaken) { - NSString *format = PFLocalizedString(@"The username '%@' is taken. Please try choosing a different username.", - @"Username taken error format in PFSignUpViewController"); - message = [NSString stringWithFormat:format, _signUpView.usernameField.text]; - responder = _signUpView.usernameField; - } else if (error.code == kPFErrorUserEmailTaken) { - NSString *format = PFLocalizedString(@"The email '%@' is taken. Please try using a different email.", - @"Email is taken error format in PFSignUpViewController."); - UITextField *textField = self.emailAsUsername ? _signUpView.usernameField : _signUpView.emailField; - - message = [NSString stringWithFormat:format, textField.text]; - responder = textField; - } else if (error.code == kPFErrorUserEmailMissing) { - message = PFLocalizedString(@"Please enter an email.", - @"Email missing error message in PFSignUpViewController"); - responder = _signUpView.emailField; - } - - if (message != nil) { - [PFUIAlertView presentAlertInViewController:self withTitle:title message:message]; - [responder becomeFirstResponder]; - - return; - } - } - - // Show the generic error alert, as no custom cases matched before - [PFUIAlertView presentAlertInViewController:self withTitle:title error:error]; -} - -- (void)_cancelSignUp { - if (_delegateExistingMethods.didCancelSignUp) { - [_delegate signUpViewControllerDidCancelSignUp:self]; - } - [[NSNotificationCenter defaultCenter] postNotificationName:PFSignUpCancelNotification object:self]; -} - -- (UIView *)_currentFirstResponder { - if ([_signUpView.usernameField isFirstResponder]) { - return _signUpView.usernameField; - } - if ([_signUpView.passwordField isFirstResponder]) { - return _signUpView.passwordField; - } - if ([_signUpView.emailField isFirstResponder]) { - return _signUpView.emailField; - } - if ([_signUpView.additionalField isFirstResponder]) { - return _signUpView.additionalField; - } - - return nil; -} - -#pragma mark Keyboard - -- (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 _updateSignUpViewContentOffsetAnimated:NO]; - } -} - -- (void)_updateSignUpViewContentOffsetAnimated:(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 (_signUpView.signUpButton) { - lowestView = _signUpView.signUpButton; - } else if (_signUpView.additionalField) { - lowestView = _signUpView.additionalField; - } else if (_signUpView.emailField) { - lowestView = _signUpView.emailField; - } else { - lowestView = _signUpView.passwordField; - } - - CGFloat offsetForScrollingLowestViewToBottom = 0.0f; - offsetForScrollingLowestViewToBottom += self.visibleKeyboardHeight; - offsetForScrollingLowestViewToBottom += CGRectGetMaxY(lowestView.frame); - offsetForScrollingLowestViewToBottom -= CGRectGetHeight(_signUpView.bounds); - - if (offsetForScrollingLowestViewToBottom < 0) { - return; // No scrolling required - } - - contentOffset = CGPointMake(0.0f, MIN(offsetForScrollingTextFieldToTop, - offsetForScrollingLowestViewToBottom)); - } - - [_signUpView setContentOffset:contentOffset animated:animated]; -} - -#pragma mark - -#pragma mark Accessors - -- (void)setLoading:(BOOL)loading { - if (self.loading != loading) { - _loading = loading; - - _signUpView.usernameField.enabled = !self.loading; - _signUpView.passwordField.enabled = !self.loading; - _signUpView.emailField.enabled = !self.loading; - _signUpView.additionalField.enabled = !self.loading; - _signUpView.dismissButton.enabled = !self.loading; - } -} - -@end diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.h deleted file mode 100644 index d8d4845..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.h +++ /dev/null @@ -1,79 +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 - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef void(^PFImageViewImageResultBlock)(UIImage *__nullable image, NSError *__nullable error); - -@class BFTask<__covariant BFGenericType>; -@class PFFile; - -/** - 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) PFFile *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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.m deleted file mode 100644 index f10a9aa..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFImageView.m +++ /dev/null @@ -1,150 +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 - -#import - -#import "PFImageCache.h" - -@implementation PFImageView - -#pragma mark - -#pragma mark Accessors - -- (void)setFile:(PFFile *)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; - } - } - - - PFFile *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 == _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/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.h b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.h deleted file mode 100644 index 4e6f878..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.h +++ /dev/null @@ -1,77 +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 - -NS_ASSUME_NONNULL_BEGIN - -/** - `PFTextFieldSeparatorStyle` bitmask specifies the style of the separators, - that should be used for a given `PFTextField`. - - @see PFTextField - */ -typedef NS_OPTIONS(uint8_t, PFTextFieldSeparatorStyle){ - /** No separators are visible. */ - PFTextFieldSeparatorStyleNone = 0, - /** Separator on top of the text field. */ - PFTextFieldSeparatorStyleTop = 1 << 0, - /** Separator at the bottom of the text field. */ - PFTextFieldSeparatorStyleBottom = 1 << 1 -}; - -/** - `PFTextField` class serves as a stylable subclass of `UITextField`. - It includes styles that are specific to `ParseUI` framework and allows advanced customization. - */ -@interface PFTextField : UITextField - -/** - Separator style bitmask that should be applied to this textfield. - - Default: `PFTextFieldSeparatorStyleNone` - - @see PFTextFieldSeparatorStyle - */ -@property (nonatomic, assign) PFTextFieldSeparatorStyle separatorStyle; - -/** - Color that should be used for the separators, if they are visible. - - Default: `227,227,227,1.0`. - */ -@property (nullable, nonatomic, strong) UIColor *separatorColor UI_APPEARANCE_SELECTOR; - -/** - This method is a convenience initializer that sets both `frame` and `separatorStyle` for an instance of `PFTextField.` - - @param frame The frame rectangle for the view, measured in points. - @param separatorStyle Initial separator style to use. - - @return An initialized instance of `PFTextField` or `nil` if it couldn't be created. - */ -- (instancetype)initWithFrame:(CGRect)frame separatorStyle:(PFTextFieldSeparatorStyle)separatorStyle; - -@end - -NS_ASSUME_NONNULL_END diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.m b/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.m deleted file mode 100644 index 7372cd5..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Classes/Views/PFTextField.m +++ /dev/null @@ -1,120 +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 "PFTextField.h" - -#import "PFColor.h" - -@implementation PFTextField - -#pragma mark - -#pragma mark Init - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (!self) return nil; - - self.backgroundColor = [PFColor textFieldBackgroundColor]; - self.textColor = [PFColor textFieldTextColor]; - - self.font = [UIFont systemFontOfSize:17.0f]; - - self.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; - - _separatorColor = [PFColor textFieldSeparatorColor]; - - return self; -} - -- (instancetype)initWithFrame:(CGRect)frame separatorStyle:(PFTextFieldSeparatorStyle)separatorStyle { - self = [self initWithFrame:frame]; - if (!self) return nil; - - _separatorStyle = separatorStyle; - - return self; -} - -#pragma mark - -#pragma mark Accessors - -- (void)setPlaceholder:(NSString *)placeholder { - NSDictionary *attributes = @{ NSForegroundColorAttributeName : [PFColor textFieldPlaceholderColor] }; - self.attributedPlaceholder = [[NSAttributedString alloc] initWithString:placeholder attributes:attributes]; -} - -- (void)setSeparatorStyle:(PFTextFieldSeparatorStyle)separatorStyle { - if (self.separatorStyle != separatorStyle) { - _separatorStyle = separatorStyle; - [self setNeedsDisplay]; - } -} - -#pragma mark - -#pragma mark Drawing - -- (void)drawRect:(CGRect)rect { - [super drawRect:rect]; - - const CGRect bounds = self.bounds; - CGContextRef context = UIGraphicsGetCurrentContext(); - - if (self.separatorStyle != PFTextFieldSeparatorStyleNone) { - [self.separatorColor setFill]; - } - - if (self.separatorStyle & PFTextFieldSeparatorStyleTop) { - CGRect borderRect = CGRectMake(0.0f, 0.0f, CGRectGetWidth(bounds), 1.0f); - CGContextFillRect(context, borderRect); - } - - if (self.separatorStyle & PFTextFieldSeparatorStyleBottom) { - CGRect borderRect = CGRectMake(0.0f, CGRectGetMaxY(bounds) - 1.0f, CGRectGetWidth(bounds), 1.0f); - CGContextFillRect(context, borderRect); - } -} - -#pragma mark - -#pragma mark Frame - -- (CGRect)textRectForBounds:(CGRect)bounds { - return CGRectMake(20.0f, 0.0f, CGRectGetWidth(bounds) - 30.0f, CGRectGetHeight(bounds)); -} - -- (CGRect)placeholderRectForBounds:(CGRect)bounds { - return [self textRectForBounds:bounds]; -} - -- (CGRect)editingRectForBounds:(CGRect)bounds { - return [self textRectForBounds:bounds]; -} - -#pragma mark - -#pragma mark Sizing - -- (CGSize)sizeThatFits:(CGSize)boundingSize { - CGSize size = CGSizeZero; - size.width = boundingSize.width; - size.height = MIN(44.0f, boundingSize.height); - return size; -} - -@end diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Generated/PFResources.h b/FoodbLog/Pods/ParseUI/ParseUI/Generated/PFResources.h deleted file mode 100644 index 61a9259..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Generated/PFResources.h +++ /dev/null @@ -1,13 +0,0 @@ -// This is an auto-generated file. -#import -@interface PFResources : NSObject -+ (NSData *)facebook_icon_png;//modified:2023-04-05 08:12:17 +0100 -+ (NSData *)facebook_icon2x_png;//modified:2023-04-05 08:12:17 +0100 -+ (NSData *)facebook_icon3x_png;//modified:2023-04-05 08:12:17 +0100 -+ (NSData *)parse_logo_png;//modified:2023-04-05 08:12:17 +0100 -+ (NSData *)parse_logo2x_png;//modified:2023-04-05 08:12:17 +0100 -+ (NSData *)parse_logo3x_png;//modified:2023-04-05 08:12:17 +0100 -+ (NSData *)twitter_icon_png;//modified:2023-04-05 08:12:17 +0100 -+ (NSData *)twitter_icon2x_png;//modified:2023-04-05 08:12:17 +0100 -+ (NSData *)twitter_icon3x_png;//modified:2023-04-05 08:12:17 +0100 -@end diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Generated/PFResources.m b/FoodbLog/Pods/ParseUI/ParseUI/Generated/PFResources.m deleted file mode 100644 index 5475765..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Generated/PFResources.m +++ /dev/null @@ -1,76 +0,0 @@ -// This is an auto-generated file. -#import "PFResources.h" -@implementation PFResources - const unsigned char facebook_icon_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x16, 0x0, 0x0, 0x0, 0x16, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc4, 0xb4, 0x6c, 0x3b, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x0, 0x0, 0x3, 0x23, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x35, 0x2d, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2e, 0x31, 0x35, 0x31, 0x34, 0x38, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2f, 0x30, 0x33, 0x2f, 0x31, 0x33, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x39, 0x3a, 0x31, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x43, 0x20, 0x28, 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x29, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x46, 0x34, 0x42, 0x46, 0x44, 0x38, 0x36, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x46, 0x34, 0x42, 0x46, 0x44, 0x38, 0x37, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x46, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x38, 0x30, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, 0x3e, 0x98, 0x50, 0xa6, 0xc2, 0x0, 0x0, 0x1, 0x78, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x62, 0xd8, 0xbc, 0x79, 0xf3, 0x9a, 0xbf, 0x7f, 0xff, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xf, 0x6a, 0xe0, 0x7f, 0xff, 0xfe, 0x7d, 0xdf, 0xb5, 0x6b, 0xd7, 0x26, 0x46, 0x20, 0xe7, 0x2f, 0x3, 0x3, 0x3, 0x13, 0x3, 0x95, 0x1, 0xc8, 0xc0, 0x3f, 0xc, 0xd4, 0x7, 0x7f, 0x59, 0xc8, 0xd1, 0xf5, 0xf9, 0xf3, 0xe7, 0xf, 0x6b, 0xd7, 0xae, 0x5d, 0x75, 0xf6, 0xec, 0xd9, 0x73, 0xbf, 0x7f, 0xff, 0xfe, 0xc9, 0xc1, 0xc1, 0xc1, 0xe5, 0xe1, 0xe1, 0xe1, 0xe, 0xc4, 0x7e, 0x70, 0x45, 0xc0, 0xa0, 0xf8, 0xf9, 0x9f, 0x4, 0x70, 0xef, 0xde, 0xbd, 0x5b, 0x3a, 0x3a, 0x3a, 0x1a, 0xe8, 0x96, 0x65, 0x65, 0x65, 0x25, 0x21, 0x29, 0xfb, 0x43, 0x72, 0xd8, 0xe6, 0xe4, 0xe4, 0x64, 0x5d, 0xb9, 0x72, 0xe5, 0x6, 0x16, 0x29, 0x46, 0x64, 0xe, 0x49, 0x41, 0xf1, 0xe8, 0xd1, 0xa3, 0x7b, 0x7b, 0xf6, 0xec, 0x39, 0x0, 0xe3, 0xeb, 0xeb, 0xeb, 0x6b, 0x45, 0x46, 0x46, 0x46, 0x70, 0x73, 0x73, 0x73, 0x18, 0x1a, 0x1a, 0x1a, 0xa1, 0x28, 0x26, 0x25, 0x28, 0x4e, 0x9e, 0x3c, 0x79, 0x18, 0x59, 0xef, 0x91, 0x23, 0x47, 0xf6, 0xe1, 0x50, 0x4a, 0x5a, 0x50, 0x30, 0x32, 0xa2, 0xf8, 0x96, 0x41, 0x0, 0x8, 0xf0, 0x25, 0x37, 0xa2, 0x1, 0x33, 0x33, 0x33, 0xba, 0xfa, 0xff, 0xb8, 0xd4, 0x12, 0xc, 0xe3, 0x97, 0x2f, 0x5f, 0x3e, 0xf, 0xb, 0xb, 0xb, 0xf9, 0xf9, 0xf3, 0xe7, 0xef, 0x2f, 0x5f, 0xbe, 0x7c, 0x46, 0x96, 0x3, 0x86, 0x6f, 0x2c, 0x17, 0x17, 0x17, 0x37, 0x88, 0x5d, 0x55, 0x55, 0x55, 0xee, 0xe7, 0xe7, 0x17, 0x4c, 0xb4, 0xc1, 0x40, 0x3, 0x7f, 0x1c, 0x3a, 0x74, 0xe8, 0x18, 0x36, 0xb9, 0xcb, 0x97, 0x2f, 0x5f, 0xc3, 0xe5, 0x1b, 0x82, 0x41, 0x1, 0x8a, 0x9, 0x62, 0x82, 0x49, 0x5e, 0x5e, 0x5e, 0x81, 0xa4, 0xa0, 0x10, 0x14, 0x14, 0x14, 0xea, 0xe8, 0xe8, 0x68, 0xfd, 0x3, 0x4, 0x4f, 0x9e, 0x3c, 0x79, 0x38, 0x63, 0xc6, 0x8c, 0x79, 0x48, 0x69, 0x3a, 0x4d, 0x42, 0x42, 0x42, 0x9a, 0x8d, 0x8d, 0x8d, 0x55, 0x51, 0x51, 0x51, 0x99, 0xec, 0xe4, 0x76, 0xed, 0xda, 0xb5, 0x73, 0xc8, 0x7a, 0xef, 0xde, 0xbd, 0x7b, 0x9d, 0x2a, 0xc9, 0xd, 0x18, 0x79, 0x5f, 0xd1, 0xf8, 0x5f, 0xa8, 0x92, 0xdc, 0x48, 0x2d, 0x36, 0x47, 0xd, 0x86, 0x1b, 0x4c, 0x74, 0x9, 0x47, 0x64, 0x92, 0x6, 0xe7, 0x17, 0xa6, 0xdd, 0xbb, 0x77, 0x6f, 0x5, 0x6a, 0xf8, 0x5, 0xad, 0xa2, 0x88, 0xc1, 0xc8, 0x16, 0x61, 0xc8, 0x3, 0xc5, 0x7e, 0x1f, 0x3c, 0x78, 0x70, 0x17, 0x40, 0x80, 0x1, 0x0, 0x86, 0x7f, 0xa9, 0xd0, 0x39, 0x35, 0xd1, 0x78, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; - - - - + (NSData *)facebook_icon_png { - return [NSData dataWithBytes:facebook_icon_png length:sizeof(facebook_icon_png)]; - } - - const unsigned char facebook_icon2x_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x2c, 0x0, 0x0, 0x0, 0x2c, 0x8, 0x6, 0x0, 0x0, 0x0, 0x1e, 0x84, 0x5a, 0x1, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x0, 0x0, 0x3, 0x23, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x35, 0x2d, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2e, 0x31, 0x35, 0x31, 0x34, 0x38, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2f, 0x30, 0x33, 0x2f, 0x31, 0x33, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x39, 0x3a, 0x31, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x43, 0x20, 0x28, 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x29, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x44, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x45, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x42, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x43, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, 0x3e, 0x64, 0xec, 0x39, 0x7f, 0x0, 0x0, 0x2, 0x9a, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0x97, 0xcf, 0x8f, 0xd2, 0x40, 0x14, 0xc7, 0x99, 0x96, 0xd2, 0xf2, 0x63, 0xbb, 0x18, 0x10, 0x83, 0x42, 0x14, 0x12, 0x4f, 0x12, 0xaf, 0x60, 0xbc, 0x60, 0xf8, 0x2f, 0x8c, 0x81, 0x4, 0x88, 0x5c, 0xbc, 0x7a, 0xf2, 0x60, 0xb8, 0xb0, 0x7f, 0x0, 0xc6, 0x13, 0x7, 0xc2, 0xdd, 0x83, 0x37, 0xc2, 0xca, 0x9, 0x3, 0x44, 0x8d, 0x82, 0x31, 0x21, 0x1c, 0x48, 0x5c, 0x12, 0x48, 0x38, 0xd8, 0x8, 0xba, 0x14, 0x97, 0xa5, 0xf8, 0x6a, 0x62, 0xb2, 0x36, 0x9d, 0x2e, 0x34, 0xed, 0xb2, 0x8d, 0x7d, 0xc9, 0x24, 0x4d, 0xdf, 0xcc, 0x9b, 0x4f, 0xa7, 0x6f, 0xde, 0x7c, 0x7, 0x5, 0x2, 0x1, 0x5f, 0xa9, 0x54, 0x7a, 0x19, 0x8f, 0xc7, 0x1f, 0xd0, 0x34, 0x4d, 0x5a, 0x2e, 0xa1, 0x2d, 0x97, 0x4b, 0xe1, 0x1d, 0x58, 0x36, 0x9b, 0xcd, 0x59, 0xaa, 0xd5, 0xea, 0xab, 0xb5, 0x41, 0xac, 0xdd, 0x6e, 0x1f, 0x22, 0x41, 0x10, 0x7e, 0x20, 0x84, 0x5c, 0x16, 0x63, 0xd8, 0x9, 0x2, 0xf0, 0x29, 0x3c, 0xb0, 0x6, 0x1, 0x5e, 0x88, 0xc0, 0xdf, 0xe1, 0x61, 0xdf, 0x20, 0xc0, 0xbc, 0x9, 0xbc, 0xd1, 0x7f, 0x5d, 0x2c, 0x66, 0xc3, 0xe1, 0xf0, 0x2b, 0xc7, 0x71, 0xdf, 0x4e, 0xc1, 0xec, 0x76, 0x3b, 0x45, 0x92, 0x24, 0xe3, 0x72, 0xb9, 0x9c, 0x2c, 0xcb, 0xee, 0x7b, 0xbd, 0xde, 0xeb, 0x4, 0x41, 0x58, 0xe5, 0x80, 0x2d, 0x22, 0xf0, 0x45, 0xed, 0xf2, 0x6e, 0xb7, 0xdb, 0xcc, 0xe5, 0x72, 0x8f, 0xc2, 0xe1, 0xf0, 0xd, 0x8a, 0xa2, 0x90, 0x94, 0xc6, 0x66, 0xb3, 0x21, 0x8f, 0xc7, 0xe3, 0x18, 0xc, 0x6, 0x9f, 0x31, 0x21, 0xe6, 0x17, 0x6, 0x5c, 0x28, 0x14, 0x9e, 0x31, 0xc, 0x43, 0x6c, 0xf2, 0x7, 0xfa, 0xfd, 0xfe, 0xa7, 0x9d, 0x2, 0xe7, 0xf3, 0xf9, 0xa7, 0x9b, 0xa6, 0x8b, 0xd5, 0x6a, 0xdd, 0x2d, 0x30, 0x14, 0xfb, 0x37, 0xdb, 0xe4, 0xf7, 0x79, 0xc0, 0x84, 0xde, 0x1b, 0xec, 0x0, 0x6c, 0x9b, 0xfe, 0xb0, 0x7, 0xc5, 0x45, 0x5c, 0x63, 0x3f, 0x48, 0x4f, 0xd8, 0xc9, 0x64, 0x72, 0x54, 0xaf, 0xd7, 0xdf, 0x2a, 0xf5, 0xf1, 0xf9, 0x7c, 0x62, 0x55, 0x70, 0x43, 0x95, 0x40, 0x7f, 0x57, 0x18, 0x72, 0x9d, 0xc6, 0xe, 0xd0, 0x33, 0x25, 0x6a, 0xb5, 0xda, 0x6b, 0xdc, 0xbc, 0x4e, 0xa7, 0x93, 0x2e, 0x97, 0xcb, 0x45, 0x28, 0x6d, 0xe3, 0xd5, 0x6a, 0x35, 0x87, 0xee, 0xfc, 0x99, 0x26, 0xe0, 0x52, 0x42, 0xd7, 0x15, 0x1e, 0x8d, 0x46, 0x43, 0x9c, 0x2f, 0x93, 0xc9, 0x3c, 0x4c, 0xa5, 0x52, 0x4f, 0xb6, 0x8d, 0xa9, 0x6b, 0xe, 0x43, 0x3e, 0x2e, 0x70, 0xbe, 0x58, 0x2c, 0x76, 0x4f, 0x4d, 0x4c, 0x5d, 0x81, 0x41, 0x5, 0x62, 0x7d, 0xa0, 0xbd, 0x6d, 0x97, 0xe, 0x58, 0xc9, 0x40, 0xd6, 0xae, 0xd, 0x5, 0xac, 0xd6, 0x74, 0x5, 0x6, 0x51, 0xc3, 0xe0, 0x7c, 0xe, 0x87, 0xc3, 0xae, 0x2a, 0xcd, 0xb4, 0x50, 0x6b, 0xe3, 0xf1, 0xf8, 0xe8, 0x39, 0x98, 0x34, 0x36, 0x9c, 0x58, 0x5f, 0x1a, 0x8d, 0xc6, 0x7, 0xb9, 0x31, 0x89, 0x44, 0xe2, 0x7e, 0x28, 0x14, 0xba, 0x2d, 0x56, 0xd6, 0xb3, 0xef, 0xe1, 0x8e, 0x79, 0xd, 0x42, 0x1d, 0x60, 0x16, 0x53, 0x1b, 0xb5, 0x6, 0x2a, 0xec, 0xbd, 0x56, 0x7f, 0x25, 0x1a, 0x8d, 0xde, 0x55, 0x98, 0x4a, 0x9b, 0xa3, 0x19, 0xb4, 0x2b, 0xa1, 0x54, 0x11, 0xb6, 0xb1, 0x48, 0x24, 0x72, 0xc7, 0x50, 0x9b, 0xe, 0xd2, 0xe4, 0x96, 0x9, 0x2c, 0xa3, 0x47, 0x94, 0x4, 0xd6, 0x56, 0x16, 0xc, 0x6, 0x6f, 0x2a, 0xca, 0x4f, 0x2d, 0x26, 0x81, 0xab, 0xd, 0xe5, 0xf7, 0xfb, 0xaf, 0x4a, 0xa1, 0x79, 0x9e, 0x9f, 0x4f, 0xa7, 0xd3, 0x63, 0xb9, 0x31, 0x6e, 0xb7, 0x7b, 0xf, 0x54, 0xd9, 0x3f, 0x65, 0x4f, 0xbc, 0x36, 0x9d, 0x7, 0xac, 0x49, 0x95, 0x0, 0xb5, 0x75, 0xa, 0x60, 0x9c, 0xb4, 0x15, 0x8b, 0xc5, 0x3c, 0x6e, 0xde, 0x4a, 0xa5, 0xf2, 0x42, 0xda, 0x7f, 0x36, 0x9b, 0x71, 0xa, 0x4a, 0x4d, 0x3b, 0xb5, 0x6, 0x45, 0x82, 0x84, 0xdb, 0xee, 0x15, 0xe9, 0x7b, 0xb8, 0x5, 0xef, 0xe1, 0xc6, 0x80, 0x8f, 0x95, 0x1b, 0xb3, 0xd3, 0x93, 0xe, 0x56, 0x7e, 0xa5, 0xc6, 0x67, 0x6a, 0x9, 0x13, 0xd8, 0x4, 0x36, 0x81, 0x4d, 0x60, 0x13, 0xf8, 0xff, 0x6, 0x46, 0x6, 0xe2, 0x45, 0x22, 0x30, 0x69, 0x20, 0x60, 0x92, 0x68, 0xb5, 0x5a, 0x4d, 0x3d, 0x57, 0x44, 0xa5, 0x4f, 0xd6, 0x7a, 0xbd, 0xde, 0x47, 0x22, 0x9d, 0x4e, 0x3f, 0x6, 0xe8, 0x43, 0x10, 0x4f, 0x3f, 0xff, 0x5c, 0xa3, 0xb5, 0x6d, 0x27, 0xa, 0xf3, 0xff, 0xda, 0x34, 0x8e, 0x20, 0x8, 0xc7, 0x9d, 0x4e, 0xa7, 0x99, 0x4c, 0x26, 0xd3, 0xbf, 0x5, 0x18, 0x0, 0x98, 0xef, 0x3, 0xa7, 0xc, 0x73, 0xce, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; - - - - + (NSData *)facebook_icon2x_png { - return [NSData dataWithBytes:facebook_icon2x_png length:sizeof(facebook_icon2x_png)]; - } - - const unsigned char facebook_icon3x_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x42, 0x0, 0x0, 0x0, 0x42, 0x8, 0x6, 0x0, 0x0, 0x0, 0xe3, 0x54, 0x0, 0xe8, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x0, 0x0, 0x3, 0x23, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x35, 0x2d, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2e, 0x31, 0x35, 0x31, 0x34, 0x38, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2f, 0x30, 0x33, 0x2f, 0x31, 0x33, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x39, 0x3a, 0x31, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x43, 0x20, 0x28, 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x29, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x39, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x41, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x37, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x32, 0x42, 0x32, 0x44, 0x31, 0x37, 0x38, 0x33, 0x44, 0x43, 0x39, 0x31, 0x31, 0x45, 0x34, 0x38, 0x33, 0x35, 0x43, 0x42, 0x42, 0x36, 0x30, 0x39, 0x42, 0x42, 0x31, 0x39, 0x35, 0x32, 0x44, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, 0x3e, 0x90, 0x6f, 0x2b, 0x47, 0x0, 0x0, 0x3, 0x4d, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0x9c, 0xdf, 0x4b, 0x53, 0x61, 0x18, 0xc7, 0xcf, 0x39, 0x9b, 0x4e, 0xdc, 0x28, 0x6d, 0xb3, 0xd4, 0xd9, 0x36, 0x1c, 0x4a, 0x2c, 0x49, 0xa2, 0x1b, 0x17, 0x24, 0xde, 0xc8, 0x48, 0x85, 0xa3, 0x5e, 0xf4, 0x17, 0x94, 0xd2, 0xa5, 0x5e, 0x8c, 0x6, 0x42, 0x41, 0x46, 0x30, 0x6, 0x61, 0x74, 0x57, 0xd7, 0x43, 0x2f, 0x92, 0xae, 0x84, 0x89, 0x45, 0x9b, 0x3f, 0x82, 0x5, 0xf9, 0xa3, 0x99, 0x76, 0xe3, 0x61, 0x3, 0x65, 0x84, 0xc2, 0xf4, 0xa0, 0xec, 0x6c, 0x3b, 0x3b, 0x3d, 0xcb, 0x6e, 0xba, 0x48, 0x5f, 0x73, 0x9c, 0xce, 0xf6, 0x3e, 0xf, 0x1c, 0x36, 0xb6, 0x67, 0xe7, 0x3d, 0xfb, 0xec, 0xf9, 0xf1, 0x7d, 0xde, 0x3, 0x63, 0x19, 0x30, 0x97, 0xcb, 0x65, 0xb, 0x4, 0x2, 0xcf, 0xdc, 0x6e, 0xf7, 0x9d, 0x9a, 0x9a, 0x1a, 0x3, 0xbc, 0xa4, 0x30, 0xe5, 0x6d, 0xec, 0xe1, 0xe1, 0x61, 0xf6, 0xb, 0xd8, 0xd8, 0xd8, 0xd8, 0xe3, 0x48, 0x24, 0xb2, 0x5a, 0x80, 0x60, 0xdf, 0xda, 0xda, 0x8a, 0x29, 0x94, 0x5a, 0x2a, 0x95, 0xda, 0xe9, 0xea, 0xea, 0xba, 0xc9, 0x84, 0x42, 0xa1, 0xa0, 0x42, 0xb9, 0xad, 0xac, 0xac, 0x7c, 0x60, 0x45, 0x51, 0xdc, 0x36, 0x99, 0x4c, 0x8d, 0xc, 0xc5, 0x96, 0xcf, 0xe7, 0xf, 0x38, 0x80, 0xc0, 0x31, 0x94, 0x1b, 0xc7, 0x71, 0x2c, 0x47, 0x41, 0x61, 0x24, 0x31, 0x85, 0x43, 0x6, 0xbf, 0xa3, 0x2, 0x11, 0x20, 0x88, 0xb2, 0x2, 0x91, 0x83, 0xee, 0x97, 0x85, 0x47, 0xf9, 0xbc, 0x27, 0xd2, 0x97, 0xd0, 0x97, 0xce, 0x80, 0x10, 0x5c, 0x9c, 0x9f, 0x9f, 0xff, 0xb8, 0xbc, 0xbc, 0xbc, 0x9a, 0x48, 0x24, 0xb6, 0x41, 0x1d, 0x8a, 0x70, 0xe4, 0xcd, 0x66, 0xb3, 0xe, 0xde, 0xaf, 0x80, 0xc3, 0x0, 0xcf, 0x8d, 0xd5, 0xd5, 0xd5, 0x17, 0xea, 0xea, 0xea, 0xcc, 0x9d, 0x9d, 0x9d, 0xb7, 0x7, 0x6, 0x6, 0x1e, 0x90, 0x95, 0x4b, 0x45, 0xd9, 0xd1, 0xb8, 0xde, 0x91, 0x82, 0xc1, 0xe0, 0xcb, 0x8e, 0x8e, 0xe, 0xd7, 0x59, 0xc9, 0xf5, 0xf5, 0xf5, 0xb9, 0x9, 0xd7, 0xd8, 0xd7, 0x74, 0x44, 0x8, 0x82, 0xf0, 0x75, 0x68, 0x68, 0xe8, 0xfe, 0xdc, 0xdc, 0x5c, 0xf4, 0x5f, 0x3e, 0xf, 0x91, 0x61, 0x2c, 0xf9, 0xd4, 0x88, 0xc5, 0x62, 0x8b, 0xf0, 0x8b, 0xf2, 0xf1, 0x78, 0x7c, 0x8f, 0xda, 0x62, 0x99, 0x4c, 0x26, 0x5, 0x9e, 0xe7, 0x7, 0xd5, 0x82, 0xa0, 0x59, 0x10, 0xa3, 0xa3, 0xa3, 0xf, 0x61, 0x22, 0xfe, 0x41, 0x75, 0xfb, 0x8c, 0x46, 0xa3, 0x33, 0x93, 0x93, 0x93, 0x21, 0xea, 0x75, 0xc4, 0xc4, 0xc4, 0xc4, 0x2b, 0xa8, 0xe2, 0x74, 0xb, 0xaa, 0x54, 0x2a, 0xb5, 0x3d, 0x3b, 0x3b, 0x1b, 0x2e, 0x9a, 0xf0, 0xc8, 0x64, 0x8e, 0x4a, 0xb2, 0x6b, 0x80, 0x60, 0xfa, 0xbc, 0xbb, 0xbb, 0x4b, 0x7c, 0xf1, 0x6d, 0x6d, 0x6d, 0xf6, 0xfe, 0xfe, 0xfe, 0xbb, 0x2d, 0x2d, 0x2d, 0x2e, 0x10, 0x50, 0x26, 0x96, 0x65, 0xff, 0x90, 0x48, 0xf5, 0xf5, 0xf5, 0xd6, 0x92, 0x4, 0xb1, 0xbe, 0xbe, 0xbe, 0x46, 0xea, 0x3b, 0x3c, 0x3c, 0x3c, 0x8, 0x69, 0xf4, 0xc6, 0x60, 0x30, 0xd4, 0x96, 0x5d, 0x6a, 0x80, 0x6c, 0x4e, 0x90, 0xf8, 0xd9, 0xed, 0x76, 0xb, 0x40, 0x78, 0x5d, 0x2c, 0x8, 0x9a, 0x3, 0x1, 0x73, 0xc3, 0x3e, 0x89, 0x1f, 0xcc, 0x10, 0x6e, 0x80, 0x70, 0xa9, 0x6c, 0x8b, 0x25, 0xe4, 0x38, 0xd1, 0x14, 0xd9, 0xdc, 0xdc, 0x6c, 0xc3, 0x31, 0xbc, 0x50, 0xd8, 0xf4, 0xfa, 0xa, 0x4, 0x71, 0x3c, 0x31, 0x2b, 0x8, 0x82, 0xa6, 0x59, 0x3, 0x41, 0x20, 0x88, 0x63, 0xab, 0xac, 0xac, 0x24, 0x2a, 0x82, 0x55, 0x55, 0x55, 0x86, 0xa2, 0x17, 0x60, 0x15, 0xf7, 0x18, 0xe2, 0xd3, 0xd3, 0xd3, 0x6f, 0x4f, 0xea, 0x9e, 0x20, 0xb1, 0x37, 0x48, 0xce, 0x15, 0x89, 0x44, 0x3e, 0x19, 0x8d, 0xc6, 0x17, 0xcc, 0x29, 0x37, 0xa7, 0x7a, 0x7a, 0x7a, 0x3c, 0xe, 0x87, 0xe3, 0x3a, 0x69, 0x5, 0x56, 0x65, 0xcf, 0x32, 0x1c, 0xe, 0xcf, 0xa8, 0x1d, 0x61, 0xb0, 0xe6, 0x3b, 0xd2, 0x3d, 0x4b, 0xd5, 0x52, 0x43, 0xa7, 0xd3, 0xa9, 0x3a, 0xd7, 0x80, 0xf2, 0x64, 0x6d, 0x36, 0x9b, 0x93, 0xfa, 0x62, 0x69, 0xb1, 0x58, 0x2e, 0xc2, 0x44, 0x7a, 0x85, 0x7a, 0x10, 0xd, 0xd, 0xd, 0x97, 0xa1, 0x8e, 0xd4, 0x52, 0xf, 0xc2, 0x6a, 0xb5, 0x36, 0x9e, 0xa5, 0x19, 0x94, 0x2d, 0x8, 0xe8, 0x16, 0x76, 0x14, 0x54, 0xc7, 0x13, 0xaa, 0x3, 0x41, 0x30, 0xbf, 0x36, 0x6f, 0xb4, 0x9, 0x42, 0x96, 0xe5, 0x9c, 0x9a, 0x20, 0x9a, 0x9a, 0x9a, 0xae, 0x6a, 0x52, 0x59, 0x3a, 0x9d, 0xce, 0x6b, 0x81, 0x40, 0xe0, 0xe9, 0x49, 0xca, 0x12, 0x94, 0x67, 0x70, 0x69, 0x69, 0xe9, 0xdb, 0x69, 0xe7, 0xf2, 0x78, 0x3c, 0xee, 0xee, 0xee, 0xee, 0xde, 0xbf, 0x29, 0x4b, 0xd0, 0x2c, 0x6c, 0x6b, 0x6b, 0xeb, 0x8d, 0xb3, 0xce, 0xf6, 0x9a, 0xb9, 0x1b, 0x3e, 0x32, 0x32, 0x72, 0x8f, 0xe4, 0x9a, 0xfd, 0x7e, 0xbf, 0xb7, 0xc8, 0x4b, 0xef, 0x6b, 0xaa, 0x46, 0x48, 0x92, 0x94, 0x25, 0xf1, 0x4b, 0xa7, 0xd3, 0x12, 0x8e, 0xe1, 0xb8, 0x1f, 0x81, 0x20, 0x10, 0x4, 0x82, 0x40, 0x10, 0x8, 0x2, 0x41, 0x20, 0x8, 0x4, 0x81, 0x20, 0x10, 0x4, 0x82, 0x40, 0x10, 0x8, 0x2, 0x41, 0x20, 0x8, 0x4, 0x51, 0x7e, 0x20, 0x58, 0xc4, 0xc0, 0xb0, 0x9c, 0x24, 0x49, 0x88, 0xa1, 0x10, 0x11, 0x85, 0xbf, 0xe, 0xa0, 0x1d, 0x82, 0x20, 0x8, 0xdf, 0x39, 0xaf, 0xd7, 0xeb, 0x13, 0x45, 0x31, 0xa9, 0x95, 0x10, 0x2d, 0xb2, 0xdf, 0xa9, 0x26, 0xcb, 0xf2, 0x91, 0xcf, 0xe7, 0x7b, 0xa4, 0x5f, 0x58, 0x58, 0x58, 0xe3, 0x79, 0xbe, 0xd7, 0xef, 0xf7, 0x3f, 0x6f, 0x6f, 0x6f, 0xbf, 0x55, 0x1, 0xf6, 0x1f, 0x41, 0x64, 0x9, 0xfd, 0xa, 0xf9, 0x7c, 0x70, 0x9e, 0x85, 0x72, 0xb9, 0x9c, 0xbc, 0xb9, 0xb9, 0xb9, 0x31, 0x3e, 0x3e, 0xfe, 0x64, 0x6a, 0x6a, 0xea, 0xfd, 0x4f, 0x1, 0x6, 0x0, 0xec, 0x28, 0x31, 0x86, 0x11, 0x87, 0xbb, 0xa9, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; - - - - + (NSData *)facebook_icon3x_png { - return [NSData dataWithBytes:facebook_icon3x_png length:sizeof(facebook_icon3x_png)]; - } - - const unsigned char parse_logo_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xde, 0x0, 0x0, 0x0, 0x44, 0x8, 0x6, 0x0, 0x0, 0x0, 0xee, 0x9a, 0x8b, 0x92, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x0, 0x0, 0x3, 0x23, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x35, 0x2d, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2e, 0x31, 0x35, 0x31, 0x34, 0x38, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2f, 0x30, 0x33, 0x2f, 0x31, 0x33, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x39, 0x3a, 0x31, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x43, 0x20, 0x28, 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x29, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x44, 0x43, 0x37, 0x45, 0x43, 0x42, 0x35, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x44, 0x43, 0x37, 0x45, 0x43, 0x42, 0x36, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x31, 0x30, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x44, 0x43, 0x37, 0x45, 0x43, 0x42, 0x34, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, 0x3e, 0xf6, 0xc4, 0x10, 0x9d, 0x0, 0x0, 0x11, 0x8e, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0x5d, 0x9, 0x98, 0x54, 0xc5, 0x11, 0xae, 0xdd, 0x9d, 0x5, 0x59, 0x90, 0x9b, 0x5, 0xb9, 0x5, 0x11, 0xf0, 0x2, 0x14, 0x54, 0x54, 0x22, 0x6e, 0x44, 0x3c, 0x50, 0xbc, 0x95, 0xc3, 0x88, 0x9, 0x41, 0x3c, 0x21, 0x1e, 0x68, 0x30, 0x11, 0x8f, 0x18, 0x3c, 0x51, 0x14, 0x13, 0x94, 0x28, 0x26, 0x9e, 0x78, 0x44, 0x12, 0x15, 0x25, 0xe0, 0x89, 0x8a, 0x28, 0x88, 0xa0, 0xe2, 0xe2, 0x2, 0x72, 0xca, 0xd, 0xcb, 0xd, 0x7b, 0xb0, 0xe9, 0xdf, 0xf7, 0xf7, 0x37, 0x9d, 0x9, 0xc8, 0xcc, 0xce, 0x3b, 0xe6, 0x3d, 0xba, 0xbe, 0xaf, 0xbe, 0xe9, 0xd9, 0x9d, 0x79, 0xd3, 0xaf, 0xbb, 0xff, 0xea, 0xaa, 0xea, 0xaa, 0x7a, 0x59, 0xfd, 0xae, 0xbd, 0xe5, 0x55, 0x11, 0x69, 0xa3, 0xb8, 0x5c, 0xfc, 0xa1, 0x2c, 0xc5, 0x6b, 0x15, 0x17, 0x2a, 0xfe, 0x54, 0xf1, 0xc7, 0x8a, 0x97, 0x8b, 0x25, 0x4b, 0x11, 0xa5, 0x8a, 0x8a, 0xa, 0xc5, 0x22, 0xf7, 0xe, 0x1f, 0x2a, 0xcd, 0x9b, 0x1c, 0xf4, 0xd3, 0xdf, 0x62, 0x8a, 0x4f, 0x52, 0xdc, 0x30, 0x80, 0xfe, 0xf4, 0x50, 0x7c, 0x9d, 0xe2, 0x95, 0x8a, 0xa7, 0x29, 0xfe, 0x87, 0xe2, 0xc9, 0x8a, 0xcb, 0xec, 0x54, 0x59, 0x8a, 0x3a, 0x1, 0x78, 0xbb, 0xd9, 0xde, 0xaa, 0x78, 0x1, 0x77, 0x24, 0xcf, 0xc0, 0xaf, 0xb8, 0x8a, 0xe2, 0x3a, 0x8a, 0x1b, 0xf0, 0xf7, 0x21, 0x2, 0x2e, 0x26, 0xcf, 0x54, 0x7c, 0xa7, 0xe2, 0x37, 0xed, 0xd4, 0x58, 0x8a, 0x3a, 0xf0, 0x34, 0xcd, 0x50, 0x7c, 0xaa, 0x4f, 0xbf, 0x59, 0x53, 0x71, 0x63, 0xc5, 0xc7, 0x2a, 0x3e, 0x9b, 0xbb, 0x5f, 0x75, 0xc5, 0x9d, 0x15, 0xbf, 0xa1, 0x78, 0x82, 0xe2, 0x6b, 0x15, 0xaf, 0xb3, 0x53, 0x64, 0x29, 0x8a, 0x94, 0x9d, 0x60, 0x7b, 0xf9, 0x41, 0x50, 0x25, 0x37, 0x28, 0xfe, 0x46, 0xf1, 0xd3, 0x8a, 0xcf, 0x53, 0xdc, 0x41, 0xf1, 0x63, 0x8a, 0x77, 0xf2, 0x33, 0x97, 0xd0, 0xfe, 0xeb, 0x64, 0xa7, 0xc8, 0x52, 0xd4, 0x81, 0x17, 0x24, 0x2d, 0x54, 0x7c, 0xbd, 0xe2, 0xe3, 0x15, 0x4f, 0xe7, 0xdf, 0xe0, 0xf0, 0x79, 0x57, 0x71, 0x81, 0x9d, 0x26, 0x4b, 0x16, 0x78, 0xde, 0xd2, 0x1c, 0xc5, 0xa7, 0x28, 0xfe, 0x2b, 0xdf, 0xc3, 0x16, 0x7c, 0x4d, 0xf1, 0x71, 0x76, 0xaa, 0x2c, 0x59, 0xe0, 0x79, 0x4b, 0xbb, 0x14, 0x5f, 0xad, 0xf8, 0x76, 0xbe, 0xaf, 0xad, 0xf8, 0x45, 0xc5, 0xcd, 0xec, 0x74, 0x59, 0xb2, 0xc0, 0xf3, 0x9e, 0xee, 0x56, 0xfc, 0x0, 0xdb, 0x7, 0x2b, 0xfe, 0x8b, 0x8f, 0x76, 0xa8, 0x25, 0x4b, 0xfb, 0x2d, 0xf0, 0x40, 0xb7, 0x88, 0xe3, 0xe5, 0x4, 0xf5, 0x52, 0x7c, 0xa5, 0x9d, 0x32, 0x4b, 0x16, 0x78, 0xde, 0x13, 0xce, 0xfd, 0xe0, 0x74, 0x59, 0xc5, 0xf7, 0xb7, 0x29, 0xce, 0xb7, 0xd3, 0x66, 0xc9, 0x2, 0xcf, 0x7b, 0x5a, 0xac, 0x78, 0x4, 0xdb, 0x4d, 0xc5, 0x89, 0x76, 0xb1, 0x64, 0xc9, 0x2, 0xcf, 0x7, 0x7a, 0x46, 0xf1, 0x6c, 0xb6, 0x2f, 0x57, 0x5c, 0xd7, 0x4e, 0x9d, 0x25, 0xb, 0x3c, 0xef, 0xa9, 0x44, 0xf1, 0xe3, 0x6c, 0xc3, 0xbb, 0xd9, 0xdb, 0x4e, 0x9d, 0x25, 0xb, 0x3c, 0x7f, 0x68, 0xa2, 0x38, 0x1, 0xd5, 0xa0, 0xf3, 0xec, 0xd4, 0x59, 0xb2, 0xc0, 0xf3, 0x87, 0xd6, 0x2b, 0x7e, 0x8f, 0x6d, 0x44, 0xb8, 0x34, 0xb0, 0xd3, 0x67, 0xc9, 0x2, 0xcf, 0x1f, 0xd2, 0xc0, 0x3, 0xe8, 0xe, 0xb7, 0xd3, 0x67, 0x29, 0xac, 0x14, 0xb, 0x59, 0x7f, 0xbf, 0x34, 0xda, 0x0, 0xde, 0x7, 0x2e, 0x5f, 0x1f, 0x7, 0xf4, 0x4d, 0x79, 0xed, 0x76, 0x8a, 0x9b, 0x28, 0xce, 0x13, 0xe7, 0x58, 0x3, 0xb4, 0x51, 0xf1, 0xf, 0x8a, 0xe7, 0x8b, 0x93, 0xc8, 0xbb, 0xde, 0xa7, 0xfb, 0x46, 0xbf, 0xaa, 0x89, 0x93, 0xac, 0xbc, 0xcb, 0xa5, 0x6b, 0xe6, 0x48, 0xfa, 0xc9, 0xcf, 0xb8, 0x46, 0x73, 0xc5, 0x6d, 0xc5, 0x9, 0x72, 0x40, 0xc6, 0x49, 0x9d, 0x84, 0xcf, 0x14, 0x8b, 0x73, 0x1c, 0xb4, 0x48, 0x9c, 0xb4, 0xb3, 0x25, 0x2e, 0xde, 0x83, 0x9b, 0x73, 0xde, 0x8e, 0xf7, 0x1, 0x1f, 0x42, 0xd, 0xce, 0x39, 0xfe, 0xb7, 0x59, 0x9c, 0x44, 0xed, 0x22, 0xc5, 0xf3, 0x14, 0xaf, 0x30, 0xd6, 0xc3, 0x7e, 0x3, 0xbc, 0x95, 0x5c, 0xec, 0xf5, 0x14, 0xb7, 0x76, 0x71, 0xd7, 0xef, 0x48, 0xbb, 0xb1, 0xa7, 0xe2, 0xf6, 0x1c, 0xf8, 0x7d, 0x11, 0xb2, 0xe8, 0x91, 0x41, 0xf1, 0x8a, 0x38, 0x87, 0xfc, 0x9b, 0x3d, 0xbc, 0xef, 0x2b, 0x14, 0xdf, 0x27, 0xce, 0xd1, 0xca, 0x99, 0xfc, 0xed, 0x64, 0xa9, 0x85, 0xe2, 0x13, 0x15, 0x1f, 0xa3, 0xb8, 0x15, 0xb5, 0x85, 0xfa, 0x4, 0xc1, 0xf9, 0xe2, 0x38, 0xae, 0x52, 0x5, 0xdb, 0x9, 0x8a, 0x2f, 0x54, 0xdc, 0x5d, 0x9c, 0x60, 0xf6, 0x6a, 0x49, 0x7e, 0xb7, 0x84, 0xc0, 0xfb, 0x94, 0x36, 0xfb, 0x54, 0x71, 0xf2, 0x40, 0x83, 0xa0, 0xc3, 0x14, 0x5f, 0xa4, 0xf8, 0x74, 0xc5, 0x47, 0x24, 0x39, 0xe7, 0x5b, 0x8, 0xbe, 0x77, 0x14, 0xa3, 0x72, 0xc3, 0x37, 0xfb, 0xb, 0xf0, 0x70, 0xe3, 0x1b, 0x8, 0xbc, 0xfa, 0x69, 0x5e, 0xb, 0x3, 0x8d, 0xe4, 0xdb, 0xdf, 0x8a, 0x13, 0x84, 0x9d, 0x18, 0x8e, 0xb6, 0x9b, 0xd2, 0x7a, 0x13, 0x77, 0x6, 0xec, 0x7c, 0xb5, 0xf9, 0xaa, 0xd5, 0xdd, 0xde, 0x64, 0x2c, 0xa6, 0x87, 0x14, 0x8f, 0x93, 0x78, 0x6a, 0x93, 0x9b, 0xd4, 0x8a, 0xf7, 0x8b, 0x9c, 0xc5, 0x9a, 0x49, 0x0, 0xf, 0xf3, 0x8a, 0x3c, 0xc7, 0x41, 0x8a, 0xbb, 0xf1, 0x7b, 0x89, 0x54, 0x93, 0x80, 0x29, 0x49, 0x41, 0x40, 0x61, 0xbc, 0x6e, 0x56, 0x7c, 0xf4, 0x1e, 0xfe, 0x5f, 0xc6, 0xb1, 0xda, 0xc6, 0x6b, 0x66, 0xf1, 0x77, 0x6b, 0x19, 0xc0, 0xac, 0x42, 0xa0, 0x82, 0x2f, 0xe7, 0xb8, 0x3d, 0x25, 0x4e, 0x38, 0xa0, 0x5f, 0xda, 0x43, 0x77, 0xde, 0xc3, 0xa9, 0xec, 0x8f, 0x49, 0x15, 0x9c, 0x73, 0x8, 0xd1, 0x52, 0xc5, 0xb9, 0x8a, 0xf, 0xe4, 0x3d, 0xe4, 0xb0, 0x7d, 0x1c, 0xf9, 0x36, 0x9a, 0x3e, 0xf, 0x13, 0x88, 0x91, 0x6, 0xde, 0xe, 0x4e, 0xac, 0x96, 0xbc, 0x95, 0x5, 0xdc, 0x60, 0x71, 0x12, 0x6d, 0x5b, 0x24, 0x0, 0xed, 0x3b, 0xc5, 0x1f, 0x2a, 0xfe, 0x84, 0xd2, 0x6c, 0xd, 0x25, 0x72, 0x39, 0x17, 0x4f, 0x4d, 0xaa, 0x56, 0x5d, 0xc4, 0x49, 0xde, 0xfd, 0x5, 0xff, 0x8e, 0xeb, 0x3c, 0xca, 0x9d, 0x69, 0x60, 0x82, 0x4a, 0xec, 0x6, 0x95, 0x1b, 0xb, 0x63, 0x5f, 0x6a, 0xe, 0x42, 0xeb, 0xee, 0x92, 0x3d, 0xe7, 0x32, 0x6e, 0xa5, 0xd6, 0xa0, 0xf3, 0x21, 0x93, 0x15, 0x12, 0x87, 0x2a, 0x1e, 0x2b, 0x4e, 0xe6, 0x88, 0x79, 0xad, 0x4f, 0xa9, 0xee, 0xcf, 0xe6, 0x6e, 0xac, 0x81, 0x57, 0x4a, 0xe0, 0xe5, 0x71, 0xb1, 0xe6, 0x73, 0x87, 0x41, 0xa2, 0xf3, 0x49, 0x6c, 0xc7, 0x38, 0x6e, 0xe8, 0x2b, 0x42, 0x1, 0x6f, 0x55, 0xfc, 0x9c, 0x87, 0x6b, 0x7, 0xf7, 0x70, 0xbf, 0xfc, 0xff, 0x51, 0xd4, 0x7c, 0x2, 0x8, 0x73, 0xfe, 0xad, 0x31, 0xe7, 0xa5, 0xec, 0x63, 0xd, 0xa, 0x7a, 0x7c, 0xbf, 0xab, 0x38, 0x69, 0x6a, 0x1d, 0xf8, 0xbf, 0xd3, 0xc8, 0x28, 0x59, 0x82, 0xf0, 0xc6, 0x39, 0x51, 0x5, 0x5e, 0x2e, 0x59, 0x24, 0xf5, 0x80, 0x69, 0x48, 0xec, 0x3e, 0xe2, 0x94, 0x96, 0x30, 0xd5, 0xd4, 0xd5, 0x8a, 0x5f, 0xe6, 0xa4, 0x7f, 0x29, 0x7b, 0xaf, 0xf9, 0xb2, 0x83, 0xb, 0x16, 0xb, 0xec, 0x23, 0xee, 0x70, 0x87, 0x28, 0xbe, 0x8a, 0xbb, 0xe6, 0x81, 0x5c, 0xec, 0xd3, 0x8, 0xbe, 0x17, 0x7d, 0x1e, 0x9b, 0x7c, 0x4a, 0xdf, 0xbe, 0x9, 0x7f, 0x2f, 0xa2, 0x2a, 0x3c, 0x85, 0x6a, 0xd2, 0xaa, 0x14, 0xd5, 0xcb, 0xd3, 0x39, 0x36, 0xf5, 0xf8, 0x7e, 0xa9, 0xe2, 0x31, 0x8a, 0x5f, 0x52, 0xbc, 0x6c, 0x1f, 0xdf, 0xdd, 0x2e, 0x4e, 0x15, 0x1, 0xd8, 0xc5, 0xa8, 0x70, 0x30, 0x9e, 0x2, 0xf3, 0x8, 0xf6, 0x73, 0x0, 0xfb, 0xd, 0x5b, 0xfa, 0x59, 0xaa, 0xb0, 0x43, 0xb8, 0xe8, 0xdd, 0xa4, 0x6b, 0x14, 0x8f, 0xe4, 0x1c, 0x9, 0x6d, 0xcc, 0x7f, 0x29, 0x7e, 0x42, 0x9c, 0x62, 0x5b, 0x25, 0xfb, 0xd0, 0xb2, 0x56, 0x52, 0x50, 0xfd, 0x93, 0xeb, 0xa8, 0x13, 0x85, 0x6c, 0x7f, 0xee, 0x86, 0x3d, 0xb9, 0x93, 0xde, 0x45, 0x93, 0xa0, 0x3c, 0x99, 0xc5, 0x18, 0x26, 0xca, 0xe3, 0xae, 0x23, 0x29, 0xda, 0x6, 0x47, 0x71, 0xe1, 0x3d, 0x67, 0x80, 0xe, 0x8b, 0x61, 0x28, 0xa5, 0x2f, 0xe2, 0x41, 0x3f, 0x97, 0xd4, 0xb, 0x2d, 0xc1, 0x4e, 0xba, 0x91, 0x92, 0x7c, 0xaa, 0xd1, 0x47, 0x2c, 0xa2, 0x5f, 0xf9, 0x38, 0x2e, 0x28, 0xa1, 0x31, 0x3d, 0x1, 0x74, 0xef, 0x2b, 0x3e, 0x47, 0xf1, 0x91, 0xec, 0xe3, 0x3b, 0x4, 0x4d, 0x2a, 0xa0, 0xc3, 0xae, 0xfe, 0xba, 0x1, 0xba, 0xd1, 0x1c, 0xcb, 0x7, 0x92, 0x0, 0xdd, 0xcf, 0xed, 0xde, 0x73, 0xb8, 0x43, 0x1c, 0xce, 0x5d, 0x48, 0xef, 0xbc, 0x57, 0x11, 0x9c, 0x6e, 0xd1, 0x1, 0xbc, 0xde, 0x18, 0x3, 0x74, 0x93, 0x38, 0x5e, 0x97, 0x70, 0xa7, 0x4b, 0xd5, 0xc6, 0x85, 0x66, 0x34, 0x8b, 0x1a, 0x13, 0xc6, 0xe2, 0x6f, 0xbc, 0xa7, 0xaa, 0x8a, 0xef, 0x21, 0xa0, 0xeb, 0x45, 0xd, 0x78, 0xb5, 0xc, 0xdb, 0x6e, 0x65, 0x92, 0xdf, 0x19, 0x46, 0x69, 0x5b, 0x60, 0x78, 0x26, 0x87, 0x53, 0x5d, 0x18, 0xcd, 0x5d, 0x2c, 0x5d, 0xfa, 0x9e, 0x52, 0xef, 0x21, 0x43, 0xd, 0x1e, 0xc7, 0x85, 0xeb, 0x35, 0x9d, 0x45, 0xd0, 0xb7, 0xe2, 0xfb, 0xc5, 0x74, 0x1a, 0x14, 0x70, 0xa7, 0xab, 0xac, 0x7, 0xb1, 0xa5, 0x38, 0xa1, 0x7a, 0x7, 0x70, 0x61, 0x5d, 0x41, 0x41, 0xb5, 0xc9, 0xc5, 0xbe, 0xaf, 0x23, 0x0, 0x7b, 0x48, 0xbc, 0xc4, 0x63, 0x3f, 0x89, 0xe7, 0x62, 0xa6, 0x43, 0x75, 0x79, 0xff, 0x3, 0xf8, 0xbe, 0x98, 0xf7, 0x80, 0xf1, 0x9a, 0xeb, 0x52, 0xff, 0x97, 0x52, 0xdb, 0x39, 0x8d, 0x42, 0x58, 0xcf, 0x7, 0x2a, 0x27, 0x34, 0x8b, 0x12, 0xf0, 0xe, 0x31, 0xc, 0xf5, 0xc2, 0x24, 0xbf, 0x53, 0xc0, 0xc5, 0x23, 0x54, 0x8f, 0x3a, 0x50, 0xed, 0xd8, 0xe2, 0x72, 0xdf, 0x20, 0x9, 0x6f, 0x12, 0x27, 0x8f, 0x50, 0x3b, 0x12, 0x9e, 0x10, 0x6f, 0xb3, 0x29, 0xe0, 0xe1, 0x7c, 0xcd, 0x90, 0xe6, 0x13, 0xe8, 0xbd, 0x7c, 0xd5, 0x85, 0x6b, 0x63, 0x8c, 0x1a, 0x1b, 0x3b, 0xd1, 0x33, 0x1e, 0xde, 0xc7, 0xc7, 0x54, 0x69, 0x7f, 0xe4, 0xfb, 0x6b, 0xd3, 0x1c, 0xb7, 0xea, 0x1c, 0x17, 0x5d, 0xbc, 0xeb, 0x3b, 0xda, 0xe3, 0x5e, 0xdd, 0x3, 0x76, 0xce, 0xe3, 0xd, 0x27, 0x4b, 0x7, 0xee, 0xac, 0xcd, 0xa2, 0x2, 0xbc, 0x2e, 0x86, 0x93, 0x21, 0x59, 0xe0, 0x5d, 0x47, 0xd5, 0xa0, 0x2f, 0x6d, 0xbc, 0x65, 0x1e, 0xf7, 0x11, 0xd2, 0xfa, 0x79, 0xb6, 0xf, 0xa6, 0xde, 0xef, 0x5, 0x75, 0xa5, 0x1d, 0x59, 0x95, 0xef, 0x1, 0xf8, 0x4b, 0x5d, 0xda, 0xc1, 0xbb, 0xf2, 0x5a, 0xa0, 0x17, 0xb8, 0x7b, 0x7b, 0x4d, 0xdf, 0xd2, 0x16, 0x9b, 0xc4, 0xdf, 0x5e, 0x53, 0xc9, 0xeb, 0xc0, 0xf6, 0xff, 0x3b, 0x6d, 0x2e, 0xe1, 0xdc, 0x43, 0xf8, 0x7e, 0xed, 0x71, 0xff, 0xd7, 0xd3, 0x71, 0xf3, 0x2c, 0xdf, 0x1f, 0x41, 0xb5, 0xb3, 0x6e, 0x14, 0x80, 0x57, 0x60, 0xa8, 0x53, 0xf3, 0x93, 0xfc, 0x4e, 0x11, 0x8d, 0x76, 0x3f, 0x9d, 0x1d, 0x37, 0xb0, 0x8f, 0x42, 0xf5, 0xe6, 0x28, 0x17, 0xaf, 0xd, 0x9b, 0xa4, 0xe, 0x17, 0x97, 0xb6, 0x77, 0x87, 0xbb, 0xa4, 0x9e, 0x69, 0xea, 0x6f, 0x38, 0x21, 0xee, 0xf5, 0x71, 0xdc, 0x26, 0x52, 0x55, 0x7b, 0x2f, 0x8d, 0x6b, 0xdc, 0xa1, 0xf8, 0x2, 0xb6, 0xe1, 0x10, 0xe9, 0x25, 0xf1, 0x7c, 0x4e, 0xaf, 0x9, 0x73, 0xf3, 0x6b, 0xee, 0xb6, 0x42, 0x27, 0xcc, 0x38, 0xd9, 0x83, 0x23, 0x30, 0x4c, 0xc0, 0x6b, 0xc5, 0xed, 0x5c, 0xab, 0x26, 0xdb, 0x53, 0x1c, 0x10, 0x3f, 0x69, 0x4d, 0x82, 0xca, 0x39, 0xd8, 0x45, 0x75, 0x16, 0x93, 0x88, 0xa3, 0x8b, 0x36, 0xfc, 0xdb, 0xa3, 0x54, 0xb, 0xdd, 0xa2, 0xaa, 0x86, 0x8a, 0xf6, 0xae, 0xf, 0x3b, 0x85, 0x9b, 0x84, 0x7e, 0xff, 0x91, 0xed, 0xb5, 0xdc, 0x39, 0x57, 0xf9, 0xdc, 0x87, 0x32, 0xa, 0xdb, 0xcf, 0xf9, 0xfe, 0x7c, 0x9a, 0x20, 0xa1, 0x5, 0xde, 0x25, 0x86, 0x2d, 0xf3, 0x6a, 0x8, 0xfa, 0xfb, 0x3c, 0xd5, 0x27, 0x10, 0xa2, 0x62, 0xdc, 0x8, 0xea, 0xde, 0x4e, 0x67, 0x41, 0x7f, 0x3, 0x18, 0x37, 0xb9, 0xdc, 0xef, 0x36, 0x74, 0xac, 0x80, 0xa6, 0x84, 0x68, 0x7d, 0xc0, 0xae, 0x7b, 0xd0, 0xd8, 0x5d, 0xae, 0x37, 0xc6, 0xdf, 0x6f, 0xda, 0x42, 0xa7, 0x4b, 0x31, 0xdf, 0x23, 0x91, 0xfb, 0xc8, 0x30, 0x2, 0xaf, 0x16, 0x6f, 0x44, 0x1b, 0xca, 0x53, 0x43, 0xd0, 0x67, 0xa8, 0x69, 0xfa, 0x40, 0xb8, 0x11, 0x8d, 0xfb, 0x74, 0xa9, 0xb6, 0x1, 0xb4, 0x62, 0xda, 0xaf, 0x6e, 0x9f, 0x79, 0x35, 0x93, 0x78, 0x44, 0x47, 0x61, 0x88, 0x80, 0x77, 0x3d, 0x9d, 0x1a, 0x42, 0x35, 0xfc, 0xa5, 0x80, 0xfb, 0x33, 0x57, 0xe2, 0x95, 0x13, 0xaa, 0x1b, 0x1a, 0x50, 0xa8, 0x80, 0x37, 0x88, 0x8e, 0xa, 0xa1, 0xce, 0xbc, 0x3d, 0x24, 0xfd, 0x7e, 0xc3, 0x0, 0x86, 0x1b, 0xe5, 0xf1, 0xab, 0x18, 0x76, 0xdd, 0x83, 0x14, 0x42, 0x6e, 0x53, 0xbe, 0xa1, 0xd6, 0xae, 0x9, 0xc9, 0x38, 0xe7, 0xd3, 0x31, 0x3, 0xc2, 0x11, 0xc5, 0x9d, 0x19, 0xd2, 0x2f, 0xd4, 0x87, 0x9d, 0x9e, 0x95, 0x95, 0x25, 0x25, 0xa5, 0x25, 0xbd, 0x67, 0xcd, 0x9d, 0xd7, 0x23, 0x4c, 0xc0, 0x83, 0xea, 0x73, 0x2b, 0xdb, 0x70, 0xa8, 0x3c, 0x1d, 0x22, 0x29, 0x5c, 0x28, 0xf1, 0x40, 0x5a, 0x37, 0xcb, 0xd1, 0xc3, 0x61, 0x34, 0xc6, 0xa3, 0x3e, 0xe7, 0x26, 0xd8, 0x94, 0x61, 0x20, 0xa8, 0xdf, 0x4d, 0xd8, 0x7e, 0x52, 0x9c, 0xe0, 0x88, 0x4c, 0x20, 0x8, 0xdd, 0x3f, 0xa1, 0x11, 0x8b, 0xc5, 0x64, 0xf2, 0x87, 0x9f, 0xdc, 0xb0, 0x79, 0xeb, 0xb6, 0x50, 0x0, 0x2f, 0xc6, 0x5, 0xa6, 0x5d, 0xb2, 0x77, 0x88, 0xbb, 0x7, 0xb8, 0x5e, 0x53, 0xb9, 0x1, 0x3c, 0x44, 0xcc, 0xd4, 0x71, 0xe9, 0xba, 0xe3, 0x3c, 0x1c, 0x87, 0x5d, 0x86, 0x50, 0xae, 0x1f, 0x82, 0x31, 0xc6, 0x19, 0xad, 0x8e, 0x12, 0x82, 0x4b, 0x7f, 0x6c, 0x86, 0xf5, 0xef, 0x6d, 0xc5, 0x1f, 0xc7, 0x72, 0x72, 0x64, 0xed, 0xfa, 0x8d, 0xa7, 0x7d, 0x53, 0x58, 0x74, 0x6c, 0x18, 0x80, 0x37, 0x4a, 0x9c, 0xa8, 0x0, 0xd0, 0xb, 0x19, 0xa0, 0xb7, 0x57, 0x86, 0xb4, 0x81, 0xf, 0xc7, 0x90, 0x1b, 0xcf, 0x21, 0x5c, 0xc7, 0xb1, 0xf0, 0x8a, 0x4c, 0x2f, 0x60, 0xdb, 0x10, 0x8c, 0x2f, 0x82, 0xae, 0x75, 0x52, 0x34, 0xdc, 0xf8, 0xcb, 0x32, 0xac, 0x7f, 0x38, 0x73, 0x46, 0x58, 0x99, 0x28, 0x95, 0x33, 0x7b, 0xea, 0xb4, 0xe9, 0x7d, 0x32, 0x1d, 0x78, 0xa3, 0x24, 0x5e, 0xca, 0xf, 0xbb, 0xc6, 0x10, 0x9, 0x27, 0xad, 0xe0, 0x2b, 0xdc, 0xf4, 0xf5, 0x5c, 0xb8, 0xde, 0x5b, 0xc6, 0x35, 0xbd, 0x20, 0x84, 0xbf, 0xe9, 0x38, 0xd8, 0x30, 0x14, 0x95, 0x3a, 0xc7, 0x68, 0x4f, 0xc8, 0xd0, 0x3e, 0x22, 0x28, 0x60, 0x75, 0x95, 0xdc, 0x5c, 0x59, 0xb8, 0x64, 0xf9, 0x99, 0xab, 0xd6, 0xac, 0xab, 0x96, 0x89, 0xc0, 0x83, 0xf3, 0x0, 0xae, 0xf8, 0xdf, 0xf1, 0x3d, 0x62, 0x32, 0x2f, 0x95, 0xf0, 0x3e, 0x2b, 0xaf, 0x38, 0xc1, 0x39, 0x92, 0x2e, 0xbd, 0xee, 0x71, 0x7f, 0x91, 0x23, 0x37, 0x83, 0x6d, 0x38, 0x3, 0x2e, 0xc8, 0xe0, 0xb1, 0xc5, 0xfa, 0x3d, 0x99, 0x6d, 0xc4, 0x4a, 0x7e, 0x96, 0xa1, 0xfd, 0xc4, 0x99, 0xe2, 0xfb, 0xd9, 0xd9, 0x59, 0xb2, 0x7d, 0xc7, 0xce, 0x43, 0x7f, 0x58, 0xbe, 0xa2, 0x63, 0xa6, 0x1, 0xf, 0x51, 0xb, 0x38, 0x78, 0xec, 0x6b, 0x2c, 0x82, 0xb3, 0x24, 0xb8, 0xf3, 0x18, 0xb7, 0x54, 0xd, 0x31, 0xd4, 0xcd, 0x74, 0x68, 0x87, 0xa4, 0x91, 0xf5, 0x9c, 0x2, 0x99, 0x8e, 0x1b, 0xa8, 0x49, 0xa7, 0x66, 0xe8, 0xd8, 0x1e, 0x4a, 0x6, 0x21, 0x9f, 0x2e, 0x93, 0xbd, 0xdd, 0x3f, 0x1d, 0x81, 0xed, 0x2e, 0x2f, 0x97, 0xa2, 0x45, 0x4b, 0x4e, 0x34, 0x81, 0x17, 0x94, 0x7, 0xb, 0x6, 0x3c, 0xe, 0xc7, 0x91, 0xc6, 0xf2, 0xa6, 0x61, 0x57, 0x20, 0xaf, 0xd, 0x67, 0x5f, 0xb3, 0x25, 0xdc, 0x94, 0xe5, 0x32, 0x88, 0xfd, 0x98, 0xa7, 0x89, 0xda, 0x2e, 0x11, 0xe7, 0xec, 0x10, 0xf3, 0x32, 0x52, 0x32, 0xcf, 0xd9, 0xd2, 0x56, 0xe2, 0x1, 0xf0, 0x9f, 0x64, 0xf8, 0x3a, 0xc0, 0x6e, 0x5c, 0x1e, 0xcb, 0x8d, 0xc9, 0xf7, 0xb, 0x17, 0x77, 0x36, 0x13, 0x61, 0x71, 0x70, 0x8a, 0x4c, 0xe0, 0x1c, 0xf1, 0xfe, 0x39, 0xe8, 0x31, 0xfe, 0x1e, 0xe, 0x3c, 0x3b, 0x25, 0x4c, 0x28, 0xec, 0x8b, 0xfb, 0xc9, 0x41, 0x14, 0xc5, 0xc1, 0xfd, 0xd7, 0xa2, 0xca, 0x8b, 0x7e, 0x9a, 0x45, 0x86, 0xf0, 0xa, 0x7f, 0x30, 0x22, 0x13, 0x76, 0x46, 0x0, 0xc8, 0x3f, 0x47, 0xd7, 0xf1, 0xde, 0xfb, 0xd1, 0x3e, 0xc5, 0x91, 0xe, 0x12, 0x7c, 0x91, 0x34, 0x8c, 0xb8, 0xd7, 0x2f, 0x24, 0xf8, 0xa2, 0x45, 0x87, 0x19, 0xed, 0x4c, 0xf, 0x6d, 0x5b, 0xac, 0x78, 0x69, 0x4e, 0x76, 0xf6, 0xc1, 0xc5, 0x9b, 0xb7, 0xb4, 0x8f, 0x25, 0x48, 0x8f, 0x20, 0x5d, 0xb1, 0xc8, 0x93, 0x7b, 0x89, 0x4e, 0x95, 0x5, 0x3e, 0xfe, 0x2e, 0x4a, 0x39, 0x20, 0x6, 0x14, 0xe9, 0x34, 0x8, 0xeb, 0x69, 0x41, 0x29, 0xaf, 0x81, 0x57, 0x95, 0xbb, 0x4c, 0x49, 0x2, 0xf0, 0x60, 0xbb, 0x21, 0x87, 0xc, 0x67, 0x46, 0x85, 0x64, 0x9c, 0xaf, 0xad, 0x12, 0x17, 0xaa, 0x50, 0x65, 0x0, 0x41, 0xb0, 0xf4, 0xa7, 0x26, 0x82, 0xb3, 0xa8, 0x46, 0x14, 0x90, 0x57, 0x93, 0x8b, 0xf8, 0xbf, 0xa9, 0x4, 0xe1, 0xd2, 0x0, 0xb4, 0xa6, 0xa6, 0x7c, 0x45, 0x8d, 0x94, 0x65, 0x19, 0x3e, 0x9e, 0x58, 0x37, 0x4b, 0xb3, 0x15, 0xf0, 0x36, 0x14, 0x6f, 0x6a, 0x10, 0x54, 0xe9, 0x87, 0x32, 0xe, 0x16, 0xca, 0x2e, 0x7c, 0x25, 0x4e, 0x1e, 0xd3, 0x64, 0xbe, 0xf7, 0x83, 0xb0, 0x88, 0x2e, 0xa4, 0xe3, 0x0, 0xe7, 0x2a, 0x79, 0x49, 0xec, 0x82, 0x3a, 0xf, 0x10, 0x35, 0x38, 0xf4, 0xb1, 0x40, 0xe7, 0x84, 0xcf, 0x6d, 0xe2, 0x82, 0x9c, 0xce, 0x45, 0xf9, 0x1f, 0x9, 0xcf, 0x21, 0xf4, 0xde, 0xe8, 0x29, 0xaa, 0x9e, 0x38, 0x2b, 0x1b, 0x40, 0xe1, 0x84, 0x5d, 0x57, 0x17, 0x2d, 0x1a, 0x44, 0xdb, 0xea, 0x3b, 0xaa, 0x53, 0xa8, 0xc3, 0x32, 0x93, 0x2, 0xa9, 0xd4, 0xe3, 0xbe, 0x69, 0x2f, 0xb1, 0xae, 0x3e, 0x97, 0xe9, 0x84, 0x0, 0x90, 0x93, 0x15, 0xf8, 0x6a, 0x99, 0xc0, 0x83, 0x53, 0xe3, 0xa, 0x4a, 0x79, 0x2f, 0xd5, 0x99, 0x2c, 0x4a, 0x53, 0xec, 0x18, 0xeb, 0x24, 0xf5, 0x72, 0xb, 0xe9, 0x4a, 0xc8, 0x61, 0x94, 0xe4, 0x7b, 0xaa, 0xff, 0x8, 0x75, 0x60, 0x11, 0xa5, 0xe7, 0x7a, 0xee, 0xc2, 0x15, 0x46, 0xbf, 0xb5, 0xa, 0xa, 0xc9, 0x7f, 0x10, 0xd5, 0xe5, 0x46, 0x5c, 0x0, 0xfa, 0xff, 0x9d, 0xc9, 0x50, 0xd5, 0x10, 0x72, 0xf5, 0x63, 0x4, 0x76, 0x3f, 0x8c, 0x5, 0xea, 0xb9, 0x3c, 0x46, 0xcd, 0x0, 0xa9, 0x36, 0x3d, 0x8, 0xc2, 0x3c, 0xf2, 0x31, 0xe4, 0x6b, 0xa8, 0x1d, 0x2c, 0x22, 0x0, 0x3f, 0xa2, 0x20, 0x2a, 0xf2, 0x40, 0x35, 0xad, 0xcd, 0x57, 0x8c, 0xfb, 0xef, 0x25, 0x9e, 0xbd, 0x91, 0xa9, 0x1a, 0x84, 0x3e, 0x6f, 0xcc, 0x33, 0x81, 0xa7, 0x6b, 0x6, 0x46, 0x91, 0x30, 0x19, 0x57, 0x51, 0x65, 0x32, 0x1, 0x57, 0x48, 0xc7, 0xc1, 0x14, 0xda, 0x8, 0xab, 0x53, 0xdc, 0xa1, 0x72, 0x8, 0xba, 0xe6, 0x5c, 0x84, 0xd8, 0x3d, 0x91, 0xfb, 0x87, 0xe2, 0xa8, 0x38, 0x3a, 0xc8, 0x97, 0x68, 0x3d, 0xcf, 0xf, 0x42, 0x72, 0x6, 0x79, 0x4, 0x5, 0xf, 0x92, 0x66, 0x4f, 0xa4, 0xba, 0xde, 0x8e, 0x1a, 0x41, 0x15, 0xb6, 0xdb, 0x51, 0xc8, 0xe1, 0x7b, 0xb, 0xe9, 0x0, 0x41, 0x24, 0x7, 0x2a, 0xb9, 0xad, 0x75, 0xb1, 0x5f, 0x10, 0x7e, 0xb7, 0x67, 0xfa, 0xe0, 0x55, 0x54, 0xc4, 0x2d, 0x90, 0x58, 0x0, 0x46, 0xbb, 0xdf, 0x4, 0xa9, 0x88, 0xf8, 0x4e, 0xf3, 0x41, 0x27, 0x38, 0xd0, 0x1c, 0x4d, 0x75, 0x30, 0x1d, 0x75, 0xa8, 0x9c, 0xbb, 0xda, 0x1a, 0x4a, 0x77, 0x5d, 0x45, 0xb, 0x2a, 0x18, 0x5c, 0xf0, 0xe7, 0x8a, 0x13, 0x59, 0x51, 0x35, 0x82, 0xe3, 0xa, 0x1, 0xb5, 0x84, 0xc, 0xdb, 0x1c, 0x1e, 0x72, 0xc4, 0x4b, 0x76, 0x24, 0x18, 0x1, 0xc4, 0xa3, 0x28, 0x98, 0x62, 0xf4, 0x21, 0x80, 0x91, 0x28, 0xba, 0x81, 0x63, 0xff, 0x22, 0x81, 0xb8, 0x3d, 0x8d, 0xf1, 0x17, 0xc3, 0xf9, 0x95, 0x15, 0x2, 0xe0, 0xa1, 0x8f, 0xa5, 0x31, 0x89, 0x36, 0x21, 0x7, 0xe, 0x19, 0x2, 0xc7, 0xf1, 0x3d, 0xd4, 0x9d, 0x21, 0x9c, 0x6c, 0xaf, 0xa8, 0xdc, 0x70, 0xb6, 0x8c, 0xa1, 0x5d, 0x34, 0x5e, 0xa2, 0x4f, 0xbb, 0xa9, 0xa2, 0x2f, 0x93, 0xf8, 0xe3, 0xb3, 0xeb, 0x13, 0x88, 0xa8, 0xc7, 0xd9, 0x9d, 0x6d, 0xa8, 0xa5, 0x75, 0x69, 0x5f, 0x5f, 0x40, 0x95, 0x14, 0x51, 0xfc, 0x4f, 0x48, 0xea, 0x75, 0x70, 0x36, 0xf2, 0x15, 0x26, 0x2, 0xa, 0xf8, 0xee, 0x90, 0xca, 0xd7, 0x5b, 0xf5, 0x7c, 0xa7, 0x1b, 0x3a, 0xf0, 0x32, 0x69, 0xd6, 0xb8, 0x51, 0x56, 0x69, 0x59, 0x59, 0xa4, 0x81, 0x57, 0x95, 0x12, 0x55, 0x83, 0xe, 0x35, 0x11, 0x7f, 0x23, 0xff, 0x1b, 0x49, 0xe2, 0x7, 0xad, 0x95, 0xfd, 0x97, 0x60, 0xc3, 0x4f, 0x95, 0x78, 0xfe, 0x24, 0x52, 0xbb, 0x7a, 0x12, 0x70, 0xdd, 0x38, 0x47, 0xa8, 0x2c, 0x80, 0x72, 0x81, 0x57, 0x52, 0x28, 0x4e, 0xaa, 0xc4, 0xd8, 0xd6, 0xe2, 0x2e, 0xba, 0x3a, 0x53, 0x7, 0x2, 0xd8, 0x6b, 0x94, 0x5f, 0x5f, 0xe, 0x6a, 0xe8, 0xe4, 0x43, 0x67, 0x47, 0x78, 0xd2, 0x61, 0x83, 0xfc, 0x92, 0x6d, 0xa8, 0x42, 0x17, 0x5, 0x0, 0xba, 0x28, 0xab, 0xf0, 0x95, 0x21, 0x78, 0x3a, 0xc7, 0xd2, 0x31, 0x83, 0x33, 0xdc, 0x51, 0xc6, 0x9c, 0xa0, 0x82, 0x1c, 0xe2, 0x50, 0xff, 0x90, 0xe2, 0xf5, 0xf4, 0xce, 0xda, 0x38, 0x4c, 0x3, 0x11, 0x55, 0xe0, 0xc1, 0xb6, 0x18, 0xca, 0x36, 0xce, 0x98, 0x6, 0x4a, 0xf8, 0xdd, 0xfa, 0x51, 0x23, 0xb8, 0xd6, 0x6f, 0xe4, 0x5c, 0x99, 0xa5, 0xdb, 0x91, 0xa9, 0x3d, 0x2c, 0xc9, 0x6b, 0x98, 0x89, 0xc0, 0x9d, 0x2c, 0xf0, 0x82, 0x27, 0xd4, 0x65, 0xc4, 0xb9, 0x5b, 0x5, 0x27, 0x71, 0x9b, 0x5d, 0xe7, 0x19, 0x4b, 0xb0, 0x9, 0x2f, 0x93, 0x78, 0x26, 0x8a, 0x6, 0xdf, 0xb1, 0x49, 0x7c, 0xb7, 0xd0, 0xd8, 0x31, 0x4f, 0xb2, 0xc0, 0xb, 0x96, 0x60, 0xb8, 0x9f, 0xc5, 0x36, 0xe, 0xe5, 0x3f, 0xb0, 0x6b, 0x3b, 0x14, 0x4, 0x47, 0x94, 0xae, 0x34, 0x80, 0xe3, 0x88, 0x5b, 0x92, 0x4, 0xed, 0x3c, 0x3, 0x78, 0x79, 0x16, 0x78, 0xc1, 0xaa, 0x99, 0x5a, 0xdf, 0x9f, 0x68, 0xd7, 0x73, 0xa8, 0x8, 0x25, 0xf0, 0x75, 0x59, 0x3c, 0xd8, 0x81, 0x2d, 0x93, 0xf8, 0xce, 0xbb, 0x7c, 0xc5, 0x11, 0x4e, 0x57, 0xb, 0xbc, 0xe0, 0xc8, 0xcc, 0x9a, 0x9e, 0x69, 0xd7, 0x72, 0xa8, 0x8, 0x7, 0xed, 0xcf, 0xb0, 0x8d, 0x14, 0xaa, 0x2e, 0x49, 0x7c, 0xe7, 0xd, 0x89, 0x47, 0x17, 0xf5, 0xb1, 0xc0, 0xb, 0x8e, 0x74, 0x1c, 0x25, 0xb2, 0x1c, 0x36, 0xda, 0xb5, 0x1c, 0x3a, 0x9a, 0x61, 0x0, 0xa9, 0x55, 0x12, 0x9f, 0x87, 0xf3, 0x4c, 0xa7, 0x4, 0x21, 0x48, 0xa2, 0xb9, 0x5, 0x5e, 0x30, 0x94, 0x69, 0xee, 0xfb, 0xa, 0x8b, 0xa5, 0x94, 0x68, 0xa5, 0x21, 0x30, 0x93, 0xb5, 0xd9, 0xc6, 0x1b, 0xf6, 0xfd, 0x95, 0x16, 0x78, 0xc1, 0x90, 0x2e, 0x11, 0x51, 0x4d, 0xd2, 0xcf, 0xf8, 0x76, 0x83, 0x1a, 0x5b, 0x2c, 0xa5, 0x44, 0x8, 0xe1, 0x2b, 0x4f, 0xf1, 0x3b, 0xc8, 0x11, 0xd4, 0x4e, 0x16, 0xc4, 0xe4, 0xb6, 0xb6, 0xc0, 0xf3, 0x9f, 0x16, 0xf3, 0x35, 0x27, 0x49, 0x55, 0xc5, 0x6b, 0xea, 0x65, 0xb1, 0x94, 0x12, 0x21, 0xb6, 0xb6, 0xba, 0x61, 0x2e, 0x24, 0x43, 0xf8, 0xdc, 0x68, 0xb6, 0x11, 0x4, 0x7f, 0x77, 0x86, 0xdc, 0x4b, 0x4d, 0x89, 0x3f, 0xc5, 0xa9, 0x6e, 0xd4, 0x81, 0x87, 0x43, 0xd5, 0x1d, 0x6c, 0x17, 0x4, 0xdc, 0x97, 0x6e, 0x16, 0x78, 0x29, 0x53, 0x2b, 0x43, 0xc5, 0x4c, 0x25, 0x21, 0x7a, 0xbc, 0x61, 0xeb, 0xc1, 0xc9, 0xd2, 0x2f, 0x3, 0xee, 0x5, 0xd1, 0x52, 0x88, 0xc4, 0x41, 0xe8, 0xe2, 0xc5, 0x51, 0x7, 0x1e, 0x82, 0x6e, 0x75, 0x9d, 0x96, 0x33, 0x2, 0x54, 0x37, 0x21, 0xb5, 0x1f, 0x92, 0x68, 0x87, 0xe5, 0x79, 0x41, 0xba, 0xb0, 0x12, 0x84, 0xe7, 0x9c, 0x14, 0x55, 0x54, 0x4, 0x4b, 0xe8, 0x27, 0x43, 0x3d, 0x22, 0xf1, 0xfc, 0xb7, 0xa0, 0x4c, 0xc, 0xfd, 0xe4, 0x22, 0xe4, 0x33, 0x4e, 0x8a, 0x3a, 0xf0, 0x40, 0xfa, 0xf9, 0x64, 0xad, 0x29, 0x75, 0x82, 0x20, 0x80, 0xae, 0x4b, 0xc8, 0xc6, 0xd, 0xc5, 0x83, 0x7, 0x5, 0xf8, 0xfb, 0x8, 0x76, 0xd6, 0xe5, 0x4, 0xbf, 0xa0, 0x10, 0x4d, 0x85, 0x90, 0xfd, 0xae, 0x1f, 0x14, 0x82, 0xf8, 0x4d, 0x14, 0xfe, 0x6d, 0x18, 0xd0, 0xbd, 0xe0, 0xf1, 0x69, 0x2d, 0xd8, 0xc6, 0x73, 0x2e, 0x96, 0xee, 0xf, 0xc0, 0xc3, 0x80, 0xeb, 0x8a, 0xc8, 0xb7, 0xca, 0x5e, 0x9e, 0xca, 0xe9, 0x21, 0x41, 0xaf, 0xd7, 0xde, 0x35, 0x84, 0xab, 0x85, 0x21, 0x4e, 0x14, 0xc5, 0x6b, 0x91, 0x14, 0x8c, 0xf4, 0x9c, 0x9b, 0x2, 0xea, 0xc3, 0x10, 0xc3, 0x2e, 0xaf, 0x6c, 0x2a, 0x15, 0x1e, 0xa4, 0xa9, 0x2b, 0x8e, 0x23, 0x98, 0x62, 0x2, 0x1, 0xed, 0xb7, 0xd0, 0xd5, 0x2, 0x4, 0xcf, 0x72, 0x1c, 0x95, 0xf8, 0x81, 0xa8, 0x2, 0xf, 0xa0, 0x7b, 0x98, 0xed, 0x36, 0x46, 0xdb, 0x6b, 0x42, 0x9a, 0xcb, 0x38, 0x89, 0x47, 0xd8, 0x7f, 0xc5, 0x76, 0x18, 0xc6, 0x19, 0x65, 0xf2, 0xf4, 0x3, 0x4b, 0x90, 0xa6, 0x83, 0x10, 0xae, 0x2a, 0x3e, 0xfe, 0x7e, 0x77, 0x71, 0xca, 0x37, 0x80, 0xbe, 0x94, 0xf4, 0x9e, 0xe0, 0x8b, 0x47, 0xba, 0x7d, 0xc8, 0x36, 0xa, 0xde, 0xa2, 0xc2, 0x80, 0x5f, 0xe7, 0x7b, 0x0, 0xd9, 0xd, 0x6c, 0xa3, 0xec, 0xc7, 0x40, 0xd9, 0xc3, 0x83, 0x51, 0xa3, 0x6c, 0x7f, 0x3c, 0x42, 0x69, 0x3, 0x42, 0xa1, 0x9e, 0xfb, 0x3c, 0xfe, 0x3d, 0x44, 0xc7, 0x4f, 0xe3, 0x40, 0x83, 0xe0, 0xe4, 0x39, 0x53, 0xc2, 0x53, 0x8c, 0x17, 0x3b, 0xc3, 0x0, 0x89, 0x67, 0xe4, 0xa3, 0x76, 0xa, 0xc2, 0xb1, 0xda, 0xfb, 0xf0, 0xdb, 0x28, 0x1d, 0xf1, 0xa, 0xc1, 0x5f, 0x46, 0x5b, 0x2d, 0x9d, 0xfa, 0x2c, 0x5b, 0xb9, 0xe3, 0xe8, 0xf9, 0xef, 0xc2, 0xb9, 0x39, 0xc5, 0xc3, 0x7b, 0x40, 0xa2, 0x1d, 0xaa, 0x7c, 0xeb, 0xa, 0xe8, 0xa8, 0x4a, 0x80, 0xa7, 0xc1, 0xee, 0xf1, 0x91, 0xe1, 0x51, 0x6, 0x1e, 0xa4, 0xc, 0x12, 0x5f, 0xf5, 0x73, 0x6, 0x30, 0x99, 0x8f, 0x8b, 0xfb, 0x65, 0x18, 0x1a, 0x11, 0xe4, 0xd3, 0xd, 0x9b, 0x6e, 0x32, 0x25, 0xf8, 0x4a, 0x89, 0x17, 0x5c, 0xd, 0x3, 0xe1, 0x81, 0x8e, 0x88, 0xfe, 0xd0, 0x7, 0xd8, 0x8, 0x3c, 0xfe, 0x8c, 0xea, 0x7a, 0x35, 0x8f, 0x7e, 0x13, 0xa5, 0x20, 0xde, 0x96, 0x78, 0x6d, 0xd5, 0x9b, 0x25, 0x1e, 0x7f, 0x99, 0xe, 0xc1, 0xa1, 0xd1, 0x8b, 0xea, 0xb3, 0x70, 0xc7, 0x9b, 0xc2, 0xdd, 0xdc, 0x6d, 0xd5, 0xf3, 0x22, 0xda, 0xa4, 0xe7, 0xf2, 0x3d, 0xd6, 0x1c, 0x32, 0xe2, 0x67, 0xec, 0xed, 0xb, 0x51, 0xf7, 0xb8, 0xe1, 0x1, 0x1c, 0x28, 0xe3, 0xa7, 0x33, 0x95, 0x51, 0xf, 0x12, 0x2e, 0xe7, 0x13, 0xd2, 0xbc, 0x2e, 0xa2, 0x63, 0x8e, 0x16, 0xa7, 0xea, 0xd6, 0x3c, 0xda, 0x26, 0x0, 0x34, 0x2a, 0x49, 0xd, 0xe7, 0x84, 0xeb, 0x87, 0x3a, 0x9a, 0x55, 0xd4, 0xaa, 0x84, 0x60, 0xcc, 0xde, 0x22, 0xe0, 0x74, 0xb0, 0x32, 0xce, 0xa2, 0x46, 0x52, 0x6d, 0x86, 0xdd, 0x5a, 0xdb, 0x85, 0xdf, 0xc0, 0xf8, 0xa1, 0x4a, 0x38, 0x32, 0xd3, 0x51, 0x3e, 0xf0, 0x40, 0x43, 0x38, 0x3e, 0xe2, 0xe2, 0xbd, 0x6c, 0x22, 0x18, 0xa0, 0xed, 0x20, 0x82, 0x28, 0x87, 0xf6, 0x2b, 0xee, 0x65, 0xb0, 0xc4, 0x1f, 0xf2, 0x59, 0x19, 0xc2, 0xb5, 0x90, 0x4d, 0x8f, 0xda, 0x31, 0x2f, 0x1b, 0x8e, 0x94, 0xf7, 0xb9, 0xbe, 0x3e, 0xff, 0xb9, 0x2f, 0xef, 0xf, 0xae, 0x6e, 0x48, 0x6c, 0x64, 0xa2, 0xeb, 0x67, 0xe, 0x1c, 0x43, 0xfd, 0x7f, 0x22, 0x55, 0xc1, 0x1a, 0x29, 0xa8, 0x12, 0x50, 0x55, 0xee, 0xa0, 0x24, 0xc3, 0xc0, 0x22, 0xef, 0x4f, 0x57, 0x2d, 0x7b, 0x93, 0x3b, 0xde, 0xc8, 0x4, 0xb0, 0xa1, 0xce, 0x8b, 0x3e, 0x57, 0xbc, 0x91, 0xbf, 0x9f, 0xe9, 0x34, 0x8f, 0xc0, 0x18, 0x21, 0xf1, 0x43, 0x6c, 0x3c, 0xa3, 0x60, 0x2c, 0x55, 0x68, 0xd4, 0x48, 0x41, 0xea, 0x55, 0x43, 0x49, 0x3e, 0x44, 0x2f, 0x8f, 0xea, 0xf8, 0x30, 0x8e, 0xdf, 0x7, 0x12, 0xaf, 0x10, 0xb0, 0x96, 0x2, 0xf2, 0x1, 0xf, 0xee, 0xa5, 0x9c, 0x3b, 0xf6, 0x19, 0x9c, 0xb, 0x50, 0x4b, 0xde, 0xc3, 0xb7, 0xb4, 0xff, 0xbb, 0x25, 0xb9, 0xe, 0xe, 0xe0, 0x3d, 0xc0, 0x16, 0x9d, 0x25, 0x4e, 0x3d, 0xd8, 0xee, 0xfc, 0xdf, 0x66, 0xee, 0xd6, 0x0, 0xe3, 0xd2, 0x7d, 0x5d, 0xc8, 0xeb, 0x1a, 0x9a, 0x99, 0x42, 0x5f, 0x53, 0x8a, 0xff, 0x59, 0x1c, 0x77, 0x39, 0xee, 0xbb, 0x37, 0x79, 0x5, 0x8d, 0xf9, 0x79, 0x34, 0x86, 0x35, 0x68, 0x70, 0xe, 0x87, 0xd2, 0x7c, 0x28, 0x61, 0xd7, 0x9a, 0x93, 0x95, 0xf8, 0xec, 0x80, 0x52, 0xaa, 0x95, 0xf, 0x1a, 0xc6, 0x7c, 0x22, 0x2d, 0x20, 0x28, 0xa1, 0x8e, 0xa0, 0xf2, 0xd6, 0x5d, 0x12, 0xcf, 0x17, 0x4c, 0x65, 0x87, 0xf0, 0x9b, 0x76, 0xb1, 0xaf, 0x78, 0x72, 0x13, 0x72, 0xe3, 0xfa, 0x72, 0x4c, 0x1a, 0x71, 0xb7, 0x18, 0x4c, 0x95, 0x74, 0x21, 0xed, 0x98, 0x65, 0x4, 0xd0, 0x4e, 0xf6, 0x17, 0x42, 0xbd, 0x2e, 0x3f, 0xdf, 0x9a, 0xc0, 0x6d, 0x96, 0x20, 0xec, 0xf1, 0x1b, 0xcf, 0x52, 0x98, 0xad, 0xf0, 0xf8, 0x7e, 0x26, 0x4b, 0xbc, 0xee, 0xe7, 0x50, 0xa, 0x8d, 0xa6, 0x6c, 0x83, 0x97, 0x13, 0x88, 0xf3, 0xd9, 0xd6, 0xc9, 0xd3, 0x50, 0xb1, 0x51, 0x3d, 0xd, 0x4e, 0xba, 0xc3, 0xb8, 0xb3, 0x99, 0x5, 0x95, 0xb6, 0x73, 0x8c, 0xee, 0x11, 0xa7, 0xe2, 0x5a, 0x52, 0x14, 0x33, 0x16, 0x5a, 0x79, 0xc4, 0xc1, 0xb7, 0x89, 0x83, 0x3e, 0x8e, 0x52, 0xf7, 0x1c, 0x2e, 0xa4, 0x26, 0xe4, 0xb3, 0x53, 0x58, 0x90, 0xd8, 0x3d, 0xff, 0x4d, 0x87, 0x40, 0x32, 0xcf, 0x21, 0x47, 0x76, 0x35, 0xca, 0xdc, 0x15, 0x48, 0xe5, 0x82, 0xa6, 0x4b, 0x8c, 0x39, 0x2a, 0xf3, 0x79, 0xdc, 0x16, 0x52, 0x58, 0x41, 0x68, 0xf5, 0xe1, 0xce, 0x84, 0x1a, 0xa2, 0xb9, 0xdc, 0xed, 0x75, 0x1, 0xdf, 0x54, 0x68, 0x1, 0x1d, 0x11, 0x4f, 0xed, 0xcd, 0xf9, 0xe0, 0x11, 0xa1, 0x8a, 0xd9, 0xbd, 0x5c, 0x3, 0xfd, 0xe8, 0x74, 0xeb, 0x48, 0x20, 0x35, 0x25, 0xf7, 0x4c, 0xe2, 0x3a, 0x15, 0x14, 0xd4, 0x13, 0x28, 0x38, 0x16, 0xa7, 0xda, 0x91, 0x18, 0x75, 0xe0, 0x6, 0xc9, 0x6c, 0x8f, 0x11, 0xa1, 0xaf, 0x28, 0xbd, 0x5b, 0x52, 0xfd, 0x0, 0x18, 0xe, 0xe7, 0xee, 0x56, 0x9d, 0xea, 0x44, 0x29, 0x25, 0xf7, 0x36, 0x2, 0x56, 0x67, 0x3a, 0xcf, 0xa4, 0x9a, 0x84, 0x85, 0x93, 0xca, 0xd9, 0xdc, 0x6a, 0xaa, 0xb5, 0x9d, 0xa5, 0x72, 0xa9, 0x4a, 0x4f, 0xd2, 0x78, 0xdf, 0x44, 0x69, 0x1c, 0x4, 0x2d, 0xa6, 0x1a, 0x7d, 0x3f, 0x77, 0xaf, 0x6e, 0xdc, 0x41, 0xda, 0x53, 0x70, 0xd5, 0xe4, 0xee, 0x50, 0x8d, 0xbb, 0xda, 0x4e, 0xa, 0x29, 0xf4, 0x79, 0x1d, 0xed, 0xed, 0xd9, 0xb4, 0xb1, 0x67, 0x49, 0x70, 0xf, 0x7d, 0xd1, 0x8e, 0x97, 0x47, 0xe9, 0x6c, 0x3b, 0x92, 0x26, 0x4, 0xec, 0xb2, 0xb6, 0xc4, 0x42, 0xd, 0xae, 0x85, 0xdd, 0xdc, 0xd1, 0xb6, 0x72, 0x37, 0x9f, 0xcf, 0xf9, 0x87, 0x76, 0x33, 0x57, 0xf6, 0x70, 0x4c, 0x90, 0x2c, 0xfd, 0x57, 0x80, 0x1, 0x0, 0xc5, 0xb1, 0xf0, 0x59, 0xcd, 0x2e, 0xe2, 0x4, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; - - - - + (NSData *)parse_logo_png { - return [NSData dataWithBytes:parse_logo_png length:sizeof(parse_logo_png)]; - } - - const unsigned char parse_logo2x_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x1, 0xbb, 0x0, 0x0, 0x0, 0x88, 0x8, 0x6, 0x0, 0x0, 0x0, 0x7e, 0xf0, 0x45, 0xa9, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x0, 0x0, 0x3, 0x23, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x35, 0x2d, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2e, 0x31, 0x35, 0x31, 0x34, 0x38, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2f, 0x30, 0x33, 0x2f, 0x31, 0x33, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x39, 0x3a, 0x31, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x43, 0x20, 0x28, 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x29, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x45, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x46, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x43, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x44, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, 0x3e, 0xe8, 0x51, 0xff, 0x90, 0x0, 0x0, 0x26, 0xd1, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0x5d, 0x7, 0x98, 0x14, 0x55, 0xd6, 0xbd, 0xd, 0x33, 0xcc, 0x90, 0x54, 0x24, 0x88, 0xa2, 0x2, 0x8a, 0x28, 0x20, 0x62, 0x40, 0x51, 0x5c, 0x57, 0x10, 0x51, 0x44, 0xd7, 0x35, 0xff, 0xbb, 0x46, 0x5c, 0x31, 0xc3, 0x9a, 0x45, 0xd4, 0x55, 0x74, 0xd7, 0xac, 0xb0, 0x86, 0x5d, 0x73, 0x5e, 0x75, 0x4d, 0x6b, 0x56, 0x14, 0x11, 0xcc, 0x1, 0x41, 0xc9, 0x51, 0x82, 0x8, 0x8, 0x22, 0x82, 0x48, 0x9a, 0xf8, 0xbf, 0x63, 0x9d, 0x96, 0xa6, 0xe6, 0x55, 0x4f, 0xcf, 0x4c, 0x55, 0x77, 0x55, 0xf5, 0x3d, 0xdf, 0x77, 0x3f, 0xe0, 0x55, 0x33, 0x53, 0xfd, 0xea, 0xd5, 0x3b, 0x37, 0xbf, 0xc4, 0x49, 0x83, 0x86, 0xb4, 0x13, 0x91, 0x53, 0x8c, 0x34, 0x96, 0xf8, 0xa2, 0xbe, 0x91, 0xa9, 0x46, 0x66, 0x19, 0x99, 0x61, 0x64, 0xb5, 0x91, 0x52, 0x51, 0x28, 0x14, 0xa, 0x45, 0x6c, 0xb0, 0x66, 0xed, 0x3a, 0x19, 0x3a, 0x68, 0xa0, 0xec, 0xb3, 0x47, 0xd7, 0x2a, 0xd7, 0xa, 0x8c, 0xdc, 0x62, 0xa4, 0xb7, 0x91, 0xe2, 0x18, 0xcf, 0x41, 0x82, 0xe4, 0x56, 0x66, 0xa4, 0xc4, 0xc8, 0x14, 0x92, 0xdf, 0x24, 0xfe, 0x1d, 0xb2, 0x41, 0x97, 0x8a, 0x42, 0xa1, 0x50, 0xc4, 0x13, 0x20, 0xbb, 0xed, 0x8c, 0x34, 0xe3, 0xdf, 0xf3, 0x5, 0x6d, 0x8c, 0x1c, 0xca, 0xbf, 0xff, 0x42, 0xd2, 0xfb, 0xd0, 0xc8, 0x33, 0xfc, 0x7b, 0xa5, 0x2e, 0xd, 0x85, 0x42, 0xa1, 0x88, 0xf, 0xea, 0x19, 0x29, 0x37, 0x52, 0x91, 0xc7, 0x73, 0xd0, 0xc4, 0x48, 0x4f, 0x23, 0x43, 0x8c, 0x8c, 0x33, 0x32, 0xd2, 0xc8, 0x31, 0x46, 0xa, 0x75, 0x79, 0x28, 0x14, 0xa, 0x45, 0x7c, 0xc8, 0x4e, 0xb1, 0x11, 0x20, 0xb8, 0x43, 0x8c, 0xbc, 0x68, 0x64, 0xb4, 0x91, 0x63, 0x75, 0x8e, 0x14, 0xa, 0x85, 0x22, 0xfa, 0xf0, 0x72, 0x5d, 0x22, 0x89, 0x63, 0x6a, 0x8c, 0x8, 0xbd, 0x95, 0x91, 0x46, 0xfc, 0x73, 0xeb, 0xc, 0x9, 0xec, 0x0, 0xca, 0x28, 0x23, 0x7f, 0x17, 0xc7, 0xcd, 0xa9, 0x50, 0x28, 0x14, 0x8a, 0x18, 0x91, 0xdd, 0x93, 0x46, 0x6e, 0x8c, 0xd1, 0xf7, 0x6c, 0x40, 0xb2, 0xdb, 0xca, 0x48, 0x6b, 0x23, 0x9d, 0x53, 0xc8, 0xc, 0xf1, 0xbb, 0x44, 0x9a, 0xff, 0xdb, 0x97, 0x9f, 0xbb, 0xd7, 0xc8, 0x75, 0x46, 0x56, 0xe9, 0xb2, 0x51, 0x28, 0x14, 0x8a, 0xe8, 0x59, 0x3d, 0x36, 0x34, 0x8c, 0xd9, 0xf7, 0x44, 0x6, 0xe6, 0x4a, 0x23, 0x33, 0x8d, 0xbc, 0x4f, 0xe2, 0x3a, 0xd1, 0x48, 0x27, 0x23, 0xfd, 0x8d, 0x3c, 0x6a, 0xe4, 0xbb, 0x34, 0xff, 0x1f, 0x99, 0xaa, 0x17, 0x19, 0x79, 0xdb, 0x48, 0x77, 0x5d, 0x36, 0xa, 0x85, 0x42, 0x11, 0xf, 0xb2, 0xcb, 0x17, 0x20, 0x13, 0x13, 0x9, 0x29, 0x7f, 0x31, 0x72, 0x90, 0x91, 0x2b, 0x8d, 0xcc, 0x4d, 0xf3, 0xf9, 0x1e, 0x46, 0xde, 0x32, 0x32, 0x40, 0x97, 0x8e, 0x42, 0xa1, 0x50, 0x28, 0xd9, 0x45, 0x11, 0xb3, 0x8d, 0xdc, 0x64, 0x64, 0x2f, 0x71, 0xdc, 0x95, 0xcb, 0x3c, 0x3e, 0xd7, 0x82, 0x96, 0x20, 0xdc, 0xbc, 0x9, 0x9d, 0x36, 0x85, 0x42, 0xa1, 0x50, 0xb2, 0x8b, 0x22, 0xe0, 0xee, 0x1c, 0x66, 0xa4, 0x8f, 0x91, 0x17, 0xd2, 0x7c, 0x6e, 0xa8, 0x38, 0xee, 0xd0, 0x22, 0x9d, 0x32, 0x85, 0x42, 0xa1, 0x50, 0xb2, 0x8b, 0x2a, 0xd0, 0x55, 0xe5, 0x78, 0x23, 0x3, 0x8d, 0xac, 0xf0, 0xf8, 0xcc, 0xd9, 0x46, 0x1e, 0x96, 0xf8, 0xc5, 0x38, 0x15, 0xa, 0x85, 0x42, 0xc9, 0x2e, 0xcf, 0x0, 0x32, 0x43, 0xed, 0xdd, 0xd7, 0x1e, 0xd7, 0x4f, 0xa2, 0x85, 0xa7, 0x45, 0xe8, 0xa, 0x85, 0x42, 0xa1, 0x64, 0x17, 0x69, 0x8c, 0x17, 0xa7, 0x4, 0xe1, 0x4d, 0x8f, 0xeb, 0xa7, 0x89, 0xe3, 0xfa, 0x54, 0x28, 0x14, 0xa, 0x85, 0x92, 0x5d, 0xa4, 0xb1, 0xdc, 0xc8, 0x9f, 0xc4, 0x49, 0x4e, 0xb1, 0x1, 0x99, 0x9c, 0x67, 0xea, 0x34, 0x29, 0x14, 0xa, 0x85, 0x92, 0x5d, 0xd4, 0x81, 0xa3, 0x81, 0x10, 0xc3, 0x7b, 0xc8, 0xe3, 0xfa, 0x8, 0x23, 0xbd, 0x74, 0x9a, 0x14, 0xa, 0x85, 0x42, 0xc9, 0x2e, 0xea, 0x40, 0xd3, 0xec, 0xc1, 0xe2, 0xf4, 0xcf, 0x74, 0x3, 0x67, 0x2, 0x22, 0x7e, 0xd7, 0x42, 0xa7, 0x49, 0xa1, 0x50, 0x28, 0x94, 0xec, 0xa2, 0x8e, 0xf5, 0xb4, 0xf0, 0x3e, 0xb6, 0x5c, 0xdb, 0x45, 0x9c, 0x33, 0x2, 0xb, 0x74, 0x9a, 0x14, 0xa, 0x85, 0x42, 0xc9, 0x2e, 0xea, 0x40, 0x3d, 0xde, 0x0, 0x23, 0xdf, 0x5a, 0xae, 0x9d, 0x6a, 0xe4, 0x70, 0x9d, 0x22, 0x85, 0x42, 0xa1, 0x50, 0xb2, 0x8b, 0x3, 0xe6, 0x18, 0x19, 0x24, 0xce, 0x29, 0xe8, 0xa9, 0x48, 0x9e, 0x0, 0xbf, 0x85, 0x4e, 0x91, 0x42, 0xa1, 0x50, 0x28, 0xd9, 0xc5, 0x1, 0xaf, 0x19, 0xb9, 0xdb, 0x32, 0xbe, 0xb3, 0x91, 0x8b, 0x75, 0x7a, 0x14, 0xa, 0x85, 0x42, 0xc9, 0x2e, 0x2e, 0xb8, 0xd9, 0xc8, 0x44, 0xcb, 0xf8, 0x19, 0x46, 0x76, 0xd2, 0xe9, 0x51, 0x28, 0x14, 0xa, 0x25, 0xbb, 0x38, 0xe0, 0x7, 0x23, 0x97, 0x59, 0xc6, 0xb7, 0x11, 0xe7, 0x68, 0x20, 0x85, 0x42, 0xa1, 0x50, 0x28, 0xd9, 0xc5, 0x2, 0x38, 0xd1, 0xfc, 0x19, 0xcb, 0x38, 0x92, 0x55, 0xda, 0xeb, 0xf4, 0x28, 0x14, 0xa, 0x85, 0x92, 0x5d, 0x5c, 0x80, 0xa2, 0xf2, 0x9f, 0x5d, 0x63, 0xa8, 0xbd, 0xfb, 0x8b, 0x4e, 0x8d, 0x42, 0xa1, 0x50, 0x28, 0xd9, 0xc5, 0x5, 0xe3, 0x8c, 0xbc, 0x6a, 0x19, 0x3f, 0xc1, 0x48, 0x4b, 0x9d, 0x1e, 0x85, 0x42, 0xa1, 0x50, 0xb2, 0x8b, 0x93, 0x75, 0xe7, 0x46, 0x47, 0xd1, 0x36, 0x62, 0xa, 0x85, 0x42, 0xa1, 0x64, 0x17, 0x23, 0x7c, 0x65, 0xe4, 0xd, 0xcb, 0xf8, 0x19, 0x3a, 0x35, 0xa, 0x85, 0x42, 0xa1, 0x64, 0x17, 0x17, 0x54, 0x1a, 0x79, 0xce, 0x32, 0xde, 0xd3, 0x48, 0x3b, 0x9d, 0x1e, 0x85, 0x42, 0xa1, 0x50, 0xb2, 0x8b, 0xb, 0xde, 0x36, 0x32, 0xd7, 0x35, 0xd6, 0x54, 0x9c, 0x33, 0xf1, 0x14, 0xa, 0x85, 0x42, 0xa1, 0x64, 0x17, 0xb, 0x2c, 0x35, 0xf2, 0xa5, 0x65, 0xfc, 0x77, 0x3a, 0x35, 0xa, 0x85, 0x42, 0xa1, 0x64, 0x17, 0x27, 0xd8, 0xb2, 0x32, 0xf7, 0x36, 0xd2, 0x5a, 0xa7, 0x46, 0xa1, 0x50, 0x28, 0x94, 0xec, 0xe2, 0x82, 0xb1, 0x46, 0x4a, 0x5c, 0x63, 0x68, 0x1d, 0xb6, 0x9d, 0x4e, 0x8d, 0x42, 0xa1, 0x50, 0x28, 0xd9, 0xc5, 0x5, 0x3f, 0x1a, 0x99, 0xea, 0x1a, 0x2b, 0x10, 0xed, 0x95, 0xa9, 0x50, 0x28, 0x14, 0x59, 0x87, 0x1e, 0x30, 0x1a, 0x1c, 0x70, 0xc0, 0xeb, 0x27, 0x46, 0xf6, 0x70, 0x8d, 0xef, 0x66, 0xe4, 0xe9, 0x8, 0x7f, 0xaf, 0x42, 0x23, 0xd, 0x8c, 0x34, 0xf1, 0xb0, 0x52, 0x13, 0x46, 0xd6, 0x19, 0x59, 0x48, 0xcb, 0x76, 0x83, 0x38, 0xa7, 0xbb, 0x2b, 0x14, 0x99, 0xee, 0x49, 0xc9, 0x35, 0x86, 0xf5, 0xd5, 0x50, 0x9c, 0xc, 0x67, 0x9b, 0xa2, 0xe, 0x85, 0xf2, 0x7b, 0xae, 0x2f, 0xac, 0xb5, 0x72, 0x9d, 0x3e, 0x5f, 0x90, 0xe0, 0xfc, 0xe3, 0x59, 0x6c, 0x6d, 0x64, 0x4b, 0xcb, 0x3b, 0x8c, 0xf9, 0xc7, 0x99, 0x9e, 0x8b, 0x8c, 0x94, 0x89, 0x73, 0xcc, 0x59, 0x45, 0xd8, 0x17, 0x96, 0x22, 0x38, 0xcc, 0xb0, 0x8c, 0xed, 0x1c, 0xb1, 0x8d, 0x7, 0x27, 0xaf, 0x77, 0x30, 0xd2, 0xc9, 0xc8, 0x5e, 0x46, 0xda, 0xf2, 0xdf, 0x45, 0xdc, 0x94, 0x2a, 0x2d, 0x2f, 0x4a, 0x5, 0x17, 0xff, 0x4f, 0xe2, 0x9c, 0xf9, 0x87, 0x79, 0x98, 0x69, 0x64, 0x16, 0xff, 0xfc, 0x26, 0xa6, 0xcf, 0xbb, 0x1e, 0x37, 0x9, 0xe1, 0xc6, 0x5b, 0xaa, 0xaf, 0x40, 0x5a, 0x6c, 0x6b, 0x64, 0x47, 0xa, 0xd6, 0x19, 0x9a, 0x2f, 0xa0, 0x79, 0xfa, 0xf6, 0x54, 0xa6, 0xa, 0x39, 0xa7, 0x95, 0x1e, 0x1b, 0x72, 0x39, 0x37, 0x5a, 0x6c, 0xba, 0xf3, 0xc5, 0x39, 0x48, 0x79, 0x26, 0xff, 0x3e, 0xdb, 0xc8, 0x2, 0x6e, 0xc6, 0x8a, 0xf4, 0x68, 0xcd, 0xf7, 0xbb, 0x3, 0xf7, 0xa7, 0x2e, 0x46, 0x76, 0x30, 0xd2, 0x86, 0x7b, 0x40, 0x7d, 0x8f, 0xf7, 0x3c, 0x39, 0xff, 0xdf, 0x73, 0xee, 0x67, 0xf0, 0x1d, 0x9f, 0xc2, 0x77, 0x7c, 0x9e, 0x92, 0x5d, 0xfe, 0x60, 0x11, 0x17, 0x49, 0x22, 0x65, 0xac, 0x63, 0xc8, 0xef, 0x19, 0xbd, 0x3c, 0xf, 0x31, 0x72, 0xb0, 0x91, 0xae, 0x5c, 0xfc, 0xad, 0x6a, 0xf1, 0x73, 0x1a, 0xf0, 0x67, 0x61, 0x43, 0xeb, 0x95, 0x32, 0x8e, 0xd, 0x68, 0xba, 0x91, 0x31, 0x46, 0xfe, 0x27, 0x4e, 0x89, 0x46, 0x1c, 0x2c, 0x3f, 0x28, 0x2, 0xb7, 0x53, 0x9, 0x10, 0x6e, 0x2, 0x77, 0x18, 0x79, 0x25, 0x8b, 0xf7, 0xd0, 0x90, 0xd6, 0xd0, 0xce, 0x54, 0x4a, 0x5a, 0xf3, 0x7e, 0x92, 0x8d, 0xc8, 0x8b, 0x68, 0x1, 0x5d, 0x60, 0xe4, 0xbb, 0x1c, 0xcc, 0x11, 0x7e, 0x7f, 0x37, 0x23, 0x87, 0x89, 0x93, 0xac, 0xb5, 0x13, 0x89, 0xae, 0x7e, 0x1d, 0xf6, 0xaf, 0x22, 0xae, 0x33, 0x6c, 0xcc, 0xfb, 0xbb, 0x3c, 0x2b, 0xdf, 0x52, 0xd9, 0x1a, 0x2f, 0xce, 0xb9, 0x93, 0x93, 0xe8, 0x69, 0xc8, 0x77, 0xd4, 0xe7, 0x3e, 0x84, 0xf7, 0xbc, 0x37, 0x9f, 0x43, 0xe7, 0x3a, 0xcc, 0x7f, 0x52, 0x61, 0xe9, 0x9d, 0x72, 0x6d, 0x1e, 0x15, 0x8e, 0x64, 0xb, 0xc5, 0xaf, 0xa5, 0x6a, 0xe, 0x83, 0x92, 0x5d, 0x8c, 0xb0, 0xd8, 0xc8, 0x2f, 0xe2, 0xd4, 0xd8, 0x25, 0xd1, 0x82, 0xda, 0x6a, 0x98, 0x36, 0x78, 0xb8, 0x29, 0x50, 0xf4, 0x7e, 0x84, 0x91, 0xc3, 0x49, 0x50, 0x41, 0xa1, 0x2d, 0xa5, 0x9f, 0x91, 0xeb, 0x8d, 0x7c, 0x64, 0xe4, 0x29, 0x23, 0x6f, 0x8a, 0x53, 0xb2, 0x11, 0x55, 0x1c, 0x21, 0x55, 0x5b, 0xc2, 0x2d, 0xa, 0x98, 0xec, 0xb0, 0x69, 0x75, 0x37, 0xb2, 0x9f, 0x91, 0x3, 0x8c, 0xec, 0x23, 0x4e, 0xf, 0xd6, 0xa2, 0x6a, 0xfe, 0xdf, 0xf3, 0x46, 0xfe, 0x9b, 0xc5, 0xb9, 0x1, 0xb1, 0xf5, 0x31, 0x72, 0x1a, 0xad, 0x87, 0x6c, 0xec, 0x3b, 0xc5, 0xdc, 0xd0, 0x21, 0xfd, 0x8d, 0xc, 0xe5, 0x6, 0x8c, 0x86, 0xf, 0x23, 0xb9, 0xee, 0xf2, 0xd, 0xed, 0xa9, 0xc4, 0x9e, 0xc8, 0xf7, 0xbd, 0x41, 0xc0, 0xbf, 0xab, 0x3d, 0x9, 0x75, 0x8, 0x95, 0x8e, 0xff, 0x70, 0xee, 0xc7, 0x2b, 0xd9, 0xc5, 0xf, 0x38, 0x1, 0x61, 0x8d, 0x8b, 0xec, 0x8a, 0xa8, 0x7d, 0x2f, 0x8, 0xc1, 0xfd, 0x61, 0x23, 0x38, 0x95, 0x1b, 0x75, 0xb7, 0x1c, 0x69, 0xfa, 0x7d, 0x28, 0xd3, 0x8c, 0x3c, 0x6e, 0xe4, 0x3e, 0xa9, 0x7a, 0x72, 0x44, 0x14, 0x60, 0x73, 0xb5, 0x95, 0x7, 0xb8, 0x91, 0x9c, 0xcc, 0x79, 0xeb, 0x4e, 0xcb, 0xa6, 0x26, 0x48, 0x64, 0x61, 0x3e, 0x12, 0x24, 0x19, 0x9c, 0xf8, 0xd1, 0xd7, 0xf5, 0xe, 0xe4, 0x6a, 0xaf, 0x83, 0x5, 0x73, 0x95, 0x38, 0x67, 0x4f, 0xc2, 0xb3, 0x80, 0x23, 0xb9, 0x9e, 0xa5, 0x15, 0x18, 0x67, 0xec, 0x6e, 0xe4, 0x1c, 0x23, 0x87, 0x4a, 0x6e, 0xba, 0x38, 0x25, 0xc3, 0x21, 0xff, 0xe0, 0xdc, 0x7f, 0xc0, 0xf7, 0xfc, 0x1d, 0x7a, 0x40, 0x94, 0xec, 0x62, 0x80, 0xd5, 0x46, 0xd6, 0x5a, 0xb4, 0xf1, 0x46, 0x39, 0xbe, 0xaf, 0x83, 0xb8, 0x9, 0x1d, 0x23, 0x8e, 0xeb, 0xab, 0xa6, 0xc0, 0x26, 0xe, 0x3f, 0x3d, 0x12, 0x51, 0x56, 0x88, 0x13, 0x9b, 0x4a, 0x70, 0xc3, 0x87, 0x65, 0x81, 0x58, 0x4b, 0x73, 0x23, 0x9b, 0xd5, 0xe0, 0x67, 0xc2, 0x8d, 0x72, 0x8b, 0x91, 0xb3, 0xc4, 0x39, 0xf9, 0xfd, 0x71, 0x89, 0x56, 0xcc, 0xab, 0x32, 0xc3, 0xb1, 0xba, 0xa0, 0x27, 0x37, 0xad, 0xa3, 0x42, 0x40, 0x1e, 0xe9, 0x80, 0xe6, 0x9, 0x57, 0x53, 0xab, 0xaf, 0xd, 0xb1, 0xae, 0xa4, 0x60, 0xfe, 0x96, 0x71, 0x43, 0x4c, 0xfe, 0x1c, 0x78, 0x44, 0xb6, 0x20, 0xc1, 0x37, 0xa2, 0x57, 0xa2, 0xb0, 0x86, 0x3f, 0xbf, 0x1, 0x37, 0x7e, 0xc8, 0xa5, 0x46, 0x6e, 0x23, 0xe9, 0xc5, 0xcd, 0xc5, 0x9, 0x4b, 0xff, 0x5c, 0x5a, 0x72, 0xb5, 0xb1, 0xe2, 0xa0, 0x74, 0x22, 0xee, 0xe, 0xf7, 0xe3, 0xf2, 0x94, 0xf5, 0x5c, 0xc9, 0xf5, 0xd7, 0x94, 0xcf, 0x21, 0xe9, 0xad, 0xca, 0x4, 0x9b, 0x1b, 0xf9, 0x3, 0x15, 0x6c, 0x58, 0x78, 0x77, 0xd0, 0xd3, 0x10, 0x78, 0x72, 0x91, 0x92, 0x5d, 0xb0, 0xc0, 0x42, 0xf9, 0xc5, 0xb2, 0x1, 0xe6, 0xc2, 0x85, 0x59, 0x9f, 0x9b, 0xe4, 0x59, 0xb4, 0x8, 0x32, 0x8d, 0x93, 0x94, 0x93, 0xd0, 0x3e, 0x17, 0xa7, 0xc9, 0x35, 0x82, 0xcf, 0x70, 0x37, 0x2e, 0xa1, 0x46, 0x9c, 0x4a, 0x76, 0x15, 0x29, 0x64, 0x87, 0x17, 0xa0, 0x15, 0xad, 0x10, 0x4, 0xbc, 0x7f, 0x4f, 0xcd, 0xba, 0xba, 0x97, 0xe, 0xbe, 0xff, 0x7, 0x8d, 0xfc, 0xd9, 0xc8, 0xe5, 0xb9, 0x72, 0x79, 0x84, 0xc, 0x3d, 0x8c, 0x5c, 0xc8, 0xe7, 0x57, 0x1c, 0xe2, 0xfb, 0x44, 0x72, 0xc9, 0x35, 0x46, 0x4e, 0xcf, 0x70, 0x73, 0xc5, 0xba, 0x41, 0xec, 0x10, 0xb1, 0x34, 0xc4, 0x76, 0xe6, 0x51, 0x89, 0x5a, 0xc9, 0x77, 0x47, 0xaa, 0x21, 0xbb, 0x86, 0x54, 0xaa, 0x40, 0x78, 0xad, 0xb9, 0xce, 0xba, 0xd3, 0x8a, 0xd8, 0x3c, 0xc3, 0xd, 0x78, 0x57, 0x2a, 0x56, 0x3, 0x68, 0x79, 0xbc, 0x17, 0x83, 0xf5, 0x2, 0xeb, 0xed, 0x62, 0x2a, 0xb4, 0x99, 0x5a, 0xfd, 0x78, 0x97, 0x67, 0xf1, 0x3d, 0x1f, 0xc7, 0xe7, 0xb0, 0x84, 0xef, 0x77, 0x2a, 0xd9, 0x25, 0x95, 0xda, 0x26, 0x54, 0x66, 0x93, 0x64, 0xb7, 0xd, 0xdf, 0xef, 0xae, 0x54, 0x76, 0x9a, 0x57, 0xc3, 0x2f, 0x9, 0x3e, 0x2b, 0x58, 0xd7, 0x3, 0x8d, 0xdc, 0x4a, 0x4b, 0x4f, 0xc9, 0x2e, 0xa2, 0xa8, 0x97, 0x25, 0x97, 0x51, 0x75, 0xe8, 0x4f, 0xf7, 0x41, 0xaf, 0x1a, 0x68, 0xd6, 0xe3, 0xb9, 0xf0, 0xb1, 0x0, 0x27, 0xd0, 0x4a, 0xcd, 0x4, 0xc9, 0xec, 0xb7, 0xf9, 0x16, 0x6d, 0x1a, 0x19, 0x5e, 0x87, 0x51, 0xa3, 0x3e, 0xa0, 0x1a, 0xb, 0x17, 0xd6, 0xe7, 0x28, 0x5a, 0x8, 0xff, 0xce, 0xd3, 0xf5, 0x83, 0xac, 0xc4, 0x21, 0x54, 0x50, 0x6a, 0xfa, 0xae, 0x42, 0x2b, 0x5f, 0x98, 0x42, 0x1e, 0x73, 0xb9, 0x69, 0x81, 0x5c, 0x3e, 0xe, 0xe0, 0x5e, 0xf1, 0x5c, 0xef, 0x12, 0x27, 0x26, 0x97, 0xe, 0x3f, 0x70, 0x33, 0x7d, 0x5f, 0x9c, 0xf8, 0xcd, 0x2c, 0xa9, 0xb9, 0x1b, 0x71, 0x59, 0x35, 0x7b, 0x1a, 0x48, 0x10, 0x9, 0x43, 0x7, 0x8a, 0x93, 0xb4, 0xd2, 0x85, 0x9b, 0x71, 0x3a, 0xf4, 0xe6, 0x9a, 0xbc, 0xdb, 0xc8, 0x30, 0x89, 0xa6, 0x2b, 0x1d, 0xdf, 0xfd, 0x4c, 0x2a, 0x1c, 0x99, 0x74, 0x6a, 0x42, 0x1c, 0xed, 0xb, 0x71, 0x7a, 0xf9, 0x7e, 0xc8, 0x77, 0x37, 0xd3, 0x24, 0x12, 0x58, 0xc1, 0x3f, 0x7a, 0x5c, 0xc3, 0xfc, 0xef, 0xce, 0xf7, 0x1c, 0x4a, 0xee, 0xde, 0x24, 0x47, 0x2f, 0xf4, 0xe1, 0xfb, 0xfe, 0xb0, 0x91, 0x9b, 0xa4, 0x6a, 0x5f, 0x61, 0x25, 0x3b, 0x45, 0xb5, 0xc0, 0xb, 0x7f, 0xa5, 0x91, 0x23, 0x33, 0x78, 0xd6, 0x15, 0xd4, 0xb0, 0x9f, 0xe0, 0x46, 0x34, 0xc1, 0xe7, 0x7b, 0xc1, 0x4b, 0x34, 0x83, 0x82, 0x33, 0xff, 0xf6, 0x35, 0x72, 0x34, 0x37, 0xf2, 0x2d, 0x3c, 0xfe, 0x4f, 0x33, 0x23, 0xff, 0xa2, 0xa6, 0x8e, 0x4d, 0x7f, 0x5d, 0x1e, 0x3d, 0xbb, 0x53, 0xb8, 0x69, 0x75, 0xc8, 0xf0, 0xf3, 0x20, 0x8c, 0x89, 0xdc, 0xb8, 0xbe, 0x22, 0xa9, 0x2d, 0x94, 0xec, 0x24, 0xfd, 0xc0, 0xea, 0x84, 0xeb, 0x39, 0x5d, 0x62, 0xc, 0xb2, 0xf1, 0x1e, 0xa5, 0xe5, 0x34, 0x25, 0xc0, 0x7b, 0x29, 0xa3, 0x62, 0x36, 0x96, 0x22, 0x5c, 0x3f, 0x70, 0x1, 0xff, 0x89, 0xa, 0x5f, 0x61, 0x9a, 0xfd, 0xf0, 0x22, 0xbe, 0x37, 0x58, 0x97, 0x33, 0x23, 0xb4, 0x5e, 0x92, 0x61, 0x80, 0x23, 0x32, 0x98, 0x9f, 0xd1, 0xe2, 0x24, 0x8b, 0x20, 0x76, 0xf6, 0x6d, 0x0, 0xf7, 0x82, 0xf7, 0xf4, 0x53, 0x4a, 0x82, 0x64, 0x77, 0x38, 0xd7, 0x74, 0xfb, 0x34, 0x96, 0x1e, 0x2c, 0xbc, 0xbe, 0x5c, 0xf7, 0x4f, 0x28, 0xd9, 0x45, 0xb, 0x30, 0xe5, 0x9b, 0x7a, 0x3c, 0xd8, 0xa0, 0x2d, 0x2, 0xb8, 0x31, 0xce, 0x91, 0xea, 0x33, 0xf3, 0x16, 0xd3, 0x82, 0x7a, 0x82, 0xda, 0x5d, 0xb6, 0xe2, 0x64, 0x9f, 0x51, 0x86, 0xf3, 0x5e, 0xe1, 0xfa, 0xf2, 0x3a, 0xcd, 0x7d, 0x30, 0x5d, 0x24, 0x27, 0xd1, 0xad, 0x12, 0x67, 0x40, 0x23, 0xbf, 0x9d, 0xdf, 0x35, 0x13, 0x5, 0x2, 0x1b, 0xfa, 0x5b, 0x46, 0x5e, 0x26, 0xc1, 0x95, 0x65, 0xf1, 0x5e, 0xb, 0xf9, 0xfc, 0x6, 0xa5, 0xf9, 0xcc, 0x47, 0xb4, 0x96, 0x5e, 0x92, 0xdc, 0xc5, 0x60, 0x93, 0x4a, 0xd6, 0x63, 0xb4, 0x38, 0xce, 0x33, 0x72, 0x6c, 0x1a, 0x25, 0xb, 0xd6, 0x8, 0xd2, 0xe5, 0x7, 0x70, 0xc3, 0x8e, 0x82, 0x62, 0x84, 0xe7, 0xd0, 0x22, 0xcd, 0x67, 0xf0, 0xde, 0xa0, 0xd4, 0xe7, 0x11, 0xbe, 0x77, 0x95, 0x59, 0xba, 0xb7, 0x4a, 0x5a, 0x8f, 0x10, 0xb8, 0x2a, 0x8f, 0xe1, 0xbe, 0xd4, 0xd3, 0xe3, 0xf3, 0xc8, 0xd4, 0x7e, 0x9c, 0x4a, 0xc9, 0x10, 0x7a, 0x2, 0x7c, 0x81, 0xb6, 0xb, 0xb, 0x16, 0x70, 0xd3, 0x15, 0x5b, 0x2c, 0xa8, 0xa0, 0xb2, 0xbf, 0xea, 0x91, 0x34, 0xa0, 0x3d, 0x5f, 0x50, 0xd, 0xd1, 0x2d, 0xa4, 0xbb, 0xe6, 0x20, 0xbe, 0xd4, 0xef, 0xe5, 0x68, 0x33, 0x5a, 0xca, 0x45, 0xdd, 0x87, 0x1b, 0xa2, 0x17, 0xfa, 0x51, 0x1b, 0x6d, 0x16, 0xe3, 0xf5, 0x82, 0xd, 0xe0, 0x9d, 0xc, 0x88, 0x6e, 0x39, 0xad, 0x63, 0x3c, 0x3b, 0xb8, 0x8a, 0xfe, 0x29, 0x8e, 0xdb, 0xb8, 0x2c, 0xcb, 0xf7, 0x3b, 0x22, 0xd, 0xd1, 0x2d, 0xe2, 0xa6, 0x86, 0x24, 0x95, 0xe7, 0x24, 0x1c, 0xc9, 0x46, 0x15, 0xf4, 0x58, 0xc, 0xe4, 0x7a, 0x43, 0x46, 0xa0, 0x57, 0x62, 0x44, 0x47, 0x12, 0xde, 0x81, 0x21, 0x5e, 0x2f, 0x5, 0x24, 0x90, 0xc7, 0xd3, 0x10, 0x5d, 0x5, 0x49, 0x1e, 0xdf, 0xf7, 0x4c, 0x92, 0x77, 0x65, 0x8e, 0xee, 0x17, 0x99, 0xe9, 0x4f, 0xf2, 0x5e, 0xb0, 0xc6, 0xa7, 0xa6, 0xf9, 0xec, 0xe9, 0x54, 0xe2, 0x7a, 0x28, 0xd9, 0x45, 0x3, 0x4d, 0xa5, 0x6a, 0x5c, 0x6a, 0x43, 0x40, 0xae, 0x3, 0x68, 0xac, 0x23, 0xa9, 0xb9, 0xed, 0x98, 0xe6, 0x73, 0x88, 0x91, 0xc0, 0xb5, 0x89, 0xb6, 0x65, 0xd7, 0x85, 0xc8, 0x55, 0x33, 0x99, 0x5a, 0xdf, 0x5f, 0x65, 0x63, 0x72, 0x82, 0x1b, 0x88, 0xb, 0x3d, 0x95, 0x46, 0x23, 0x8f, 0x32, 0x4e, 0xe4, 0xf3, 0xeb, 0x9a, 0xe6, 0x33, 0x8b, 0xa8, 0xa0, 0xec, 0x46, 0x6b, 0xf8, 0xe3, 0x1c, 0xde, 0x2f, 0xea, 0xd6, 0xce, 0xf7, 0xb8, 0xf6, 0x16, 0x35, 0xf3, 0xfb, 0x25, 0xbc, 0xae, 0x67, 0x90, 0xde, 0xb9, 0x54, 0x16, 0x3e, 0xf4, 0xf8, 0x4c, 0xb, 0x2a, 0x58, 0x5d, 0x42, 0x78, 0xff, 0xf0, 0x82, 0x20, 0x83, 0x14, 0xb1, 0x78, 0x2f, 0x4f, 0xd1, 0xe7, 0xfc, 0x7e, 0x20, 0x8e, 0xaf, 0x43, 0x74, 0xef, 0x50, 0xf6, 0x9f, 0x26, 0x91, 0xd, 0x4d, 0x63, 0xbd, 0xc1, 0x9d, 0xfc, 0x6, 0xf7, 0x5, 0x25, 0xbb, 0x90, 0x3, 0xd9, 0x88, 0xee, 0xf4, 0xfb, 0x1f, 0xc4, 0xdf, 0x6c, 0x4c, 0x68, 0x77, 0x97, 0x88, 0xe3, 0x8a, 0xec, 0x5b, 0x8d, 0x1b, 0xe3, 0x6, 0x5a, 0x3, 0x8, 0x2, 0xaf, 0xc, 0xe9, 0x9c, 0xc1, 0xe5, 0x75, 0x38, 0x49, 0xd9, 0x8b, 0xf0, 0x86, 0x4b, 0x38, 0x12, 0x7f, 0xfc, 0xc2, 0x60, 0x6a, 0xdf, 0x4d, 0xd3, 0x68, 0xe7, 0xf, 0x50, 0x23, 0x86, 0x82, 0xb2, 0x24, 0xc7, 0xf7, 0x8b, 0x58, 0xeb, 0xdf, 0x3d, 0xae, 0xdd, 0xc1, 0xeb, 0x73, 0x22, 0x32, 0xf7, 0x88, 0x5f, 0xf5, 0xa7, 0x75, 0x6c, 0xc3, 0xb6, 0xb4, 0x9c, 0xb6, 0xc, 0xd1, 0x3d, 0xb7, 0xa5, 0x17, 0xc4, 0x8b, 0x4, 0xa0, 0x50, 0x27, 0x4b, 0x3f, 0xde, 0xd, 0xf1, 0xdc, 0xc3, 0xd2, 0xbb, 0x99, 0x7b, 0xd2, 0x48, 0x8f, 0xcf, 0x34, 0xe7, 0xfc, 0x5f, 0xa0, 0x64, 0x17, 0x6e, 0x6c, 0x6f, 0x19, 0x9b, 0xef, 0xb3, 0xe5, 0x8, 0x17, 0xd1, 0xed, 0x69, 0xdc, 0x18, 0x58, 0xf8, 0x88, 0xc7, 0xed, 0xc3, 0x17, 0x20, 0xa, 0xbd, 0x2, 0x3f, 0xe5, 0x6, 0xf4, 0x59, 0x1a, 0x17, 0xc7, 0xc5, 0x31, 0x58, 0x1f, 0x50, 0x54, 0xae, 0x15, 0x27, 0x8b, 0xd1, 0x2b, 0x69, 0x2, 0xc9, 0x26, 0x70, 0xe1, 0x9e, 0x1d, 0x12, 0x2b, 0x1c, 0xb1, 0xd3, 0x3b, 0xc5, 0x5e, 0xba, 0x72, 0xa3, 0x38, 0x75, 0x6b, 0x51, 0xab, 0x57, 0x43, 0x79, 0x10, 0x12, 0x53, 0x4e, 0x13, 0x7b, 0x88, 0x61, 0x2f, 0x3e, 0xa7, 0x30, 0x0, 0x56, 0x26, 0xba, 0xd, 0xed, 0xef, 0x71, 0x7d, 0x1a, 0xdf, 0x1d, 0x28, 0xb6, 0x51, 0xc9, 0x28, 0x9d, 0x42, 0x5, 0x17, 0x56, 0x9e, 0x2d, 0xeb, 0xbb, 0x9, 0x95, 0x91, 0xcb, 0x94, 0xec, 0xc2, 0xb, 0x5b, 0x26, 0x9d, 0x9f, 0x1a, 0x2f, 0x5c, 0x19, 0x7, 0xa4, 0xb9, 0xfe, 0x39, 0x17, 0x11, 0x5e, 0xe2, 0xa8, 0x35, 0x5f, 0xfe, 0x86, 0x16, 0xc2, 0x27, 0x1e, 0xd7, 0x61, 0x59, 0xfc, 0x3e, 0xe2, 0xeb, 0x3, 0x75, 0x5d, 0xc3, 0xaa, 0xb1, 0x72, 0xfb, 0xd2, 0x6a, 0xf, 0xb, 0xb0, 0xe9, 0xdb, 0x4e, 0xbb, 0xb8, 0x85, 0xca, 0x54, 0x94, 0x1, 0xa5, 0x10, 0xc9, 0x2b, 0xb6, 0xf8, 0xe2, 0xb9, 0x54, 0x3a, 0x72, 0x89, 0x4e, 0xb4, 0xe8, 0xbc, 0xfa, 0x58, 0xbe, 0x40, 0x6b, 0x2e, 0x8a, 0xb5, 0x82, 0x15, 0xb4, 0xf2, 0x8e, 0x13, 0xef, 0xee, 0x52, 0x37, 0x53, 0x29, 0x51, 0xb2, 0xb, 0x19, 0xa0, 0xa9, 0xef, 0x6a, 0x19, 0x9f, 0xec, 0xe3, 0xef, 0x98, 0x27, 0x76, 0x77, 0x12, 0x12, 0x18, 0xae, 0x20, 0x19, 0x8c, 0x8e, 0xf0, 0x1c, 0x7e, 0xcf, 0xc5, 0x6f, 0x4b, 0x55, 0x47, 0x2d, 0xcf, 0x8, 0x9, 0x77, 0x27, 0x91, 0x74, 0x80, 0x5b, 0x66, 0x88, 0xc7, 0x35, 0x3c, 0x3f, 0xb4, 0x3, 0x43, 0xfc, 0xf2, 0xc7, 0x10, 0xdd, 0x33, 0x14, 0xa7, 0x13, 0x2c, 0xe3, 0x2f, 0x92, 0xe8, 0x2a, 0x63, 0xf0, 0xde, 0xa2, 0x3c, 0xe2, 0x7c, 0xcb, 0x77, 0xc1, 0xfb, 0xdc, 0x26, 0x87, 0xf7, 0x5, 0xc5, 0xf6, 0x71, 0xf1, 0x3e, 0xf, 0x13, 0xef, 0x2, 0x4a, 0x2b, 0xa2, 0x7e, 0xca, 0xc3, 0x3b, 0x5c, 0x67, 0x5f, 0x7a, 0xf0, 0xd5, 0x70, 0x7a, 0xf, 0x94, 0xec, 0x42, 0x4, 0xc4, 0xea, 0xf6, 0xb3, 0x8c, 0xcf, 0xf2, 0xf1, 0x77, 0xe0, 0x85, 0xbc, 0x47, 0x36, 0x3d, 0x1f, 0x6f, 0x24, 0xad, 0x1, 0x68, 0xda, 0x25, 0x31, 0x98, 0xc7, 0x25, 0xb4, 0x4c, 0x6d, 0x41, 0xec, 0x3d, 0xeb, 0xea, 0xda, 0xc8, 0x11, 0x50, 0xc3, 0x75, 0x87, 0xc7, 0x35, 0x14, 0xd4, 0xa2, 0x9d, 0xd2, 0x53, 0x21, 0xbb, 0x67, 0x64, 0x15, 0x5f, 0x2c, 0x55, 0xdd, 0xad, 0x8b, 0x39, 0x5e, 0x16, 0xa3, 0x77, 0x17, 0x1d, 0x7c, 0x1e, 0x4a, 0xf9, 0x37, 0xdc, 0xe9, 0xe8, 0x21, 0xfb, 0x4c, 0x8e, 0xee, 0x7, 0xa, 0x1d, 0x5a, 0x6a, 0xed, 0xed, 0x71, 0xfd, 0x1a, 0x3e, 0x83, 0xb8, 0x9c, 0xe7, 0x87, 0x2c, 0xcd, 0x3f, 0xca, 0xc6, 0x3a, 0x49, 0x9b, 0x17, 0xe1, 0x7c, 0x25, 0xbb, 0xf0, 0x0, 0x8d, 0x95, 0xdd, 0xad, 0x7a, 0x16, 0x5, 0xa0, 0x79, 0x55, 0x70, 0xa1, 0x63, 0x61, 0xdc, 0xc4, 0x45, 0xf2, 0x75, 0xcc, 0xe6, 0x72, 0x2, 0xdd, 0x17, 0xb6, 0xc4, 0x1e, 0x8c, 0xef, 0x16, 0xa1, 0xef, 0x2, 0x57, 0x98, 0x57, 0xcc, 0xb, 0x5d, 0x6b, 0xe, 0x16, 0xef, 0x58, 0x65, 0x2e, 0x81, 0x98, 0x6f, 0x6f, 0xcb, 0xf8, 0xdf, 0x24, 0x98, 0xec, 0xe2, 0x5c, 0x3, 0x1e, 0x13, 0x64, 0x36, 0xa3, 0x1e, 0xf, 0xa1, 0x2, 0xa4, 0xcc, 0xaf, 0xcd, 0xc1, 0x7d, 0x60, 0x9d, 0x20, 0xa6, 0xeb, 0x55, 0x2, 0x71, 0x95, 0x78, 0x27, 0xb, 0x45, 0x19, 0x8b, 0xa9, 0xf4, 0xbd, 0xe2, 0xc1, 0x5b, 0xe8, 0x67, 0xda, 0x5f, 0xc9, 0x2e, 0x1c, 0x38, 0xd2, 0x43, 0x63, 0x59, 0x18, 0xc0, 0xef, 0x5a, 0xca, 0xdf, 0x77, 0x65, 0x4c, 0xac, 0x39, 0x1b, 0x60, 0xe9, 0x3c, 0x6a, 0x19, 0x47, 0xf0, 0x7a, 0x50, 0x44, 0xbe, 0x3, 0x6a, 0xb7, 0xee, 0x13, 0x7b, 0x7f, 0xcb, 0x2f, 0xf9, 0xc, 0xe7, 0x85, 0xf4, 0xde, 0x61, 0xd9, 0xb8, 0x33, 0x60, 0xe1, 0x92, 0x7f, 0x2e, 0xa6, 0xeb, 0xd, 0xef, 0xe9, 0x19, 0xe2, 0x14, 0x62, 0xe7, 0xd2, 0x6a, 0x1d, 0x4c, 0xcf, 0x86, 0x97, 0x45, 0x77, 0x63, 0x8c, 0xf7, 0x50, 0x24, 0xe, 0xd, 0xf0, 0x50, 0xfe, 0x10, 0xc6, 0x40, 0x86, 0x72, 0xa6, 0x1d, 0x86, 0x94, 0xec, 0x2, 0x2, 0xfa, 0x40, 0xda, 0x3a, 0x4, 0xa0, 0x8b, 0x40, 0x50, 0xc5, 0xb5, 0xab, 0xf3, 0x60, 0x5e, 0x87, 0x79, 0x90, 0x1, 0x62, 0x15, 0x5d, 0x43, 0x7e, 0xef, 0x28, 0xf0, 0x47, 0xdd, 0x59, 0x5b, 0xcb, 0xb5, 0xc9, 0xb4, 0x20, 0x16, 0x87, 0xf4, 0xde, 0xe1, 0x92, 0x3f, 0xd4, 0xe2, 0x51, 0xb8, 0x47, 0xaa, 0x36, 0x3a, 0x57, 0xf8, 0x7, 0xa4, 0xe4, 0xdf, 0x22, 0xf6, 0x32, 0x9b, 0xbb, 0x62, 0x6a, 0xd1, 0xb9, 0x81, 0x12, 0x29, 0xc4, 0xed, 0x6d, 0xde, 0xaa, 0x36, 0xb4, 0xb8, 0x33, 0x3a, 0x5d, 0x45, 0xc9, 0x2e, 0x18, 0xa0, 0xc0, 0x7b, 0x67, 0xd7, 0x18, 0xfc, 0xe9, 0x63, 0x74, 0x6a, 0xea, 0x84, 0xef, 0xf8, 0xf2, 0xbb, 0x81, 0x98, 0xc6, 0xd9, 0x21, 0xbf, 0x77, 0xd4, 0xc7, 0xf5, 0xf2, 0xb0, 0x20, 0x50, 0x50, 0x1e, 0x66, 0x57, 0x20, 0x36, 0xdd, 0xad, 0x5d, 0x63, 0x70, 0xc7, 0xbf, 0xac, 0x4b, 0x32, 0x30, 0xa0, 0x6d, 0xdc, 0xdd, 0x62, 0x3f, 0x3d, 0x2, 0x9d, 0x5d, 0x2e, 0xcb, 0xa3, 0xb9, 0xc0, 0x5a, 0x3b, 0xd9, 0xe3, 0x1d, 0x41, 0x8f, 0xdd, 0x8c, 0xca, 0x42, 0x94, 0xec, 0x82, 0xc1, 0x11, 0x16, 0x6d, 0x3, 0xe9, 0xb4, 0x1f, 0xeb, 0xd4, 0xd4, 0x19, 0xe8, 0x68, 0x31, 0xc9, 0x32, 0x7e, 0xbc, 0x64, 0xd6, 0xe9, 0x3d, 0x17, 0x40, 0x31, 0xf8, 0x85, 0x96, 0x71, 0xc4, 0x80, 0x90, 0xac, 0x32, 0x25, 0xe4, 0x73, 0xe, 0x2f, 0x85, 0x3b, 0xc6, 0x88, 0x92, 0x90, 0x65, 0xba, 0x1c, 0x3, 0x3, 0x36, 0x70, 0x5b, 0x89, 0x1, 0x9a, 0x7d, 0xa3, 0xc, 0xa2, 0x24, 0xcf, 0xe6, 0x63, 0x2a, 0xdf, 0x21, 0x9b, 0x67, 0xc, 0x39, 0xb, 0x47, 0x29, 0xd9, 0x65, 0x1f, 0x68, 0xf, 0xf6, 0x7f, 0x96, 0x71, 0xd4, 0xc7, 0x6c, 0xd0, 0xe9, 0xa9, 0x33, 0xd0, 0x75, 0xe1, 0x1e, 0xcb, 0x78, 0xcb, 0x4c, 0x16, 0x7c, 0x96, 0x51, 0x42, 0xab, 0x13, 0xd6, 0xa8, 0xad, 0x4f, 0x29, 0xd2, 0xf5, 0x47, 0x86, 0x7c, 0xbe, 0x11, 0x5f, 0xb4, 0x9d, 0x62, 0xff, 0xb6, 0x2e, 0xc5, 0xc0, 0xd0, 0x97, 0x4a, 0x90, 0x1b, 0xd8, 0x3f, 0xd0, 0x6f, 0x74, 0x71, 0x9e, 0xce, 0xb, 0xf6, 0x50, 0xaf, 0x2c, 0x66, 0xd4, 0xac, 0xb6, 0x50, 0xb2, 0xcb, 0x2e, 0x50, 0x8, 0xdd, 0xd1, 0x35, 0x6, 0x6d, 0xe4, 0x39, 0x9d, 0x1a, 0xdf, 0x80, 0x14, 0xf0, 0x19, 0xae, 0xb1, 0x4, 0xc9, 0xae, 0x28, 0x44, 0xf7, 0x9, 0xb2, 0x43, 0x3d, 0xdd, 0x5e, 0x96, 0x6b, 0x48, 0x7c, 0x18, 0x11, 0x81, 0xb9, 0x46, 0x1f, 0x52, 0xdb, 0xb1, 0x2c, 0x9f, 0xeb, 0x32, 0xc, 0x4, 0x50, 0x8e, 0x6e, 0xb7, 0xec, 0xcd, 0x28, 0x33, 0x42, 0xe6, 0xe5, 0x67, 0x79, 0x3e, 0x3f, 0xc8, 0x38, 0xff, 0xc0, 0x32, 0x8e, 0xce, 0x32, 0x43, 0x94, 0xec, 0xb2, 0x87, 0x22, 0xba, 0x18, 0xdc, 0x80, 0xcb, 0x67, 0x92, 0x4e, 0x8f, 0x6f, 0x40, 0x52, 0xc4, 0xf3, 0x96, 0x71, 0x9c, 0x90, 0xbc, 0x7d, 0x88, 0xee, 0x13, 0x75, 0x51, 0x36, 0xf7, 0xe5, 0x3c, 0x8f, 0xf1, 0xb0, 0x92, 0x9d, 0x7b, 0x4e, 0xe1, 0xbe, 0x5c, 0xa1, 0xcb, 0x30, 0x10, 0x60, 0xff, 0xb0, 0x95, 0xd2, 0x8c, 0x15, 0xe7, 0x6c, 0xc7, 0x7c, 0x7, 0x5a, 0xa0, 0x9d, 0x27, 0xf6, 0xc4, 0xa8, 0xf3, 0x3c, 0x14, 0x4b, 0x25, 0xbb, 0x0, 0x80, 0xd4, 0x71, 0x5b, 0xcf, 0x3a, 0xa4, 0xcd, 0xaf, 0xd7, 0xe9, 0xf1, 0x15, 0xb0, 0x94, 0xdd, 0x1d, 0xf5, 0x51, 0xd7, 0xd8, 0x33, 0x44, 0xf7, 0x88, 0x17, 0xaf, 0xb9, 0x6b, 0xc, 0x59, 0x8c, 0xc3, 0x24, 0x98, 0x12, 0x94, 0x20, 0xd0, 0xc4, 0x62, 0x2d, 0xa3, 0x31, 0xc2, 0x6a, 0x5d, 0x82, 0xbe, 0x3, 0xa7, 0xa9, 0xdb, 0xba, 0x83, 0x60, 0x9d, 0x5f, 0xa4, 0x7b, 0xc8, 0x6f, 0x98, 0x4a, 0xeb, 0xd7, 0x8d, 0x46, 0x95, 0x95, 0x95, 0xd7, 0x16, 0x35, 0x68, 0xd0, 0x40, 0xc9, 0x2e, 0x58, 0xa0, 0xb3, 0x84, 0xad, 0x33, 0xf7, 0x7c, 0x51, 0x17, 0x66, 0x10, 0x80, 0x1b, 0xd3, 0x76, 0x34, 0x4b, 0xbf, 0x90, 0xdf, 0x37, 0xda, 0xb7, 0x3d, 0x1d, 0xa1, 0x79, 0xb6, 0x95, 0x4a, 0x20, 0x76, 0x54, 0xa6, 0x4b, 0xd0, 0x77, 0xa0, 0x2b, 0x88, 0xed, 0x0, 0x63, 0xc4, 0xa8, 0x27, 0xea, 0xf4, 0x6c, 0x2, 0x34, 0x86, 0x9e, 0xe6, 0x1e, 0x34, 0x44, 0xd7, 0xef, 0x8d, 0xd1, 0x1f, 0xf4, 0x56, 0xb2, 0xb, 0x16, 0xa7, 0x79, 0x58, 0x75, 0x88, 0xcb, 0xac, 0xd2, 0xe9, 0xf1, 0x1d, 0x65, 0x1e, 0x64, 0xb7, 0xaf, 0x84, 0x2b, 0x6e, 0xe7, 0x26, 0x89, 0x2b, 0x23, 0x46, 0x14, 0x4d, 0x2c, 0x63, 0x68, 0xdd, 0x56, 0xaa, 0x4b, 0xd0, 0x57, 0x20, 0x2e, 0x3a, 0xc0, 0x32, 0x3e, 0x4f, 0xa2, 0x11, 0xdb, 0xcd, 0x36, 0xb0, 0xa7, 0x5e, 0xef, 0x1e, 0x2c, 0x28, 0x28, 0x28, 0x9c, 0x38, 0x6d, 0xe6, 0x25, 0xd3, 0x67, 0xcf, 0x4d, 0x28, 0xd9, 0x5, 0x3, 0xd4, 0x20, 0x5d, 0x61, 0x19, 0x9f, 0x2d, 0xb9, 0xeb, 0xa7, 0x97, 0xf, 0x40, 0x92, 0x84, 0xdb, 0xb5, 0x83, 0x73, 0xc7, 0x3a, 0x87, 0xf4, 0x7e, 0xd1, 0xc8, 0x77, 0x42, 0xc4, 0xe6, 0xd8, 0xd6, 0xa2, 0x6d, 0xb5, 0xf8, 0x7b, 0x26, 0xa3, 0xc2, 0x51, 0x96, 0xb7, 0xb1, 0x8c, 0xa3, 0x65, 0xd9, 0x12, 0x9d, 0x1e, 0x2b, 0x70, 0xca, 0xc3, 0x26, 0x8d, 0xee, 0x13, 0x86, 0xe2, 0x4a, 0x4a, 0x4b, 0xfb, 0xbe, 0xfc, 0xf6, 0x7b, 0x87, 0x54, 0x54, 0x54, 0x28, 0xd9, 0xf9, 0xc, 0x68, 0x10, 0xe8, 0x64, 0x60, 0x3b, 0x1d, 0xfc, 0x1f, 0xe2, 0x7d, 0xa, 0xaf, 0xa2, 0xee, 0x98, 0x60, 0xd9, 0x8, 0x90, 0xcd, 0xb6, 0x4b, 0x8, 0xef, 0x15, 0xa7, 0x17, 0xdc, 0x11, 0x13, 0x92, 0x80, 0x15, 0x52, 0xac, 0xcb, 0xcf, 0x37, 0x6c, 0xee, 0x61, 0xd5, 0xa1, 0x98, 0xfa, 0x5e, 0x9d, 0x1e, 0x4f, 0xa0, 0x51, 0xc7, 0xad, 0x6e, 0x2f, 0x43, 0xe3, 0x46, 0xd, 0x65, 0xfc, 0xa4, 0xa9, 0x83, 0xbf, 0x9e, 0x3a, 0xa3, 0xbe, 0x92, 0x9d, 0xbf, 0x40, 0xab, 0xaa, 0xd3, 0x2d, 0xe3, 0xef, 0x1b, 0x79, 0x56, 0xa7, 0x27, 0x70, 0x2, 0x59, 0x60, 0x51, 0x3e, 0xc2, 0x48, 0x76, 0x6f, 0x89, 0xbf, 0x27, 0x5e, 0x64, 0x53, 0x99, 0x73, 0xa3, 0xbe, 0x2e, 0x3d, 0x5f, 0x81, 0x63, 0x93, 0x6c, 0xb1, 0xd1, 0x7f, 0x4b, 0xb8, 0x8e, 0x78, 0xa, 0x23, 0x50, 0x86, 0x30, 0xae, 0xa, 0xb, 0x96, 0x57, 0xf4, 0x5a, 0xb7, 0x7e, 0x43, 0x77, 0x25, 0x3b, 0xff, 0x80, 0xb6, 0x60, 0x23, 0x2c, 0xf3, 0x88, 0xf4, 0xd8, 0x28, 0x9e, 0xd8, 0x1c, 0x45, 0x4c, 0xb3, 0x8c, 0x6d, 0x1b, 0xb2, 0x7b, 0x44, 0xbd, 0xdd, 0xdd, 0x11, 0x9d, 0x5f, 0x9b, 0x67, 0x2, 0x87, 0xb7, 0x36, 0xd6, 0xa5, 0xe7, 0xb, 0x10, 0x5f, 0x3e, 0xd6, 0x32, 0x8e, 0xc2, 0xf1, 0xa7, 0x74, 0x7a, 0xaa, 0x5, 0xc2, 0x18, 0x55, 0x4a, 0x32, 0x8a, 0x8b, 0x8b, 0x1a, 0xff, 0xe7, 0xc5, 0xd7, 0x8f, 0x57, 0xb2, 0xf3, 0x7, 0x88, 0xd, 0x3d, 0x6c, 0x64, 0x2b, 0xcb, 0x35, 0xb8, 0xab, 0xbe, 0xd4, 0x29, 0xca, 0xa, 0x6c, 0xf5, 0x8b, 0x88, 0xa1, 0x16, 0x86, 0xe8, 0x1e, 0xdf, 0x95, 0xe8, 0xc5, 0xea, 0x92, 0xb0, 0xc5, 0x8b, 0x60, 0x85, 0x34, 0xd5, 0xa5, 0xe7, 0xb, 0xe0, 0x85, 0xe8, 0x65, 0x19, 0x7f, 0x43, 0xbc, 0x4f, 0xec, 0x56, 0x6c, 0x8a, 0x57, 0xdc, 0x73, 0x55, 0x2f, 0x91, 0x90, 0x1f, 0x57, 0xae, 0x3a, 0xe9, 0xb5, 0x51, 0x63, 0x37, 0x53, 0xb2, 0xab, 0x1b, 0x50, 0x3b, 0x5, 0x17, 0xe5, 0x9e, 0x96, 0x6b, 0x1f, 0x89, 0x73, 0x7c, 0xbc, 0x22, 0x3b, 0xb0, 0x6d, 0x8, 0xcd, 0xc4, 0x69, 0xdb, 0x16, 0x6, 0x20, 0xae, 0xf0, 0x5f, 0x89, 0x6e, 0xaa, 0x3e, 0xba, 0xce, 0x2f, 0x75, 0x8d, 0x41, 0x91, 0xe8, 0xa9, 0x4b, 0xcf, 0x17, 0xf4, 0x11, 0x7b, 0xf6, 0xf0, 0x23, 0x3a, 0x35, 0x19, 0x3, 0x2d, 0x4, 0x1f, 0x4b, 0x1d, 0x48, 0x18, 0xb2, 0x2b, 0x29, 0x29, 0x6d, 0x3d, 0x67, 0xfe, 0xb7, 0x7d, 0x95, 0xec, 0x6a, 0x8f, 0x2d, 0xb8, 0x79, 0x1d, 0x6c, 0xb9, 0x86, 0xae, 0xfc, 0xe8, 0xbe, 0x5f, 0xa2, 0xd3, 0x94, 0x35, 0xd8, 0x3a, 0xa1, 0xb7, 0xe, 0x91, 0xe5, 0x1, 0xcb, 0xe8, 0xf5, 0x8, 0xcf, 0xef, 0x4f, 0x1e, 0x73, 0xfc, 0x47, 0x5d, 0x7a, 0xbe, 0xe0, 0x78, 0xcb, 0xd8, 0x78, 0x8a, 0x22, 0x73, 0xe0, 0x1d, 0xdb, 0xa4, 0xd1, 0x41, 0xc3, 0xe2, 0x6, 0x32, 0x7d, 0xf6, 0xdc, 0xa3, 0xd, 0xe1, 0x29, 0xd9, 0xd5, 0x2, 0xb0, 0x18, 0x9e, 0xf7, 0x20, 0x3a, 0x10, 0xdc, 0x99, 0x62, 0x8f, 0x21, 0x29, 0x82, 0xc3, 0x5a, 0x8b, 0x72, 0x1, 0xa2, 0x6b, 0x10, 0x92, 0xfb, 0x1b, 0x49, 0xc2, 0x88, 0x2a, 0x56, 0x79, 0x6c, 0xbc, 0xb0, 0x48, 0x3a, 0xea, 0xf2, 0xab, 0x13, 0x76, 0x12, 0xfb, 0x39, 0x8c, 0x50, 0xa6, 0xb5, 0x8e, 0xb1, 0x66, 0xc0, 0xc9, 0x21, 0x9b, 0x84, 0xa, 0xa, 0xa, 0xa, 0x64, 0xc9, 0xd2, 0xe5, 0xfb, 0x2d, 0x5f, 0xf1, 0x53, 0x1b, 0x25, 0xbb, 0x9a, 0x1, 0xbe, 0xf5, 0xb7, 0x3c, 0x88, 0xe, 0x18, 0x2c, 0xe1, 0xef, 0x60, 0x1f, 0x47, 0xa0, 0x95, 0x92, 0x3b, 0x89, 0x2, 0xae, 0xc3, 0xb0, 0xa4, 0xf8, 0xc7, 0x21, 0x23, 0x77, 0xb4, 0x65, 0x3e, 0xe1, 0xca, 0xbf, 0x5c, 0x97, 0x5f, 0x9d, 0x80, 0x73, 0x2, 0xdd, 0xee, 0x76, 0xf4, 0x7c, 0xd4, 0xa3, 0xc0, 0x6a, 0xe, 0x24, 0xaa, 0x8c, 0x4a, 0x1d, 0xa8, 0xac, 0xac, 0x34, 0x84, 0x57, 0xbf, 0x5d, 0x79, 0x45, 0xc5, 0xee, 0x4a, 0x76, 0x35, 0x73, 0x35, 0xe0, 0x85, 0xef, 0xe1, 0x71, 0x1d, 0x7, 0x73, 0x3e, 0xa0, 0xd3, 0x94, 0x33, 0x94, 0xbb, 0xfe, 0x8d, 0x1a, 0xb0, 0x30, 0x74, 0x51, 0x81, 0xff, 0x64, 0x72, 0xc, 0xe6, 0xf7, 0x1d, 0x23, 0x73, 0x2d, 0xe3, 0x67, 0x88, 0x93, 0x36, 0xaf, 0xa8, 0x1d, 0xd0, 0x71, 0xc9, 0x5d, 0xda, 0x31, 0x4f, 0xc2, 0x7f, 0xbe, 0x61, 0x58, 0xf1, 0x86, 0x5b, 0x29, 0x6b, 0x58, 0x5c, 0x54, 0xef, 0xc9, 0x17, 0x5e, 0xdb, 0x7f, 0x43, 0x49, 0x89, 0x92, 0x5d, 0x35, 0xc0, 0xf9, 0x48, 0x48, 0x19, 0x47, 0x2f, 0xc3, 0x6d, 0x3c, 0x3e, 0x73, 0x83, 0x38, 0x8d, 0x7d, 0x15, 0xb9, 0x83, 0x7b, 0xc3, 0x40, 0x6, 0x56, 0x93, 0x10, 0xdc, 0xd7, 0xa7, 0x12, 0x8f, 0x3, 0x4e, 0x51, 0x4a, 0x73, 0xbf, 0xc7, 0xb5, 0xfb, 0x8c, 0x1c, 0xa6, 0x4b, 0xb0, 0xc6, 0x40, 0x48, 0xa4, 0x8b, 0x65, 0x1c, 0x56, 0x9d, 0x36, 0xd9, 0xae, 0x1d, 0x10, 0x42, 0x9a, 0xed, 0x1e, 0x2c, 0x2d, 0x2b, 0x3b, 0xa0, 0x41, 0x61, 0x61, 0x42, 0xc9, 0xce, 0xe, 0x6c, 0x94, 0x28, 0x14, 0x47, 0x3b, 0xaa, 0x41, 0x46, 0xa, 0x2c, 0x9f, 0x41, 0x76, 0x1d, 0x8e, 0xe3, 0xb8, 0x5a, 0xa7, 0x2b, 0x94, 0xa8, 0xc, 0xc1, 0x3d, 0x6c, 0x8, 0xc9, 0x7d, 0xf8, 0x81, 0xc7, 0xc4, 0x1e, 0x8f, 0xc6, 0xa6, 0x8d, 0x18, 0xd3, 0xa9, 0xba, 0xe4, 0x6a, 0x84, 0x76, 0x46, 0x3a, 0x59, 0xc6, 0xc7, 0xe8, 0xd4, 0xd4, 0x1a, 0x25, 0xee, 0xf9, 0xfb, 0x35, 0x2b, 0xb3, 0xb4, 0xb4, 0xfb, 0xec, 0x79, 0xb, 0x5a, 0x28, 0xd9, 0x6d, 0x8a, 0x86, 0xe2, 0xb4, 0xed, 0x81, 0xcb, 0x12, 0xa9, 0xbf, 0x3b, 0x78, 0x7c, 0xe, 0xda, 0xfa, 0x49, 0xd4, 0x6a, 0x15, 0xa, 0x2f, 0xc4, 0xe9, 0xfd, 0x5a, 0x2e, 0xce, 0xe1, 0x98, 0xb6, 0x12, 0x8a, 0xcd, 0xf8, 0xbe, 0xa0, 0x13, 0x7d, 0x2b, 0x7d, 0xec, 0x19, 0x61, 0x3b, 0xee, 0x37, 0x6e, 0x5, 0x4d, 0xeb, 0x73, 0xeb, 0x86, 0x8f, 0xdd, 0x64, 0xf7, 0xcb, 0x2f, 0x6b, 0x8b, 0x47, 0x8e, 0xf9, 0x68, 0x8f, 0x7a, 0x21, 0xd6, 0x8a, 0xb3, 0x5, 0xbc, 0xa8, 0xbd, 0xc4, 0xe9, 0x63, 0x9, 0x5f, 0xf9, 0xa3, 0x46, 0xf6, 0x49, 0xf3, 0xf9, 0x2f, 0x8c, 0x1c, 0x22, 0x7a, 0x6c, 0x8f, 0x22, 0xff, 0x80, 0xf4, 0xee, 0x6b, 0x3d, 0xae, 0xa1, 0x85, 0xd8, 0x5, 0xdc, 0xac, 0x71, 0x54, 0x4d, 0x6b, 0x9d, 0xae, 0xb4, 0xb0, 0x35, 0x2b, 0x47, 0x7c, 0x57, 0x9b, 0x3e, 0xd7, 0xd, 0xd3, 0xc5, 0x75, 0xb0, 0x2b, 0x8, 0xaf, 0xb8, 0xa8, 0xa8, 0x73, 0x41, 0x9a, 0x85, 0x8b, 0x6b, 0x89, 0x18, 0x4d, 0x42, 0x25, 0xbf, 0x53, 0x63, 0xba, 0xf, 0xba, 0x89, 0x73, 0x1c, 0xc, 0xfe, 0xbe, 0x67, 0x6, 0xdf, 0x15, 0x49, 0x10, 0x77, 0x8a, 0xd3, 0xf4, 0x79, 0xa5, 0xae, 0x29, 0x45, 0x9e, 0x2, 0xd, 0x13, 0xd0, 0x35, 0xe8, 0xaf, 0x69, 0x2c, 0x96, 0x7b, 0x48, 0x78, 0xaf, 0x89, 0xe3, 0xfe, 0x9c, 0x91, 0x67, 0xa, 0x74, 0x26, 0xb0, 0x95, 0x1c, 0xe0, 0x50, 0x52, 0x3d, 0xa0, 0xb5, 0x6e, 0x40, 0xad, 0xf3, 0x42, 0x71, 0xb9, 0x88, 0xcb, 0xca, 0xcb, 0x3d, 0xc9, 0xe, 0xf1, 0x2a, 0xa4, 0xd8, 0xc7, 0xc9, 0xd, 0x53, 0xc9, 0x97, 0x14, 0x49, 0x27, 0x45, 0x52, 0xb3, 0x66, 0xb6, 0x63, 0xc5, 0xc9, 0xb8, 0x1c, 0x9b, 0xa7, 0xb, 0x8, 0xf3, 0x85, 0x62, 0xfa, 0x86, 0x29, 0xf3, 0x57, 0xc9, 0xf5, 0xd1, 0x82, 0x73, 0x89, 0xf8, 0xd4, 0xa, 0xd7, 0x7c, 0xe3, 0xdf, 0xf0, 0xa3, 0xaf, 0xa1, 0x82, 0xa0, 0xc5, 0xf6, 0xd1, 0x47, 0x5, 0x2d, 0xb8, 0xf9, 0x7c, 0x27, 0xbc, 0x8a, 0xf7, 0x3b, 0x51, 0x40, 0x8a, 0xef, 0x19, 0x79, 0xc9, 0xc8, 0x67, 0xa2, 0x99, 0x86, 0x49, 0xd8, 0x1a, 0x3f, 0xcf, 0x54, 0xa5, 0xa0, 0xce, 0x58, 0x4a, 0xc2, 0xfb, 0x8d, 0xec, 0x1a, 0x35, 0x2c, 0x96, 0xcf, 0x27, 0x4c, 0xda, 0xda, 0x8b, 0xec, 0xb6, 0xa6, 0xe4, 0x3b, 0x92, 0xc7, 0xbf, 0x3f, 0x9d, 0x27, 0x1b, 0x35, 0xda, 0x40, 0xc1, 0xad, 0xbb, 0x87, 0x38, 0x6e, 0x96, 0x5d, 0xb8, 0xe, 0x70, 0x7a, 0x72, 0x33, 0x17, 0xd9, 0x55, 0x90, 0xec, 0x52, 0x8b, 0xb7, 0x93, 0x5a, 0x69, 0xc2, 0x45, 0x76, 0x70, 0x2b, 0xa0, 0x38, 0x19, 0x59, 0x7d, 0xc8, 0x34, 0x43, 0x8b, 0xaf, 0x6f, 0x29, 0xd8, 0x34, 0xe7, 0xf0, 0x73, 0x7a, 0xfa, 0x75, 0x74, 0x80, 0x6, 0xe8, 0xe3, 0xf8, 0x7e, 0xf4, 0x48, 0xf3, 0x39, 0x94, 0x81, 0xf4, 0xa7, 0x2c, 0xe3, 0xff, 0x41, 0x5c, 0xe5, 0x4d, 0x5a, 0x7c, 0xf9, 0xda, 0x2c, 0x7d, 0x7b, 0xf, 0xb2, 0x53, 0xd4, 0x1d, 0xdf, 0x18, 0xe9, 0xeb, 0xb2, 0xec, 0x5a, 0x16, 0xe8, 0xbc, 0x54, 0x1, 0x36, 0x5d, 0xf4, 0xb7, 0x7c, 0x88, 0xda, 0x68, 0xdc, 0xdd, 0xa, 0x70, 0xa7, 0xec, 0x26, 0x4e, 0xaf, 0x43, 0xd4, 0xfd, 0x20, 0x29, 0xa7, 0x71, 0x2d, 0xad, 0x7a, 0xf7, 0x19, 0x67, 0xdb, 0x64, 0xf0, 0x7f, 0x4a, 0x49, 0x80, 0x58, 0xa0, 0x13, 0xc5, 0xa9, 0xe7, 0x9a, 0x4c, 0x57, 0xc4, 0x7c, 0xd1, 0x53, 0xde, 0xc3, 0xc, 0xbc, 0x27, 0xbd, 0x8d, 0x5c, 0x22, 0x4e, 0xf7, 0xa0, 0xed, 0xab, 0xf9, 0x3c, 0x92, 0x57, 0xe, 0xa7, 0x5c, 0xc7, 0xe7, 0x8b, 0x42, 0xe0, 0x4f, 0x48, 0x7c, 0x33, 0xe8, 0x5, 0x88, 0x3b, 0xa0, 0x30, 0x36, 0xb1, 0xec, 0x3b, 0x7a, 0xf6, 0xa5, 0x3f, 0xa8, 0x52, 0x13, 0x9a, 0x48, 0x24, 0x36, 0x57, 0xb2, 0xdb, 0xb8, 0xd0, 0x90, 0x56, 0x8d, 0x93, 0x6f, 0xdf, 0xa7, 0xe6, 0x19, 0x57, 0x77, 0x2, 0x48, 0xac, 0x83, 0x91, 0xa3, 0x8d, 0x1c, 0x6a, 0x64, 0x57, 0x5a, 0x6e, 0xb9, 0xb4, 0x26, 0xb7, 0xa4, 0xec, 0x9d, 0x32, 0xe, 0xab, 0x70, 0x1e, 0x5, 0xee, 0xaf, 0xb1, 0x7c, 0x46, 0xeb, 0x74, 0xb9, 0x86, 0xa, 0x78, 0x1e, 0x48, 0xee, 0x42, 0xf9, 0x1, 0xce, 0x76, 0x1c, 0x28, 0x76, 0x17, 0x9d, 0xed, 0xb9, 0xef, 0x44, 0x39, 0x8f, 0x4a, 0xcd, 0xc, 0x3e, 0x63, 0xbc, 0x7f, 0x1f, 0x50, 0xe1, 0x89, 0xa3, 0xb2, 0x89, 0xee, 0x33, 0xee, 0xbd, 0x17, 0xdf, 0x7f, 0xb9, 0x2e, 0x27, 0x5f, 0x30, 0xdf, 0x32, 0xb6, 0x59, 0xbe, 0x91, 0x1d, 0x5c, 0x26, 0x70, 0xa5, 0xe1, 0x40, 0xc4, 0xa5, 0xdc, 0x48, 0x91, 0x3d, 0x86, 0xda, 0x8c, 0xd9, 0x12, 0xef, 0x7e, 0x74, 0xdb, 0xd0, 0xb4, 0x3f, 0xc5, 0xc8, 0xef, 0x24, 0x1c, 0x1d, 0x46, 0xd2, 0x21, 0x49, 0x80, 0x7b, 0x19, 0x39, 0x8e, 0xcf, 0x6, 0x9a, 0xef, 0x48, 0x12, 0xdf, 0x24, 0x5a, 0x82, 0x3f, 0x8b, 0xc6, 0x39, 0xc2, 0x80, 0x39, 0x24, 0xbd, 0xbb, 0x8c, 0x1c, 0x43, 0xe2, 0x43, 0x56, 0x73, 0xb3, 0xc, 0xff, 0x3f, 0x4e, 0xeb, 0xee, 0x41, 0x39, 0x9d, 0xef, 0xea, 0x12, 0x3e, 0xeb, 0xf, 0x69, 0xf9, 0xcf, 0x90, 0xaa, 0x27, 0x30, 0x44, 0x11, 0xb0, 0xea, 0xdc, 0x39, 0x3, 0x3f, 0xc7, 0xe4, 0xbb, 0x85, 0x1, 0xf3, 0xb8, 0x5f, 0xa4, 0x1e, 0xf3, 0xd5, 0xc8, 0x8b, 0xec, 0x5e, 0xa0, 0xa6, 0x16, 0x27, 0xac, 0xe5, 0x82, 0x4a, 0x92, 0xdd, 0xf7, 0x12, 0x9e, 0xfe, 0x89, 0x41, 0x2, 0xae, 0xa5, 0xb3, 0xb9, 0x1, 0xd5, 0xe5, 0x4, 0xef, 0x52, 0x4a, 0x32, 0x16, 0xb7, 0x58, 0xec, 0x49, 0x3e, 0xb8, 0x8e, 0x7e, 0x7f, 0xdb, 0x52, 0x7b, 0xad, 0xc7, 0x3f, 0xeb, 0x4b, 0xdd, 0x12, 0x9e, 0xa, 0x49, 0xd8, 0x7f, 0xa1, 0xac, 0xa0, 0xc5, 0x87, 0x26, 0xc5, 0xd, 0xf5, 0xfd, 0xe, 0xd, 0xf0, 0x7e, 0x3d, 0x46, 0x41, 0xec, 0xb7, 0x27, 0xd7, 0xde, 0x7e, 0x35, 0x7c, 0x4e, 0x50, 0xc6, 0xda, 0x89, 0x53, 0xf7, 0xa, 0x41, 0x36, 0xf4, 0x4c, 0x92, 0xea, 0x44, 0x92, 0xe0, 0x4, 0x5a, 0x44, 0x51, 0x53, 0x76, 0x90, 0xb1, 0x5a, 0x6c, 0xb1, 0x90, 0xb1, 0x1f, 0xe9, 0xa1, 0xb8, 0x75, 0xc7, 0x1a, 0xae, 0x97, 0x54, 0xb2, 0xdb, 0xc2, 0x8b, 0xec, 0xbe, 0x36, 0xf2, 0xa2, 0xce, 0x59, 0xa4, 0x81, 0xc4, 0x12, 0xc4, 0x51, 0x2e, 0x12, 0x27, 0x93, 0x32, 0x53, 0x20, 0x6b, 0x72, 0x1, 0x5d, 0x1, 0xb, 0x68, 0xf1, 0x22, 0x91, 0x64, 0x91, 0x38, 0x6e, 0xa5, 0xe4, 0x42, 0x42, 0x32, 0x49, 0xc2, 0x83, 0xec, 0xea, 0xa5, 0x2c, 0xb4, 0x26, 0x24, 0x3e, 0x64, 0xed, 0xa1, 0xfb, 0xf8, 0x56, 0xdc, 0xc4, 0xf0, 0xc2, 0xa3, 0x16, 0xab, 0x25, 0xc7, 0x8b, 0x6b, 0x61, 0xf9, 0x25, 0x13, 0x1f, 0x14, 0xe1, 0xc4, 0x57, 0x94, 0x7b, 0xb9, 0x1e, 0xf1, 0xac, 0x10, 0xe3, 0xeb, 0x4a, 0xc5, 0xab, 0x26, 0x9e, 0x25, 0x28, 0x4b, 0x9d, 0x29, 0x47, 0x1a, 0xb9, 0x4a, 0x9c, 0xd3, 0x24, 0xd0, 0xe5, 0xe8, 0x7d, 0x12, 0xdf, 0x2c, 0xb1, 0x1f, 0x47, 0x14, 0x36, 0x94, 0x5b, 0x8, 0x1a, 0xdf, 0x6b, 0xae, 0x2e, 0x19, 0x5f, 0x50, 0x29, 0x16, 0xcf, 0x95, 0xd7, 0x62, 0x2b, 0xd6, 0xf9, 0x8a, 0x34, 0xe0, 0xaa, 0x1c, 0x2a, 0xf6, 0x76, 0x44, 0x36, 0x8b, 0xd, 0xee, 0x21, 0xb8, 0x72, 0x3f, 0xe0, 0xb, 0xb7, 0x40, 0x36, 0x2d, 0x23, 0xa8, 0xd, 0x4a, 0x52, 0xb4, 0x2c, 0x2f, 0xf7, 0x4c, 0xa3, 0x14, 0xb2, 0x83, 0xd5, 0x86, 0x44, 0x19, 0x74, 0x28, 0xef, 0x2e, 0x4e, 0x10, 0xbf, 0x50, 0x1f, 0x65, 0x2c, 0x50, 0x41, 0x65, 0xe9, 0x41, 0x4a, 0x4b, 0xae, 0x4d, 0x3c, 0x6f, 0x34, 0x68, 0x40, 0xbd, 0x6b, 0xb3, 0x1a, 0x92, 0x1f, 0x14, 0xaa, 0xe6, 0x2e, 0x85, 0x7, 0xae, 0x4e, 0x14, 0x15, 0x23, 0xe6, 0x87, 0xd3, 0xe1, 0x91, 0xe8, 0x14, 0x95, 0x6c, 0xcf, 0x7a, 0x6a, 0xd5, 0x5, 0xb, 0x4d, 0x50, 0x89, 0x17, 0x60, 0x2d, 0xdd, 0x40, 0xb2, 0xab, 0x6e, 0xf3, 0x41, 0x6, 0x1c, 0x62, 0x21, 0x38, 0x9f, 0x6f, 0xaa, 0xe4, 0xa6, 0xb4, 0x62, 0x2d, 0x89, 0x35, 0x79, 0xda, 0xf8, 0xb, 0xfc, 0x13, 0xee, 0x2e, 0x24, 0x2e, 0xf4, 0x12, 0xc7, 0xd, 0x6, 0xad, 0xb7, 0x8b, 0xe8, 0x29, 0x1d, 0x71, 0xc1, 0xf, 0x14, 0x28, 0x57, 0xf7, 0xd0, 0xea, 0x7, 0xf9, 0xfd, 0x5e, 0x1c, 0x77, 0x27, 0xce, 0xc9, 0xdb, 0x41, 0x6a, 0x7e, 0xda, 0xfc, 0x8e, 0x94, 0x23, 0x8c, 0x5c, 0x2f, 0x4e, 0xec, 0xe6, 0x15, 0x92, 0xdf, 0x67, 0xa2, 0x31, 0x31, 0x25, 0x3b, 0x45, 0x2c, 0x80, 0xce, 0xf3, 0x48, 0xe, 0xe8, 0x50, 0xd, 0xb9, 0x3c, 0x45, 0xf9, 0x44, 0xc2, 0x9b, 0x90, 0x83, 0xf8, 0xc5, 0x24, 0xca, 0x5d, 0xb4, 0x4, 0x40, 0x76, 0xfb, 0xf3, 0x7b, 0x22, 0x6b, 0xb3, 0x81, 0x3e, 0xf2, 0xd8, 0x0, 0xa5, 0x27, 0x5f, 0x50, 0x80, 0x56, 0x24, 0xbb, 0xce, 0xb4, 0xfa, 0x90, 0xe8, 0x2, 0xb7, 0x67, 0x4d, 0x92, 0xaa, 0xa, 0x49, 0x9a, 0x97, 0x51, 0x90, 0xe5, 0x39, 0x8e, 0xa, 0xd5, 0x58, 0x71, 0xb5, 0x94, 0xca, 0x81, 0x15, 0x97, 0xd0, 0xc7, 0xae, 0x64, 0xa7, 0xa8, 0x39, 0xd0, 0xa5, 0xe2, 0x16, 0xf1, 0x76, 0x3f, 0x23, 0xa5, 0x19, 0x8d, 0x7a, 0x11, 0x3b, 0x99, 0x1f, 0x51, 0x4b, 0x60, 0x2c, 0xe5, 0x66, 0x6e, 0x62, 0x28, 0x9d, 0xe8, 0xc7, 0xcd, 0x50, 0xdd, 0x9d, 0xf1, 0xc2, 0x32, 0xca, 0x67, 0x5c, 0xb7, 0x78, 0xbe, 0x6d, 0xa9, 0xe4, 0xe0, 0x79, 0xef, 0x46, 0x4b, 0x70, 0xab, 0x1a, 0xfc, 0xcc, 0x64, 0xbc, 0xef, 0x34, 0x7a, 0x12, 0x90, 0x80, 0xf7, 0x32, 0x7f, 0x47, 0x2e, 0x3c, 0x1a, 0xe5, 0x2e, 0x4f, 0x5, 0xe2, 0x4c, 0x1b, 0xf4, 0xd1, 0xd7, 0xd, 0xe8, 0x83, 0xb9, 0x6e, 0xfd, 0x6, 0x29, 0x2f, 0xdf, 0xe4, 0x88, 0x4b, 0xc4, 0x7b, 0x57, 0x2a, 0xd9, 0x45, 0x1f, 0x68, 0xcc, 0x3b, 0x2c, 0xcd, 0x75, 0x58, 0x71, 0xb7, 0xd2, 0x4a, 0x8a, 0x3, 0xb0, 0x8a, 0xa7, 0x53, 0xf0, 0xbd, 0x10, 0xaf, 0x79, 0x58, 0x9c, 0x18, 0x9f, 0x22, 0x9e, 0x80, 0x7, 0x62, 0xe, 0xe5, 0x19, 0x92, 0xc4, 0x2e, 0x54, 0x7a, 0x50, 0xaa, 0x70, 0x8, 0x2d, 0xff, 0x4c, 0x2d, 0x3f, 0x10, 0x27, 0x4e, 0x70, 0x18, 0x2c, 0x4e, 0x6c, 0xf, 0xeb, 0xe7, 0xd, 0xa9, 0x7a, 0x8, 0x70, 0x50, 0x40, 0xfc, 0x72, 0xbd, 0x4b, 0x49, 0x83, 0xcb, 0xf5, 0x6c, 0x12, 0xa1, 0xa2, 0x96, 0x58, 0x6f, 0x88, 0xee, 0x98, 0xc3, 0xfa, 0x48, 0x87, 0xf6, 0x6d, 0xdd, 0x96, 0xb4, 0x92, 0x5d, 0xc4, 0x81, 0xb8, 0xc4, 0xdf, 0x3c, 0xae, 0xc1, 0x82, 0xbb, 0x9a, 0x64, 0x17, 0x57, 0x20, 0x23, 0x14, 0x7d, 0x17, 0xd7, 0x28, 0xd9, 0xe5, 0x15, 0x10, 0x73, 0x9e, 0x46, 0x81, 0x75, 0x76, 0x8d, 0x38, 0x25, 0x36, 0x7, 0x18, 0xe9, 0x43, 0xcb, 0x6f, 0xb7, 0xc, 0x7e, 0xe, 0x62, 0x82, 0x47, 0x52, 0xe0, 0x35, 0x18, 0x2e, 0x4e, 0xf3, 0xea, 0xc0, 0xf7, 0x64, 0xa9, 0x9a, 0x8d, 0x9, 0xeb, 0x3, 0x9, 0x35, 0x1a, 0x57, 0xac, 0x8b, 0x56, 0x54, 0x56, 0x26, 0x5d, 0x3a, 0x76, 0x90, 0x6e, 0x5d, 0x76, 0xae, 0x72, 0x4d, 0x3, 0xfe, 0xd1, 0xc5, 0xe0, 0x34, 0x44, 0x7, 0x2d, 0xf5, 0xa0, 0x98, 0x13, 0x5d, 0x12, 0x8d, 0x75, 0x1d, 0xeb, 0x1e, 0x27, 0x4e, 0x26, 0xe6, 0x63, 0xe2, 0x24, 0x67, 0x61, 0xed, 0xa3, 0x81, 0x2, 0x8a, 0xdc, 0x67, 0x65, 0x68, 0xb1, 0xf5, 0x12, 0x27, 0x99, 0xe5, 0x79, 0x5a, 0x8c, 0x41, 0x2, 0x8d, 0x8a, 0xdd, 0x2e, 0x4b, 0x94, 0xd2, 0xb4, 0xd7, 0x47, 0x59, 0x37, 0xc0, 0x8d, 0xb9, 0xa1, 0xc4, 0x9e, 0x6b, 0xa7, 0x9b, 0x44, 0x34, 0x81, 0x6c, 0xb3, 0x5b, 0x3c, 0xae, 0xa1, 0xa7, 0xe7, 0x51, 0xe2, 0xb8, 0x45, 0x14, 0x8a, 0x7c, 0x4, 0x9a, 0x46, 0xbc, 0x4b, 0x65, 0x10, 0x47, 0x79, 0x1d, 0x28, 0x4e, 0xa2, 0xd3, 0xe4, 0xea, 0xf6, 0x4a, 0x71, 0xba, 0xf5, 0x20, 0x4b, 0xf9, 0x1c, 0x9, 0x2e, 0x89, 0x4, 0xbb, 0xf1, 0x32, 0xd7, 0x18, 0xea, 0x51, 0xf5, 0xc, 0xc0, 0x0, 0xa1, 0x64, 0x17, 0x3d, 0x20, 0x28, 0x8f, 0x74, 0x6d, 0x5b, 0x37, 0xa, 0x74, 0xa0, 0x3f, 0x57, 0xf4, 0xf4, 0x0, 0x85, 0x22, 0x9, 0xb8, 0xc, 0x51, 0x7a, 0x70, 0x1, 0x2d, 0x3e, 0xb4, 0x31, 0x7b, 0xb3, 0x1a, 0x6b, 0xf, 0xd9, 0xa0, 0xf7, 0x52, 0x82, 0x6a, 0xab, 0xb7, 0xc0, 0x42, 0xb4, 0x3b, 0xe8, 0xe3, 0x52, 0xb2, 0x53, 0x6c, 0x7c, 0x5e, 0xb0, 0xe8, 0x6c, 0x8d, 0x76, 0x9f, 0x14, 0x27, 0xc5, 0x5a, 0x89, 0x4e, 0xa1, 0xb0, 0x3, 0x59, 0xc9, 0xcf, 0x8a, 0xe3, 0x19, 0x41, 0x6c, 0xef, 0x25, 0x49, 0x5f, 0x5f, 0x7a, 0x36, 0x3f, 0x13, 0x44, 0xa3, 0xf4, 0x19, 0x96, 0xb1, 0x1d, 0xf5, 0x11, 0x29, 0xd9, 0x29, 0x1c, 0xa0, 0xd5, 0xd2, 0x9f, 0x2d, 0xe3, 0x68, 0x97, 0x74, 0x8e, 0x4e, 0x8f, 0x42, 0x91, 0x11, 0x2a, 0xf9, 0xce, 0xa0, 0x67, 0x27, 0xea, 0x36, 0xdf, 0x4b, 0xf3, 0x59, 0x5c, 0x7f, 0x24, 0x0, 0xb, 0xcf, 0x46, 0x76, 0x28, 0xa8, 0xd7, 0xee, 0x55, 0x4a, 0x76, 0x79, 0xf, 0xb8, 0x39, 0x2e, 0x97, 0xaa, 0xc5, 0xd4, 0x88, 0x4f, 0xe0, 0x88, 0x14, 0x4d, 0x59, 0x56, 0x28, 0x6a, 0xe, 0x10, 0x1d, 0x8e, 0xba, 0xba, 0x50, 0x9c, 0x5e, 0x9b, 0x36, 0xc0, 0x12, 0xbc, 0x55, 0xfc, 0x8d, 0xe1, 0x81, 0xec, 0xdc, 0xae, 0x54, 0x94, 0x4f, 0x68, 0x56, 0xb1, 0x92, 0x5d, 0xde, 0x3, 0xf1, 0x86, 0x43, 0x2c, 0xe3, 0xc8, 0x38, 0x9b, 0xa6, 0xd3, 0xa3, 0x50, 0xd4, 0x1a, 0x70, 0xfd, 0xdf, 0x69, 0xe4, 0xf, 0xe2, 0x7d, 0x5a, 0x38, 0x14, 0xca, 0xa3, 0x7c, 0xfc, 0x9d, 0x68, 0xaa, 0xbe, 0xd8, 0x35, 0x6, 0x45, 0xb6, 0x87, 0x3e, 0xe, 0x25, 0xbb, 0x7c, 0xc7, 0xf9, 0x96, 0x31, 0xf4, 0xb4, 0x7c, 0x5c, 0xa7, 0x46, 0xa1, 0xf0, 0x5, 0x48, 0x64, 0x39, 0xc6, 0x83, 0xf0, 0xa, 0xa8, 0x58, 0x36, 0xf5, 0xe9, 0x77, 0x2d, 0xf2, 0x50, 0x52, 0x7b, 0xeb, 0x63, 0x50, 0xb2, 0xcb, 0x67, 0xa0, 0x29, 0xf2, 0xfe, 0x96, 0x71, 0x94, 0x19, 0xfc, 0xa4, 0xd3, 0xa3, 0x50, 0xf8, 0x6, 0x10, 0x10, 0x8a, 0xcc, 0x97, 0x58, 0xae, 0xa1, 0xdd, 0xd8, 0xa9, 0x3e, 0xfd, 0x1e, 0xd4, 0x6, 0x7e, 0x65, 0x19, 0x47, 0x1f, 0x50, 0x8d, 0xdb, 0x29, 0xd9, 0xe5, 0x2d, 0x10, 0xb8, 0x6e, 0xe5, 0x1a, 0x43, 0xbf, 0xc8, 0x67, 0x74, 0x6a, 0x14, 0xa, 0xdf, 0x81, 0x42, 0xf4, 0x81, 0x62, 0x8f, 0x83, 0x23, 0x11, 0xcc, 0xaf, 0xc3, 0x82, 0xd1, 0x8c, 0xdd, 0x7d, 0x80, 0x34, 0x7a, 0x7e, 0xee, 0xae, 0x8f, 0x40, 0xc9, 0x2e, 0x5f, 0xb1, 0x97, 0x65, 0xc, 0xd9, 0x64, 0xda, 0x5a, 0x48, 0xa1, 0x8, 0x6, 0xa8, 0xc5, 0x7b, 0xc9, 0x32, 0x8e, 0xee, 0x2a, 0x7, 0xf8, 0xf4, 0x3b, 0xf0, 0xe, 0xbb, 0x3d, 0x33, 0x4d, 0x7c, 0xfc, 0xf9, 0xa, 0x25, 0xbb, 0x48, 0x1, 0x2e, 0x8d, 0xee, 0x96, 0xf1, 0x51, 0x3a, 0x35, 0xa, 0x45, 0xa0, 0xb8, 0x4d, 0x9c, 0xbe, 0xab, 0xa9, 0x40, 0x12, 0x49, 0x2f, 0x9f, 0x7e, 0xfe, 0xcf, 0x46, 0x46, 0x5b, 0xc6, 0x4f, 0x11, 0x3d, 0xc2, 0x4a, 0xc9, 0x2e, 0xf, 0x81, 0xde, 0x8f, 0xee, 0x33, 0xea, 0x90, 0xb2, 0xfc, 0xb5, 0x4e, 0x8d, 0x42, 0x11, 0x28, 0x26, 0x8a, 0xd3, 0x3a, 0xcc, 0x8d, 0x1e, 0x3e, 0x92, 0xd1, 0x2b, 0x96, 0xb1, 0xae, 0xe2, 0x1c, 0x5a, 0xac, 0x50, 0xb2, 0xcb, 0x3b, 0xcb, 0xce, 0x1d, 0xaf, 0x43, 0x5f, 0xbd, 0xe5, 0x3a, 0x35, 0xa, 0x45, 0xe0, 0x78, 0xce, 0x32, 0x86, 0x98, 0xda, 0x66, 0x3e, 0xfd, 0xfc, 0x31, 0x46, 0xe6, 0x5a, 0xc6, 0x4f, 0xd7, 0xa9, 0x57, 0xb2, 0xcb, 0x37, 0xd8, 0x5a, 0x83, 0x81, 0xec, 0x56, 0xeb, 0xd4, 0x28, 0x14, 0x81, 0x3, 0x19, 0x93, 0xa5, 0xae, 0x31, 0x9c, 0x50, 0xb0, 0xb9, 0x4f, 0x3f, 0x1f, 0x59, 0x9f, 0xef, 0x58, 0xc6, 0x51, 0xe8, 0xae, 0xed, 0xc3, 0x94, 0xec, 0xf2, 0xa, 0x8d, 0x3d, 0x9e, 0x5b, 0x42, 0xa7, 0x46, 0xa1, 0x8, 0x1c, 0xe8, 0x50, 0xb4, 0xd0, 0x32, 0xde, 0xce, 0xc7, 0xdf, 0x81, 0xa3, 0xb8, 0xdc, 0x59, 0x99, 0x68, 0xf8, 0xfe, 0x27, 0x9d, 0x7e, 0x25, 0xbb, 0x7c, 0x42, 0xa5, 0x4e, 0x81, 0x42, 0x91, 0x33, 0xac, 0x12, 0x7b, 0xd6, 0xb3, 0x9f, 0xca, 0x26, 0x4a, 0x10, 0x6c, 0xb1, 0x41, 0x9c, 0x60, 0xd2, 0x5c, 0x1f, 0x81, 0x92, 0x5d, 0xbe, 0xa0, 0xc4, 0x83, 0x0, 0x95, 0x4, 0x37, 0xce, 0x45, 0x85, 0x4e, 0x83, 0x22, 0x20, 0xfc, 0x62, 0x64, 0x45, 0xc0, 0xbf, 0x3, 0xeb, 0xf7, 0x7e, 0xcb, 0x78, 0x1b, 0x12, 0x9e, 0x42, 0xc9, 0x2e, 0x2f, 0xb0, 0xc0, 0x32, 0x6, 0xd7, 0x66, 0x91, 0x4e, 0xcd, 0xaf, 0x40, 0x81, 0x6f, 0x2b, 0x9d, 0x6, 0x45, 0xc0, 0xa, 0x55, 0xd0, 0x78, 0xd5, 0xc8, 0x78, 0xcb, 0xf8, 0x59, 0x46, 0xb6, 0xd7, 0x47, 0xa0, 0x64, 0x97, 0xf, 0x40, 0x17, 0x7, 0x77, 0xad, 0xcf, 0xd6, 0xe2, 0x4, 0xc9, 0x15, 0x4e, 0x9a, 0x76, 0x43, 0x9d, 0x6, 0x45, 0x40, 0x48, 0x64, 0x69, 0x9f, 0xc4, 0x3b, 0x7e, 0xa7, 0x65, 0x7c, 0x3b, 0x23, 0x97, 0xea, 0x63, 0x50, 0xb2, 0xcb, 0x7, 0xac, 0x33, 0xf2, 0x8d, 0x6b, 0xac, 0x91, 0x5a, 0x33, 0xbf, 0xe1, 0x8f, 0x3a, 0x5, 0x8a, 0x0, 0x81, 0xc6, 0xcf, 0xb6, 0xb8, 0x59, 0x10, 0xae, 0x73, 0x94, 0x39, 0x4c, 0xb4, 0x8c, 0xe3, 0x10, 0x59, 0x3d, 0xd, 0xa1, 0x2a, 0xba, 0x89, 0x93, 0xad, 0x9e, 0x11, 0x8f, 0x29, 0xd9, 0x45, 0x83, 0xec, 0xe6, 0x58, 0xc6, 0xf7, 0xd4, 0xa9, 0x91, 0xd6, 0xe2, 0x1c, 0xae, 0xa9, 0x50, 0x4, 0x85, 0x26, 0x16, 0xb2, 0x83, 0x5b, 0x73, 0x56, 0x0, 0xbf, 0x6b, 0x83, 0x91, 0x9b, 0xa5, 0xea, 0x39, 0x77, 0x28, 0x60, 0xbf, 0x4b, 0xfc, 0xab, 0xed, 0x8b, 0xcb, 0xbb, 0xff, 0x82, 0x38, 0xe7, 0x2, 0xbe, 0x6b, 0xe4, 0xa, 0xb1, 0x77, 0x9a, 0x52, 0xb2, 0x8b, 0x10, 0xb0, 0xf0, 0xa7, 0x5a, 0xc6, 0xf, 0xd5, 0xa9, 0xf9, 0x35, 0x9e, 0xd1, 0x46, 0xa7, 0x41, 0x11, 0xf0, 0xa6, 0xda, 0xde, 0x35, 0x86, 0xe3, 0x79, 0xd6, 0x4, 0xf4, 0xfb, 0x5e, 0x34, 0x32, 0xd2, 0x32, 0x8e, 0xd3, 0x10, 0x2e, 0xd6, 0xc7, 0xf1, 0x1b, 0xfe, 0x4f, 0x9c, 0xce, 0x52, 0x68, 0xba, 0x81, 0x63, 0x91, 0x6e, 0xe2, 0xbc, 0x15, 0x2b, 0xd9, 0x45, 0x1b, 0x68, 0xd, 0x56, 0x61, 0xb1, 0xec, 0xb6, 0xcd, 0xe3, 0x39, 0xc1, 0xa9, 0xce, 0x7f, 0xd5, 0xa5, 0xa1, 0x8, 0x18, 0xbb, 0x18, 0xa9, 0xef, 0x1a, 0x9b, 0x2c, 0x4e, 0x96, 0x66, 0x10, 0x40, 0x1, 0xfb, 0x95, 0x62, 0x6f, 0x1a, 0x31, 0xd4, 0xc8, 0xef, 0xf4, 0x91, 0xfc, 0x5a, 0x83, 0x78, 0xa5, 0x65, 0x1c, 0x46, 0x41, 0x99, 0x92, 0x5d, 0xb4, 0x31, 0x9e, 0xda, 0x64, 0x2a, 0xd0, 0xc1, 0xe1, 0xc8, 0x3c, 0x9d, 0xf, 0x24, 0xd, 0xdc, 0x2a, 0x5a, 0x83, 0xa4, 0x8, 0x1e, 0xfd, 0x3c, 0x94, 0xcf, 0xd2, 0x0, 0x7f, 0xe7, 0x24, 0x23, 0x77, 0x58, 0xc6, 0xe1, 0xce, 0xbc, 0xcf, 0xc8, 0x36, 0x79, 0xfe, 0x4c, 0xae, 0x15, 0x7b, 0xce, 0xc2, 0xbf, 0x94, 0xec, 0xa2, 0xf, 0x94, 0x1f, 0x7c, 0x62, 0xd9, 0xf0, 0x8f, 0x95, 0xfc, 0xec, 0x8e, 0x7e, 0x89, 0x91, 0xfe, 0xba, 0x2c, 0x14, 0x1, 0x63, 0x4b, 0xb, 0xd9, 0xc1, 0xc3, 0xf2, 0x65, 0x16, 0x7e, 0xf7, 0x70, 0xb1, 0x17, 0x9a, 0xc3, 0xa3, 0x71, 0xaf, 0xe4, 0x6f, 0xe9, 0x11, 0x14, 0xfc, 0xb3, 0x2c, 0xe3, 0x98, 0xab, 0x37, 0xd3, 0xfd, 0x47, 0x25, 0xbb, 0xe8, 0xc0, 0xd6, 0x1d, 0x1d, 0x2e, 0x8d, 0xdf, 0xe7, 0xd9, 0x3c, 0xc0, 0x3f, 0xff, 0x37, 0x5d, 0xe, 0x59, 0xc1, 0xbe, 0x92, 0xdf, 0x49, 0x11, 0xc7, 0x19, 0x69, 0xe6, 0x1a, 0x83, 0x87, 0x65, 0x42, 0x16, 0x7e, 0x37, 0xdc, 0x98, 0x70, 0xd3, 0xff, 0xe4, 0xb1, 0xe1, 0xff, 0x23, 0xf, 0x9f, 0x7, 0x2c, 0x5a, 0x94, 0x67, 0xd4, 0xb7, 0x5c, 0xbb, 0x41, 0xaa, 0x71, 0x2d, 0x2b, 0xd9, 0x45, 0x7, 0xaf, 0x4b, 0xd5, 0xee, 0xe8, 0xb0, 0xea, 0x2e, 0xcf, 0xa3, 0x39, 0xc0, 0x29, 0xce, 0xf, 0x8b, 0x66, 0xa5, 0x65, 0x3, 0x97, 0x51, 0x5b, 0x7e, 0x44, 0x9c, 0x8c, 0xc4, 0x7c, 0x3, 0x12, 0x1d, 0x4e, 0xb7, 0xec, 0x91, 0xef, 0x19, 0x99, 0x9f, 0xa5, 0x7b, 0x80, 0xbb, 0x14, 0x59, 0x86, 0x36, 0xd7, 0x1c, 0x6a, 0xef, 0x86, 0xe6, 0xd1, 0xf3, 0x68, 0xcc, 0xb5, 0xd8, 0xce, 0x72, 0xed, 0x49, 0x23, 0x6f, 0x57, 0xf7, 0x3, 0x94, 0xec, 0xa2, 0x83, 0xd5, 0xdc, 0xe8, 0xdd, 0x38, 0x58, 0x1c, 0x77, 0x66, 0x3e, 0x68, 0x75, 0xcf, 0x48, 0xd5, 0xcc, 0x38, 0x85, 0xbf, 0x80, 0x7b, 0xc, 0x87, 0x96, 0x22, 0x26, 0x5a, 0xc0, 0xb5, 0x95, 0x8f, 0x84, 0x77, 0x2a, 0x2d, 0x5b, 0x37, 0x1e, 0xcf, 0xf2, 0x7d, 0x3c, 0x64, 0xe4, 0x41, 0x8f, 0x6b, 0xd7, 0x1b, 0x39, 0x39, 0x4f, 0x9e, 0x7, 0xd6, 0xa4, 0x2d, 0x3, 0x1d, 0x8a, 0x47, 0x46, 0x9e, 0x1e, 0x25, 0xbb, 0x68, 0xe1, 0x9, 0xa9, 0xda, 0x81, 0x1d, 0xb1, 0xbb, 0x1b, 0xc5, 0x49, 0x91, 0x8e, 0x2b, 0x90, 0x62, 0x8c, 0x9a, 0x9a, 0x6e, 0x96, 0x6b, 0x3f, 0x48, 0xf0, 0xbd, 0xb, 0xf3, 0x9, 0x37, 0x4a, 0xd5, 0x8e, 0x1d, 0xc7, 0x8b, 0xe3, 0x46, 0xdf, 0x2a, 0x4f, 0xe6, 0xa0, 0x2d, 0x89, 0xc4, 0x8d, 0xb7, 0xc4, 0x1e, 0x47, 0xb, 0x12, 0x88, 0x11, 0x5e, 0xe8, 0x61, 0xb9, 0x14, 0x90, 0x8, 0x4f, 0x8d, 0xf1, 0xb3, 0xc0, 0x77, 0x1c, 0x21, 0xf6, 0x1e, 0xa1, 0x65, 0xf4, 0x40, 0x2c, 0x50, 0xb2, 0x8b, 0x1f, 0xbe, 0x13, 0x27, 0x1b, 0xcb, 0x8d, 0x8e, 0x62, 0xcf, 0xde, 0x8a, 0x3, 0xd0, 0x39, 0x2, 0x45, 0xa3, 0xfb, 0x59, 0xae, 0x7d, 0x6b, 0x64, 0xa0, 0xe8, 0x41, 0xb6, 0x7e, 0xc2, 0x6b, 0x4f, 0x38, 0x88, 0xcf, 0x61, 0xf7, 0x98, 0x7f, 0x7f, 0xc4, 0x83, 0x86, 0x5b, 0x88, 0x1d, 0xd9, 0x97, 0x77, 0x49, 0x9a, 0x6c, 0xbf, 0x0, 0x81, 0x66, 0xf0, 0x3, 0xc4, 0x39, 0x5b, 0xcf, 0x8d, 0x62, 0xee, 0x9, 0x43, 0x62, 0xfa, 0x3c, 0x6e, 0x25, 0xd9, 0xdb, 0x30, 0x82, 0x4a, 0x70, 0x9d, 0x16, 0xb6, 0x22, 0xbc, 0xf8, 0xa7, 0xd8, 0x5b, 0xa, 0x9d, 0x98, 0x66, 0x51, 0x44, 0x15, 0x28, 0x1c, 0x7d, 0x5d, 0xec, 0x7, 0xd8, 0x7e, 0x6f, 0xe4, 0x4, 0x23, 0xa3, 0x44, 0x7b, 0x63, 0xfa, 0x9, 0x58, 0x34, 0x5e, 0x59, 0x6d, 0xbb, 0xf2, 0x79, 0x1c, 0x17, 0xe3, 0xef, 0x7f, 0x9d, 0x91, 0x63, 0x2c, 0xe3, 0x2f, 0x89, 0xbd, 0xd8, 0x3b, 0x5b, 0xc0, 0x7a, 0x87, 0xcb, 0x72, 0xb6, 0xe5, 0x1a, 0xd6, 0x3f, 0x3a, 0xaf, 0xdc, 0x46, 0x4b, 0x28, 0xe, 0x80, 0xdb, 0xfc, 0x1, 0x23, 0x17, 0x79, 0x5c, 0x47, 0x48, 0xa3, 0x46, 0x31, 0x4b, 0x25, 0xbb, 0xe8, 0x61, 0x2d, 0x1f, 0xf2, 0x7a, 0xcb, 0x35, 0x64, 0x68, 0x9d, 0x12, 0x93, 0x85, 0xe, 0x52, 0xc7, 0xa1, 0x96, 0x2d, 0x2c, 0xd7, 0x91, 0x11, 0x7, 0xd7, 0xda, 0xe7, 0xa2, 0xc9, 0x2a, 0x7e, 0xe3, 0x27, 0x6e, 0xaa, 0x5e, 0x1b, 0x3b, 0x3a, 0xd6, 0xfc, 0x87, 0xa4, 0x10, 0xb7, 0xb2, 0x97, 0xab, 0x8d, 0x5c, 0xe5, 0x31, 0x27, 0x57, 0x87, 0xe0, 0xfe, 0xa6, 0x19, 0x39, 0xda, 0xc8, 0x4c, 0x8f, 0xeb, 0x97, 0xf2, 0xd9, 0xb4, 0x8c, 0xf8, 0x73, 0xc0, 0x29, 0xf, 0xe8, 0x13, 0x7a, 0xa6, 0xc7, 0x75, 0x9c, 0x10, 0x1, 0xb7, 0x66, 0xb9, 0x92, 0x5d, 0xfc, 0x81, 0xd8, 0xc1, 0x70, 0xcb, 0x38, 0x32, 0x96, 0x90, 0xc4, 0x12, 0x65, 0x1f, 0x3e, 0xdc, 0x65, 0x63, 0x8c, 0x5c, 0x20, 0xf6, 0x14, 0xe3, 0xe9, 0xd4, 0xbc, 0x3f, 0xd2, 0x65, 0x10, 0x28, 0xe1, 0xc1, 0x53, 0xe0, 0xe5, 0x22, 0x42, 0x12, 0xcb, 0x35, 0x46, 0xde, 0x31, 0xb2, 0x47, 0xc, 0xbe, 0x2f, 0xd6, 0xd9, 0x30, 0x23, 0x7f, 0xb7, 0x5c, 0xc3, 0x86, 0x3a, 0xd8, 0xc3, 0xa2, 0xca, 0x5, 0xa6, 0xd2, 0xb2, 0x9e, 0x93, 0xc6, 0x1b, 0x32, 0x8a, 0xef, 0x51, 0x14, 0x81, 0xfa, 0xd9, 0xb1, 0xe2, 0xdd, 0xf3, 0xf6, 0x25, 0x2a, 0x63, 0xab, 0x6a, 0xfa, 0x83, 0x95, 0xec, 0xa2, 0xb, 0xd4, 0x95, 0xd8, 0xdc, 0x4d, 0x85, 0xe2, 0x14, 0x9d, 0xe, 0x8c, 0xd8, 0xf7, 0xd9, 0x41, 0x9c, 0x60, 0x3b, 0x2c, 0xa, 0xaf, 0x86, 0xae, 0x78, 0x89, 0xf, 0x31, 0xf2, 0x85, 0x3e, 0xfe, 0xac, 0x59, 0x78, 0xf7, 0xa6, 0xf9, 0xcc, 0x81, 0xe2, 0x24, 0x4e, 0xa0, 0x75, 0x53, 0x71, 0x44, 0xbf, 0x27, 0xa, 0xc7, 0x91, 0x6d, 0x7a, 0xad, 0xc7, 0xf5, 0x11, 0xf4, 0x30, 0x84, 0x9, 0x53, 0x8c, 0x1c, 0x2e, 0x55, 0x1b, 0x4d, 0x24, 0xd1, 0x8d, 0xd6, 0xcf, 0xb5, 0x12, 0x9d, 0x2c, 0x5a, 0x3c, 0x87, 0xdb, 0xa9, 0x60, 0xb5, 0x4f, 0x63, 0xd1, 0xd, 0x10, 0x7b, 0x2b, 0x35, 0x25, 0xbb, 0x18, 0x63, 0x2d, 0x9, 0xcd, 0x16, 0xb4, 0x6e, 0x44, 0xe2, 0x80, 0xf5, 0xd7, 0x34, 0xe4, 0xdf, 0x63, 0x3b, 0x5a, 0x9, 0xe3, 0xf9, 0x7d, 0xa, 0x3d, 0x3e, 0x87, 0x56, 0x40, 0x28, 0xa6, 0xfd, 0x4e, 0x1f, 0x7d, 0xd6, 0x80, 0x2e, 0xfc, 0xe7, 0x89, 0x13, 0xb, 0x5e, 0xef, 0xf1, 0x99, 0x96, 0x54, 0xbc, 0x90, 0xa5, 0xf8, 0x87, 0x88, 0x7d, 0x3f, 0x28, 0x4e, 0xef, 0xa6, 0xf1, 0x84, 0x20, 0xfb, 0x39, 0xac, 0xb5, 0x6c, 0x38, 0x75, 0x1, 0x2e, 0xcd, 0xb7, 0x3c, 0xae, 0x37, 0xa6, 0xb5, 0x8a, 0xba, 0xc0, 0x7e, 0x21, 0x7e, 0x6, 0xc8, 0x26, 0x47, 0x48, 0x2, 0x9e, 0x1a, 0x74, 0x46, 0xf2, 0x8a, 0xbf, 0xa3, 0x4, 0x3, 0x21, 0x9a, 0x9f, 0x6b, 0xfb, 0x8b, 0x94, 0xec, 0xa2, 0x8d, 0x25, 0xd4, 0xbe, 0x67, 0x78, 0x5c, 0x47, 0x70, 0x17, 0xae, 0xa6, 0x7d, 0x43, 0x78, 0xef, 0xd0, 0xde, 0x90, 0x41, 0x3a, 0x5a, 0x9c, 0xf8, 0xcf, 0x16, 0x69, 0xbe, 0xe3, 0x69, 0x46, 0x6, 0xa5, 0xd9, 0x70, 0x13, 0x96, 0xb1, 0x72, 0x5d, 0x1e, 0xbe, 0x1, 0x5d, 0x2b, 0xe0, 0xd6, 0xfc, 0x36, 0xcd, 0x67, 0x60, 0x8d, 0xc3, 0xc5, 0xf4, 0x9a, 0x84, 0xdf, 0x85, 0xb6, 0x13, 0xad, 0x39, 0x24, 0xdb, 0x78, 0xb9, 0x61, 0x51, 0xa8, 0x7c, 0x8e, 0xe4, 0x26, 0xfb, 0x32, 0x53, 0x2c, 0x13, 0xa7, 0xe, 0xf2, 0x9f, 0x69, 0x3e, 0xb3, 0x37, 0xbf, 0xe7, 0xb3, 0x46, 0x76, 0xb, 0x19, 0xc9, 0xf5, 0x25, 0x59, 0x23, 0x3e, 0xd7, 0xc9, 0xe3, 0x73, 0xc8, 0x44, 0x45, 0x1c, 0xf5, 0xec, 0xba, 0x10, 0x9d, 0x92, 0x5d, 0x3c, 0x80, 0xa0, 0x35, 0x7c, 0xf8, 0x5e, 0x41, 0xeb, 0x7d, 0x49, 0x28, 0xc8, 0xd4, 0xca, 0xf5, 0x29, 0x9, 0x2d, 0x68, 0x9d, 0xe1, 0xc5, 0x43, 0xb3, 0xdb, 0x8b, 0xb9, 0xf1, 0x78, 0xe1, 0x79, 0x71, 0x5a, 0xa2, 0x3d, 0x91, 0xe6, 0x33, 0x78, 0x19, 0x56, 0x5a, 0xc6, 0x5b, 0xeb, 0xd2, 0xf0, 0x15, 0x20, 0x32, 0x34, 0x30, 0x78, 0x35, 0xcd, 0x67, 0x10, 0xfb, 0x3a, 0x42, 0x1c, 0x77, 0x33, 0x48, 0xef, 0xa8, 0x34, 0x4a, 0x4c, 0x2e, 0xb0, 0x97, 0x38, 0x47, 0xc1, 0x7c, 0x26, 0x4e, 0x77, 0x14, 0x2f, 0x2f, 0xc2, 0xfd, 0x46, 0xce, 0x10, 0xe7, 0x2c, 0xc9, 0xb0, 0x63, 0x1d, 0x95, 0x5a, 0x28, 0xbd, 0xdf, 0xa7, 0x79, 0x2e, 0x27, 0xf0, 0x7b, 0xa3, 0x4c, 0x21, 0x97, 0x2d, 0x6, 0x1b, 0x73, 0xf, 0x0, 0x1, 0x23, 0x64, 0x71, 0x68, 0x35, 0xd6, 0x2b, 0xbc, 0x5, 0xa8, 0xfd, 0xac, 0xf3, 0x61, 0xb9, 0x4a, 0x76, 0xf1, 0x0, 0x82, 0xd6, 0x8, 0xec, 0xbe, 0xeb, 0x71, 0x1d, 0x6e, 0xcd, 0x4b, 0xe9, 0xd2, 0x80, 0x6b, 0x63, 0xfb, 0x2c, 0xde, 0x5b, 0x23, 0x2e, 0xe8, 0xbb, 0x49, 0xba, 0xaf, 0xf0, 0xc5, 0x6b, 0x52, 0xcd, 0x22, 0x3f, 0x85, 0x9f, 0x9b, 0x5b, 0xcd, 0xcf, 0x5f, 0xe5, 0x61, 0xd9, 0x9e, 0x2f, 0xd1, 0x8d, 0x23, 0x85, 0x15, 0x48, 0xd2, 0x80, 0xcb, 0x9, 0x6e, 0xcd, 0xe5, 0xd5, 0xec, 0x2b, 0x47, 0x90, 0x20, 0xf1, 0xcc, 0x6f, 0xa1, 0xe6, 0x5e, 0x98, 0x83, 0x7b, 0xde, 0x92, 0x44, 0xf0, 0x3c, 0xd7, 0xff, 0x15, 0x1c, 0xb3, 0x1, 0xb5, 0x74, 0x70, 0xa5, 0x9d, 0x2b, 0xc1, 0x9e, 0x6a, 0x10, 0x4, 0x10, 0x57, 0xec, 0x43, 0x12, 0xf1, 0x42, 0x43, 0x5a, 0x48, 0xa3, 0x68, 0x51, 0xd, 0xc8, 0x92, 0x32, 0x2, 0x2b, 0x6e, 0x47, 0x71, 0xc2, 0x15, 0xc9, 0x3d, 0xa0, 0x7f, 0x35, 0xfc, 0xf3, 0x0, 0x3d, 0x4, 0xef, 0xf8, 0x75, 0x13, 0x5, 0xfa, 0xfe, 0xc6, 0x6, 0x20, 0x85, 0xa3, 0xb9, 0xb1, 0x9c, 0xe7, 0xf1, 0x19, 0x58, 0x51, 0x8, 0x5a, 0x23, 0xd3, 0xf1, 0x65, 0x71, 0x82, 0xc1, 0xe8, 0xbf, 0xb7, 0xc8, 0xc7, 0xfb, 0xd8, 0x8e, 0xb, 0xbb, 0x2b, 0x35, 0xc8, 0x9e, 0x46, 0xb6, 0x16, 0xbb, 0xab, 0xd1, 0xd, 0xb8, 0xc9, 0x1e, 0x13, 0xc7, 0xbd, 0x99, 0xa9, 0xcb, 0xa2, 0x82, 0x1a, 0xab, 0xbb, 0xf6, 0xb, 0x1a, 0xe1, 0x4, 0x6e, 0x2, 0xb7, 0xd1, 0x2, 0x54, 0xd4, 0x1d, 0x98, 0xc7, 0x3b, 0xb9, 0x9, 0x5d, 0x4d, 0x85, 0x24, 0xdd, 0x3e, 0xb2, 0x27, 0x5, 0x4d, 0x8d, 0x91, 0x58, 0x81, 0xa4, 0xaa, 0x4f, 0xc5, 0xc9, 0xaa, 0x5d, 0xe8, 0x87, 0xc6, 0xee, 0x2, 0x36, 0xef, 0x9d, 0x8d, 0x74, 0xe6, 0xe6, 0x7f, 0xa8, 0xd8, 0xcb, 0x57, 0xdc, 0x98, 0x44, 0x12, 0x1f, 0x13, 0x71, 0x2f, 0xcf, 0x91, 0x24, 0xeb, 0x2b, 0xf8, 0x2e, 0xda, 0x80, 0x92, 0x91, 0x7e, 0x94, 0xdb, 0x68, 0x85, 0xc3, 0xca, 0x9a, 0x4c, 0xc5, 0xb1, 0xd2, 0x87, 0x7b, 0x69, 0xce, 0xe7, 0x0, 0xcf, 0x12, 0x62, 0xa3, 0x7, 0x66, 0xa8, 0x7c, 0x8e, 0x13, 0x27, 0x6, 0xfc, 0x8a, 0xdf, 0x93, 0xa3, 0x64, 0x17, 0x2f, 0xfc, 0x42, 0x8b, 0x6, 0xc9, 0x1e, 0x28, 0x32, 0x6d, 0x99, 0x66, 0x43, 0x18, 0x40, 0x99, 0xc5, 0x17, 0x7d, 0xa, 0x17, 0xda, 0x54, 0x6a, 0xed, 0xa5, 0xdc, 0x88, 0x52, 0x49, 0xaa, 0x92, 0x6b, 0xa6, 0x3e, 0xb5, 0x63, 0xf4, 0xab, 0x44, 0xc1, 0x37, 0x32, 0x29, 0xd1, 0xc5, 0x5, 0x35, 0x58, 0xed, 0x49, 0x76, 0x35, 0xf1, 0x1a, 0xfc, 0x40, 0x4d, 0xe, 0x44, 0x37, 0xa7, 0x16, 0xdf, 0x1b, 0xc4, 0x3d, 0x54, 0xaa, 0x9e, 0x6f, 0x7, 0x6b, 0x62, 0x8, 0x7f, 0xee, 0x22, 0x5d, 0x1e, 0xbe, 0x2, 0x64, 0x75, 0x12, 0xe7, 0x16, 0x73, 0xdf, 0xbb, 0x9a, 0xcf, 0x63, 0xa3, 0xeb, 0x2e, 0x1b, 0x33, 0x6d, 0xe7, 0x92, 0xec, 0xe6, 0x71, 0xed, 0xc1, 0xd, 0xbf, 0x98, 0xe3, 0xa5, 0x24, 0xd5, 0x4a, 0xcb, 0xfa, 0x4b, 0x70, 0xd, 0xd6, 0xe3, 0xfa, 0x83, 0x22, 0xd5, 0x81, 0x8a, 0x5c, 0x27, 0x7a, 0x2d, 0x76, 0xa6, 0x47, 0x21, 0x13, 0xac, 0xa6, 0x72, 0xf5, 0x6f, 0xae, 0xc3, 0xa8, 0xa3, 0x92, 0xdf, 0x5, 0xd6, 0xdb, 0x20, 0x12, 0x5f, 0x3a, 0x8b, 0x1a, 0x8a, 0xc0, 0xe9, 0x94, 0xef, 0xf9, 0x5c, 0xe7, 0x90, 0xf8, 0xb0, 0x17, 0x7c, 0x93, 0x66, 0x3f, 0x10, 0xfe, 0xec, 0x62, 0xce, 0x3f, 0xf6, 0x82, 0x3d, 0x38, 0xff, 0x3b, 0x72, 0x4f, 0xc8, 0xd4, 0xbb, 0xf2, 0x1d, 0x15, 0xf5, 0x27, 0xa5, 0x16, 0x65, 0x5, 0x4a, 0x76, 0xf9, 0x8b, 0x47, 0xe8, 0xb2, 0xb9, 0x96, 0x1b, 0x52, 0xba, 0xc5, 0xde, 0x91, 0x72, 0x1c, 0x5f, 0x94, 0xd, 0xdc, 0x68, 0xd0, 0x6f, 0x6e, 0xbd, 0x6b, 0x71, 0x57, 0x90, 0x40, 0x5b, 0x91, 0xf0, 0xa, 0xea, 0xb8, 0x86, 0xd0, 0x9, 0xe6, 0x7f, 0xe2, 0xd4, 0x6, 0xd6, 0x85, 0x8c, 0xf0, 0x42, 0xc2, 0x4d, 0x3a, 0xcc, 0x72, 0x6d, 0xad, 0xd8, 0xeb, 0xf5, 0x14, 0xfe, 0x0, 0x9b, 0xea, 0x68, 0x5a, 0xd2, 0x83, 0xa8, 0xc1, 0x67, 0xe2, 0xae, 0xdc, 0x81, 0x72, 0x60, 0xca, 0x58, 0x69, 0x8a, 0x5, 0x3e, 0x87, 0x7f, 0xb7, 0x79, 0x4, 0x10, 0x7b, 0x6e, 0x9a, 0xb2, 0xfe, 0x6a, 0xf3, 0x7c, 0x57, 0x71, 0xed, 0xdd, 0x29, 0xf6, 0x8e, 0x44, 0x51, 0xc7, 0x6c, 0x7a, 0x70, 0x1e, 0x15, 0x27, 0x36, 0x7e, 0x94, 0x54, 0x9f, 0x99, 0xdd, 0x9a, 0xd2, 0x3b, 0xe5, 0x7d, 0xc7, 0x33, 0x28, 0xe7, 0x7e, 0xb0, 0xc6, 0xf2, 0x3c, 0xda, 0x51, 0xb1, 0x68, 0x50, 0xcb, 0xbd, 0x60, 0x3a, 0x9f, 0x3, 0xde, 0xdf, 0xa5, 0x41, 0x4e, 0x88, 0xd7, 0x42, 0xd1, 0x58, 0x5e, 0xf4, 0x31, 0x9f, 0xda, 0x1a, 0x88, 0xef, 0x12, 0x6e, 0x46, 0xd5, 0x3d, 0xd7, 0x4, 0x35, 0x31, 0x48, 0xd7, 0x80, 0xee, 0xb, 0x2f, 0xc, 0xe2, 0xa, 0x88, 0xa1, 0x8c, 0x35, 0xf2, 0xa3, 0x4f, 0x3f, 0x17, 0x41, 0xec, 0x5d, 0xa5, 0xaa, 0x3b, 0x33, 0x91, 0xa5, 0xf9, 0xae, 0x9f, 0xe1, 0x58, 0x1c, 0x81, 0x4d, 0x11, 0x6e, 0x27, 0x24, 0xaf, 0x1c, 0x60, 0xe4, 0xcf, 0xe2, 0xc4, 0xf6, 0x6a, 0x7a, 0x92, 0x7c, 0x61, 0xa, 0x51, 0x76, 0xb, 0xe8, 0x5e, 0x57, 0x90, 0x0, 0x9e, 0xa1, 0x7, 0x24, 0xee, 0x40, 0x98, 0x2, 0xa5, 0x15, 0x7b, 0xf3, 0xb9, 0x9c, 0x26, 0xde, 0x31, 0x4b, 0x1b, 0xf, 0x24, 0x2d, 0xb3, 0xce, 0x3e, 0xde, 0x13, 0xc8, 0xf3, 0xb, 0x7a, 0x5, 0x5e, 0x15, 0xef, 0xc4, 0x1a, 0xdf, 0xc9, 0x6e, 0x83, 0x54, 0x6d, 0xfb, 0x53, 0x2a, 0x8a, 0xb8, 0xe0, 0x43, 0xa, 0xb4, 0xb5, 0xf3, 0xb8, 0x19, 0x65, 0xbb, 0x7b, 0x3d, 0x5c, 0x53, 0x53, 0x48, 0x72, 0x6f, 0x4a, 0x30, 0x2e, 0x45, 0xac, 0xd9, 0x93, 0xa9, 0x29, 0x9e, 0x23, 0x1b, 0x5d, 0xb8, 0xd, 0x24, 0x3b, 0xf1, 0x3a, 0x5b, 0x46, 0xe8, 0xea, 0x3c, 0x5b, 0x6b, 0xf0, 0xc, 0x7c, 0x40, 0x41, 0x3c, 0xf, 0x9d, 0x6e, 0x8e, 0xa4, 0xe2, 0xd4, 0x36, 0x87, 0xf7, 0x5, 0x8b, 0xe1, 0x4b, 0xae, 0x3d, 0xa4, 0xb9, 0xe7, 0x63, 0xe3, 0xf0, 0x71, 0x94, 0x9b, 0xf9, 0x9e, 0x20, 0x81, 0xa8, 0xbb, 0x64, 0xb7, 0xe, 0x17, 0x7b, 0xc0, 0xc7, 0x46, 0x9e, 0x16, 0xa7, 0x20, 0x3e, 0xab, 0x65, 0x1d, 0x5, 0x34, 0x71, 0xfb, 0xa4, 0x30, 0x78, 0x5, 0x6f, 0x46, 0x11, 0x2f, 0x8c, 0xa1, 0x40, 0x43, 0xeb, 0xcb, 0x4d, 0x68, 0x1f, 0xf1, 0xbf, 0xc3, 0x42, 0x19, 0x37, 0xf9, 0x9, 0xb4, 0xdc, 0xf0, 0xe7, 0x34, 0xc9, 0xce, 0x81, 0x97, 0x50, 0xdc, 0xae, 0xe1, 0x86, 0x96, 0x4c, 0x8c, 0x81, 0x3b, 0x67, 0x59, 0x16, 0x7e, 0xf7, 0x53, 0xd4, 0x84, 0x1b, 0xf3, 0xdf, 0x20, 0xd8, 0x17, 0xf3, 0x78, 0xbd, 0xc1, 0x62, 0x7f, 0x90, 0x82, 0xf8, 0x4d, 0x17, 0x71, 0x12, 0x96, 0xb0, 0xd7, 0x20, 0xbe, 0xd3, 0x28, 0x40, 0xab, 0x7b, 0x3d, 0x15, 0x2a, 0x28, 0x79, 0xa3, 0x53, 0xd6, 0xa0, 0xc2, 0x79, 0x17, 0x86, 0x53, 0x60, 0xed, 0xe1, 0x34, 0x11, 0x94, 0x94, 0xa0, 0xc4, 0x67, 0x73, 0xf1, 0xd7, 0xab, 0xb7, 0x8e, 0x96, 0x25, 0xba, 0xec, 0x7c, 0xca, 0xbf, 0x2f, 0xcb, 0xd5, 0x17, 0x4f, 0x9c, 0x34, 0x68, 0x88, 0x3e, 0xfe, 0xfc, 0x44, 0x3d, 0x5a, 0x3f, 0xfb, 0x8b, 0x73, 0x8c, 0xe, 0x12, 0x4b, 0x5a, 0xd3, 0xc5, 0xd1, 0x9c, 0x1b, 0x11, 0x12, 0x59, 0x8a, 0x52, 0x88, 0xe4, 0x27, 0x8e, 0x63, 0x33, 0x41, 0xcc, 0x63, 0xd, 0xc7, 0x20, 0xf3, 0x68, 0xc1, 0x21, 0xb0, 0x3d, 0x93, 0xd7, 0x2a, 0x74, 0x9a, 0x15, 0x2e, 0x14, 0x72, 0x7d, 0x81, 0xfc, 0x76, 0x11, 0x27, 0x99, 0xa1, 0xd, 0xd7, 0x5d, 0x33, 0x71, 0xd2, 0xe3, 0x37, 0xe7, 0xda, 0x81, 0xe2, 0x90, 0xda, 0xe8, 0xbb, 0x84, 0x6b, 0x2d, 0xf9, 0xf7, 0x1f, 0xb9, 0xce, 0xf0, 0xe7, 0xf, 0x5c, 0x7f, 0xd3, 0x69, 0xc5, 0x2d, 0xe3, 0x9a, 0x55, 0x64, 0x6, 0xcc, 0x39, 0x92, 0x4b, 0xe0, 0x3e, 0xee, 0x44, 0x45, 0xb1, 0x15, 0xc7, 0x93, 0xe5, 0x9, 0x5b, 0xc8, 0xc6, 0xe, 0x27, 0x6b, 0x52, 0x3c, 0x17, 0x2b, 0xb9, 0x1f, 0x2c, 0xa3, 0x15, 0x8d, 0x78, 0x2b, 0xe2, 0xa0, 0x70, 0x13, 0xc3, 0x6d, 0x9c, 0xb5, 0x6, 0xf, 0x6b, 0xd6, 0xae, 0x93, 0xa1, 0x83, 0x6, 0xca, 0x3e, 0x7b, 0x54, 0x8d, 0xc2, 0xfc, 0xbf, 0x0, 0x3, 0x0, 0x73, 0x78, 0xf7, 0xf2, 0x7e, 0x74, 0x3a, 0x48, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; - - - - + (NSData *)parse_logo2x_png { - return [NSData dataWithBytes:parse_logo2x_png length:sizeof(parse_logo2x_png)]; - } - - const unsigned char parse_logo3x_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x2, 0x99, 0x0, 0x0, 0x0, 0xcc, 0x8, 0x6, 0x0, 0x0, 0x0, 0x38, 0x73, 0xb8, 0x3f, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x0, 0x0, 0x3, 0x23, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x35, 0x2d, 0x63, 0x30, 0x31, 0x34, 0x20, 0x37, 0x39, 0x2e, 0x31, 0x35, 0x31, 0x34, 0x38, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2f, 0x30, 0x33, 0x2f, 0x31, 0x33, 0x2d, 0x31, 0x32, 0x3a, 0x30, 0x39, 0x3a, 0x31, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x23, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x43, 0x20, 0x28, 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x29, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x41, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x42, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x38, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x34, 0x31, 0x30, 0x31, 0x39, 0x34, 0x30, 0x39, 0x34, 0x30, 0x30, 0x43, 0x31, 0x31, 0x45, 0x34, 0x41, 0x33, 0x35, 0x31, 0x39, 0x31, 0x30, 0x33, 0x32, 0x36, 0x42, 0x31, 0x39, 0x32, 0x31, 0x42, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, 0x72, 0x22, 0x3f, 0x3e, 0x66, 0x5f, 0x10, 0x71, 0x0, 0x0, 0x22, 0xe8, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0x9d, 0x4d, 0x72, 0x1b, 0xbd, 0x11, 0x86, 0x3b, 0x29, 0xef, 0xa3, 0xef, 0x4, 0xdf, 0xf8, 0x4, 0xa6, 0x4f, 0xa0, 0xd1, 0x9, 0x4c, 0xaf, 0x93, 0x2a, 0x53, 0xfb, 0xa4, 0x2c, 0xad, 0x92, 0x9d, 0xc8, 0x5d, 0x76, 0x92, 0x2b, 0x7, 0x10, 0x5d, 0x95, 0xbd, 0xe8, 0x13, 0x68, 0x74, 0x2, 0x53, 0x27, 0xf0, 0xf8, 0x4, 0x56, 0x6e, 0x10, 0x21, 0x2, 0x22, 0x98, 0xa6, 0x8, 0x60, 0x7e, 0x31, 0xc0, 0xf3, 0x54, 0x4d, 0x49, 0x32, 0x29, 0x99, 0x83, 0x1, 0xba, 0xdf, 0x6e, 0x0, 0x8d, 0x3f, 0xfc, 0xf9, 0xaf, 0x7f, 0x3f, 0x12, 0x91, 0x8f, 0x2, 0x7d, 0x70, 0xa7, 0xbf, 0x6e, 0x1f, 0xaf, 0x7, 0x9a, 0x3, 0x0, 0x0, 0x0, 0x52, 0xe0, 0xdf, 0xff, 0xfa, 0xa7, 0xf3, 0x3d, 0xaf, 0x1e, 0xaf, 0xeb, 0xc7, 0x6b, 0x4e, 0x73, 0xd, 0x42, 0xa5, 0x5, 0xe7, 0xbd, 0xfe, 0xba, 0xa5, 0x49, 0x0, 0x0, 0x0, 0x20, 0x45, 0x94, 0xc8, 0x3c, 0xa2, 0x19, 0x6, 0xa3, 0xd4, 0x97, 0x41, 0x65, 0x37, 0x37, 0xf2, 0x94, 0xf1, 0xdc, 0x8, 0xd9, 0x4e, 0x0, 0x0, 0x0, 0x48, 0x84, 0x3f, 0xd2, 0x4, 0xa3, 0xa2, 0x4, 0xfe, 0x42, 0x9e, 0xb2, 0xc9, 0x3f, 0x1e, 0xaf, 0x1b, 0xfd, 0x33, 0x0, 0x0, 0x0, 0x0, 0x22, 0x13, 0x3a, 0x63, 0x6e, 0x9, 0xce, 0xcb, 0xc7, 0xab, 0xa0, 0x49, 0x0, 0x0, 0x0, 0x0, 0x91, 0x9, 0x5d, 0xa1, 0x32, 0x9c, 0x67, 0x8f, 0xd7, 0x37, 0x2d, 0x3a, 0x11, 0x9b, 0x0, 0x0, 0x0, 0x80, 0xc8, 0x84, 0x4e, 0x59, 0x20, 0x36, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0x7d, 0x8b, 0x4d, 0x35, 0x8d, 0xce, 0x66, 0x2d, 0x0, 0x0, 0x0, 0x88, 0x9a, 0x57, 0x8e, 0xd7, 0xab, 0xc7, 0xeb, 0x84, 0x66, 0xa, 0xa6, 0xd4, 0x5f, 0x8b, 0xc7, 0xeb, 0xf7, 0xc7, 0x6b, 0xa6, 0xbf, 0x9f, 0x75, 0xf0, 0xb7, 0xcf, 0xb4, 0xe0, 0x3c, 0x7f, 0xbc, 0xd6, 0x34, 0x35, 0x0, 0x0, 0x0, 0x4c, 0x51, 0x64, 0x42, 0x33, 0xaa, 0x17, 0xfe, 0xfd, 0x48, 0xb, 0xd0, 0x63, 0xfd, 0xb5, 0xa9, 0xe8, 0x54, 0x7f, 0x47, 0x4d, 0x9f, 0x7f, 0x78, 0xbc, 0x4e, 0x1f, 0xaf, 0x9a, 0x26, 0x7, 0x0, 0x0, 0x80, 0x98, 0x60, 0xba, 0x7c, 0x58, 0x4c, 0x5d, 0x4c, 0x95, 0x85, 0x7c, 0xfb, 0x78, 0xbd, 0xd6, 0xdf, 0x37, 0x2d, 0xca, 0xae, 0x84, 0xea, 0x57, 0xa1, 0x98, 0x3e, 0x0, 0x0, 0x0, 0x20, 0x32, 0xc1, 0xa2, 0x7e, 0xbc, 0xae, 0xb4, 0xe0, 0x54, 0xd7, 0xba, 0xc1, 0xdf, 0x50, 0x59, 0x4d, 0x55, 0x5f, 0xf3, 0x92, 0xe6, 0x4, 0x0, 0x0, 0x0, 0x44, 0x26, 0xec, 0xa2, 0xb2, 0x99, 0x6a, 0xea, 0x5b, 0x65, 0x37, 0x97, 0x12, 0x7e, 0xfa, 0x8f, 0x5a, 0xab, 0xf9, 0x55, 0xd8, 0x14, 0x4, 0x0, 0x0, 0x0, 0x88, 0x4c, 0xd8, 0x43, 0xfd, 0x78, 0xad, 0xb4, 0xd8, 0xbc, 0xa, 0xfc, 0x5d, 0xb5, 0xc6, 0xf3, 0x9b, 0x74, 0xb3, 0xc1, 0x8, 0x0, 0x0, 0x0, 0x0, 0x91, 0x99, 0x20, 0x2a, 0x93, 0x79, 0xae, 0xc5, 0x66, 0x15, 0xf0, 0x7b, 0x2a, 0x93, 0x79, 0x2b, 0x3f, 0x9f, 0x91, 0xe, 0x0, 0x0, 0x0, 0x80, 0xc8, 0x84, 0x9f, 0xa8, 0xe5, 0xa9, 0x8c, 0xd4, 0x7b, 0xf1, 0x9f, 0x42, 0x37, 0x42, 0x73, 0x41, 0xf3, 0x1, 0x0, 0x0, 0x0, 0x22, 0x13, 0xe, 0xa1, 0x76, 0xa5, 0xbf, 0xd6, 0x5f, 0x7d, 0xb9, 0x46, 0x68, 0x2, 0x0, 0x0, 0x0, 0x22, 0x13, 0x5c, 0xa8, 0x4c, 0xa6, 0xca, 0x68, 0x9e, 0x23, 0x34, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0x5d, 0x63, 0xca, 0x1e, 0xf9, 0x4e, 0x9f, 0x23, 0x34, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0x5e, 0xa8, 0x92, 0x47, 0xaf, 0xc5, 0xbf, 0x90, 0xbb, 0xaa, 0xa3, 0xc9, 0xae, 0x73, 0x0, 0x0, 0x0, 0x40, 0x64, 0x82, 0x13, 0x95, 0xc9, 0x54, 0x9b, 0x82, 0x7c, 0xd6, 0x69, 0x9a, 0xcd, 0x40, 0x5, 0xcd, 0x6, 0x0, 0x0, 0x0, 0x88, 0x4c, 0xf0, 0x11, 0x9a, 0x6a, 0x9d, 0xe6, 0xda, 0x53, 0x68, 0xde, 0x8, 0x5, 0xdb, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0x9e, 0x9c, 0x7a, 0xa, 0x4d, 0x35, 0x65, 0x7e, 0x4d, 0x73, 0x1, 0x0, 0x0, 0x0, 0x22, 0x13, 0xba, 0x16, 0x9a, 0x73, 0x79, 0x3a, 0x86, 0x12, 0x0, 0x0, 0x0, 0x0, 0x91, 0x9, 0xde, 0x42, 0xb3, 0xf2, 0x78, 0x1f, 0x1b, 0x81, 0x0, 0x0, 0x0, 0x0, 0x91, 0x9, 0x41, 0xa8, 0x35, 0x9a, 0x3e, 0xbb, 0xce, 0xd5, 0xb4, 0x39, 0xeb, 0x33, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0x5e, 0x98, 0xcd, 0x40, 0xae, 0x3a, 0x9a, 0x2a, 0x93, 0x79, 0x41, 0x73, 0x1, 0x0, 0x0, 0x0, 0x22, 0x13, 0x7c, 0xa9, 0xb5, 0xd0, 0x74, 0x71, 0x26, 0x4c, 0x9b, 0x3, 0x0, 0x0, 0x0, 0x22, 0x13, 0x2, 0xa8, 0x1e, 0xaf, 0xa5, 0xc7, 0xfb, 0xd8, 0x6d, 0xe, 0x0, 0x0, 0x0, 0x88, 0x4c, 0x8, 0x62, 0x25, 0xee, 0x8d, 0x40, 0x2a, 0x93, 0xc9, 0x6e, 0x73, 0x0, 0x0, 0x0, 0x40, 0x64, 0x42, 0x10, 0x6a, 0xc7, 0xb9, 0x6b, 0x7d, 0xa6, 0x5a, 0x9b, 0xc9, 0x26, 0x20, 0x0, 0x0, 0x0, 0x40, 0x64, 0x82, 0x37, 0xb5, 0x3c, 0x65, 0x34, 0xf, 0xa1, 0x4, 0xe6, 0x47, 0x9a, 0xa, 0x0, 0x0, 0x0, 0x10, 0x99, 0x10, 0xc2, 0x95, 0xb8, 0xa7, 0xcd, 0x97, 0xc2, 0xd9, 0xe6, 0x0, 0x0, 0x0, 0x80, 0xc8, 0x84, 0x40, 0x4e, 0x3d, 0xde, 0x43, 0x49, 0x23, 0x0, 0x0, 0x0, 0x40, 0x64, 0x42, 0x10, 0xb5, 0x3c, 0x65, 0x34, 0xf, 0xb1, 0x10, 0xb2, 0x99, 0x0, 0x0, 0x0, 0x80, 0xc8, 0x84, 0x40, 0xd4, 0xda, 0x4c, 0xd7, 0x26, 0xa0, 0xf, 0x34, 0x13, 0x0, 0x0, 0x0, 0x20, 0x32, 0x21, 0x4, 0x25, 0x30, 0x5d, 0xd9, 0x4c, 0x55, 0xce, 0x88, 0x9d, 0xe6, 0x0, 0x0, 0x0, 0x80, 0xc8, 0x84, 0x20, 0x3e, 0xc9, 0xe1, 0x6c, 0xa6, 0x12, 0x98, 0x73, 0x9a, 0x9, 0x0, 0x0, 0x0, 0x10, 0x99, 0x10, 0x82, 0x4f, 0x36, 0x93, 0x72, 0x46, 0x0, 0x0, 0x0, 0x80, 0xc8, 0x84, 0x60, 0x3e, 0x39, 0x5e, 0x9f, 0x9, 0x67, 0x9a, 0x3, 0x0, 0x0, 0x0, 0x22, 0x13, 0x2, 0x51, 0xd9, 0xcc, 0xb5, 0xe3, 0x3d, 0x64, 0x33, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0xc1, 0xb8, 0xb2, 0x99, 0xac, 0xcb, 0x4, 0x0, 0x0, 0x0, 0x44, 0x26, 0x4, 0xb3, 0x95, 0xa7, 0xda, 0x99, 0x2f, 0xc1, 0x6, 0x20, 0x0, 0x0, 0x0, 0x40, 0x64, 0x42, 0x23, 0x5c, 0xd9, 0xcc, 0x63, 0x9a, 0x8, 0x0, 0x0, 0x0, 0x10, 0x99, 0x10, 0xca, 0xc6, 0xf1, 0x3a, 0x99, 0x4c, 0x0, 0x0, 0x0, 0x40, 0x64, 0x42, 0x30, 0xb5, 0x3c, 0x4d, 0x9b, 0xbf, 0x44, 0x21, 0x1c, 0x33, 0x9, 0x0, 0x0, 0x0, 0x88, 0x4c, 0x68, 0x0, 0xd9, 0x4c, 0x0, 0x0, 0x0, 0x40, 0x64, 0x42, 0xe7, 0x7c, 0x71, 0xbc, 0xce, 0xba, 0x4c, 0x0, 0x0, 0x0, 0x40, 0x64, 0x42, 0x30, 0x6a, 0xba, 0xfc, 0xd0, 0x31, 0x93, 0x14, 0x65, 0x7, 0x0, 0x0, 0x0, 0x44, 0x26, 0x34, 0x16, 0x9a, 0x2f, 0x51, 0x8, 0xeb, 0x32, 0x1, 0x0, 0x0, 0x0, 0x91, 0x9, 0xd, 0xa8, 0x1c, 0xaf, 0x23, 0x32, 0x1, 0x0, 0x0, 0xc0, 0x9b, 0x57, 0x34, 0x1, 0x68, 0xee, 0x1c, 0xaf, 0x1f, 0x7b, 0x8, 0x51, 0x78, 0x42, 0x15, 0xb1, 0xf7, 0x5d, 0x62, 0x50, 0xcb, 0xe1, 0x82, 0xf8, 0x0, 0xd0, 0x9e, 0xa2, 0x41, 0xa0, 0xec, 0x5a, 0x46, 0x4, 0xf4, 0x23, 0x6c, 0x3b, 0x22, 0x13, 0x2, 0xc, 0xaa, 0x6b, 0x70, 0xc1, 0xaf, 0x42, 0xf2, 0xd8, 0x32, 0x3c, 0x33, 0xfd, 0xef, 0x4d, 0xa9, 0xb4, 0x53, 0x53, 0xcf, 0xe2, 0x5e, 0xdc, 0xe5, 0xa5, 0x0, 0xe0, 0x89, 0x99, 0x1e, 0x83, 0x6f, 0xac, 0xf1, 0x18, 0x12, 0xec, 0xf9, 0xa, 0x4e, 0xf3, 0xf5, 0xce, 0xfa, 0x19, 0xd2, 0xed, 0x4b, 0xc6, 0xa6, 0x97, 0x2d, 0xff, 0x66, 0x65, 0x7d, 0xfd, 0xae, 0x6d, 0x7b, 0x85, 0xc8, 0x84, 0x9c, 0x70, 0x45, 0xec, 0xb9, 0x8b, 0xcc, 0x42, 0x1b, 0x9a, 0x63, 0xfd, 0xb5, 0x8f, 0xf6, 0x30, 0x86, 0x6c, 0xbe, 0xc7, 0x40, 0x55, 0xda, 0xb1, 0x55, 0x74, 0xd5, 0x5e, 0x32, 0x11, 0x29, 0x67, 0xad, 0x8c, 0xe0, 0x4a, 0x45, 0x10, 0x1d, 0x59, 0x63, 0x71, 0xd6, 0x81, 0x0, 0xf0, 0x15, 0x1e, 0xf2, 0xc2, 0xff, 0x55, 0x59, 0x81, 0x61, 0x25, 0x64, 0xaf, 0xa6, 0x86, 0x6d, 0xd7, 0xcb, 0x1e, 0xff, 0x8f, 0x7d, 0xfd, 0xc7, 0xf4, 0x9d, 0x3b, 0x2b, 0xc9, 0x80, 0xc8, 0x84, 0x64, 0xa9, 0xe, 0xc, 0xb2, 0x1c, 0x77, 0x98, 0x2b, 0xb1, 0xf7, 0xae, 0x47, 0x51, 0x19, 0x62, 0xa0, 0x4a, 0x2b, 0x18, 0x50, 0x75, 0x4d, 0xbf, 0x88, 0xbb, 0xbe, 0x29, 0xfc, 0xda, 0x87, 0x6f, 0x65, 0x7f, 0xb6, 0x59, 0x19, 0xfa, 0x93, 0x9, 0x19, 0x79, 0x3b, 0xdb, 0xb2, 0x9b, 0xb1, 0x7b, 0x69, 0xc, 0x9f, 0x3e, 0x5e, 0xeb, 0x9, 0xb, 0x1, 0x33, 0x16, 0x67, 0x11, 0x7e, 0x36, 0xbb, 0xcd, 0x6b, 0x6d, 0x4b, 0x19, 0xa3, 0xf1, 0x6, 0x5d, 0x73, 0x2d, 0x2c, 0xe7, 0x91, 0xf4, 0x9d, 0x33, 0xcb, 0xe, 0x19, 0xfb, 0x9e, 0x44, 0x50, 0x88, 0xc8, 0x4, 0x9b, 0x7, 0x47, 0xf6, 0x20, 0x27, 0x61, 0x39, 0x8f, 0xf4, 0x9e, 0xd5, 0x67, 0x5a, 0xe8, 0xcb, 0x8, 0xce, 0xcf, 0x42, 0x86, 0xd3, 0x87, 0x77, 0x7, 0x9e, 0xe9, 0x4c, 0x5f, 0x55, 0xa4, 0xcf, 0xbc, 0x94, 0xf6, 0x99, 0xbb, 0xf, 0x13, 0x13, 0x99, 0xea, 0x5e, 0x3f, 0x46, 0x3c, 0x16, 0xf, 0x89, 0x18, 0x33, 0x46, 0xc5, 0x12, 0xd, 0x6b, 0x86, 0xe0, 0xa8, 0x63, 0x68, 0xae, 0xfb, 0xd3, 0x2c, 0xf2, 0x3e, 0xaf, 0xae, 0xa5, 0xe, 0x56, 0x54, 0xdf, 0xf9, 0x24, 0x13, 0xce, 0x8e, 0xb3, 0xbb, 0x1c, 0x6c, 0xb6, 0x1e, 0x3, 0x35, 0x45, 0xd4, 0xa0, 0xbe, 0x7e, 0xbc, 0x7e, 0x3c, 0x5e, 0x37, 0xda, 0x39, 0x4c, 0xe1, 0x5e, 0x8d, 0xe0, 0x54, 0xd9, 0xb9, 0xaf, 0x96, 0x53, 0x83, 0x34, 0x9c, 0xe2, 0x42, 0xf7, 0x47, 0xd3, 0x2f, 0xcf, 0x64, 0x98, 0xa9, 0xe1, 0xb1, 0xef, 0x5b, 0xdd, 0xe7, 0x37, 0xab, 0x4f, 0x4f, 0xdd, 0xee, 0xcc, 0x2d, 0xfb, 0x72, 0x2d, 0xd4, 0x1d, 0x1e, 0x92, 0x72, 0xc2, 0x6d, 0x5f, 0x58, 0x63, 0xe1, 0x76, 0xaa, 0xf6, 0x1d, 0x91, 0x9, 0xa1, 0x62, 0x2c, 0x35, 0x27, 0xfe, 0x35, 0x11, 0x67, 0x66, 0x84, 0xf2, 0x37, 0xc4, 0xe6, 0xe4, 0x5, 0xc9, 0x8d, 0xe5, 0x14, 0x73, 0x39, 0xd2, 0xb5, 0xb0, 0xfa, 0xef, 0xa5, 0xa4, 0xb9, 0x6, 0xdc, 0xb6, 0x39, 0xb7, 0x8c, 0xd3, 0x5e, 0x49, 0xad, 0x9d, 0x6d, 0xb1, 0x7c, 0x31, 0x25, 0x5f, 0x85, 0xc8, 0x4, 0x9b, 0xff, 0x64, 0xe2, 0xcc, 0x2e, 0xb5, 0x33, 0x4b, 0x31, 0xab, 0x60, 0x3b, 0x6b, 0xce, 0x9c, 0x9f, 0x8e, 0xf8, 0xb8, 0xd0, 0xcf, 0xec, 0x26, 0xb3, 0xe7, 0x76, 0xb4, 0x13, 0x1c, 0xe5, 0xb2, 0x2c, 0xa7, 0x24, 0x28, 0xec, 0x4d, 0x5c, 0xa6, 0x6a, 0xdb, 0xcd, 0x78, 0x59, 0x5a, 0x41, 0x68, 0xf4, 0xc1, 0x18, 0x6b, 0x32, 0xc1, 0x26, 0xe5, 0x72, 0x1c, 0x66, 0x7d, 0xd7, 0xa2, 0xe7, 0xf6, 0x53, 0xeb, 0x24, 0x2b, 0x4b, 0xb4, 0xbf, 0xd4, 0xa6, 0xc7, 0x3b, 0xe, 0xa7, 0xcb, 0x72, 0x2b, 0x46, 0x6c, 0xde, 0xe8, 0xcf, 0xa2, 0x36, 0x7c, 0xd4, 0x74, 0xef, 0x28, 0x1d, 0x86, 0xea, 0x93, 0x67, 0x19, 0x89, 0x2b, 0x9b, 0x8b, 0x1e, 0xef, 0xdd, 0x8c, 0xc5, 0x7a, 0xa7, 0xef, 0xfb, 0xd4, 0x3, 0xb6, 0x6d, 0xc6, 0x91, 0xf4, 0x7b, 0xe2, 0x99, 0x9, 0xa, 0x55, 0x3f, 0x38, 0x17, 0xd6, 0x56, 0xb7, 0x11, 0x97, 0x17, 0x3d, 0x3e, 0xa7, 0x4a, 0x7e, 0x2e, 0x59, 0x75, 0xc8, 0xb6, 0xab, 0x3e, 0xf3, 0xc6, 0xfa, 0x7e, 0xd6, 0x83, 0x7d, 0x37, 0xf7, 0xac, 0xae, 0xab, 0xc7, 0x6b, 0x25, 0x91, 0x6e, 0x5a, 0x44, 0x64, 0x42, 0xe, 0x19, 0x83, 0xb, 0xe9, 0x7e, 0x2d, 0xdb, 0x56, 0x1b, 0x9e, 0x7b, 0xfd, 0x7d, 0xa8, 0x40, 0xb7, 0x9d, 0xc9, 0x6a, 0xc7, 0xb1, 0x15, 0xf2, 0x5c, 0x52, 0x63, 0xd6, 0xc1, 0xfd, 0x7f, 0xd3, 0xd1, 0xef, 0x8a, 0xee, 0x80, 0xb8, 0x8c, 0x64, 0x4c, 0x76, 0x95, 0x85, 0xa9, 0xad, 0xf1, 0x77, 0x27, 0xed, 0xb, 0x60, 0x57, 0xe, 0x41, 0x68, 0xc6, 0xe6, 0xcc, 0x1a, 0xab, 0x5d, 0x5, 0xc1, 0x6a, 0x6a, 0x77, 0xa3, 0xc5, 0x26, 0x41, 0xe1, 0x38, 0xf6, 0xdd, 0x24, 0x9, 0x4c, 0x7f, 0x6a, 0x5a, 0xda, 0x6c, 0x73, 0xe0, 0x39, 0x17, 0x5a, 0x84, 0x96, 0x1d, 0x7d, 0xee, 0xb3, 0x1d, 0xb1, 0x89, 0xc8, 0x4, 0x98, 0xa0, 0xf1, 0xa9, 0xb5, 0xe1, 0xe8, 0xbb, 0x9e, 0x99, 0x71, 0x98, 0x1b, 0x4b, 0x90, 0xd8, 0xe5, 0x36, 0x9a, 0x8a, 0x92, 0xa5, 0x6e, 0xb, 0xb2, 0x9a, 0xe3, 0xa2, 0x9c, 0xc1, 0xe5, 0x40, 0xe2, 0xb2, 0xda, 0xe9, 0x57, 0xf7, 0x11, 0xdc, 0xff, 0xa5, 0x3c, 0x97, 0x6b, 0x69, 0x23, 0x2, 0xbe, 0xc8, 0xf0, 0x35, 0x29, 0x8d, 0x80, 0xad, 0x76, 0x2, 0x86, 0xb2, 0xc3, 0xa0, 0x70, 0xae, 0xff, 0xce, 0x4a, 0x8b, 0x6, 0x78, 0x39, 0x50, 0xbb, 0x94, 0x6e, 0x66, 0xa6, 0x6c, 0xbb, 0xde, 0xf7, 0x6c, 0x9e, 0x6d, 0xdf, 0x57, 0x96, 0xaf, 0x32, 0xf6, 0x7d, 0xd6, 0xa2, 0x3d, 0x96, 0xba, 0x3d, 0x4e, 0x25, 0xa2, 0x8c, 0x38, 0x22, 0x13, 0x52, 0xa3, 0xd0, 0xe2, 0x72, 0xd1, 0x91, 0x41, 0xf8, 0xac, 0xd, 0xc2, 0x58, 0xc2, 0x4c, 0x39, 0xd5, 0xb5, 0xbe, 0x4e, 0xf5, 0x7d, 0x7d, 0x68, 0x28, 0x9e, 0xd5, 0xef, 0xa8, 0xc5, 0xf0, 0xef, 0x85, 0x69, 0xb9, 0xa1, 0x99, 0x69, 0xa7, 0x58, 0x76, 0xfc, 0x77, 0x6b, 0xcb, 0x71, 0xc5, 0x7c, 0x4a, 0x94, 0x1a, 0x97, 0x37, 0xd, 0x9d, 0x68, 0xcc, 0xb5, 0x61, 0xcd, 0x67, 0xdb, 0x58, 0xf7, 0xa9, 0x9e, 0xb1, 0x29, 0x83, 0xd6, 0x46, 0x40, 0x1d, 0xeb, 0x31, 0xcf, 0xd1, 0x96, 0xbf, 0xa, 0xf1, 0xeb, 0x96, 0x81, 0x9a, 0xdd, 0x9f, 0xc6, 0x6e, 0xdf, 0x4a, 0x5f, 0x2b, 0x79, 0xae, 0xe1, 0xf9, 0xa1, 0xe1, 0x58, 0x51, 0xbf, 0x6f, 0x32, 0xe2, 0x51, 0xf4, 0x1d, 0x36, 0xfe, 0x40, 0x6a, 0x91, 0x6d, 0xdb, 0x85, 0xf4, 0xb5, 0xce, 0x20, 0xbc, 0x7e, 0xbc, 0xde, 0xea, 0xef, 0xeb, 0x88, 0xee, 0x53, 0x89, 0xcd, 0x13, 0xfd, 0xf9, 0xd6, 0xd, 0xdb, 0x49, 0x19, 0xa1, 0x33, 0xba, 0xcc, 0x60, 0x5c, 0x68, 0x71, 0xdf, 0x85, 0xc0, 0x34, 0xfd, 0x53, 0x5, 0xa, 0xbf, 0xe9, 0x7e, 0xf0, 0x5e, 0x3b, 0xa8, 0x4d, 0xa4, 0x2, 0x73, 0xa6, 0xef, 0x3f, 0xd4, 0x69, 0x6e, 0xb5, 0xa3, 0x7c, 0xad, 0xbf, 0x4e, 0xa1, 0xb0, 0x79, 0xad, 0xc7, 0xa5, 0x79, 0x3e, 0xa7, 0x2d, 0x9e, 0xc9, 0xbc, 0x61, 0xbb, 0xa5, 0x6c, 0xe3, 0x6f, 0xf4, 0x75, 0xd4, 0xf0, 0xd9, 0x2c, 0xad, 0x31, 0xb3, 0x8e, 0x50, 0xc0, 0x9b, 0xf1, 0xfd, 0x56, 0x5f, 0x4d, 0x3f, 0xe3, 0x5c, 0x22, 0xd9, 0xfc, 0x89, 0xc8, 0x84, 0xdd, 0x28, 0x68, 0x8a, 0x98, 0x5a, 0x62, 0x6d, 0x84, 0xd3, 0x46, 0x1b, 0x1e, 0x65, 0x80, 0xa6, 0xb0, 0x26, 0xaa, 0xd6, 0xe, 0xec, 0x37, 0x69, 0x36, 0xad, 0x76, 0xa9, 0xb3, 0x1, 0xd0, 0xbf, 0xb8, 0x5a, 0xb6, 0xfc, 0x3b, 0x5b, 0xdd, 0x27, 0x5f, 0x5b, 0xfd, 0x33, 0x86, 0xc, 0x8c, 0xf, 0xb, 0x79, 0xf9, 0x94, 0xa5, 0x97, 0xa8, 0x74, 0x20, 0xd5, 0xc6, 0xc9, 0xc6, 0x80, 0x99, 0x85, 0xb0, 0x5, 0x43, 0x13, 0x9b, 0x7c, 0x2b, 0xe9, 0xd7, 0x47, 0x75, 0x51, 0xb6, 0x10, 0x4d, 0x95, 0x15, 0xac, 0xac, 0x64, 0x3a, 0xcb, 0x85, 0x76, 0x83, 0xac, 0xd0, 0xcf, 0x6d, 0x44, 0x79, 0xdb, 0xac, 0x2f, 0x22, 0x13, 0x3a, 0xe3, 0xf7, 0x9, 0x1a, 0x9e, 0xaf, 0xd2, 0x7c, 0x8d, 0xdb, 0xc3, 0x4e, 0x64, 0x3b, 0xc5, 0x23, 0xe0, 0x1e, 0x2c, 0x1, 0x12, 0xfa, 0xf9, 0x17, 0x8, 0xcd, 0xde, 0xc5, 0xd5, 0xac, 0xc5, 0x73, 0x8d, 0x39, 0xa3, 0x1e, 0xd2, 0xbf, 0x7c, 0xc7, 0xa6, 0x39, 0xda, 0xf3, 0x44, 0xd2, 0x5b, 0xce, 0x61, 0xb, 0x86, 0x50, 0xb1, 0x69, 0x66, 0x1f, 0x16, 0x99, 0x8e, 0xa5, 0x8b, 0x6, 0x81, 0x8a, 0x1d, 0xac, 0x9c, 0xc8, 0xb4, 0x4f, 0x5b, 0x32, 0xc1, 0x4a, 0x53, 0xb1, 0xd9, 0xd6, 0x16, 0x21, 0x32, 0x61, 0xd0, 0xce, 0x1e, 0x3, 0xa6, 0xb6, 0x5e, 0xd3, 0x81, 0x53, 0x5b, 0xc2, 0x6c, 0x4a, 0x91, 0xad, 0xeb, 0x9e, 0xde, 0xeb, 0x2b, 0xe4, 0x7e, 0x10, 0x9a, 0xdd, 0x73, 0xdd, 0x22, 0x7b, 0x60, 0xc4, 0xc8, 0x6f, 0x32, 0xed, 0x5d, 0xc6, 0x21, 0xfd, 0xca, 0x4, 0x4a, 0x6f, 0x25, 0xfd, 0xb5, 0xc2, 0x75, 0xb, 0xb1, 0x79, 0x9d, 0x99, 0xd0, 0x34, 0x99, 0xb8, 0x65, 0x83, 0x36, 0x4e, 0x35, 0x58, 0x31, 0x62, 0xf3, 0x3c, 0xd0, 0x1f, 0xcf, 0xc6, 0xa, 0x54, 0x10, 0x99, 0xb0, 0x3b, 0xa8, 0x5d, 0xe, 0x70, 0x6c, 0xcc, 0xd4, 0x78, 0x93, 0xc1, 0x62, 0x1b, 0xf8, 0x2b, 0x49, 0x73, 0x41, 0xfd, 0x46, 0x3b, 0xeb, 0x90, 0xac, 0x26, 0x42, 0xb3, 0xbb, 0xf1, 0xd3, 0xf4, 0x78, 0xcf, 0x4a, 0x7e, 0x9e, 0x22, 0x9e, 0x32, 0xb3, 0x80, 0xfe, 0xb4, 0x95, 0xe7, 0x4c, 0x6d, 0x4e, 0x18, 0x5b, 0x74, 0x12, 0x68, 0x57, 0x55, 0xbb, 0x96, 0x19, 0xb4, 0x4f, 0xa1, 0x45, 0x51, 0xc8, 0xf4, 0xb8, 0x3d, 0xab, 0x93, 0x7a, 0xb0, 0x72, 0x65, 0xf9, 0xb1, 0x10, 0xfb, 0xa4, 0xfa, 0xcf, 0x25, 0x22, 0x13, 0xc6, 0x74, 0xe, 0xb1, 0x1b, 0x9d, 0x26, 0x53, 0xe3, 0x6d, 0xb2, 0x7, 0x53, 0x44, 0x19, 0xdb, 0xf7, 0xfa, 0x9e, 0x43, 0x84, 0xe6, 0x25, 0x43, 0xa0, 0xd5, 0xd8, 0x69, 0xb2, 0x49, 0xa3, 0x96, 0xb4, 0xb2, 0x2e, 0x66, 0x9c, 0xfa, 0x3a, 0xca, 0xb7, 0x92, 0x77, 0x49, 0xad, 0x4a, 0xb7, 0xc1, 0x32, 0xe0, 0x77, 0x9a, 0xee, 0xd2, 0x4f, 0x79, 0x2c, 0x6d, 0x32, 0xc, 0x56, 0xec, 0x19, 0x80, 0x90, 0x40, 0xe5, 0x4c, 0x6, 0x5c, 0xa7, 0x89, 0xc8, 0x84, 0xdd, 0x48, 0xe7, 0x50, 0xc6, 0x61, 0x2c, 0xce, 0xa4, 0xd9, 0xee, 0x5c, 0xb3, 0xe6, 0x32, 0x85, 0xec, 0x50, 0x13, 0xd6, 0xfa, 0xde, 0x1f, 0x2, 0xda, 0x79, 0xc1, 0x30, 0x68, 0xe4, 0x14, 0x6f, 0x25, 0x6c, 0xe3, 0x5c, 0xaa, 0x59, 0x17, 0xdf, 0x9d, 0xbf, 0xa7, 0xfa, 0xfe, 0xe1, 0x89, 0x95, 0xe, 0x34, 0x7c, 0xc6, 0xea, 0x91, 0x8c, 0xbc, 0x99, 0xa3, 0x47, 0x4a, 0x9, 0x5b, 0x7f, 0x69, 0x2, 0xea, 0xd0, 0x65, 0x42, 0x29, 0xb1, 0x6d, 0x10, 0xa8, 0x2c, 0xa4, 0xd9, 0x3a, 0x57, 0x44, 0x26, 0xb4, 0x76, 0x96, 0x87, 0x6, 0xf3, 0x18, 0xa2, 0xb7, 0x69, 0xf6, 0x72, 0x2d, 0xcf, 0x6b, 0x2e, 0x73, 0xae, 0x33, 0xb7, 0xd, 0x8c, 0x74, 0x53, 0x3d, 0xf3, 0x37, 0x16, 0xa7, 0xa8, 0xd8, 0x48, 0xf8, 0x54, 0xd7, 0x14, 0xb8, 0xf4, 0xec, 0x3b, 0xa7, 0x99, 0x6, 0x7d, 0x2e, 0x2a, 0xdd, 0x2f, 0x7c, 0xc6, 0xaa, 0x6a, 0xe7, 0x8b, 0xc4, 0xee, 0x3f, 0x54, 0xf8, 0x54, 0x12, 0xbe, 0x34, 0x28, 0xf5, 0x40, 0x25, 0x64, 0x66, 0x60, 0x36, 0x84, 0xd0, 0x44, 0x64, 0x82, 0x8f, 0xc0, 0x14, 0x19, 0x27, 0x93, 0xb9, 0x90, 0xf0, 0xec, 0xa5, 0x31, 0x3c, 0x14, 0x31, 0x7e, 0x46, 0x19, 0x9d, 0x90, 0xb5, 0x5f, 0x4d, 0xeb, 0xd0, 0xe5, 0x46, 0xa8, 0x53, 0xb4, 0xb3, 0x2e, 0xa9, 0xf5, 0x4d, 0x35, 0x4e, 0x7d, 0x4a, 0x88, 0x21, 0x30, 0xdd, 0x7d, 0xc4, 0x77, 0xac, 0x9e, 0x49, 0x3a, 0xeb, 0x33, 0x17, 0x12, 0xb6, 0x2e, 0xfc, 0x4a, 0xb7, 0x53, 0x4d, 0x97, 0xd9, 0x9b, 0x54, 0xf0, 0x1d, 0x63, 0xbd, 0xb, 0x4d, 0x44, 0x26, 0x18, 0xa, 0xc7, 0xeb, 0xdf, 0x47, 0x32, 0xb8, 0x21, 0xef, 0x6d, 0xb2, 0x90, 0x1e, 0xe7, 0xb5, 0xbf, 0x2f, 0xb0, 0x11, 0xe8, 0x30, 0xf3, 0xc0, 0x36, 0x52, 0xc1, 0x4f, 0x93, 0x32, 0x53, 0x53, 0xc1, 0x67, 0x3d, 0x2f, 0x2, 0xb3, 0xfb, 0xb1, 0x9a, 0xc2, 0x38, 0xd, 0x11, 0x98, 0x26, 0x50, 0x63, 0xa9, 0x85, 0xdb, 0x17, 0xfa, 0xb6, 0x51, 0xaf, 0x42, 0x13, 0x91, 0x9, 0x86, 0x37, 0x1e, 0x11, 0xd2, 0xd0, 0xac, 0x3d, 0x9d, 0xf2, 0x5a, 0xf2, 0xd9, 0xd4, 0x33, 0x94, 0xf3, 0x9a, 0x4b, 0x4, 0xa7, 0x45, 0x44, 0x4a, 0xc8, 0xee, 0x69, 0xc5, 0x52, 0xfc, 0xd7, 0xdb, 0x4d, 0x91, 0x33, 0x71, 0xcf, 0x84, 0x5c, 0x31, 0x3e, 0x7b, 0x19, 0xab, 0x85, 0x4c, 0x7b, 0xd6, 0x21, 0x64, 0x2c, 0x99, 0x36, 0x61, 0x7a, 0xdc, 0xf, 0x73, 0x32, 0xd8, 0x83, 0xe7, 0x73, 0xe8, 0x45, 0x68, 0x22, 0x32, 0xc1, 0x50, 0x46, 0x28, 0x32, 0x45, 0xe, 0x17, 0x9f, 0xad, 0xb5, 0xd1, 0x61, 0x6a, 0x3c, 0x3c, 0xca, 0xf5, 0x69, 0xaf, 0x54, 0x37, 0x17, 0xb4, 0x75, 0x8a, 0xbe, 0xc6, 0xd8, 0x64, 0x5d, 0x56, 0x9, 0xb7, 0x87, 0x6a, 0x7, 0xd7, 0xda, 0x40, 0x73, 0x62, 0x11, 0x74, 0x3f, 0x56, 0x97, 0x13, 0xb6, 0x7d, 0x66, 0x2c, 0xf9, 0xb0, 0x15, 0xff, 0xf5, 0xaa, 0xf0, 0xcc, 0x26, 0x20, 0xc0, 0xed, 0x45, 0x68, 0x22, 0x32, 0xc1, 0x47, 0x64, 0xd6, 0x23, 0x1a, 0x32, 0xe3, 0xa8, 0xf7, 0x45, 0x69, 0x39, 0x14, 0x6f, 0xee, 0x83, 0xed, 0xb, 0x6d, 0xba, 0x4f, 0x40, 0x50, 0xd6, 0xe8, 0x99, 0x22, 0x50, 0x60, 0xe6, 0x90, 0x75, 0xf9, 0xe8, 0xd1, 0x1e, 0xa7, 0x74, 0x9d, 0x56, 0x63, 0xf5, 0x7c, 0x4f, 0xdf, 0x32, 0x75, 0x12, 0x57, 0x19, 0x8c, 0xa5, 0xad, 0xa4, 0x3d, 0x13, 0x30, 0x44, 0x1f, 0xf2, 0x5d, 0xbf, 0x1a, 0x22, 0xfc, 0x11, 0x99, 0x10, 0x14, 0x51, 0xba, 0x3a, 0x69, 0x2c, 0x86, 0xd6, 0x5e, 0x93, 0x83, 0xd1, 0x69, 0x8e, 0x12, 0xe7, 0x4b, 0x8f, 0xf7, 0x2d, 0x84, 0x73, 0x93, 0x8d, 0xe0, 0xf6, 0xdd, 0x10, 0x95, 0x53, 0xd6, 0x65, 0xe1, 0x78, 0x7d, 0x29, 0x64, 0x9f, 0xda, 0xb2, 0xd6, 0xe3, 0xb5, 0x96, 0xe7, 0x63, 0x70, 0xa7, 0x7c, 0x1a, 0x54, 0xe8, 0x58, 0x42, 0x60, 0x76, 0xe3, 0x43, 0x7d, 0xab, 0x8c, 0x84, 0x2e, 0x7, 0x3a, 0xc8, 0x2b, 0xda, 0x1e, 0x1e, 0x79, 0xe7, 0x78, 0xfd, 0x2e, 0x82, 0xcf, 0x78, 0x65, 0x19, 0x5c, 0xc, 0x4e, 0x37, 0xac, 0xb4, 0x80, 0x74, 0x89, 0xc8, 0xb, 0x21, 0x63, 0xec, 0x5b, 0xda, 0x29, 0x27, 0xa7, 0xa8, 0x4, 0x66, 0x71, 0xe0, 0x75, 0xd5, 0x6, 0x9f, 0x18, 0x66, 0x9d, 0x90, 0x52, 0x45, 0x82, 0x4b, 0xc6, 0xd2, 0x28, 0x98, 0xd9, 0x95, 0xaf, 0xe2, 0xde, 0xe8, 0xab, 0xc6, 0xf6, 0xbd, 0x74, 0x50, 0x66, 0x8d, 0x4c, 0x26, 0x28, 0x5c, 0x1b, 0x3c, 0x62, 0x11, 0x18, 0xa9, 0x1e, 0x5, 0x39, 0x26, 0x3e, 0xeb, 0x33, 0x7d, 0x84, 0x68, 0xca, 0x5c, 0x88, 0xdf, 0x26, 0xa8, 0xdc, 0x9c, 0xe2, 0x3b, 0xc6, 0xeb, 0xa0, 0x2, 0x21, 0x5, 0x7c, 0xf, 0x7c, 0x40, 0x60, 0xf6, 0xd7, 0x8f, 0x7c, 0x3, 0x96, 0xcb, 0x2e, 0xec, 0x3e, 0x22, 0x13, 0x8e, 0xc4, 0x5d, 0x84, 0x9d, 0xe9, 0xae, 0x74, 0xa9, 0xc5, 0x6f, 0x5d, 0xd7, 0x45, 0xa6, 0xed, 0xa3, 0x8c, 0xec, 0x12, 0xa7, 0xb8, 0xd7, 0x6e, 0xcc, 0x1d, 0x76, 0x83, 0x2c, 0x26, 0xec, 0x8e, 0x25, 0x9f, 0x35, 0xde, 0xf, 0x8, 0xcc, 0x5e, 0x9, 0xb1, 0x55, 0x6a, 0x59, 0x43, 0x81, 0xc8, 0x84, 0x36, 0xb8, 0x32, 0x34, 0x94, 0x8b, 0x48, 0x9f, 0x2b, 0x8f, 0x40, 0xa2, 0x94, 0xfc, 0xb2, 0x99, 0x66, 0xed, 0x18, 0x4e, 0x31, 0xdc, 0x6e, 0xac, 0x11, 0x9, 0xb0, 0x33, 0x96, 0xae, 0x19, 0x4b, 0x51, 0x9, 0x4d, 0xdf, 0xcd, 0x9f, 0x37, 0x6d, 0xfe, 0x23, 0x44, 0x26, 0x4c, 0x61, 0x3d, 0x26, 0xf4, 0x8f, 0x4f, 0x89, 0x99, 0x8f, 0x99, 0xb5, 0x89, 0xcf, 0xe6, 0x84, 0x5c, 0x9d, 0xa2, 0xcb, 0x6e, 0x7c, 0x66, 0x48, 0x81, 0x85, 0x12, 0x98, 0x85, 0xc7, 0xfb, 0x4e, 0x85, 0x99, 0xb3, 0xa1, 0xa8, 0xc4, 0xaf, 0xf2, 0x43, 0xab, 0x23, 0x4c, 0x11, 0x99, 0x79, 0xa3, 0x6, 0x3d, 0x99, 0x4c, 0x30, 0x6, 0xa7, 0x72, 0xbc, 0x67, 0x2e, 0x2d, 0xa7, 0x4e, 0x26, 0x84, 0xef, 0x91, 0x7d, 0xb9, 0x3a, 0xc5, 0x43, 0x6d, 0x53, 0x23, 0x14, 0x60, 0xc7, 0x6e, 0xf8, 0xac, 0x69, 0x5e, 0xe2, 0x6f, 0x6, 0x67, 0x2d, 0x7e, 0x87, 0x24, 0x2c, 0xa5, 0xe1, 0x4c, 0x16, 0x22, 0x93, 0xc1, 0xef, 0x12, 0x98, 0x4c, 0x5b, 0xe4, 0x83, 0xcf, 0xda, 0xcc, 0xf, 0x99, 0x4, 0x5f, 0x3e, 0x91, 0x7b, 0xae, 0x4e, 0x51, 0x65, 0x36, 0x8e, 0x8, 0x4c, 0xc1, 0x3, 0xdf, 0x69, 0xf2, 0x8d, 0xa4, 0x7d, 0x68, 0x41, 0xcc, 0x9c, 0x8b, 0xff, 0x11, 0xa6, 0xc1, 0x85, 0xda, 0x11, 0x99, 0x79, 0xe3, 0x9a, 0xfe, 0xfc, 0x42, 0x13, 0x65, 0x45, 0x25, 0xee, 0x6c, 0xe6, 0x22, 0x83, 0x76, 0xf0, 0x31, 0xa6, 0x39, 0x3b, 0xc5, 0xd2, 0xf1, 0x3a, 0x4b, 0x6c, 0xc0, 0x70, 0x29, 0x7e, 0x4b, 0x4e, 0x28, 0xd8, 0x3f, 0x1e, 0xbe, 0xa7, 0xc0, 0x15, 0xd2, 0x60, 0xc9, 0x14, 0x22, 0x33, 0x5f, 0x5c, 0x53, 0x9f, 0xaa, 0xc3, 0xad, 0x69, 0xa6, 0xec, 0x70, 0x9, 0xa7, 0x42, 0xd2, 0xde, 0x0, 0x34, 0xf7, 0xb8, 0xbf, 0xdc, 0x9d, 0xe2, 0xef, 0x1e, 0xc1, 0xa, 0x40, 0xe9, 0x19, 0x94, 0xa6, 0x54, 0x3, 0x74, 0xaa, 0x6c, 0x3d, 0x83, 0xe6, 0xa5, 0xf8, 0xd5, 0x38, 0x45, 0x64, 0x82, 0x33, 0x22, 0x61, 0xca, 0x2b, 0x4f, 0x94, 0x40, 0xa8, 0x1d, 0xef, 0x49, 0x75, 0xca, 0xdc, 0x77, 0x6a, 0x2f, 0x77, 0xa7, 0xe8, 0x2a, 0x79, 0x86, 0x60, 0x0, 0xf1, 0x1c, 0x4b, 0x57, 0x4, 0x25, 0xd1, 0x70, 0xe5, 0xe9, 0xf7, 0x83, 0x8e, 0x1a, 0x46, 0x64, 0xe6, 0x1b, 0x61, 0x96, 0x8e, 0xf7, 0x50, 0xe3, 0x2e, 0x5f, 0x3e, 0x79, 0xf4, 0x9f, 0x54, 0x3, 0x2f, 0xd7, 0xd4, 0x1e, 0x4e, 0xf1, 0xf0, 0xc, 0x8, 0x1b, 0x7e, 0x40, 0x71, 0x26, 0xee, 0x4d, 0x82, 0x2a, 0x98, 0x65, 0x1d, 0x66, 0x5c, 0xf8, 0x1e, 0xce, 0xb1, 0x40, 0x64, 0xc2, 0x21, 0x5c, 0x9b, 0x1a, 0x2a, 0x9c, 0x45, 0xd6, 0xb8, 0xa2, 0x59, 0xe5, 0x3c, 0x66, 0x9, 0xde, 0xb7, 0x4b, 0x3c, 0xe3, 0x14, 0x11, 0x99, 0xe0, 0xe6, 0x48, 0xfc, 0x36, 0xce, 0xf9, 0x8, 0x1a, 0x18, 0x96, 0x7, 0xf1, 0x3f, 0x9c, 0xc3, 0x6b, 0x13, 0x10, 0x22, 0x33, 0x3f, 0x4a, 0xf, 0x67, 0x4a, 0x8d, 0xbb, 0xbc, 0xa9, 0x3d, 0x84, 0xe6, 0xbb, 0xc, 0xdb, 0xe5, 0x1c, 0xa7, 0xe8, 0xb5, 0x89, 0x3, 0xf2, 0xc6, 0x67, 0x46, 0x40, 0xd9, 0x97, 0x8a, 0xa6, 0x8a, 0x12, 0x9f, 0xd9, 0x9a, 0x42, 0x3c, 0x37, 0x1, 0x21, 0x32, 0xf3, 0xc3, 0x15, 0x61, 0x2a, 0x81, 0xb1, 0xa6, 0x99, 0xb2, 0xc7, 0x55, 0x59, 0xa0, 0xcc, 0xac, 0x3d, 0x2a, 0x61, 0x9d, 0xb2, 0x62, 0x46, 0x13, 0x80, 0x23, 0x8, 0x39, 0xf3, 0x8, 0x44, 0xce, 0x69, 0xaa, 0xa8, 0xf1, 0xc9, 0x66, 0x9e, 0xfd, 0xe5, 0x6f, 0xff, 0x70, 0x66, 0x33, 0x11, 0x99, 0x79, 0xe1, 0xb3, 0x73, 0x96, 0xe9, 0x40, 0x10, 0x8f, 0x48, 0x36, 0x37, 0x91, 0x49, 0x89, 0x15, 0x3f, 0xbe, 0xd3, 0x4, 0x59, 0xe3, 0xbb, 0xae, 0xb9, 0xa6, 0xa9, 0xa2, 0xb7, 0xff, 0x6b, 0x8f, 0x80, 0xc2, 0x99, 0xcd, 0x44, 0x64, 0xe6, 0x15, 0x61, 0xba, 0x76, 0x85, 0xd5, 0x42, 0x16, 0x13, 0x9e, 0xfb, 0x82, 0xcf, 0x79, 0xe6, 0x39, 0xb0, 0xc6, 0x29, 0x6, 0xf5, 0x1b, 0xc8, 0xd7, 0xc7, 0xf8, 0x64, 0x31, 0xd9, 0x54, 0x3a, 0xd, 0x3a, 0xc9, 0x66, 0x22, 0x32, 0xf3, 0x8a, 0x30, 0x8b, 0xe, 0x3a, 0x15, 0xe4, 0x15, 0xcd, 0x1e, 0x22, 0x87, 0xa9, 0x53, 0xa6, 0xf6, 0x0, 0xfc, 0x7d, 0x8c, 0x4f, 0x16, 0x93, 0x75, 0xbb, 0xd3, 0x9, 0x18, 0x97, 0x1e, 0x81, 0xc5, 0x47, 0x44, 0x26, 0xcc, 0x3c, 0x3a, 0x8b, 0x12, 0x14, 0x6b, 0x9a, 0xa, 0x2c, 0x5c, 0x27, 0xb7, 0xbc, 0xc9, 0xa0, 0xd, 0x70, 0x8a, 0x61, 0x1c, 0xd3, 0x4, 0xd9, 0xb2, 0xf0, 0x8, 0xd8, 0xc8, 0x62, 0x4e, 0x8b, 0x4f, 0x1e, 0xf6, 0xef, 0x60, 0x36, 0x13, 0x91, 0x99, 0x3e, 0xbe, 0x5, 0xa6, 0xc9, 0x62, 0xc2, 0xbe, 0xc0, 0xc3, 0x15, 0xbc, 0xa4, 0xc, 0x4e, 0x11, 0xc0, 0x5f, 0x60, 0x16, 0x4, 0x6c, 0x49, 0xda, 0xc0, 0xb5, 0x87, 0xc6, 0x98, 0x23, 0x32, 0xf3, 0xe5, 0xc2, 0x43, 0xc, 0xac, 0x85, 0x72, 0x12, 0xb0, 0xdf, 0xc0, 0xd4, 0x19, 0x8b, 0xcc, 0xd, 0x4e, 0x11, 0xc0, 0xb, 0xd7, 0x29, 0x60, 0x4, 0x6c, 0xd3, 0xc5, 0xe7, 0xb9, 0x5d, 0x20, 0x32, 0xf3, 0x8d, 0x2e, 0x29, 0x27, 0x1, 0x6d, 0xa8, 0x1d, 0xaf, 0x17, 0x9, 0xdf, 0x3b, 0xd9, 0xfd, 0xfd, 0xf6, 0x42, 0x32, 0xe, 0x3c, 0x60, 0xbf, 0xd, 0x28, 0x1d, 0xef, 0x59, 0x13, 0xb0, 0x4d, 0xda, 0x7, 0xac, 0x5d, 0x7d, 0xe0, 0x2f, 0x7f, 0xfb, 0x47, 0x89, 0xc8, 0xcc, 0xb, 0x65, 0xec, 0x7d, 0xce, 0x18, 0xe5, 0xd4, 0x5, 0x38, 0x44, 0x95, 0xa9, 0xc8, 0xdc, 0x8, 0x3b, 0xa5, 0xf7, 0xb1, 0xcd, 0xb4, 0x3f, 0xc0, 0xcb, 0xf8, 0x14, 0xe5, 0x26, 0x8b, 0x39, 0x6d, 0x7c, 0x9e, 0xdf, 0x7, 0x44, 0x66, 0x3e, 0xa8, 0x35, 0x12, 0x37, 0xe2, 0x77, 0xea, 0x2, 0x5, 0xa6, 0xe1, 0x10, 0xae, 0xba, 0x87, 0xa9, 0x8a, 0xa, 0x9c, 0x62, 0xf3, 0xe0, 0x16, 0xf2, 0x62, 0x4e, 0xc0, 0x96, 0x45, 0x70, 0xe9, 0xa, 0x30, 0x17, 0xfb, 0x36, 0x0, 0x21, 0x32, 0xd3, 0x14, 0x98, 0xb7, 0x1e, 0xce, 0x5f, 0x65, 0x2f, 0x29, 0x30, 0xd, 0x2e, 0x5c, 0xce, 0xe1, 0xf7, 0x44, 0xef, 0xb9, 0xe2, 0xd1, 0xbf, 0x88, 0xab, 0x6d, 0x4a, 0x9a, 0x28, 0xab, 0xa0, 0xc2, 0xe5, 0x6b, 0x38, 0xa6, 0x38, 0x9f, 0xc0, 0x7b, 0x8e, 0xc8, 0xcc, 0x43, 0x60, 0xfa, 0x64, 0x13, 0xde, 0xb, 0xd3, 0xe4, 0xd0, 0x5e, 0x64, 0xe6, 0x6a, 0x4c, 0xe9, 0x13, 0x2f, 0xf3, 0x8e, 0x26, 0xca, 0x6, 0x9f, 0xd, 0x3f, 0xcc, 0x96, 0xa5, 0x81, 0xcf, 0x46, 0xc8, 0x77, 0x88, 0x4c, 0x4, 0xa6, 0x62, 0x29, 0x64, 0x6a, 0xa0, 0x1b, 0x41, 0x51, 0x26, 0x6a, 0x4c, 0xe1, 0x65, 0xee, 0x1d, 0xaf, 0xcf, 0x69, 0xa2, 0x6c, 0x70, 0x3d, 0xeb, 0x35, 0x4d, 0x94, 0xc, 0x3e, 0x1, 0xc3, 0x7c, 0x77, 0xca, 0x1c, 0x91, 0x99, 0x9f, 0xc0, 0x54, 0x83, 0x9e, 0x5d, 0xb3, 0x0, 0xfb, 0xa9, 0x84, 0xf5, 0x63, 0x3e, 0x6d, 0x74, 0x88, 0x2, 0xa1, 0x99, 0x5, 0x4c, 0x95, 0xe7, 0xc7, 0x97, 0xd0, 0xc0, 0x3, 0x91, 0x99, 0x97, 0xc0, 0x54, 0xb, 0x77, 0x29, 0x57, 0x4, 0xa1, 0x6c, 0x33, 0xba, 0x57, 0x9c, 0xa2, 0x5f, 0x7f, 0x70, 0x9, 0xf1, 0x8f, 0x34, 0x53, 0xf2, 0x94, 0x8e, 0xd7, 0xeb, 0xcc, 0x6c, 0x47, 0xe, 0x4, 0x4f, 0x99, 0x23, 0x32, 0xa7, 0x1f, 0x49, 0x7e, 0xb, 0x10, 0x98, 0x27, 0xc2, 0x3a, 0x4c, 0x8, 0x27, 0xa7, 0x3e, 0xc3, 0x54, 0x79, 0x37, 0xed, 0xa4, 0x4, 0xc8, 0x19, 0xcd, 0x94, 0x34, 0xef, 0x18, 0x4b, 0x8c, 0xfd, 0x3d, 0x90, 0xc9, 0x4c, 0x4, 0x65, 0xc0, 0xbf, 0x8a, 0xbb, 0x4c, 0x91, 0x11, 0x9, 0xd4, 0xc3, 0x4, 0x70, 0x7, 0x62, 0x8c, 0x11, 0x3f, 0x7c, 0x32, 0xbe, 0xea, 0x14, 0x90, 0x82, 0xa6, 0x4a, 0x96, 0xd2, 0xf1, 0xfa, 0x1d, 0x4d, 0x94, 0x24, 0xce, 0x29, 0x73, 0xbb, 0x30, 0x3b, 0x22, 0x73, 0x7a, 0x98, 0x1a, 0x98, 0x97, 0x9e, 0xef, 0x57, 0x4e, 0xf3, 0x44, 0x98, 0xb6, 0x80, 0x71, 0x1c, 0x4d, 0x6a, 0xc2, 0x9, 0x9e, 0x5, 0x79, 0xe5, 0x69, 0xab, 0x8e, 0x68, 0xae, 0x2c, 0xc7, 0x3d, 0x99, 0xcc, 0x34, 0xa9, 0x3c, 0xde, 0x73, 0x8c, 0xc8, 0x9c, 0x26, 0x2a, 0xd, 0xfd, 0x4d, 0xfc, 0x17, 0xd5, 0x23, 0x30, 0x1, 0xc2, 0x84, 0x13, 0xf8, 0xe3, 0xb3, 0x81, 0x50, 0x2d, 0xe5, 0xb9, 0x45, 0x68, 0x26, 0xc7, 0x31, 0x2, 0x33, 0x5b, 0x1e, 0x24, 0xa0, 0x56, 0x2e, 0x22, 0x73, 0x1a, 0x14, 0xda, 0x50, 0x87, 0x64, 0x5, 0x94, 0xc3, 0x7c, 0x8b, 0xe3, 0x4, 0x80, 0x9e, 0xa8, 0xc4, 0x2f, 0xab, 0x61, 0x84, 0x66, 0x41, 0x93, 0x25, 0x43, 0xe9, 0x78, 0x9d, 0xa9, 0xf2, 0xf4, 0xc7, 0x3e, 0x22, 0x33, 0x11, 0x71, 0x79, 0x2d, 0x4f, 0xd9, 0xcb, 0x32, 0xe0, 0xf7, 0xcc, 0x26, 0x9f, 0x9a, 0x26, 0x4, 0x80, 0x1e, 0xf1, 0x5d, 0xeb, 0xad, 0x84, 0xe6, 0x57, 0xe1, 0x34, 0xa0, 0x54, 0x70, 0x6d, 0x36, 0x25, 0xb9, 0x91, 0x36, 0xce, 0x20, 0xc2, 0xac, 0xcb, 0x44, 0x64, 0xc6, 0x2f, 0x2e, 0x17, 0x81, 0xbf, 0xbb, 0x96, 0xa7, 0xc, 0x26, 0x1b, 0x18, 0x0, 0xa0, 0x6f, 0x54, 0x20, 0xeb, 0x5b, 0x77, 0xd7, 0x94, 0x5b, 0xbb, 0x14, 0xa6, 0xcf, 0xa7, 0xee, 0x9f, 0x5c, 0xcf, 0xaf, 0xa2, 0x99, 0x92, 0xc6, 0xe7, 0xf9, 0xce, 0x10, 0x99, 0x71, 0x71, 0xa4, 0x5, 0xe5, 0x6d, 0x43, 0x71, 0x69, 0xb2, 0xa, 0x9c, 0x47, 0xe, 0x0, 0x43, 0x72, 0x25, 0x61, 0x27, 0xbb, 0x9c, 0x69, 0x1b, 0x47, 0x89, 0xa3, 0xe9, 0x8a, 0x4c, 0x4, 0x26, 0xb8, 0x9e, 0xf3, 0x1b, 0x44, 0x66, 0x1c, 0x83, 0x55, 0x89, 0x49, 0xb5, 0xd6, 0xf2, 0x87, 0x3c, 0x65, 0x2f, 0xcb, 0x6, 0x7f, 0xc7, 0xac, 0xbf, 0x5c, 0xd3, 0xa4, 0x0, 0x30, 0x2, 0xa7, 0x81, 0xe2, 0x42, 0x5, 0xd5, 0x97, 0x96, 0xd8, 0x24, 0xb3, 0x39, 0x1d, 0x5c, 0x9b, 0x7e, 0x98, 0x2a, 0xcf, 0x3, 0xd7, 0x73, 0x26, 0x93, 0x39, 0x30, 0x47, 0xf2, 0x5c, 0xa0, 0xd8, 0x4c, 0x85, 0x7f, 0xd3, 0xdf, 0xb7, 0x39, 0x82, 0x4d, 0x65, 0x11, 0xd8, 0x41, 0xe, 0x0, 0x63, 0xf3, 0x5e, 0xc2, 0xb3, 0x58, 0x85, 0x25, 0x36, 0xaf, 0xc5, 0xef, 0x60, 0x9, 0x18, 0x97, 0xc2, 0xf1, 0xfa, 0x3d, 0x4d, 0x94, 0x5, 0xae, 0xe7, 0xfc, 0xbf, 0xb1, 0xfc, 0xca, 0xe3, 0x4d, 0xb7, 0xb4, 0x65, 0x6b, 0x71, 0xd9, 0x87, 0xe1, 0xdc, 0xea, 0xec, 0x1, 0xe2, 0x12, 0x0, 0x62, 0xc0, 0x94, 0x4c, 0x53, 0x62, 0x71, 0xd1, 0xc0, 0x4e, 0x2e, 0xf4, 0xa5, 0x6c, 0x9a, 0xaa, 0x59, 0xaa, 0xca, 0xe0, 0xd4, 0x34, 0xeb, 0xe4, 0x44, 0x26, 0xcf, 0x2c, 0xf, 0x9c, 0xda, 0xe3, 0x2f, 0x7f, 0xfb, 0xc7, 0xec, 0x95, 0xc7, 0xc0, 0x2f, 0x69, 0xcb, 0xa8, 0x50, 0x3, 0x58, 0x2d, 0xb4, 0x5f, 0xd3, 0x14, 0xa3, 0x51, 0x5a, 0x41, 0xd8, 0x9f, 0x76, 0xfe, 0xed, 0x50, 0x80, 0xf1, 0x70, 0x60, 0x60, 0xd6, 0x3b, 0xc6, 0xf9, 0xce, 0xe3, 0x77, 0x0, 0x62, 0xe4, 0x54, 0xf7, 0xdf, 0xa6, 0x1b, 0x7c, 0x66, 0xfa, 0xba, 0x44, 0x70, 0x4e, 0x52, 0x64, 0x56, 0x34, 0x11, 0x22, 0xd3, 0xf8, 0xc0, 0x57, 0xb4, 0xd3, 0xa4, 0xb2, 0x4, 0x6a, 0x6a, 0xfc, 0x93, 0xb0, 0x73, 0x7c, 0x8, 0x8c, 0x40, 0x3c, 0xd6, 0x46, 0xb5, 0xe8, 0x20, 0xe0, 0x6a, 0x1b, 0xb4, 0x6d, 0x2d, 0xd1, 0xa9, 0xbe, 0xde, 0x8b, 0x5f, 0x61, 0x5c, 0x80, 0xa1, 0x59, 0xeb, 0x7e, 0x79, 0xdd, 0xb2, 0xcf, 0xef, 0xa, 0x4e, 0xf5, 0x37, 0xbf, 0xd0, 0xe7, 0xa3, 0x15, 0x99, 0x4, 0x2, 0xf9, 0x9, 0xcd, 0x43, 0x33, 0xb5, 0xc7, 0x88, 0xcc, 0xf8, 0x51, 0x83, 0x76, 0xa5, 0x23, 0x79, 0xc4, 0x65, 0x7f, 0xcc, 0xb4, 0x33, 0x3c, 0xd6, 0xdf, 0x17, 0x91, 0x7e, 0x46, 0x79, 0xc1, 0x69, 0xd7, 0xfa, 0x52, 0xce, 0xf7, 0xbb, 0xf5, 0x3d, 0xc0, 0x98, 0xb6, 0x4b, 0x4d, 0x9f, 0x2f, 0xa4, 0x9b, 0xb2, 0x45, 0x46, 0x70, 0x9a, 0x5d, 0xe9, 0xca, 0x26, 0xde, 0xe9, 0x7e, 0x4e, 0xb6, 0x7f, 0xb8, 0xe0, 0xdb, 0xf5, 0xcc, 0x21, 0x1f, 0x9c, 0x9a, 0x4, 0x91, 0x19, 0x2f, 0xca, 0x80, 0x9a, 0x69, 0x22, 0xe8, 0xc7, 0x58, 0xce, 0xb5, 0xa8, 0x9c, 0xcb, 0xf4, 0x77, 0xb7, 0x16, 0xb2, 0x3f, 0xdb, 0xba, 0xd5, 0xd7, 0x3d, 0xce, 0x18, 0x46, 0x62, 0xad, 0xed, 0xd8, 0x47, 0xe9, 0x76, 0x27, 0xf9, 0x5c, 0x9e, 0x37, 0x4d, 0x9a, 0x8c, 0x3e, 0xa2, 0x73, 0x98, 0x40, 0x17, 0x91, 0x9, 0xa2, 0xc7, 0x5a, 0x79, 0xa8, 0xbf, 0x20, 0x32, 0xe3, 0x13, 0x96, 0x5f, 0x84, 0xac, 0x65, 0xdf, 0xc2, 0xf2, 0x9d, 0xb4, 0xdb, 0xd1, 0x3f, 0x35, 0xa7, 0x30, 0xdb, 0x63, 0x18, 0x6c, 0x87, 0xc, 0xd0, 0x37, 0xca, 0x9e, 0xa9, 0x19, 0x19, 0xb5, 0xdc, 0x67, 0xa1, 0x5, 0x67, 0xd1, 0xc3, 0xd8, 0x46, 0x74, 0x8e, 0xb, 0x22, 0x13, 0x7e, 0x1a, 0x97, 0x88, 0xcc, 0xf1, 0xa3, 0x80, 0xad, 0x36, 0x84, 0x64, 0x2c, 0xfb, 0x43, 0x39, 0x9e, 0xf, 0x19, 0x9, 0x4b, 0x17, 0xe5, 0x4e, 0xf4, 0x59, 0xc9, 0xf3, 0x3a, 0x37, 0x9c, 0x31, 0xf4, 0x2d, 0x36, 0xaf, 0xf4, 0xd5, 0xe7, 0xb8, 0xdc, 0x15, 0x9d, 0x4, 0x57, 0xc3, 0xf0, 0x1f, 0x9a, 0x20, 0x2b, 0x9c, 0xc7, 0x4b, 0x22, 0x32, 0xfb, 0x8f, 0xea, 0x4c, 0x64, 0x67, 0x6f, 0xd6, 0xa8, 0x71, 0xe6, 0xfd, 0x47, 0x50, 0xf2, 0x94, 0x2d, 0x59, 0x48, 0x9c, 0xeb, 0x2b, 0x63, 0x15, 0x9d, 0xb5, 0x25, 0x3a, 0x9, 0x7c, 0xa0, 0x4f, 0x36, 0xfa, 0x2a, 0x2c, 0xc1, 0x39, 0x1b, 0xa8, 0x9f, 0x1b, 0x9b, 0x6c, 0x8b, 0x4e, 0x66, 0x8f, 0xdc, 0x50, 0x88, 0x1d, 0x82, 0xc6, 0x9c, 0x4b, 0x64, 0xaa, 0x81, 0x77, 0x42, 0x3b, 0xc1, 0x84, 0x50, 0xe, 0xeb, 0x42, 0xc6, 0x5b, 0x67, 0x59, 0x35, 0xf8, 0xbc, 0x45, 0x64, 0xed, 0xb7, 0xd0, 0xd7, 0x83, 0x25, 0x2, 0x0, 0xfa, 0xc, 0xc6, 0x4d, 0x76, 0x73, 0x28, 0xc1, 0x29, 0xf2, 0xeb, 0x46, 0xa2, 0x7a, 0x47, 0x74, 0xd6, 0x3c, 0x1a, 0x80, 0x76, 0x41, 0x5, 0x99, 0x4c, 0x48, 0x5, 0x73, 0x4c, 0xdd, 0xa2, 0x47, 0x47, 0x58, 0xcb, 0xaf, 0xe5, 0x83, 0xea, 0x8e, 0x9d, 0x91, 0x5d, 0x5b, 0x53, 0x7d, 0xff, 0xc6, 0x72, 0x88, 0x47, 0xd6, 0xd7, 0xa1, 0xda, 0x74, 0x41, 0xd7, 0x82, 0x91, 0x4, 0xa7, 0xbd, 0x86, 0xba, 0x1c, 0xa0, 0xdf, 0xdb, 0x1, 0x16, 0xa2, 0xb3, 0x19, 0x1c, 0xde, 0x2, 0x88, 0x4c, 0x48, 0xe, 0x95, 0xb9, 0xec, 0x72, 0xd7, 0xaa, 0x71, 0x2e, 0xf7, 0xf2, 0x3c, 0xa5, 0x36, 0x14, 0xbb, 0x75, 0x2f, 0x5f, 0x9a, 0xb2, 0x2e, 0x2d, 0x11, 0x6a, 0x4a, 0x2e, 0x71, 0x24, 0x1f, 0xa4, 0x84, 0x1a, 0xb, 0x6b, 0x79, 0x3e, 0x78, 0x42, 0xf5, 0xf9, 0x63, 0xf9, 0x75, 0xda, 0x1b, 0xd1, 0x9, 0x80, 0xc8, 0x4, 0xe8, 0x1c, 0xe5, 0x68, 0xae, 0xa5, 0xfd, 0x74, 0xae, 0xed, 0x3c, 0xa6, 0xb2, 0xb3, 0xbf, 0x7a, 0x41, 0x84, 0x96, 0xba, 0x3d, 0x4c, 0xbd, 0x4f, 0x84, 0x27, 0xa4, 0x42, 0xa5, 0xaf, 0x95, 0xfe, 0x79, 0x6e, 0x89, 0xce, 0x21, 0xfa, 0xf9, 0xae, 0xe8, 0xdc, 0xee, 0xd8, 0xd, 0x0, 0x40, 0x64, 0x42, 0x2, 0xa8, 0xc, 0x9e, 0xc9, 0x5e, 0xb6, 0x11, 0x96, 0xa6, 0x16, 0x69, 0x4a, 0x8b, 0xd5, 0x8d, 0xf8, 0x5c, 0xef, 0x8, 0xcf, 0x21, 0x33, 0x40, 0x0, 0x43, 0xb0, 0xb1, 0xc4, 0x9d, 0x7d, 0x42, 0xd7, 0x50, 0xfd, 0x7c, 0x5f, 0x71, 0x78, 0x53, 0xa5, 0xa1, 0xe6, 0xf1, 0x0, 0x20, 0x32, 0x61, 0x7a, 0x28, 0xa3, 0x7e, 0x23, 0xcd, 0xb2, 0x97, 0x66, 0xfa, 0x2d, 0x35, 0x61, 0xe9, 0x23, 0x3c, 0xd5, 0xb5, 0xb2, 0x44, 0xa7, 0x59, 0xe7, 0x46, 0xa6, 0x13, 0x52, 0xe0, 0xe1, 0x85, 0x7e, 0x6e, 0x32, 0xfa, 0xa5, 0xf4, 0xbf, 0xa6, 0xd3, 0x2e, 0x99, 0xc4, 0x99, 0xeb, 0x0, 0x88, 0x4c, 0x98, 0x18, 0x2a, 0x63, 0x70, 0xd9, 0xe0, 0xf7, 0x6a, 0xed, 0x78, 0xd6, 0x34, 0xe1, 0x4f, 0xa2, 0x53, 0xe4, 0x79, 0x37, 0xef, 0xb1, 0x50, 0x47, 0x14, 0xd2, 0xed, 0xe7, 0x62, 0x89, 0xcd, 0x37, 0xf2, 0xbc, 0xac, 0xa4, 0xcf, 0x60, 0xd8, 0x3e, 0x73, 0x1d, 0xc1, 0x9, 0x88, 0x4c, 0x80, 0x88, 0x51, 0x6b, 0x2f, 0x17, 0xd, 0x9c, 0xcc, 0x4a, 0x28, 0xbc, 0xec, 0x12, 0xe0, 0xfb, 0x76, 0xf3, 0x22, 0x38, 0x21, 0x35, 0xcc, 0x11, 0xab, 0x62, 0x5, 0x58, 0xb6, 0xe8, 0xec, 0x2b, 0xab, 0x6f, 0xb, 0xce, 0xca, 0x12, 0x9c, 0xd4, 0xe5, 0x4, 0x44, 0x26, 0xc0, 0xc8, 0x28, 0xe1, 0x73, 0x1b, 0xe8, 0x0, 0x94, 0x70, 0x3a, 0x45, 0x5c, 0x6, 0x63, 0xef, 0xe6, 0x35, 0xe5, 0x8b, 0x86, 0xa8, 0x57, 0x8, 0x30, 0x56, 0x80, 0xb5, 0xde, 0xb1, 0x35, 0x4a, 0x6c, 0xf6, 0xb9, 0x99, 0xa8, 0xd4, 0xd7, 0xa5, 0xfe, 0xbf, 0x3f, 0xc9, 0xb4, 0xb2, 0x9b, 0xf7, 0x1e, 0x42, 0x1e, 0xf1, 0xc, 0x86, 0xcf, 0x88, 0x4c, 0x48, 0x49, 0x60, 0x9a, 0xf3, 0x91, 0xaf, 0x68, 0xba, 0x4e, 0x4, 0xa7, 0xc9, 0x70, 0xde, 0xa, 0x1b, 0x86, 0x20, 0x8f, 0x3e, 0xbf, 0xbb, 0x99, 0xc8, 0x88, 0x4e, 0x95, 0xd9, 0x2f, 0x3a, 0xb6, 0x6d, 0x67, 0xfa, 0xda, 0x68, 0xb1, 0x59, 0x4d, 0xa4, 0x8d, 0xe, 0x71, 0x4e, 0x70, 0x9f, 0xf, 0xff, 0xfe, 0xd7, 0x3f, 0x9d, 0xef, 0xf9, 0x23, 0xcd, 0x4, 0x89, 0x8, 0x4c, 0x65, 0xd8, 0xde, 0x22, 0x30, 0x1, 0xa0, 0x63, 0xd1, 0xa9, 0x84, 0xd3, 0x6b, 0x7d, 0xa9, 0x19, 0x92, 0xb5, 0x74, 0x9b, 0xad, 0x9b, 0x6b, 0x5b, 0x97, 0x42, 0x30, 0xc7, 0xac, 0x7, 0x20, 0x32, 0x21, 0x29, 0x81, 0xf9, 0xa0, 0x9d, 0x80, 0x3a, 0xfe, 0xb4, 0xa6, 0xe9, 0x0, 0xa0, 0x27, 0x6a, 0x2d, 0x30, 0x95, 0xd0, 0xfc, 0x4d, 0x7, 0xb5, 0x4b, 0xe9, 0xae, 0x52, 0x45, 0xa9, 0xed, 0x5e, 0xd3, 0xea, 0x19, 0x43, 0xb5, 0xc1, 0x21, 0xfe, 0x44, 0x37, 0x1, 0x44, 0x26, 0xc4, 0xce, 0xb5, 0xa7, 0xc0, 0xac, 0xb5, 0xb8, 0x24, 0x7b, 0x9, 0x0, 0x43, 0xa3, 0xc4, 0xe5, 0x4a, 0x8b, 0xcd, 0xd7, 0x3a, 0xd8, 0xed, 0x42, 0x70, 0xaa, 0xcc, 0xe6, 0x37, 0x79, 0xaa, 0x5, 0x3c, 0x35, 0x91, 0x49, 0x26, 0x13, 0x10, 0x99, 0x10, 0x35, 0x97, 0xe2, 0xb7, 0xb3, 0x79, 0xab, 0x8d, 0xfb, 0x96, 0x26, 0x3, 0x80, 0x8, 0xc4, 0xd7, 0x55, 0xc7, 0x82, 0x73, 0xf9, 0x78, 0x7d, 0x8d, 0x50, 0xb8, 0x1d, 0x5a, 0x2a, 0x70, 0x44, 0x57, 0x0, 0x44, 0x26, 0xc4, 0x8a, 0x12, 0x97, 0x3e, 0xa7, 0xf8, 0xa8, 0x75, 0x52, 0x27, 0xc2, 0x2e, 0x46, 0x0, 0x88, 0x5f, 0x70, 0x5e, 0xb5, 0xb0, 0x55, 0x33, 0x2d, 0x34, 0xcf, 0x22, 0xba, 0xbf, 0x43, 0xe2, 0xb9, 0xe4, 0xf1, 0x3, 0x22, 0x13, 0x62, 0x44, 0x45, 0xc0, 0xd7, 0x9e, 0x2, 0xf3, 0x3d, 0x2, 0x13, 0x0, 0x26, 0x22, 0x38, 0x55, 0x56, 0x53, 0xad, 0xe1, 0x6c, 0x53, 0x56, 0xed, 0xd2, 0xd3, 0x3e, 0xe, 0x81, 0xcb, 0xf6, 0x16, 0x3c, 0x76, 0x40, 0x64, 0x42, 0x6c, 0x5c, 0x8b, 0x7b, 0xaa, 0x65, 0xab, 0xd, 0x35, 0x0, 0xc0, 0xd4, 0x58, 0xcb, 0xd3, 0xc, 0xcc, 0x49, 0x43, 0xb1, 0xb9, 0x90, 0xa7, 0x8d, 0x41, 0x63, 0x4f, 0x49, 0xbb, 0x96, 0x1, 0x20, 0x32, 0x1, 0x91, 0x9, 0x51, 0x61, 0x9f, 0xf9, 0x7b, 0x28, 0x23, 0xc0, 0x14, 0x39, 0x0, 0x4c, 0x9d, 0xaa, 0x85, 0xd8, 0x2c, 0x23, 0x10, 0x9a, 0xae, 0x82, 0xec, 0xc7, 0x3c, 0x62, 0x40, 0x64, 0x42, 0x4c, 0xb8, 0xce, 0x23, 0x57, 0xc2, 0x92, 0x29, 0x72, 0x0, 0x48, 0x51, 0x6c, 0xbe, 0x97, 0xb0, 0xf2, 0x6b, 0x6a, 0x9d, 0xe6, 0x98, 0x53, 0xe7, 0xae, 0xcf, 0x5a, 0xf2, 0x68, 0x1, 0x91, 0x9, 0xb1, 0xb0, 0x10, 0xf7, 0xf4, 0x8a, 0x2a, 0x13, 0xc2, 0x2e, 0x72, 0x0, 0x48, 0x11, 0xb5, 0xce, 0x3c, 0xf4, 0x20, 0x89, 0xb9, 0x47, 0x70, 0xde, 0x17, 0x2e, 0x5b, 0x4c, 0x19, 0x23, 0x40, 0x64, 0x42, 0x34, 0xb8, 0x6a, 0xc1, 0x55, 0x42, 0x1d, 0x4c, 0x0, 0x48, 0x1b, 0xfb, 0x50, 0x9, 0xdf, 0x19, 0x9b, 0x33, 0xf1, 0x2b, 0xf7, 0xd6, 0x7, 0xd5, 0x81, 0xd7, 0x8e, 0x10, 0x9a, 0x80, 0xc8, 0x84, 0x18, 0x58, 0x88, 0x3b, 0x8b, 0xc9, 0x46, 0x1f, 0x0, 0xc8, 0x5, 0x25, 0xde, 0x42, 0xea, 0xff, 0xfa, 0x6c, 0x98, 0xec, 0x3, 0xd7, 0xe7, 0x2b, 0x79, 0x94, 0x80, 0xc8, 0x84, 0xb1, 0xf9, 0xe8, 0x78, 0x7d, 0x2d, 0x1c, 0x15, 0x9, 0x0, 0x79, 0xa1, 0x6c, 0xde, 0x89, 0xa7, 0xd0, 0x54, 0x2, 0x73, 0x8c, 0x93, 0x81, 0xee, 0x1c, 0xaf, 0xb3, 0xf9, 0x7, 0x10, 0x99, 0x30, 0x2a, 0x33, 0x71, 0x4f, 0xa9, 0xac, 0x68, 0x26, 0x0, 0xc8, 0x90, 0x87, 0x0, 0xa1, 0xa9, 0xa6, 0xcd, 0x8b, 0x81, 0x3f, 0x5f, 0xe5, 0x78, 0xbd, 0xe4, 0x11, 0x2, 0x22, 0x13, 0xc6, 0xe4, 0x83, 0xe3, 0xf5, 0xb5, 0x90, 0xc5, 0x4, 0x0, 0x84, 0xa6, 0xcf, 0x1a, 0xcd, 0x8b, 0x11, 0x3e, 0xdb, 0x21, 0x1, 0x7c, 0x84, 0xd0, 0x4, 0x44, 0x26, 0x8c, 0x89, 0xcb, 0x0, 0x7d, 0xa6, 0x89, 0x0, 0x0, 0xa1, 0xf9, 0x3f, 0xa1, 0xe9, 0x62, 0x21, 0xf1, 0x65, 0x33, 0xdf, 0xf1, 0xf8, 0x0, 0x91, 0x9, 0x63, 0xa0, 0x8c, 0xe1, 0xa1, 0xa9, 0xf2, 0x5a, 0x9a, 0x1f, 0xbf, 0x6, 0x0, 0x90, 0x12, 0x2a, 0x63, 0xb8, 0xf4, 0x78, 0xdf, 0xd0, 0x3b, 0xcd, 0xef, 0x22, 0xfb, 0x3c, 0x80, 0xc8, 0x4, 0xf8, 0x1f, 0xae, 0xb5, 0x98, 0x1b, 0x9a, 0x8, 0x0, 0xe0, 0xff, 0x7c, 0x12, 0xf7, 0xb4, 0xf9, 0x87, 0x81, 0x3f, 0x93, 0xcb, 0x4e, 0x17, 0x42, 0x29, 0x23, 0x44, 0x26, 0x4d, 0x0, 0x23, 0xe0, 0xda, 0x79, 0x78, 0x47, 0x13, 0x1, 0x0, 0xfc, 0x1f, 0x25, 0x30, 0x5d, 0x1b, 0x21, 0x67, 0x32, 0xfc, 0x94, 0xb9, 0x4b, 0x68, 0x7e, 0xe4, 0xd1, 0x21, 0x32, 0x1, 0x86, 0xc6, 0x15, 0xdd, 0x56, 0x34, 0x11, 0x0, 0xc0, 0x4f, 0xac, 0xc5, 0x9d, 0xcd, 0x2c, 0x7, 0xfe, 0x4c, 0x5f, 0x1c, 0xaf, 0x33, 0x65, 0x8e, 0xc8, 0x4, 0x18, 0x9c, 0x43, 0xd1, 0xf6, 0x56, 0x38, 0xa3, 0x1c, 0x0, 0x60, 0x17, 0x65, 0x17, 0x5d, 0x99, 0xc3, 0xa1, 0xeb, 0x53, 0xba, 0x3e, 0x8f, 0xda, 0x65, 0xbe, 0xe0, 0xd1, 0x21, 0x32, 0x1, 0x62, 0x11, 0x99, 0x8, 0x4c, 0x0, 0x80, 0xfd, 0xb8, 0x32, 0x87, 0x43, 0xaf, 0x81, 0x54, 0xf6, 0x7a, 0xed, 0x78, 0xcf, 0x7, 0x1e, 0x1b, 0x22, 0x13, 0x60, 0x28, 0x5c, 0x47, 0xa0, 0x55, 0x34, 0x11, 0x0, 0xc0, 0x5e, 0x5c, 0x99, 0xc3, 0x31, 0x36, 0xda, 0xb8, 0x84, 0x6f, 0x29, 0xc3, 0xaf, 0x15, 0x5, 0x44, 0x26, 0x64, 0xa, 0xbb, 0xd, 0x1, 0x0, 0x9a, 0xe3, 0x3a, 0x5, 0x68, 0xe8, 0xb3, 0xcc, 0x95, 0xf0, 0xad, 0x1d, 0xef, 0xb9, 0xe0, 0xb1, 0x21, 0x32, 0x1, 0x0, 0x0, 0x60, 0xda, 0x22, 0x73, 0x8c, 0x40, 0x7e, 0xed, 0x78, 0x7d, 0x3e, 0x82, 0xf8, 0x5, 0x44, 0x26, 0x0, 0x0, 0x0, 0x4, 0x50, 0x47, 0xf8, 0x99, 0x5c, 0x27, 0xb4, 0x29, 0x81, 0x49, 0x39, 0x23, 0x44, 0x26, 0x0, 0x0, 0x0, 0x44, 0xcc, 0xf7, 0x48, 0x85, 0xef, 0xda, 0xf1, 0x9e, 0x33, 0x21, 0x9b, 0x89, 0xc8, 0x4, 0x0, 0x0, 0x80, 0x68, 0xa9, 0x23, 0xfd, 0x5c, 0x64, 0x33, 0x1, 0x91, 0x9, 0x18, 0x48, 0x0, 0x0, 0xe8, 0x9c, 0x4a, 0xdc, 0xd5, 0x41, 0xc8, 0x66, 0x22, 0x32, 0x1, 0x46, 0x15, 0x99, 0x5, 0x4d, 0x14, 0x1d, 0x25, 0x4d, 0x0, 0x0, 0x1e, 0xb8, 0x8e, 0xbe, 0x54, 0x2, 0x93, 0x9d, 0xe6, 0x88, 0x4c, 0x80, 0xd1, 0x40, 0x64, 0xc6, 0x5, 0x25, 0xa7, 0x0, 0xc0, 0x97, 0x4a, 0xfc, 0xb2, 0x99, 0xd8, 0x79, 0x44, 0x26, 0x40, 0xaf, 0x86, 0x8, 0x51, 0x33, 0xd, 0x4a, 0x9a, 0x0, 0x20, 0x2a, 0x62, 0x9f, 0x6e, 0x5e, 0x79, 0xbc, 0xe7, 0x9a, 0xc7, 0x88, 0xc8, 0x4, 0xe8, 0x8b, 0x7, 0x87, 0x1, 0x65, 0xcd, 0x4e, 0x3c, 0x70, 0x24, 0x1c, 0x40, 0x5c, 0xbc, 0x89, 0xfc, 0xf3, 0x55, 0xe2, 0xce, 0x66, 0xaa, 0xe0, 0x75, 0xce, 0xa3, 0x8c, 0x9a, 0x85, 0x74, 0x90, 0x71, 0x46, 0x64, 0xc2, 0x18, 0xc4, 0x58, 0x4c, 0x18, 0xf6, 0x3f, 0x7, 0x9e, 0x5, 0xc0, 0xb4, 0xa8, 0x22, 0xf8, 0xc, 0xbe, 0xd9, 0x4c, 0x12, 0xa, 0xf1, 0xa, 0x4c, 0xf5, 0x7c, 0xbe, 0xe9, 0xeb, 0x52, 0x1a, 0x16, 0xd4, 0x47, 0x64, 0xc2, 0x18, 0xdc, 0x3b, 0x5e, 0x7f, 0x47, 0x13, 0x45, 0x1, 0xe5, 0x46, 0x0, 0xe2, 0xa3, 0x3c, 0xf0, 0xda, 0x43, 0x44, 0x42, 0x77, 0xed, 0x78, 0xcf, 0x91, 0x30, 0x6d, 0x1e, 0x2b, 0xf6, 0xc, 0x56, 0x21, 0x4f, 0xeb, 0x68, 0x6f, 0x1e, 0xaf, 0x1f, 0x5a, 0x70, 0x22, 0x32, 0x21, 0x6a, 0x5c, 0x99, 0xcc, 0x92, 0x26, 0x1a, 0x9d, 0x99, 0x8e, 0x66, 0x1, 0x20, 0xbe, 0xb1, 0xd9, 0xd4, 0xb6, 0xe, 0xc9, 0xca, 0x43, 0xf4, 0xce, 0x85, 0x69, 0xf3, 0xd8, 0x98, 0x3b, 0x7c, 0xf0, 0x19, 0x22, 0x13, 0x62, 0xa7, 0x96, 0xc3, 0xa5, 0x8c, 0x66, 0xc2, 0xee, 0xc3, 0xb1, 0xb9, 0xa4, 0x9, 0x0, 0xa2, 0x43, 0xd9, 0xc5, 0xa3, 0x89, 0x88, 0xcc, 0x5a, 0x98, 0x36, 0x4f, 0xd1, 0xf6, 0x57, 0x88, 0x4c, 0x98, 0x2, 0xae, 0x8e, 0x4a, 0x74, 0x3b, 0x1e, 0x67, 0x42, 0x36, 0x19, 0x20, 0x46, 0x5c, 0xe3, 0xf2, 0x3e, 0xb2, 0xcf, 0x7b, 0xe5, 0x21, 0x7c, 0x95, 0xc0, 0xbc, 0xe1, 0xd1, 0x46, 0x63, 0xfb, 0xb, 0xc7, 0x7b, 0x3e, 0x21, 0x32, 0x61, 0xa, 0x7c, 0x71, 0xbc, 0xce, 0xae, 0xe6, 0x71, 0x50, 0x6, 0x86, 0x62, 0xc9, 0x0, 0x71, 0xe2, 0x5a, 0xaf, 0x5e, 0x45, 0xf8, 0x99, 0x4f, 0x3d, 0xc5, 0x33, 0x76, 0x27, 0x7e, 0xdb, 0x5f, 0x3f, 0x5e, 0x1b, 0x44, 0x26, 0x4c, 0x1, 0xd5, 0x51, 0xf, 0xad, 0xd7, 0x61, 0x67, 0xf3, 0x38, 0xa8, 0x8c, 0x2, 0x53, 0x57, 0x0, 0xf1, 0xa1, 0xc6, 0xe5, 0xdc, 0x21, 0x0, 0xea, 0x8, 0x3f, 0xb7, 0xca, 0x64, 0x2e, 0x3d, 0xde, 0xb7, 0x14, 0x66, 0xb0, 0xc6, 0xc4, 0x67, 0xd9, 0xc2, 0x2a, 0xf4, 0x8f, 0x22, 0x32, 0x61, 0x6c, 0xa1, 0x79, 0x8, 0x76, 0x37, 0xf, 0xcb, 0x5, 0xc2, 0x1e, 0x20, 0x5a, 0x5c, 0x2, 0xac, 0x8a, 0xf8, 0xb3, 0xaf, 0xc4, 0x6f, 0xbd, 0xe8, 0x35, 0x36, 0x68, 0x14, 0x7c, 0x96, 0x48, 0xa9, 0xfe, 0xb5, 0x46, 0x64, 0xc2, 0x94, 0x70, 0x4d, 0x99, 0x2f, 0x84, 0xd, 0x40, 0x43, 0x3a, 0xb0, 0x25, 0xcd, 0x0, 0x2f, 0x70, 0x24, 0x81, 0xbb, 0x4a, 0xa1, 0x73, 0x5c, 0x41, 0xf7, 0x97, 0xc8, 0x3f, 0xff, 0x7b, 0x71, 0xef, 0x36, 0x37, 0xeb, 0x33, 0x99, 0x4d, 0x19, 0xe, 0x25, 0xea, 0x7d, 0x36, 0x7a, 0xae, 0x9a, 0xfc, 0x71, 0x44, 0x26, 0x8c, 0x89, 0xca, 0x64, 0xd6, 0x8e, 0xf7, 0xb0, 0x4e, 0x67, 0x18, 0x23, 0x43, 0xbd, 0x3a, 0x38, 0xd4, 0x3f, 0xbe, 0x6a, 0x47, 0x44, 0x3f, 0x19, 0x87, 0x52, 0xe, 0x67, 0xf8, 0x6a, 0x9, 0x5c, 0x2b, 0x37, 0x2, 0xea, 0x33, 0x9e, 0x7b, 0xbc, 0xaf, 0x78, 0xbc, 0x6e, 0x11, 0x9a, 0x83, 0x5, 0x8f, 0x3e, 0x9b, 0xae, 0xd6, 0xd2, 0x30, 0x53, 0x8e, 0xc8, 0x84, 0xb1, 0x71, 0xed, 0x54, 0x5b, 0x8, 0xd9, 0xcc, 0x3e, 0xc1, 0xa0, 0x83, 0x4b, 0xdc, 0xdc, 0x5a, 0x63, 0x70, 0x81, 0xd0, 0x1c, 0x5, 0x57, 0xb0, 0xbd, 0x99, 0xc8, 0x7d, 0x28, 0xb1, 0x72, 0xe5, 0x19, 0xd8, 0xb0, 0xe3, 0xbc, 0x7f, 0x6e, 0x3d, 0xfc, 0xeb, 0x83, 0x67, 0x70, 0x80, 0xc8, 0x84, 0x68, 0x8d, 0x8e, 0x6b, 0xa, 0x5, 0xa7, 0xd6, 0x6f, 0x14, 0x8b, 0xc0, 0x84, 0x97, 0x2, 0xbc, 0x7d, 0x1, 0x8, 0x42, 0x73, 0xf8, 0xe7, 0x50, 0xb6, 0xc, 0xd6, 0x63, 0x42, 0x9, 0x16, 0x9f, 0xf5, 0x99, 0x25, 0xfd, 0xac, 0x57, 0x7c, 0xd7, 0xbf, 0x9e, 0x4a, 0x8b, 0x93, 0xa4, 0x10, 0x99, 0x30, 0x36, 0xf, 0x1e, 0x91, 0x6d, 0x29, 0x9c, 0x3e, 0xd3, 0x87, 0xc0, 0xbc, 0xf5, 0x34, 0x32, 0xf, 0x34, 0x57, 0x76, 0x9c, 0x39, 0x1c, 0xfc, 0x4b, 0x2, 0x14, 0xba, 0x1f, 0xa7, 0xae, 0xf5, 0x72, 0x2a, 0x50, 0xaf, 0x27, 0x76, 0x5f, 0x27, 0x9e, 0x9f, 0x99, 0x80, 0xa6, 0x3f, 0x81, 0xe9, 0xe3, 0x53, 0x55, 0xdf, 0x6a, 0x95, 0x25, 0x47, 0x64, 0x42, 0xc, 0x7c, 0xf2, 0x10, 0x32, 0xca, 0xd0, 0x16, 0x34, 0x55, 0x27, 0x28, 0x61, 0xf9, 0xcd, 0x53, 0x60, 0xfa, 0x14, 0x53, 0x86, 0xf4, 0x78, 0xe7, 0xf1, 0x9e, 0x12, 0xa1, 0x39, 0x88, 0x18, 0xe8, 0xbc, 0xac, 0x4c, 0x24, 0xc9, 0x5, 0x9f, 0x8d, 0x40, 0xb6, 0xd0, 0xa4, 0x9f, 0xd, 0x2b, 0x30, 0x95, 0xdd, 0x3f, 0x6f, 0xfb, 0x9f, 0x21, 0x32, 0x21, 0x16, 0x83, 0xe3, 0x32, 0x94, 0x9c, 0xa, 0xd1, 0xd, 0x21, 0xc2, 0x60, 0xdd, 0x85, 0x91, 0x81, 0x49, 0xe2, 0xbb, 0x53, 0x39, 0x24, 0x60, 0x81, 0x30, 0x94, 0x10, 0x98, 0x7b, 0x8c, 0xd1, 0x7a, 0xa2, 0xf7, 0xb7, 0xd5, 0x42, 0xd3, 0xb7, 0x2d, 0x8, 0x68, 0x86, 0x13, 0x98, 0xca, 0x27, 0xb7, 0x9a, 0x26, 0x47, 0x64, 0x42, 0x6c, 0xf8, 0x64, 0xcc, 0x7c, 0x4b, 0x2d, 0x40, 0x7b, 0x43, 0xbd, 0x16, 0xbf, 0x93, 0x3a, 0x20, 0xdd, 0xf1, 0xb8, 0xf6, 0x7c, 0xaf, 0x59, 0x7a, 0xb1, 0xa0, 0xd9, 0x3a, 0xc3, 0xa7, 0xe2, 0x83, 0x4f, 0x70, 0x1e, 0x3b, 0x55, 0x80, 0x9d, 0x99, 0x89, 0xdf, 0x46, 0x15, 0xd8, 0x3f, 0x46, 0xaf, 0x3, 0xc6, 0xe8, 0x7b, 0xe9, 0x68, 0x6, 0xb, 0x91, 0x9, 0x31, 0xe1, 0x93, 0x35, 0x3b, 0xc3, 0x99, 0x35, 0x36, 0x30, 0xbe, 0x6b, 0x9b, 0x10, 0x98, 0x20, 0xba, 0xf, 0xac, 0x3, 0xfb, 0x18, 0x41, 0x60, 0x37, 0x2, 0xf3, 0xd6, 0xe3, 0x7d, 0x4a, 0x60, 0xd6, 0x9, 0xdc, 0x6f, 0x88, 0xbd, 0x31, 0xe5, 0xb4, 0xc8, 0x9c, 0x87, 0xd9, 0xff, 0x90, 0x20, 0xf0, 0x54, 0x3a, 0x2c, 0xec, 0x8f, 0xc8, 0x84, 0xd8, 0xa2, 0x5a, 0x9f, 0xf2, 0x16, 0x21, 0x11, 0x19, 0xe, 0xeb, 0xc9, 0x28, 0xfb, 0xb6, 0x17, 0x2, 0x13, 0x9a, 0xa, 0x4d, 0x13, 0x4, 0xaa, 0xfe, 0x56, 0xd0, 0x74, 0xad, 0x4, 0xa6, 0x6b, 0xb6, 0x61, 0xeb, 0x69, 0x2b, 0x53, 0x14, 0x9a, 0x47, 0x81, 0x36, 0xd, 0xfb, 0xef, 0x2f, 0xca, 0x43, 0xc7, 0x3b, 0x22, 0x13, 0x26, 0x87, 0x6f, 0x79, 0xb, 0x84, 0xa6, 0x9b, 0x8b, 0x40, 0x87, 0x7f, 0x85, 0xc0, 0x84, 0xe, 0x1c, 0x8f, 0x71, 0x6c, 0x9c, 0x10, 0xd4, 0x8f, 0xc0, 0x34, 0x9b, 0x66, 0x52, 0x23, 0x34, 0xc0, 0x35, 0xb3, 0x33, 0xac, 0xd3, 0xec, 0x26, 0xe0, 0xeb, 0x5c, 0x60, 0x22, 0x32, 0x21, 0x66, 0xa7, 0xe6, 0xb3, 0xe0, 0x18, 0xa1, 0xb9, 0x9f, 0x52, 0x9e, 0x36, 0x63, 0x2c, 0x3, 0xdb, 0x9c, 0x4d, 0x3e, 0xd0, 0x55, 0xff, 0x30, 0xa5, 0x77, 0x6e, 0x84, 0xac, 0xa6, 0xf, 0x73, 0xf1, 0x5f, 0x2f, 0xad, 0x9e, 0x45, 0x9d, 0x68, 0x3b, 0x84, 0xa, 0xcd, 0x85, 0x16, 0x52, 0x25, 0x5d, 0xe8, 0xa7, 0xb1, 0x77, 0x23, 0x61, 0x4b, 0x57, 0x7a, 0x11, 0x98, 0x88, 0x4c, 0x88, 0x95, 0x6d, 0x80, 0xa1, 0xb9, 0x16, 0x32, 0x26, 0x86, 0x42, 0x1b, 0x97, 0x90, 0xc5, 0xf1, 0x4a, 0xcc, 0x9f, 0xf4, 0x65, 0x60, 0x20, 0x29, 0x9a, 0x64, 0xba, 0xe7, 0x42, 0x56, 0xd3, 0xc5, 0x85, 0xf8, 0x1f, 0x8a, 0xa0, 0x2, 0xc7, 0x4d, 0xe2, 0xed, 0xb1, 0xd6, 0x36, 0xc9, 0x77, 0x67, 0x73, 0xa1, 0x6d, 0xde, 0x85, 0x90, 0xd5, 0x5c, 0xe8, 0x4, 0xc3, 0x3c, 0xe0, 0x77, 0x7a, 0x13, 0x98, 0x88, 0x4c, 0x88, 0x19, 0x65, 0x48, 0x7d, 0x33, 0x27, 0xe6, 0x4c, 0xe5, 0x5c, 0xd, 0x8c, 0xc9, 0x1a, 0x85, 0x1a, 0x17, 0x25, 0xe6, 0xdf, 0x4a, 0x87, 0x8b, 0xbc, 0x21, 0x79, 0xd6, 0xba, 0xcf, 0x3c, 0x34, 0xe8, 0x9f, 0x64, 0x9c, 0xf6, 0x8b, 0xa3, 0x65, 0x40, 0xdb, 0xaf, 0x32, 0x69, 0x9b, 0x2a, 0x50, 0x68, 0x1a, 0x1, 0x9e, 0x6b, 0x1f, 0x33, 0x7d, 0x29, 0xc4, 0xf, 0x3e, 0xf4, 0x2d, 0x30, 0x11, 0x99, 0x10, 0x3b, 0x21, 0x65, 0x54, 0x16, 0xe2, 0x7f, 0x82, 0x4d, 0x4a, 0xe2, 0xf2, 0x42, 0x8b, 0xcb, 0xd0, 0x4c, 0x91, 0xc9, 0x16, 0xd4, 0x74, 0x33, 0x8, 0xc4, 0x4, 0x27, 0xa1, 0x25, 0x4e, 0x66, 0x96, 0x23, 0x2c, 0x32, 0x6f, 0xc3, 0x8b, 0x40, 0x41, 0xb4, 0x96, 0xfc, 0xd6, 0x4b, 0xab, 0xfe, 0xf5, 0x3a, 0xb0, 0x9f, 0x19, 0xb1, 0x95, 0xcb, 0x32, 0xd, 0x3b, 0xc1, 0x10, 0x22, 0xae, 0x7, 0x9b, 0xc1, 0x42, 0x64, 0x42, 0xec, 0x84, 0x44, 0x5a, 0x66, 0xc3, 0xc1, 0x45, 0x6, 0x51, 0xab, 0x72, 0xd4, 0x3f, 0x74, 0xf4, 0x1e, 0x92, 0xc1, 0x35, 0x9b, 0x6, 0x3a, 0x29, 0xb4, 0xb, 0xd9, 0x52, 0xb7, 0x70, 0x52, 0xb, 0xed, 0x14, 0x73, 0x14, 0x9b, 0x73, 0x79, 0x5e, 0x2f, 0xed, 0x3b, 0x6e, 0x73, 0x14, 0x98, 0xb6, 0xbd, 0x7a, 0xdb, 0xa0, 0x9f, 0x99, 0x76, 0xbe, 0x94, 0x34, 0x67, 0xb8, 0xda, 0x24, 0x18, 0xaa, 0x6, 0xe2, 0x1d, 0x91, 0x9, 0x8, 0x4d, 0x8b, 0xa5, 0xa4, 0x39, 0x6d, 0xb2, 0xd0, 0x51, 0xfa, 0x37, 0x69, 0xb6, 0xe1, 0x69, 0xa3, 0x8d, 0x4b, 0xe8, 0x9a, 0x2e, 0x97, 0x18, 0x65, 0x77, 0x67, 0xbe, 0x2, 0xe0, 0xb4, 0x45, 0xc0, 0x62, 0x8b, 0xcd, 0xd4, 0x67, 0x20, 0x4a, 0x69, 0x96, 0x61, 0xcb, 0x59, 0x60, 0xee, 0xfa, 0x80, 0x26, 0xfd, 0xec, 0x4c, 0xf7, 0xb1, 0x8b, 0x44, 0x2, 0x1a, 0x5b, 0x5c, 0x86, 0x26, 0x18, 0x8c, 0x6f, 0x3c, 0x91, 0x1, 0x13, 0xc, 0x88, 0x4c, 0x48, 0x55, 0x68, 0xce, 0x24, 0x8d, 0x69, 0x13, 0x73, 0xf2, 0xc7, 0xf, 0xfd, 0xb5, 0x89, 0x70, 0x36, 0xd9, 0x4b, 0xdf, 0xb3, 0x82, 0x77, 0x71, 0x45, 0xbc, 0x73, 0xba, 0x67, 0xd6, 0xa8, 0x71, 0xd9, 0x66, 0x6d, 0xef, 0x42, 0x7, 0x85, 0xa9, 0x9d, 0x1a, 0x74, 0x64, 0x9, 0xe9, 0xdb, 0x6, 0x63, 0xf7, 0x1c, 0x81, 0xf9, 0x4b, 0x3f, 0x3b, 0x91, 0xf0, 0xc, 0xdc, 0x91, 0x16, 0x57, 0x53, 0xe, 0x68, 0x6c, 0x3f, 0xd0, 0x44, 0x5c, 0xd6, 0xba, 0xed, 0x6, 0x5f, 0xd3, 0x8b, 0xc8, 0x84, 0x29, 0x46, 0xb3, 0x21, 0x98, 0x69, 0x93, 0x1b, 0x99, 0x4e, 0x66, 0x53, 0x7d, 0x4e, 0xb3, 0xce, 0xc6, 0x14, 0x1d, 0x6e, 0x9a, 0x2d, 0x54, 0xeb, 0x5a, 0x9b, 0x64, 0x2f, 0x6d, 0xee, 0x1d, 0xaf, 0xb3, 0xab, 0x13, 0x8c, 0x13, 0x3b, 0x97, 0xe6, 0x59, 0x92, 0x72, 0x27, 0xa0, 0x9a, 0x6a, 0x76, 0x73, 0xae, 0x3f, 0x7f, 0xd3, 0x25, 0x1, 0x66, 0xbd, 0xdc, 0x15, 0xdd, 0x6a, 0x6f, 0xc0, 0xfb, 0x56, 0xc2, 0xca, 0xb3, 0xed, 0xb, 0x68, 0xda, 0xda, 0xd5, 0xa1, 0x82, 0x94, 0xb3, 0x9d, 0xcf, 0xdb, 0xd4, 0x7, 0x8c, 0xb6, 0xc1, 0x13, 0x91, 0x9, 0x53, 0x8d, 0x66, 0x43, 0x1d, 0x99, 0xa9, 0x43, 0x67, 0xca, 0xa9, 0xc4, 0x64, 0x5c, 0x66, 0xfa, 0x33, 0xdd, 0x68, 0x7, 0x7b, 0xab, 0x7f, 0x2e, 0x5a, 0xfc, 0xcd, 0x4a, 0x8b, 0xcb, 0x36, 0x4e, 0xdf, 0xfe, 0x5b, 0x87, 0x28, 0x2c, 0x87, 0x4a, 0x56, 0x33, 0x6f, 0x8c, 0x43, 0x6b, 0x13, 0xd4, 0x1c, 0x59, 0x62, 0xc0, 0xee, 0x57, 0xb1, 0xa, 0x82, 0x23, 0x4b, 0x58, 0xfe, 0xd0, 0xe3, 0xb8, 0xa9, 0x80, 0x31, 0xe3, 0xb6, 0xa2, 0x2b, 0x1d, 0x64, 0x25, 0xcd, 0x36, 0x9f, 0xd9, 0x36, 0xb7, 0x8b, 0xe7, 0xd5, 0x35, 0xc5, 0x8e, 0x2f, 0xb8, 0x6c, 0x11, 0x6c, 0x6d, 0x3b, 0x8, 0xfc, 0x5a, 0xf3, 0x8a, 0xbe, 0xa, 0x13, 0xc4, 0x18, 0xe2, 0x26, 0xd9, 0xc9, 0x99, 0xbe, 0x2e, 0xb5, 0x23, 0xbc, 0xd3, 0x5f, 0xeb, 0x1, 0x1d, 0x92, 0xfa, 0xff, 0x8f, 0xf5, 0xd7, 0xb2, 0x63, 0xe3, 0x56, 0x69, 0x3, 0xdc, 0xa5, 0x93, 0x7a, 0xd0, 0x6d, 0x34, 0xf7, 0x10, 0x6, 0x8b, 0x96, 0xc6, 0x1f, 0xa6, 0x8f, 0x1a, 0x4b, 0xef, 0xe5, 0x39, 0x23, 0xdf, 0x26, 0x23, 0x59, 0x58, 0xfd, 0xca, 0xf4, 0x6f, 0x75, 0xdd, 0xeb, 0x3e, 0x56, 0x8f, 0x70, 0x7f, 0x85, 0x35, 0x86, 0x4b, 0xe9, 0x26, 0xe3, 0xfa, 0xa0, 0xc7, 0x2d, 0xd9, 0xcb, 0x30, 0x11, 0xf5, 0x56, 0x8b, 0xb2, 0x36, 0xb3, 0x29, 0x73, 0x2b, 0x48, 0x30, 0xfd, 0xeb, 0x6e, 0x20, 0xa1, 0x9f, 0x7c, 0x5f, 0x42, 0x64, 0xc2, 0x54, 0x31, 0x53, 0x4a, 0xca, 0xb8, 0x2c, 0x5b, 0x1a, 0x97, 0x4b, 0xed, 0xac, 0xb6, 0xfa, 0xba, 0xd3, 0x3f, 0xd7, 0x2d, 0xc, 0x47, 0xa1, 0x8d, 0xde, 0x1b, 0xeb, 0xe7, 0x59, 0x8f, 0xd1, 0x72, 0x1f, 0xe2, 0xd2, 0xe6, 0x93, 0xf8, 0x67, 0x29, 0x99, 0x3a, 0x7, 0xd3, 0x27, 0xdf, 0x6a, 0x81, 0xd8, 0xd5, 0xc6, 0x8b, 0x72, 0x27, 0xb0, 0x7c, 0xb0, 0xc6, 0xed, 0x77, 0x2b, 0xb8, 0x69, 0x3b, 0xe, 0x8e, 0x2c, 0x87, 0x7f, 0x6c, 0xfd, 0xdc, 0xc7, 0x18, 0x5e, 0xcb, 0xc8, 0xd9, 0xa6, 0x89, 0x63, 0x4a, 0xdd, 0x5d, 0x48, 0xfb, 0xa2, 0xff, 0xbb, 0xfd, 0x6b, 0x6b, 0x5, 0x33, 0x77, 0x56, 0x7f, 0x6b, 0xda, 0x9f, 0xd4, 0x18, 0xf8, 0x5d, 0xff, 0x1f, 0x85, 0x74, 0xbf, 0x5f, 0x60, 0xa9, 0x6d, 0x75, 0x34, 0x7d, 0x9, 0x91, 0x9, 0x53, 0x47, 0x9, 0xab, 0xcf, 0xd2, 0x7c, 0x53, 0xcc, 0xae, 0x30, 0x9c, 0xef, 0x11, 0xb3, 0xdb, 0x80, 0xdf, 0x1f, 0x9a, 0x8d, 0x36, 0x2a, 0x7d, 0x47, 0xdd, 0x26, 0xc2, 0x2f, 0xe9, 0x72, 0xd0, 0x40, 0x44, 0xad, 0x3b, 0x16, 0x9b, 0xb6, 0xf3, 0x2e, 0x1d, 0xfd, 0xb2, 0xa, 0xf8, 0x5b, 0x43, 0xae, 0x3, 0xed, 0x3b, 0x30, 0xcc, 0x2d, 0xe9, 0x70, 0xae, 0x6d, 0xe1, 0x85, 0x74, 0xb7, 0x81, 0x6c, 0x76, 0xa0, 0x4f, 0x6c, 0x3d, 0xc4, 0x5c, 0x9f, 0x89, 0x85, 0xdd, 0x31, 0xb6, 0x92, 0x8, 0xeb, 0x1e, 0x23, 0x32, 0x21, 0x5, 0xd4, 0xc0, 0x3a, 0x91, 0xe7, 0xac, 0x64, 0x1f, 0x4e, 0x2c, 0x36, 0x83, 0xba, 0xd6, 0x6, 0x75, 0x48, 0xa3, 0xa2, 0xa6, 0x40, 0xbf, 0x9, 0x99, 0x4a, 0x68, 0x2f, 0x36, 0x3f, 0xc, 0x38, 0xae, 0x62, 0x1b, 0xbf, 0x88, 0xcb, 0x7e, 0x7d, 0xc1, 0xa9, 0x6e, 0xdf, 0x2e, 0xc5, 0xe6, 0x4b, 0x2, 0x72, 0x6c, 0x3f, 0xa0, 0xb2, 0xb8, 0x9f, 0x25, 0xe2, 0x43, 0x35, 0xd8, 0xf8, 0x3, 0x29, 0x61, 0xea, 0x40, 0x9e, 0x4a, 0x9a, 0x27, 0xd9, 0x6c, 0xb4, 0xd0, 0xfb, 0x4d, 0x47, 0xed, 0x43, 0xdf, 0xa3, 0x59, 0xa2, 0xc0, 0xb4, 0x1e, 0xb4, 0x15, 0x9b, 0xaa, 0x1f, 0x99, 0x22, 0xdb, 0xf, 0x19, 0xdd, 0xf7, 0x5b, 0x7d, 0xef, 0x8, 0xcc, 0x61, 0xc4, 0xa6, 0xf2, 0x7, 0xcb, 0xc4, 0xfa, 0xd8, 0xd6, 0xba, 0xb7, 0x28, 0xb3, 0x97, 0x88, 0x4c, 0xc8, 0xc1, 0x98, 0xa7, 0x22, 0x36, 0x37, 0xfa, 0x3e, 0x7e, 0xd3, 0x2, 0x73, 0x33, 0xf2, 0xe7, 0x31, 0x3b, 0x16, 0xd9, 0xd8, 0x3, 0x5d, 0x39, 0xcb, 0xdf, 0xf4, 0xd7, 0x4d, 0xa2, 0xf7, 0x78, 0x6e, 0xdd, 0x23, 0xe3, 0x66, 0x78, 0xb1, 0xb9, 0xb2, 0xda, 0x7f, 0xaa, 0xe2, 0xfe, 0xc1, 0xa, 0x52, 0x26, 0x15, 0x9c, 0xfd, 0xd1, 0xd1, 0xe9, 0x19, 0x10, 0x90, 0x82, 0xd8, 0x1c, 0xe4, 0x8c, 0xd6, 0xe, 0x8d, 0xe2, 0x5a, 0x9e, 0x33, 0x96, 0xef, 0x23, 0x34, 0x28, 0x66, 0x57, 0xe7, 0x3e, 0x11, 0xff, 0x10, 0xb1, 0xb0, 0xff, 0x72, 0xa0, 0x1d, 0xb7, 0xd8, 0xbb, 0xd1, 0xc7, 0xea, 0x7b, 0x4b, 0xc, 0x4c, 0xc6, 0x89, 0x1e, 0x10, 0x96, 0xaf, 0xf5, 0x38, 0xb9, 0x12, 0xb2, 0xff, 0xb1, 0xf4, 0xb1, 0x13, 0x79, 0x2e, 0xed, 0x16, 0xfb, 0x78, 0x7f, 0xd8, 0x33, 0x2e, 0x26, 0x67, 0xa3, 0xfe, 0xf0, 0xe7, 0xbf, 0xfe, 0x5d, 0x7d, 0x2d, 0x5f, 0x78, 0xbd, 0xa2, 0x5f, 0x42, 0x42, 0x98, 0x7a, 0x76, 0xef, 0xa4, 0xfb, 0xd2, 0x41, 0x6d, 0x44, 0xa5, 0x1a, 0x67, 0xa6, 0x64, 0x46, 0x3d, 0xc1, 0x76, 0x2d, 0xe4, 0x79, 0x1d, 0x6c, 0x1d, 0xf9, 0x3d, 0xd8, 0x9f, 0x75, 0x57, 0x18, 0x20, 0x4, 0xe2, 0x63, 0x66, 0x8d, 0xd7, 0x99, 0xc4, 0xb9, 0x1e, 0xd8, 0x1e, 0xc3, 0x1b, 0xfa, 0xd1, 0xe4, 0x6c, 0x57, 0x19, 0x91, 0x4f, 0xa8, 0xf4, 0xf5, 0x65, 0xa, 0x82, 0xf2, 0xdf, 0xff, 0xfa, 0xa7, 0xb7, 0xc8, 0x4, 0xc8, 0x11, 0x65, 0x54, 0x8e, 0x7, 0x74, 0x60, 0x95, 0x25, 0xc2, 0xee, 0x10, 0x36, 0x0, 0x8d, 0x44, 0xa7, 0xba, 0xfa, 0x2c, 0x3, 0x73, 0x8, 0x53, 0xce, 0x66, 0xcb, 0x18, 0x4e, 0xb6, 0x7f, 0xa9, 0x7e, 0xf5, 0x46, 0xe, 0xef, 0x2c, 0xef, 0xb2, 0x2f, 0x99, 0x7e, 0x54, 0x4d, 0xad, 0xb1, 0x7c, 0x44, 0x26, 0xbb, 0xcb, 0x21, 0x67, 0x4c, 0xd4, 0xb8, 0xb2, 0xa2, 0xda, 0x42, 0xb, 0x4f, 0x23, 0x42, 0x65, 0xe7, 0x35, 0x9b, 0x7d, 0xe5, 0x8d, 0x6c, 0xa7, 0x73, 0xb7, 0xe7, 0xdf, 0x0, 0xa0, 0x9d, 0x63, 0x36, 0x63, 0x6e, 0xb5, 0x13, 0x30, 0x8a, 0x35, 0x76, 0xf7, 0x95, 0x23, 0x7a, 0x29, 0x90, 0x34, 0x81, 0xdf, 0xae, 0x6d, 0x50, 0x7c, 0xb7, 0x5e, 0xaf, 0x69, 0xfe, 0xac, 0xfa, 0xd7, 0x6e, 0xbf, 0x39, 0x7e, 0xa1, 0x1f, 0x95, 0xe, 0xbf, 0x60, 0xff, 0xdc, 0xa6, 0xd6, 0xe6, 0x24, 0xf9, 0xaf, 0x0, 0x3, 0x0, 0x58, 0xbf, 0x46, 0x22, 0x7, 0x65, 0x51, 0xc8, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; - - - - + (NSData *)parse_logo3x_png { - return [NSData dataWithBytes:parse_logo3x_png length:sizeof(parse_logo3x_png)]; - } - - const unsigned char twitter_icon_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x16, 0x0, 0x0, 0x0, 0x12, 0x8, 0x6, 0x0, 0x0, 0x0, 0x5f, 0x25, 0x2e, 0x2d, 0x0, 0x0, 0x0, 0x1, 0x73, 0x52, 0x47, 0x42, 0x0, 0xae, 0xce, 0x1c, 0xe9, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0x2e, 0x23, 0x0, 0x0, 0x2e, 0x23, 0x1, 0x78, 0xa5, 0x3f, 0x76, 0x0, 0x0, 0x1, 0xcb, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0xa, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0xa, 0x29, 0x2e, 0xcd, 0x3d, 0x0, 0x0, 0x2, 0x34, 0x49, 0x44, 0x41, 0x54, 0x38, 0x11, 0x8d, 0x93, 0xbd, 0x6b, 0x54, 0x41, 0x14, 0x47, 0xdf, 0x6e, 0x36, 0x51, 0x8b, 0xa0, 0x9d, 0x44, 0x8b, 0x10, 0xb4, 0x10, 0xac, 0x4, 0xb1, 0x52, 0x50, 0x10, 0x8b, 0x80, 0x76, 0x36, 0x16, 0xfe, 0x7, 0xda, 0x5a, 0x58, 0x8b, 0xad, 0x88, 0x20, 0x16, 0x82, 0x36, 0x36, 0x12, 0x10, 0x24, 0xda, 0x89, 0x48, 0x10, 0x92, 0x42, 0xc1, 0x2e, 0x5a, 0xaa, 0x85, 0x22, 0x2a, 0x4a, 0xd4, 0xe8, 0xee, 0xbe, 0x9c, 0x33, 0x6f, 0xee, 0x63, 0xb2, 0x1b, 0xd4, 0xb, 0xe7, 0xdd, 0x3b, 0x77, 0x66, 0x7e, 0xef, 0xce, 0x57, 0x55, 0x61, 0x75, 0x5d, 0x77, 0xb3, 0x9f, 0xd0, 0x6f, 0x65, 0x8c, 0x49, 0x7d, 0xf8, 0x39, 0xb8, 0xb, 0xef, 0xe0, 0x3b, 0x2c, 0xc3, 0xf9, 0x98, 0x43, 0x7c, 0x6, 0xe, 0xa4, 0x36, 0xc1, 0x7d, 0x38, 0x6e, 0x3, 0x3f, 0x5, 0xe9, 0x47, 0xa9, 0xb3, 0xc9, 0x85, 0xe8, 0x41, 0xfa, 0xbe, 0xc0, 0x56, 0xf6, 0x80, 0xe4, 0x4b, 0x58, 0x84, 0x6d, 0xa, 0xed, 0x86, 0x3e, 0xfc, 0x84, 0x13, 0x85, 0xd8, 0x24, 0xed, 0x2e, 0x74, 0x8a, 0xdc, 0x12, 0x6d, 0x6d, 0xd, 0xfa, 0x43, 0xc, 0xff, 0x1b, 0xfe, 0x80, 0xe6, 0xa, 0xae, 0xc2, 0x39, 0x85, 0x67, 0x21, 0x55, 0xd1, 0x8c, 0xab, 0x2f, 0xd3, 0xee, 0x15, 0x62, 0x29, 0x26, 0x77, 0x18, 0x14, 0x1a, 0x64, 0x41, 0xe3, 0x1c, 0xa6, 0xfc, 0x2f, 0xda, 0xda, 0x2b, 0x98, 0x4b, 0xf3, 0x9, 0x56, 0xcd, 0x60, 0x56, 0xae, 0xbd, 0x81, 0x8b, 0xb0, 0xb7, 0xf8, 0xc1, 0x31, 0x3b, 0xb0, 0x41, 0x26, 0x9, 0x13, 0xeb, 0xa3, 0x62, 0x75, 0xb6, 0xc7, 0x1c, 0xab, 0x3e, 0xb, 0x9a, 0x3, 0x5c, 0x5a, 0xd8, 0x57, 0x82, 0x27, 0x70, 0x5, 0x6e, 0xe4, 0x64, 0x2b, 0x98, 0x57, 0x68, 0x3a, 0xe6, 0x3c, 0x56, 0x94, 0x76, 0xaf, 0xc7, 0xc7, 0xaa, 0x76, 0xc0, 0x23, 0x98, 0x87, 0x1, 0xf4, 0xa1, 0x86, 0x9d, 0xe0, 0xbe, 0xa7, 0xbd, 0x57, 0xa1, 0xd3, 0x69, 0xb7, 0xbc, 0x22, 0x76, 0x4c, 0x69, 0x6b, 0xb9, 0x31, 0x74, 0xff, 0xd6, 0xe1, 0x16, 0x78, 0x13, 0xdc, 0x8a, 0x5e, 0x31, 0x61, 0x48, 0xce, 0x1f, 0x69, 0x5d, 0xf2, 0x9b, 0x6e, 0x8b, 0xc9, 0xe6, 0x5f, 0xed, 0xf, 0x56, 0xcd, 0x61, 0x13, 0xe, 0xfe, 0x44, 0x70, 0x1b, 0xa6, 0x60, 0x58, 0x88, 0xd2, 0xac, 0x3a, 0x4c, 0x9c, 0xc4, 0x5b, 0xc0, 0x98, 0x68, 0x1a, 0xd0, 0x54, 0x1d, 0x7d, 0xcb, 0xe6, 0xb0, 0x66, 0x25, 0x4c, 0x9e, 0x86, 0xa7, 0x10, 0xe6, 0x1, 0xb5, 0x7b, 0xf9, 0x8f, 0x38, 0xe, 0xfc, 0x3d, 0xe3, 0x76, 0x25, 0x55, 0xdf, 0x1, 0x8d, 0xb8, 0xfc, 0x33, 0xc4, 0x37, 0xc1, 0x3b, 0xaa, 0xfd, 0xaf, 0xf8, 0x7a, 0x33, 0xbc, 0xbe, 0x96, 0x45, 0x9b, 0xd7, 0x4b, 0x32, 0x84, 0x4f, 0x12, 0x7f, 0x0, 0x85, 0xbd, 0x1d, 0x9b, 0x84, 0xf3, 0xd, 0x18, 0x5d, 0x45, 0x54, 0xfb, 0x8d, 0xf1, 0xb3, 0x6d, 0xb5, 0x6, 0x1a, 0xc9, 0x74, 0xd4, 0xf8, 0x3b, 0xd0, 0x5a, 0xf9, 0x10, 0x48, 0x8e, 0x8a, 0xda, 0x8e, 0x6a, 0x2f, 0x64, 0x9d, 0xf6, 0x61, 0x25, 0x51, 0x6, 0xb4, 0x9, 0xe2, 0x4b, 0xf0, 0x2, 0x3e, 0x43, 0x3c, 0xad, 0x52, 0xd4, 0xb4, 0xab, 0x89, 0x97, 0xb6, 0x90, 0xaa, 0x2b, 0xa, 0x8c, 0xf6, 0x98, 0x67, 0x92, 0xcf, 0xf7, 0x35, 0x68, 0xb1, 0x5c, 0xc5, 0x15, 0xf4, 0x31, 0x44, 0xee, 0x21, 0x71, 0x6c, 0x65, 0xdc, 0x8c, 0x46, 0x8f, 0x8e, 0x3d, 0xb0, 0xf, 0xf6, 0xc3, 0x69, 0xb8, 0x7, 0x3f, 0x40, 0x73, 0xaf, 0x15, 0x51, 0x4c, 0x14, 0xf, 0xbb, 0x1e, 0x15, 0x91, 0x68, 0xe, 0x2c, 0x12, 0x7a, 0x92, 0x87, 0x60, 0x1, 0xa2, 0xa, 0xc2, 0xbf, 0xda, 0x33, 0x7a, 0x4f, 0x85, 0x6, 0xf1, 0xb8, 0x28, 0x9d, 0x71, 0x68, 0xfa, 0xa3, 0xe0, 0x84, 0x23, 0xe0, 0x9, 0xcf, 0x80, 0xaf, 0xee, 0x23, 0xbc, 0x85, 0x15, 0x58, 0xe4, 0x1, 0x3d, 0xc7, 0x5b, 0x90, 0x4b, 0xf7, 0x89, 0x8f, 0x3e, 0x6b, 0xbb, 0xab, 0xd, 0x23, 0x5c, 0xa6, 0xb2, 0xce, 0x6d, 0xd4, 0xea, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; - - - - + (NSData *)twitter_icon_png { - return [NSData dataWithBytes:twitter_icon_png length:sizeof(twitter_icon_png)]; - } - - const unsigned char twitter_icon2x_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x2c, 0x0, 0x0, 0x0, 0x24, 0x8, 0x6, 0x0, 0x0, 0x0, 0xf2, 0xd7, 0xd8, 0x6c, 0x0, 0x0, 0x0, 0x1, 0x73, 0x52, 0x47, 0x42, 0x0, 0xae, 0xce, 0x1c, 0xe9, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0x2e, 0x23, 0x0, 0x0, 0x2e, 0x23, 0x1, 0x78, 0xa5, 0x3f, 0x76, 0x0, 0x0, 0x1, 0xcb, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0xa, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0xa, 0x29, 0x2e, 0xcd, 0x3d, 0x0, 0x0, 0x5, 0xbd, 0x49, 0x44, 0x41, 0x54, 0x58, 0x9, 0xc5, 0x98, 0x5b, 0xa8, 0x95, 0x45, 0x14, 0xc7, 0xdd, 0x9e, 0xa3, 0x42, 0x56, 0x50, 0x91, 0x5, 0x86, 0x9c, 0xae, 0x44, 0x50, 0x68, 0x46, 0xd1, 0x85, 0x12, 0x7a, 0x28, 0x22, 0x88, 0xa0, 0x22, 0x2, 0xe9, 0x25, 0x90, 0x82, 0xea, 0x21, 0xe8, 0xf6, 0x90, 0xd1, 0x4b, 0x29, 0xbd, 0x56, 0x4, 0x81, 0x51, 0x50, 0xd4, 0x93, 0x2f, 0x85, 0x74, 0x21, 0x3a, 0xa6, 0x60, 0x54, 0x90, 0x12, 0x89, 0x91, 0xfa, 0x90, 0x5d, 0xf5, 0xa1, 0x9b, 0x78, 0x3d, 0xbb, 0xdf, 0x6f, 0xed, 0x59, 0xdf, 0xf9, 0xbe, 0x7d, 0xf6, 0xf6, 0xec, 0xbd, 0xf, 0xda, 0x82, 0xff, 0x59, 0x6b, 0xd6, 0xcc, 0xac, 0xf9, 0xcf, 0xcc, 0x9a, 0xd9, 0xf3, 0x9d, 0x79, 0xf3, 0x90, 0x76, 0xbb, 0xdd, 0x52, 0x2b, 0xd8, 0xf3, 0x3b, 0xd6, 0xdc, 0xff, 0xd6, 0x63, 0x61, 0x4f, 0x80, 0xe7, 0xc1, 0x24, 0xf8, 0x19, 0x1c, 0x7, 0x3f, 0x81, 0xcf, 0xc0, 0x33, 0xe0, 0x82, 0x1c, 0x11, 0x7b, 0x1, 0x18, 0xcf, 0xb2, 0x9a, 0xf2, 0x32, 0xd0, 0xd2, 0x8, 0xb2, 0xe8, 0xd3, 0xc0, 0xe9, 0xa5, 0x72, 0xac, 0xde, 0x78, 0x14, 0x9b, 0x58, 0x55, 0xc, 0x6c, 0x89, 0x1e, 0x4, 0x75, 0x99, 0xaa, 0x17, 0xb0, 0xff, 0x6, 0x4f, 0x74, 0x8f, 0x85, 0x6f, 0x5, 0xf8, 0x10, 0x3c, 0x1b, 0x75, 0x18, 0x31, 0x13, 0xf4, 0x23, 0x60, 0x5b, 0x76, 0x48, 0x7f, 0x96, 0x87, 0xd1, 0xf4, 0x8d, 0x5d, 0x42, 0xb7, 0xc0, 0x46, 0x90, 0x72, 0x4, 0x43, 0x1c, 0x3, 0x12, 0x56, 0xa7, 0xf, 0x33, 0xe4, 0x2d, 0xfe, 0xde, 0x8, 0xd6, 0x82, 0xcd, 0x40, 0x39, 0x4, 0xce, 0x4b, 0xc2, 0xb9, 0xc2, 0x9b, 0xa2, 0xaa, 0xdd, 0x7e, 0x27, 0xc9, 0x51, 0x6e, 0x6c, 0x4b, 0xfa, 0x67, 0xd3, 0xf4, 0xcb, 0x98, 0x6f, 0x96, 0x98, 0xe, 0x98, 0x24, 0x25, 0xda, 0xb, 0xd6, 0x8b, 0x5e, 0x72, 0x7b, 0x63, 0x4c, 0x5a, 0x2c, 0x1, 0x7f, 0xd4, 0x5a, 0x7e, 0x80, 0xbd, 0xc0, 0x46, 0xe8, 0x85, 0x8d, 0xc6, 0xb3, 0x14, 0x68, 0x9f, 0x3b, 0x76, 0x7f, 0x89, 0xe7, 0xa, 0xf6, 0x22, 0xd8, 0xcf, 0x97, 0xc4, 0xd5, 0x7f, 0x82, 0x7b, 0xa, 0x8f, 0x55, 0xd8, 0xf, 0xe4, 0x1, 0x73, 0xb9, 0xcf, 0x2e, 0x5c, 0x8e, 0xa0, 0xef, 0x0, 0x5b, 0x69, 0xb0, 0xb4, 0xd5, 0x6a, 0x39, 0xe0, 0x98, 0x28, 0xf5, 0x7d, 0x15, 0x6d, 0x68, 0xde, 0x3a, 0x56, 0x1a, 0x3c, 0xd9, 0xb7, 0xe1, 0x9, 0x2a, 0x88, 0x21, 0x27, 0x77, 0xc8, 0xf1, 0x3e, 0x5, 0x57, 0xe2, 0xdb, 0x89, 0xfe, 0x8, 0xec, 0x5, 0xb1, 0x8a, 0x57, 0xe3, 0xc, 0x99, 0x42, 0x30, 0xe, 0x97, 0xe2, 0x7e, 0xf4, 0xbd, 0xd1, 0xa8, 0xd3, 0x6e, 0x9c, 0x72, 0x5f, 0xe2, 0x59, 0x87, 0xbe, 0x16, 0x28, 0xc6, 0xf2, 0x36, 0xe8, 0xb7, 0x9a, 0x3d, 0xfd, 0x1d, 0xa, 0x55, 0x3f, 0xe3, 0x28, 0x77, 0x26, 0xf, 0xb7, 0xfd, 0x22, 0xf0, 0xaf, 0x5e, 0xc4, 0x1, 0x14, 0x57, 0x36, 0xe5, 0x5d, 0x8c, 0x89, 0xec, 0x80, 0xed, 0x8a, 0x4b, 0x3e, 0x72, 0xb5, 0xe6, 0xcf, 0x74, 0x78, 0x94, 0x3a, 0xe5, 0x28, 0xe8, 0x49, 0xaa, 0xdb, 0x5f, 0x48, 0xd6, 0xdb, 0x66, 0x3e, 0xbb, 0x78, 0x91, 0xc3, 0xe8, 0xce, 0x99, 0xc2, 0xf0, 0xde, 0xfb, 0x1e, 0x28, 0x39, 0x48, 0xda, 0xd9, 0xd1, 0x6b, 0xe7, 0x45, 0xb0, 0x34, 0x9, 0xaa, 0x29, 0xcf, 0x7, 0xb1, 0xf2, 0xe8, 0xc8, 0x77, 0xf4, 0x3a, 0xa0, 0xc, 0x9c, 0xbf, 0x5d, 0x84, 0x73, 0xd1, 0xf6, 0x11, 0xe3, 0xa6, 0x32, 0x4e, 0x90, 0x75, 0xb0, 0x31, 0xf2, 0xee, 0x28, 0xce, 0x4d, 0x56, 0x20, 0x53, 0x1d, 0x25, 0x97, 0x98, 0x91, 0x39, 0x65, 0xbd, 0x77, 0xf4, 0xd3, 0xc0, 0x89, 0x79, 0xf5, 0xdc, 0x6, 0x16, 0xd3, 0x77, 0xca, 0xbc, 0x5, 0xc7, 0x81, 0xf9, 0xaf, 0xe4, 0xd9, 0x30, 0x48, 0x63, 0x17, 0x3a, 0xd5, 0x33, 0xff, 0xd2, 0xb7, 0x5d, 0xf3, 0x1e, 0x2f, 0xf6, 0x1b, 0xf8, 0xbf, 0x20, 0xc6, 0x22, 0x74, 0x9c, 0xd, 0x3, 0x67, 0xc3, 0xd7, 0xb1, 0x1d, 0xd0, 0x55, 0xa, 0xd2, 0x19, 0x84, 0xe, 0xde, 0x18, 0xfa, 0x24, 0x7e, 0x6, 0x58, 0xd, 0x9c, 0xe0, 0xe, 0xea, 0xde, 0x6, 0x6b, 0xc0, 0xd, 0x60, 0x2, 0x9f, 0xf2, 0x4b, 0x47, 0xcd, 0x23, 0x44, 0x83, 0x48, 0x71, 0xf, 0xac, 0xf2, 0x86, 0xca, 0x83, 0x1c, 0x5b, 0x5a, 0xad, 0x0, 0x3, 0x3e, 0x7, 0x94, 0x13, 0x1d, 0x14, 0xeb, 0xdc, 0xea, 0x4c, 0x15, 0xdb, 0xa7, 0x78, 0xd, 0xed, 0x2, 0x7b, 0x8b, 0xa3, 0x9e, 0x93, 0xc3, 0xd8, 0xa6, 0xa5, 0xb2, 0xd6, 0xa9, 0xa1, 0x3b, 0xb9, 0x8b, 0x3d, 0xee, 0xa, 0x20, 0x4b, 0x8a, 0xfd, 0x2, 0xb6, 0xd7, 0xdb, 0xe3, 0xc0, 0x6d, 0xa9, 0xb6, 0x16, 0x3b, 0xc5, 0xe, 0xb, 0xca, 0xca, 0xd9, 0xc6, 0x95, 0xd7, 0x67, 0xac, 0x33, 0xb1, 0x45, 0xe4, 0x13, 0x65, 0xcd, 0xb9, 0xc8, 0xfe, 0xee, 0xce, 0x49, 0xe8, 0xa, 0x2a, 0xbe, 0x63, 0xd0, 0x57, 0xd0, 0x5b, 0xc1, 0x16, 0xe0, 0xf5, 0x15, 0xa9, 0x81, 0xbf, 0x31, 0x72, 0x21, 0x4b, 0x75, 0x4c, 0xc8, 0xd9, 0x7b, 0xe, 0x6c, 0x2b, 0x9c, 0x84, 0xf9, 0x8c, 0x1a, 0x5c, 0xba, 0xc6, 0xc8, 0xce, 0xfb, 0xba, 0x23, 0x44, 0x5, 0x8d, 0x2f, 0xa4, 0x62, 0x17, 0xc8, 0xa5, 0x3f, 0x8c, 0x9d, 0xf9, 0xd3, 0xdd, 0xe7, 0x64, 0x97, 0x3d, 0x53, 0x2e, 0xa4, 0x79, 0xbb, 0x92, 0x89, 0x6f, 0x87, 0x9f, 0xb, 0xe2, 0x42, 0x74, 0xb6, 0x9c, 0xc2, 0x1e, 0xec, 0x6f, 0x74, 0x20, 0x1e, 0xac, 0x45, 0x61, 0xfd, 0x3f, 0x7f, 0xf2, 0x12, 0x70, 0x75, 0xe5, 0xa5, 0xc4, 0x4e, 0x6b, 0xc4, 0x1d, 0xaa, 0x81, 0xbc, 0xdf, 0x51, 0x71, 0x6b, 0x64, 0xa7, 0xe2, 0x3a, 0x35, 0xaa, 0xa4, 0x45, 0x92, 0xfb, 0x96, 0x85, 0xf4, 0xee, 0x9f, 0x8f, 0xae, 0xf8, 0xb8, 0xf4, 0xb1, 0xd4, 0x68, 0xf3, 0xd7, 0xb4, 0x30, 0x15, 0x5c, 0xe5, 0xcc, 0x23, 0xcc, 0x69, 0x29, 0x41, 0xc3, 0x51, 0xb7, 0xa7, 0x5b, 0x8c, 0x6e, 0xd5, 0x89, 0x11, 0xe5, 0x93, 0x12, 0x29, 0xcf, 0x59, 0x14, 0x83, 0x3d, 0x3, 0x7b, 0xc2, 0xf, 0xe1, 0x79, 0xa8, 0x34, 0x92, 0xb4, 0x79, 0x3c, 0x43, 0xba, 0x82, 0xce, 0xa8, 0x9f, 0xa3, 0xc3, 0x95, 0xf4, 0xce, 0x77, 0x11, 0x3f, 0x2e, 0xb1, 0xaa, 0xd5, 0xb5, 0x1c, 0xec, 0x21, 0xe1, 0x9d, 0x2a, 0xe9, 0xcd, 0xf8, 0xee, 0x6, 0x76, 0xc8, 0x3c, 0x6e, 0x74, 0xc0, 0x5f, 0xc9, 0x49, 0x20, 0x9f, 0xbb, 0xfd, 0x39, 0xb1, 0x77, 0x96, 0x1d, 0xcc, 0x14, 0x89, 0x71, 0xab, 0xe5, 0xa6, 0x41, 0x92, 0xde, 0x48, 0xcd, 0x25, 0xc0, 0x5f, 0x32, 0xd3, 0xc2, 0x3c, 0x47, 0x9d, 0x52, 0xd9, 0x50, 0x46, 0xf3, 0x76, 0x68, 0xc, 0x3e, 0x23, 0x4f, 0x21, 0xe7, 0x9b, 0x61, 0x31, 0x30, 0x45, 0xee, 0x2, 0x8f, 0x81, 0x95, 0xc0, 0x99, 0xfa, 0x3, 0x41, 0x8c, 0x4e, 0x90, 0xba, 0x4d, 0xdd, 0x5c, 0xc5, 0xd5, 0xf5, 0x5a, 0xfd, 0x1, 0x5c, 0xc5, 0x18, 0x7e, 0xa5, 0x54, 0x63, 0x65, 0xf0, 0xbc, 0x77, 0xe3, 0x91, 0x52, 0x88, 0x1c, 0xa4, 0xd2, 0xfc, 0x59, 0xe, 0x7e, 0x5, 0xe7, 0x0, 0x25, 0x26, 0x97, 0x64, 0xc3, 0xd1, 0x35, 0xfb, 0x68, 0x35, 0xf7, 0x3f, 0xeb, 0xa, 0x59, 0x53, 0x74, 0xfa, 0xd, 0xd1, 0x2b, 0x2e, 0x33, 0x8a, 0x9, 0xa0, 0x57, 0x83, 0xba, 0xf4, 0x7c, 0x7, 0x74, 0x3d, 0x9, 0x7b, 0xb6, 0x21, 0xc8, 0x6c, 0x7e, 0xc7, 0xf1, 0x6d, 0xa2, 0x7c, 0x9d, 0xbc, 0xb0, 0x67, 0xec, 0x7e, 0xd6, 0xd5, 0x75, 0x6c, 0xb9, 0xe, 0x3a, 0xbc, 0x67, 0x4, 0xc4, 0xcf, 0xf3, 0x7c, 0x9f, 0xce, 0x36, 0xf8, 0x28, 0xf5, 0xc6, 0xce, 0xf8, 0x37, 0x97, 0xb1, 0xab, 0x9d, 0xaf, 0x93, 0xeb, 0x69, 0xd3, 0x39, 0xe, 0x22, 0x7a, 0x11, 0x98, 0x4, 0x6d, 0x56, 0x52, 0x22, 0xbe, 0xfc, 0x3d, 0x98, 0x6, 0x1f, 0x85, 0x58, 0xbf, 0x3e, 0xf9, 0x39, 0xb6, 0x7e, 0x68, 0xb2, 0x39, 0x3, 0x8, 0xc5, 0x77, 0x1b, 0x7a, 0x21, 0x78, 0xd, 0xf4, 0x92, 0x7e, 0x4, 0x6, 0xf5, 0x1b, 0x33, 0xc9, 0x4e, 0xd6, 0xc6, 0x1e, 0x28, 0x15, 0xb2, 0x7d, 0xa5, 0x9, 0x56, 0x7d, 0x6c, 0x62, 0x5f, 0x7, 0x36, 0x80, 0xdd, 0xe0, 0x77, 0x90, 0x3, 0xd, 0x4a, 0xae, 0xbb, 0x1d, 0x21, 0xe2, 0x9f, 0x23, 0xea, 0x3d, 0x20, 0xbe, 0xd8, 0xd1, 0xd5, 0x98, 0x15, 0x91, 0x61, 0xc, 0x2, 0x78, 0x7, 0x37, 0x5e, 0x6d, 0x94, 0x1f, 0x6, 0xe6, 0xb5, 0x32, 0x6a, 0x7a, 0x78, 0x65, 0x29, 0x7e, 0x95, 0x5f, 0x26, 0x27, 0xb4, 0xbf, 0x70, 0xb3, 0xb, 0xd, 0x25, 0x55, 0x47, 0x7e, 0x11, 0x37, 0xbe, 0x8a, 0x69, 0x73, 0x3e, 0x78, 0x19, 0xe4, 0xea, 0xe, 0x4b, 0x96, 0xae, 0x31, 0xc1, 0xec, 0xbf, 0x87, 0xf2, 0xa5, 0x32, 0x44, 0xf, 0x46, 0x76, 0xf6, 0xe9, 0x44, 0xb0, 0xcb, 0x9, 0xf8, 0x12, 0x38, 0x0, 0x52, 0x86, 0x25, 0x6b, 0x4a, 0x78, 0x75, 0xa9, 0x95, 0xcd, 0x20, 0xee, 0x77, 0xf4, 0x50, 0x64, 0xbd, 0xc6, 0x96, 0x41, 0xdc, 0x44, 0x3f, 0x0, 0xdc, 0x7e, 0x3f, 0x97, 0x26, 0xc0, 0x35, 0xe0, 0x56, 0x70, 0x3d, 0xc8, 0x77, 0x85, 0xaf, 0x38, 0xf3, 0x6c, 0x90, 0x83, 0x61, 0x1b, 0x7f, 0x56, 0xf3, 0x7d, 0x90, 0x57, 0xd5, 0x7a, 0x7e, 0x10, 0x9e, 0xc2, 0x1f, 0x2b, 0x8b, 0x6d, 0xcc, 0xc1, 0x5, 0xc2, 0xcb, 0x81, 0xff, 0x61, 0xfc, 0x7, 0xb8, 0x5d, 0xb9, 0x65, 0x98, 0x95, 0xb8, 0x3a, 0xae, 0xaa, 0xd2, 0x38, 0x40, 0xde, 0x78, 0x89, 0x52, 0x67, 0x3b, 0xaf, 0x3f, 0xe3, 0x64, 0x1f, 0xcc, 0xf6, 0x16, 0xe0, 0xe4, 0x43, 0xb0, 0x47, 0x3f, 0x60, 0x74, 0x36, 0x5f, 0x1f, 0x4, 0x5f, 0x81, 0xba, 0xf8, 0xf5, 0x2a, 0x59, 0xa1, 0x2d, 0x24, 0xe3, 0xd5, 0x2c, 0x71, 0xed, 0xee, 0x36, 0xb8, 0x1a, 0xb2, 0x8d, 0xd2, 0x7d, 0x35, 0xa2, 0x8d, 0xb3, 0x91, 0xfe, 0x81, 0x35, 0xc1, 0xaa, 0x17, 0x9b, 0x9d, 0x28, 0xdf, 0x2, 0x5e, 0x5, 0x3f, 0x82, 0x51, 0xc5, 0xbe, 0xde, 0xdf, 0xab, 0xea, 0x44, 0x28, 0x67, 0x5a, 0xd4, 0xdd, 0x43, 0xd9, 0x91, 0x8b, 0x4, 0x52, 0xfb, 0x94, 0xab, 0x1e, 0x1b, 0xf8, 0xcc, 0xdb, 0x15, 0xc0, 0x5c, 0xf6, 0x21, 0x74, 0x31, 0x38, 0x17, 0x9c, 0x5, 0xbc, 0x37, 0x6d, 0x6b, 0xde, 0xff, 0x5, 0x7e, 0x3, 0xbb, 0xc1, 0x76, 0xf0, 0x25, 0xd8, 0x41, 0x2c, 0x5f, 0x7b, 0x21, 0x85, 0xa8, 0x5f, 0xd2, 0x8d, 0xa7, 0x62, 0xd6, 0xf, 0xa3, 0xff, 0x3, 0xf7, 0x93, 0x7f, 0xd4, 0xd5, 0x86, 0x9a, 0x4d, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; - - - - + (NSData *)twitter_icon2x_png { - return [NSData dataWithBytes:twitter_icon2x_png length:sizeof(twitter_icon2x_png)]; - } - - const unsigned char twitter_icon3x_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x42, 0x0, 0x0, 0x0, 0x36, 0x8, 0x6, 0x0, 0x0, 0x0, 0x73, 0xe7, 0x4f, 0x3f, 0x0, 0x0, 0x0, 0x1, 0x73, 0x52, 0x47, 0x42, 0x0, 0xae, 0xce, 0x1c, 0xe9, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0x2e, 0x23, 0x0, 0x0, 0x2e, 0x23, 0x1, 0x78, 0xa5, 0x3f, 0x76, 0x0, 0x0, 0x1, 0xcb, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0xa, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0xa, 0x29, 0x2e, 0xcd, 0x3d, 0x0, 0x0, 0xb, 0x9, 0x49, 0x44, 0x41, 0x54, 0x68, 0x5, 0xd5, 0x9a, 0x7b, 0xa8, 0xe5, 0x55, 0x15, 0xc7, 0xe7, 0xce, 0x1d, 0xc7, 0xd1, 0x44, 0xcd, 0xde, 0x33, 0x15, 0xa9, 0x94, 0x56, 0x14, 0x64, 0x30, 0x44, 0xa1, 0x5d, 0x1a, 0x2c, 0x6d, 0xe8, 0x61, 0x94, 0x45, 0x30, 0x4a, 0x49, 0x52, 0x50, 0x4a, 0x18, 0x18, 0x64, 0xd0, 0x3, 0x26, 0x8, 0x89, 0xe8, 0x41, 0xfd, 0xa3, 0x21, 0x15, 0xa5, 0xff, 0x68, 0x62, 0x89, 0x77, 0xd4, 0x92, 0xc9, 0xc7, 0x58, 0x8, 0x9a, 0x64, 0xce, 0x4c, 0x83, 0x36, 0x39, 0x5a, 0x96, 0x8f, 0xd1, 0xd2, 0x79, 0xdc, 0xb9, 0x7d, 0x3e, 0xfb, 0xec, 0xf5, 0x73, 0xff, 0x7e, 0xe7, 0xf7, 0x3b, 0xf7, 0x9e, 0x39, 0xe7, 0xdc, 0x99, 0x16, 0x7c, 0xcf, 0x5a, 0x7b, 0xed, 0xb5, 0xd7, 0xde, 0x7b, 0xed, 0xb5, 0xf7, 0x6f, 0x9f, 0x73, 0x7e, 0x53, 0xcb, 0x1a, 0x34, 0x3f, 0x3f, 0x3f, 0x8d, 0x6a, 0x7e, 0x6a, 0x6a, 0xea, 0x40, 0xa3, 0x6a, 0x49, 0x8a, 0xf4, 0xbf, 0xdc, 0x8e, 0xa2, 0x7f, 0xca, 0xab, 0x29, 0xce, 0x80, 0x33, 0xc0, 0xa9, 0xe0, 0x64, 0xf0, 0x6a, 0xb0, 0x1b, 0x6c, 0x7, 0x3b, 0xc0, 0xdd, 0xe0, 0x16, 0xda, 0xdc, 0x3, 0x4f, 0x44, 0xbb, 0x15, 0x94, 0xf7, 0x17, 0xe5, 0x29, 0x64, 0xe7, 0xa6, 0xef, 0x52, 0x7f, 0x24, 0xe5, 0x3d, 0x61, 0xb7, 0x8c, 0x86, 0x1a, 0x56, 0x44, 0x39, 0x35, 0xaa, 0x14, 0x4b, 0x20, 0x94, 0x7d, 0x22, 0xbf, 0x1c, 0x5c, 0x6, 0xb6, 0x82, 0x1a, 0x1d, 0x80, 0x6a, 0x8a, 0x5e, 0xe1, 0x19, 0xd8, 0x2f, 0xc0, 0xbb, 0x62, 0xa8, 0xc8, 0x2b, 0xc1, 0x11, 0x22, 0x74, 0xc1, 0xd1, 0xad, 0x5, 0x5f, 0x7, 0x6b, 0x42, 0x67, 0x10, 0xd2, 0x2a, 0xc0, 0xa7, 0xc1, 0x9b, 0xc0, 0x31, 0x56, 0xc2, 0xfb, 0x1c, 0x54, 0x8d, 0xc6, 0x2c, 0xd8, 0x77, 0xb8, 0x44, 0x7e, 0x1f, 0xb8, 0x17, 0x24, 0xca, 0xf3, 0xde, 0x47, 0x61, 0x2f, 0xd8, 0xf, 0xc, 0xc4, 0x1c, 0x28, 0x75, 0x14, 0x13, 0x3d, 0xc7, 0xa7, 0x13, 0x5c, 0x15, 0xfe, 0x82, 0xab, 0x3, 0xa7, 0x83, 0xef, 0x2, 0xdb, 0x5f, 0x13, 0x75, 0x89, 0xa3, 0x48, 0x13, 0x86, 0xaf, 0x1, 0xf7, 0x81, 0x8d, 0x61, 0x80, 0xbc, 0x22, 0xe4, 0x49, 0x71, 0xfa, 0x48, 0xb, 0xa1, 0x7f, 0xe4, 0xb, 0xc1, 0x1e, 0x20, 0xc5, 0x44, 0x1d, 0xb4, 0x93, 0x6f, 0x45, 0xce, 0x10, 0x6d, 0x9f, 0x7, 0x41, 0xd7, 0x20, 0xbc, 0x12, 0x1c, 0xb, 0xce, 0x0, 0x97, 0x80, 0x9b, 0xc0, 0x6e, 0x20, 0x19, 0xd4, 0x37, 0xe7, 0x3e, 0xa7, 0xd3, 0x96, 0x40, 0x91, 0xb6, 0x5, 0x7c, 0x3, 0x8, 0xba, 0x20, 0x26, 0x8e, 0x62, 0x62, 0xc1, 0xc0, 0xf7, 0x94, 0xc8, 0x3, 0xba, 0x20, 0x3a, 0x87, 0xbb, 0xb2, 0x73, 0x39, 0x1b, 0x5a, 0x3, 0x40, 0x7d, 0x4d, 0x9f, 0x6d, 0x23, 0x88, 0xba, 0xba, 0x7, 0x6c, 0x6, 0xcf, 0x5a, 0x68, 0xd0, 0xa5, 0xb9, 0x4f, 0xb7, 0x4e, 0xa, 0x44, 0x35, 0x49, 0x14, 0xee, 0xb1, 0x20, 0x23, 0x76, 0xde, 0xa4, 0x83, 0x41, 0x1f, 0xa9, 0x7f, 0xf8, 0xbb, 0x41, 0xc, 0xf8, 0xf9, 0x61, 0x2, 0x40, 0xbb, 0x32, 0x20, 0x14, 0xd3, 0xf6, 0x71, 0xb, 0x95, 0xe4, 0x7c, 0xc, 0xae, 0x74, 0x3d, 0x38, 0x3a, 0xe6, 0x96, 0x38, 0x8a, 0x18, 0x88, 0x69, 0xf4, 0x0, 0x90, 0xfe, 0xd3, 0x63, 0x29, 0x7d, 0x2e, 0x8c, 0x6, 0xe8, 0xc6, 0x7a, 0x66, 0xe0, 0x2f, 0xfa, 0x3e, 0x6, 0xf9, 0x8e, 0xdc, 0xa7, 0x2b, 0x5a, 0x4e, 0x6c, 0x68, 0xb9, 0x8, 0xa2, 0xbe, 0xdc, 0x2e, 0xe5, 0x96, 0xf9, 0x15, 0xe5, 0xf2, 0x3c, 0x7a, 0xb, 0xe5, 0xf5, 0x6e, 0x8d, 0xa4, 0x84, 0x9f, 0x6, 0x9e, 0x6, 0x92, 0xd1, 0x2c, 0x53, 0xec, 0xb2, 0x32, 0x18, 0xd4, 0xd5, 0x9e, 0x30, 0x51, 0x37, 0x2c, 0xc7, 0x4f, 0xf4, 0x7d, 0x11, 0x72, 0x90, 0x7b, 0x5d, 0x1a, 0x3a, 0x0, 0x2d, 0x6d, 0xc2, 0x8f, 0xdc, 0x6c, 0xf8, 0x11, 0x58, 0xd, 0x5e, 0x7, 0xce, 0x7, 0xee, 0x80, 0xad, 0xe0, 0x23, 0x6, 0x22, 0x9e, 0x18, 0xeb, 0x90, 0x3d, 0x94, 0xa4, 0x48, 0xab, 0x2a, 0x18, 0x73, 0x73, 0x73, 0x3f, 0x41, 0x7f, 0x9c, 0x93, 0x85, 0x2f, 0x7, 0x55, 0x54, 0x87, 0xd, 0x40, 0xf6, 0x11, 0xd9, 0xe0, 0x61, 0x76, 0x27, 0x90, 0xa2, 0xbf, 0x71, 0x4, 0x21, 0x7c, 0xc4, 0x9c, 0x1e, 0xc6, 0xff, 0xcf, 0xc0, 0x2c, 0x78, 0x14, 0x4, 0xf5, 0x1e, 0xc, 0x94, 0x22, 0x10, 0x67, 0x45, 0xd, 0x3c, 0x1e, 0x51, 0xaa, 0xf6, 0x16, 0xfa, 0x2d, 0xc8, 0xef, 0x8c, 0x89, 0x23, 0xaf, 0x0, 0x6, 0x65, 0xe8, 0xc, 0xa1, 0xcd, 0xca, 0x1c, 0x90, 0xb3, 0x91, 0x63, 0xef, 0x46, 0x5f, 0x31, 0x89, 0x81, 0xbc, 0xd8, 0x2, 0x3, 0xed, 0xf0, 0x6f, 0x7d, 0x2c, 0x2e, 0x62, 0x45, 0xdf, 0x8f, 0xb9, 0x18, 0x84, 0x98, 0xc4, 0x73, 0xc8, 0xfb, 0xa2, 0x22, 0xf3, 0x79, 0xb8, 0xe7, 0x82, 0x37, 0x31, 0x6f, 0x9a, 0x6b, 0xc1, 0x8d, 0xb8, 0xf9, 0xa, 0x58, 0xe5, 0xd, 0xd, 0xa8, 0x37, 0x18, 0x8b, 0xe, 0x8, 0xb6, 0xf6, 0x19, 0xb7, 0x3b, 0x7d, 0xfa, 0xcc, 0xb7, 0x2f, 0xb3, 0x4c, 0x5e, 0xa3, 0x6c, 0x5f, 0xd3, 0x75, 0x15, 0x6, 0xd8, 0xea, 0x7b, 0x2e, 0xc3, 0xe6, 0x57, 0x80, 0x8b, 0x15, 0x68, 0xb3, 0xa2, 0xf7, 0xd1, 0x2b, 0x78, 0x91, 0x7a, 0x1c, 0x48, 0xee, 0xd3, 0x32, 0xca, 0xea, 0x8c, 0x68, 0xec, 0x5f, 0xcb, 0xb7, 0x83, 0xf7, 0xeb, 0x28, 0x88, 0x72, 0xda, 0x32, 0xf2, 0xd0, 0xb5, 0x71, 0xea, 0xab, 0x6d, 0x85, 0xfc, 0x73, 0x20, 0x99, 0xd, 0x65, 0x9f, 0x63, 0x93, 0x73, 0xe6, 0x94, 0x63, 0xff, 0x31, 0x7d, 0xc5, 0xd6, 0x4c, 0xbc, 0xc, 0xc4, 0xf1, 0x54, 0xfe, 0x1, 0x48, 0xee, 0xd5, 0xda, 0x40, 0x8a, 0x34, 0x2c, 0x1d, 0xba, 0xff, 0xae, 0x6, 0xd5, 0xb5, 0x36, 0x26, 0x8e, 0xce, 0x5b, 0xaa, 0x5b, 0x47, 0x1e, 0x59, 0x97, 0xaa, 0xd5, 0x2b, 0xc0, 0x8f, 0x2, 0x9b, 0x80, 0x34, 0x89, 0xf3, 0x21, 0xe6, 0x10, 0xe7, 0x84, 0xc1, 0xfe, 0x6a, 0x31, 0xc6, 0x5e, 0x10, 0x50, 0xb8, 0x72, 0x29, 0x15, 0x49, 0xf1, 0xa7, 0x90, 0xef, 0xca, 0x46, 0xb5, 0x81, 0xab, 0xa3, 0x3e, 0x52, 0x36, 0x52, 0xcc, 0xd4, 0xb6, 0xfd, 0xb9, 0xe0, 0x16, 0x3a, 0xf0, 0x26, 0xb7, 0x1e, 0xbc, 0x88, 0xb2, 0xf6, 0x73, 0xc0, 0xad, 0x63, 0x3a, 0x7a, 0x69, 0x32, 0x28, 0xbd, 0xcb, 0x4b, 0xfe, 0xf2, 0x83, 0xde, 0x73, 0xa2, 0xef, 0x2a, 0x8c, 0x6e, 0x9c, 0xe4, 0xb8, 0x23, 0x43, 0xbf, 0xcc, 0x78, 0xbe, 0xa9, 0x73, 0xc7, 0xe3, 0xf8, 0xa2, 0xa3, 0xe5, 0xe, 0x14, 0x65, 0xa4, 0xea, 0x6f, 0x72, 0x85, 0xe7, 0x82, 0x7b, 0xbf, 0x95, 0xb4, 0xcf, 0x6d, 0x62, 0xcf, 0x1d, 0x89, 0xe1, 0xc7, 0xc0, 0xd, 0xe0, 0x66, 0xea, 0x2e, 0x5, 0x6f, 0x7, 0x47, 0xe9, 0x80, 0x3e, 0xe, 0xd8, 0x29, 0xd8, 0x67, 0x7f, 0xa8, 0xe2, 0x2c, 0xb2, 0xf, 0xcb, 0x93, 0xa4, 0x58, 0x40, 0xfb, 0x78, 0xc0, 0xf, 0xc6, 0x75, 0x84, 0xe3, 0x51, 0xe, 0x8a, 0xd4, 0x88, 0xc, 0xb8, 0x95, 0x8a, 0x59, 0xf0, 0x5e, 0xa0, 0xa1, 0x13, 0x2c, 0x1d, 0x51, 0xac, 0x65, 0x87, 0x67, 0x42, 0x5a, 0xfd, 0x6c, 0xa7, 0xbf, 0x77, 0x64, 0x3c, 0xb, 0xff, 0x23, 0xf5, 0xbf, 0x97, 0x83, 0x7, 0xc1, 0x2e, 0x6, 0xb0, 0x1b, 0xa4, 0x20, 0xc3, 0xfd, 0xc6, 0xf8, 0x77, 0xf4, 0x92, 0x63, 0xe8, 0xeb, 0x2b, 0xd5, 0x8c, 0xef, 0x23, 0x7d, 0x99, 0xc4, 0x5d, 0x5f, 0xf0, 0x53, 0x20, 0x8c, 0x4e, 0x8e, 0x92, 0xfb, 0xf4, 0x3b, 0x18, 0xae, 0x3, 0x6, 0x61, 0x2f, 0x30, 0x7d, 0x3b, 0x7, 0x48, 0x5b, 0xaa, 0xab, 0xd4, 0x73, 0x82, 0x42, 0xa5, 0x9d, 0xce, 0x64, 0xc0, 0x96, 0x3d, 0x6, 0x76, 0xe0, 0x7f, 0x7, 0x7c, 0x27, 0x78, 0x34, 0xe3, 0x78, 0xb8, 0x14, 0x59, 0x99, 0xa, 0xd8, 0xe1, 0xba, 0xb7, 0x1d, 0x4b, 0x39, 0x55, 0xe6, 0x8f, 0x36, 0x7d, 0xa9, 0xcb, 0x72, 0xd9, 0xc4, 0xf9, 0x48, 0xb1, 0xf0, 0xbd, 0x52, 0x9b, 0xc2, 0x1a, 0x1c, 0x5c, 0xe, 0xbb, 0x44, 0x11, 0x98, 0x19, 0x6e, 0x95, 0xce, 0x60, 0x50, 0xd7, 0x24, 0x6d, 0x45, 0x4, 0x25, 0x5, 0xbc, 0x69, 0x94, 0xcb, 0x74, 0x97, 0xb2, 0xaa, 0xa3, 0x7a, 0x24, 0xb5, 0x13, 0x76, 0xf5, 0xd, 0xb2, 0xf3, 0x58, 0x4f, 0x70, 0x67, 0xe9, 0xaf, 0x76, 0x3e, 0xa0, 0xaf, 0x56, 0xd2, 0xc9, 0x9b, 0x1, 0x89, 0x30, 0xfe, 0x12, 0x82, 0xdf, 0xd5, 0x75, 0x64, 0x10, 0x3c, 0x47, 0xfa, 0xa2, 0x88, 0xbe, 0x8b, 0xb4, 0xf5, 0x80, 0x32, 0x0, 0xe, 0xc2, 0x80, 0x78, 0x2e, 0xb8, 0x22, 0xc2, 0x41, 0xa9, 0x93, 0x5c, 0xf9, 0x9e, 0x54, 0x7c, 0x96, 0xfd, 0x95, 0x72, 0x61, 0xe2, 0x98, 0xfb, 0x1a, 0x96, 0x3a, 0x64, 0xcd, 0x63, 0x1, 0xbd, 0x27, 0x3d, 0x53, 0xb6, 0x2f, 0xe5, 0x38, 0x4d, 0xd5, 0x9d, 0x49, 0xc3, 0x2b, 0xc0, 0xba, 0x6c, 0xf0, 0x49, 0xf8, 0xf, 0x80, 0x13, 0x98, 0x66, 0xb0, 0x31, 0xf0, 0x5c, 0x3d, 0x14, 0xf3, 0xa9, 0x61, 0x40, 0xdd, 0x66, 0xf2, 0xd8, 0x6, 0xfa, 0x6c, 0xf5, 0x4b, 0x7f, 0x31, 0x1, 0x23, 0x55, 0xc9, 0xd8, 0x57, 0xd4, 0xa6, 0x2f, 0x75, 0xc8, 0xda, 0x46, 0x5b, 0x7f, 0xda, 0x7b, 0x32, 0x37, 0xee, 0xb, 0x60, 0xba, 0x22, 0xd3, 0xc0, 0xc1, 0xb8, 0xa7, 0x3f, 0xd, 0xce, 0x65, 0xd0, 0xf7, 0xc2, 0x37, 0x83, 0x47, 0xc0, 0x76, 0xf0, 0x46, 0x30, 0x12, 0x95, 0x3, 0xcc, 0x8e, 0xd2, 0xef, 0x10, 0x2d, 0xfa, 0x91, 0xfa, 0x69, 0x69, 0x1c, 0x81, 0x78, 0x9c, 0xba, 0x27, 0x5a, 0xea, 0x93, 0xca, 0xd4, 0x8d, 0xe8, 0xfc, 0x15, 0xd9, 0x93, 0xde, 0x80, 0x78, 0x41, 0x12, 0x92, 0x29, 0x45, 0x6c, 0xe6, 0x7d, 0xd4, 0x86, 0xd3, 0x94, 0x96, 0x51, 0xa6, 0xe, 0xf1, 0x85, 0x83, 0xcd, 0x46, 0x51, 0x56, 0xee, 0xa2, 0x41, 0x36, 0x4d, 0x9f, 0x6d, 0xb6, 0xa5, 0x4d, 0x57, 0x1f, 0x85, 0x7e, 0x27, 0x72, 0x64, 0x44, 0x35, 0x8f, 0xa8, 0x77, 0x6b, 0x44, 0x20, 0x34, 0x14, 0xd2, 0x7f, 0x41, 0x3c, 0x62, 0xe2, 0x2e, 0x50, 0x6b, 0x5c, 0xe, 0xac, 0x29, 0x97, 0xe5, 0xe4, 0xed, 0x20, 0x3e, 0x4a, 0x1f, 0xa5, 0x5c, 0xba, 0xea, 0xd2, 0x17, 0x36, 0x8e, 0x39, 0xb6, 0xff, 0x36, 0xec, 0xdd, 0xe6, 0x52, 0xdf, 0x76, 0xd4, 0x28, 0x4d, 0x10, 0x23, 0x1f, 0x6f, 0x77, 0x6a, 0x5, 0xb9, 0x8f, 0xad, 0xf3, 0x50, 0x8b, 0x80, 0x20, 0xfe, 0xdf, 0x91, 0x13, 0x8e, 0x27, 0xd6, 0x9f, 0x1d, 0xbd, 0x99, 0x2d, 0x53, 0x2e, 0x49, 0xa5, 0xf7, 0x71, 0xb9, 0x74, 0x7d, 0x8f, 0xa5, 0x40, 0x84, 0x93, 0xa8, 0xcb, 0x55, 0x3d, 0x66, 0x5a, 0x86, 0x62, 0x31, 0x72, 0xd8, 0x6, 0xb7, 0x4d, 0xd9, 0xae, 0xd4, 0x2b, 0x97, 0x75, 0xa5, 0x1c, 0x76, 0x4d, 0x9b, 0x52, 0x9f, 0x65, 0xc7, 0x17, 0x2b, 0xef, 0x96, 0xb8, 0x3f, 0xeb, 0x3d, 0xf8, 0xfb, 0x3, 0x91, 0x95, 0x31, 0xd9, 0x59, 0x8c, 0x6f, 0xce, 0xd, 0x22, 0x8d, 0x72, 0xb1, 0xce, 0x4a, 0x67, 0x8b, 0x91, 0xeb, 0xad, 0x7b, 0x67, 0x48, 0xd9, 0x2e, 0xea, 0x43, 0x17, 0x5c, 0x7d, 0x29, 0x87, 0xdd, 0x20, 0x7d, 0x61, 0x13, 0x81, 0xf8, 0xb, 0xba, 0xad, 0x85, 0xbe, 0x4f, 0x4c, 0x1, 0xa0, 0x23, 0x6f, 0x96, 0x46, 0xca, 0x83, 0xd1, 0xcb, 0x94, 0x5b, 0xc2, 0x2f, 0x43, 0x3e, 0xf3, 0xab, 0x95, 0x47, 0xee, 0xa3, 0xae, 0xd5, 0xea, 0x33, 0x5c, 0x7a, 0x85, 0xab, 0x3e, 0x9d, 0xbb, 0xdd, 0xc2, 0xdc, 0xe2, 0xa0, 0x6c, 0xdd, 0xea, 0x91, 0x9, 0xda, 0xc7, 0x59, 0x71, 0x13, 0xf2, 0xc6, 0xec, 0xc0, 0xe7, 0x7e, 0x4, 0xa3, 0x35, 0x20, 0x5d, 0xab, 0x95, 0xdb, 0x1f, 0x2a, 0xe6, 0x58, 0x9d, 0xb0, 0xe7, 0x83, 0xfc, 0x36, 0xe0, 0x76, 0xf3, 0xcb, 0x56, 0x64, 0x89, 0xaa, 0x8a, 0xaa, 0x40, 0x68, 0x80, 0x61, 0x1c, 0x2c, 0xdf, 0xc0, 0xe2, 0xca, 0x6c, 0x65, 0x30, 0xfc, 0x6f, 0x50, 0x7, 0x76, 0xd0, 0x1a, 0x10, 0xf4, 0x87, 0x1b, 0xc5, 0xca, 0xdf, 0xc7, 0xc0, 0xee, 0x58, 0x68, 0x70, 0x55, 0x20, 0x34, 0x24, 0x18, 0x6e, 0x11, 0xef, 0xe1, 0x3a, 0xf9, 0x2c, 0xf8, 0xa1, 0x7a, 0x28, 0xae, 0xdf, 0x6, 0x64, 0xe0, 0xd9, 0x91, 0xac, 0xf, 0xfd, 0x87, 0x8b, 0xe6, 0x93, 0x4f, 0x9a, 0x65, 0x3e, 0xff, 0xec, 0x89, 0x69, 0xcb, 0x67, 0xb1, 0xce, 0x6a, 0x81, 0xb0, 0xaa, 0x8, 0x86, 0xbf, 0x1d, 0x7c, 0x1e, 0xd5, 0x45, 0x60, 0x17, 0xd0, 0xd6, 0x80, 0xd8, 0x41, 0x67, 0x56, 0x94, 0x67, 0x46, 0x29, 0xd3, 0xa6, 0x46, 0xd6, 0xb5, 0xd5, 0x87, 0x2e, 0xb8, 0x8d, 0x4a, 0xb9, 0x74, 0xd2, 0xa1, 0x77, 0x6c, 0x9e, 0x71, 0x8e, 0xd7, 0x73, 0xe1, 0x3a, 0xa0, 0x8f, 0x95, 0xcc, 0xa7, 0xef, 0x69, 0x61, 0x9d, 0x34, 0x68, 0x42, 0xee, 0xa7, 0xb4, 0xfa, 0x38, 0x79, 0x29, 0xb6, 0x9f, 0x1, 0xeb, 0xc1, 0x29, 0xe0, 0xc5, 0xa0, 0x2f, 0x88, 0xe8, 0xe, 0x17, 0x8a, 0xf3, 0xe1, 0x6a, 0xe6, 0xf0, 0x9, 0x7, 0xc5, 0x1c, 0xbc, 0x19, 0xb7, 0x9e, 0xf, 0xd6, 0x77, 0x6, 0x22, 0x37, 0xf6, 0x3b, 0x86, 0x93, 0xde, 0x9e, 0x6d, 0xd7, 0xc2, 0x75, 0xfc, 0x41, 0xe0, 0x55, 0x3c, 0xce, 0xd, 0xc4, 0xc3, 0x82, 0x9c, 0x8f, 0x8b, 0x67, 0xd6, 0xba, 0x8d, 0xcf, 0x61, 0xf2, 0xfe, 0xea, 0x5e, 0x2d, 0x2a, 0xba, 0x56, 0x8a, 0xc3, 0xb1, 0x56, 0x49, 0xc3, 0xf8, 0xbe, 0xee, 0xc4, 0xfd, 0xa1, 0x46, 0xa7, 0x5e, 0xbb, 0x25, 0x3, 0xe0, 0xa3, 0x55, 0x1a, 0x18, 0xc8, 0x9e, 0xc9, 0xd2, 0x7d, 0x32, 0xee, 0xf4, 0xa5, 0x27, 0xf7, 0x78, 0xa3, 0x41, 0xc8, 0x72, 0x1c, 0x9c, 0x9d, 0x83, 0x69, 0xd, 0x44, 0x61, 0xbd, 0x9, 0xf9, 0x69, 0x70, 0x62, 0xa1, 0xb, 0xb1, 0x75, 0xbf, 0xe5, 0xb1, 0xb4, 0xd6, 0x45, 0xc3, 0x9, 0x71, 0xe6, 0x9d, 0xb6, 0xb2, 0xd9, 0xe0, 0x7d, 0xe8, 0x7b, 0xf6, 0xc3, 0x78, 0x16, 0xcc, 0x6, 0xed, 0x5a, 0xf7, 0x39, 0xe, 0xe3, 0xe9, 0xe1, 0x21, 0xb9, 0x51, 0x43, 0xc8, 0xa8, 0x9a, 0x15, 0xd6, 0x75, 0x4e, 0x94, 0xb6, 0x9d, 0x75, 0x3a, 0x99, 0x4, 0x19, 0x7c, 0xfc, 0xba, 0x4d, 0xe3, 0x2, 0xf5, 0x53, 0xc6, 0xf1, 0xdb, 0xdc, 0x97, 0x7, 0xe7, 0x82, 0xd4, 0x99, 0xda, 0x38, 0xf7, 0xa6, 0x19, 0xbf, 0x4c, 0x5d, 0x8b, 0xa7, 0xf, 0x81, 0x48, 0x31, 0x3b, 0x5c, 0xf2, 0x9, 0x2f, 0x30, 0x1b, 0x27, 0x6c, 0x36, 0x3c, 0x4, 0x66, 0x18, 0xfb, 0xc3, 0xcc, 0x21, 0xb6, 0x38, 0xaa, 0xc1, 0xd4, 0x9a, 0x11, 0x36, 0xc9, 0x41, 0xd0, 0x91, 0x13, 0xfe, 0x2, 0xf8, 0x13, 0x30, 0x0, 0x46, 0x3e, 0x45, 0x39, 0xaf, 0x4, 0xc5, 0x43, 0x4a, 0x2e, 0xa6, 0xb, 0x64, 0x10, 0xa4, 0xaf, 0xe5, 0x20, 0xb8, 0x90, 0x8b, 0xca, 0x6, 0x1b, 0x75, 0x6, 0xc2, 0x4a, 0x1d, 0xe5, 0xa8, 0xee, 0xa4, 0xf8, 0x71, 0x60, 0x30, 0xec, 0x30, 0x5d, 0x5d, 0xa9, 0x77, 0x0, 0x91, 0x19, 0x9d, 0xd9, 0x85, 0xcd, 0x24, 0xa9, 0x7c, 0x72, 0x5d, 0xc9, 0x98, 0xae, 0xca, 0x9d, 0xc5, 0xb8, 0xc6, 0xd3, 0xb7, 0xab, 0xe, 0xd2, 0xde, 0x83, 0xbf, 0x6, 0x5c, 0xb, 0x4a, 0x72, 0xfb, 0xf8, 0x37, 0xa0, 0x7f, 0xa7, 0x19, 0xb8, 0xf8, 0x9b, 0x6d, 0xa9, 0xb8, 0xfd, 0x4a, 0xfe, 0x87, 0xf2, 0x12, 0x67, 0xd, 0x5f, 0xe8, 0x21, 0x70, 0x70, 0xc1, 0xc1, 0x71, 0x19, 0xc, 0xff, 0xd4, 0xf1, 0x85, 0xaf, 0xfb, 0x41, 0x1b, 0x2d, 0x55, 0x0, 0xec, 0x27, 0xfe, 0x2f, 0xfd, 0x7, 0xf2, 0x69, 0xa3, 0x4, 0x61, 0xa8, 0x74, 0xa6, 0xb3, 0x74, 0x80, 0xe6, 0xe, 0xbd, 0x68, 0x7d, 0x20, 0xe3, 0x6d, 0x70, 0xef, 0x17, 0x2b, 0xc1, 0x71, 0xc0, 0x2d, 0x57, 0x4b, 0x4d, 0xda, 0x92, 0xb5, 0x2f, 0x3c, 0x51, 0x2c, 0x63, 0xe3, 0xf6, 0x1b, 0x68, 0xa7, 0x4d, 0x7, 0x79, 0x71, 0xb2, 0x3f, 0xef, 0x38, 0x1f, 0xc5, 0xcf, 0xd, 0xf8, 0x4c, 0xfd, 0x36, 0x7d, 0x76, 0xb4, 0x1f, 0x4d, 0x6d, 0x67, 0x31, 0x89, 0xf0, 0x44, 0xd9, 0x3f, 0x77, 0x7d, 0x17, 0xe9, 0x97, 0x20, 0xc8, 0x2d, 0x33, 0xd6, 0xec, 0x28, 0xfe, 0x91, 0x8f, 0x4c, 0xd0, 0xff, 0x86, 0x62, 0x1c, 0x3, 0xcf, 0xbc, 0xb0, 0x1b, 0xb, 0xa7, 0x63, 0x3, 0xe1, 0x1b, 0xad, 0xd5, 0x3e, 0x44, 0x7e, 0x15, 0xf0, 0x25, 0xce, 0x78, 0x2b, 0xae, 0x2f, 0x8, 0xc5, 0x24, 0x52, 0x70, 0x2c, 0x37, 0x75, 0xb4, 0x1f, 0x14, 0x38, 0xaa, 0xd3, 0xab, 0x4d, 0xf1, 0x62, 0x98, 0xe7, 0xd1, 0xa7, 0x62, 0x52, 0xc8, 0xe9, 0x1c, 0x8b, 0xf2, 0xd8, 0x39, 0x1d, 0xa4, 0xf3, 0x1, 0xee, 0xaa, 0xc7, 0x23, 0x2a, 0xf5, 0x43, 0xf9, 0x4, 0xe0, 0x8b, 0x60, 0x7f, 0x3, 0x41, 0xfb, 0x87, 0x9c, 0xe0, 0xa0, 0xc9, 0x47, 0x9d, 0xbe, 0x9d, 0x78, 0x1c, 0x8c, 0xbe, 0xf4, 0xe6, 0x53, 0x2c, 0xc6, 0x31, 0x7a, 0x10, 0x70, 0x18, 0x2b, 0x9c, 0x26, 0x4a, 0x59, 0xee, 0x8a, 0xb, 0xe5, 0xbe, 0x74, 0x43, 0xf7, 0x5a, 0xf0, 0x39, 0xb0, 0x5, 0x4, 0xf9, 0xe4, 0x18, 0x6b, 0x10, 0x72, 0x40, 0xf5, 0xbf, 0xa7, 0x90, 0xb7, 0x51, 0x7e, 0xcf, 0x58, 0x83, 0x80, 0xb3, 0x45, 0x1f, 0x96, 0x74, 0xbe, 0x6, 0x7b, 0xf, 0xc5, 0x75, 0xe0, 0x2c, 0x70, 0x2a, 0x90, 0x3c, 0xec, 0xe2, 0x1b, 0x5f, 0x52, 0x8c, 0xe9, 0xc3, 0xb1, 0x79, 0x4f, 0xf1, 0x52, 0x14, 0x3f, 0xc, 0xfd, 0x1a, 0xf9, 0x8b, 0x1c, 0x86, 0x6, 0x23, 0x2d, 0x10, 0xb2, 0xf7, 0x88, 0x91, 0xc9, 0xb4, 0x7f, 0x3d, 0x5e, 0x7c, 0xfe, 0x3e, 0x6, 0xfc, 0x2e, 0xe1, 0x1f, 0x3a, 0x3e, 0x1, 0x7c, 0x2a, 0xac, 0x6, 0x27, 0x3, 0xdf, 0x59, 0x7e, 0x2b, 0x70, 0xf2, 0xe5, 0xf6, 0xf0, 0xf7, 0x4c, 0xcf, 0xa, 0x7, 0x55, 0x3b, 0xfd, 0x29, 0x1f, 0x14, 0x31, 0x1e, 0xe6, 0x96, 0x26, 0x67, 0x70, 0x23, 0x0, 0xbb, 0x91, 0xbf, 0xd, 0x2e, 0xa7, 0xce, 0x83, 0x32, 0x2e, 0x74, 0x63, 0xe9, 0xd3, 0x81, 0xea, 0xd0, 0xce, 0xce, 0x3, 0x67, 0x83, 0x55, 0xc0, 0x4e, 0xd5, 0xfb, 0xde, 0x82, 0x68, 0x6e, 0xd, 0x57, 0xc8, 0x55, 0xd0, 0xc6, 0xc7, 0x97, 0x83, 0x19, 0xd7, 0x80, 0x7c, 0xb3, 0x26, 0xae, 0xcb, 0x11, 0x4, 0xb3, 0xe0, 0x5b, 0xe8, 0x6f, 0x87, 0x2f, 0xfa, 0xdb, 0xa4, 0xb6, 0x43, 0x13, 0x11, 0x7e, 0x5, 0xb8, 0x18, 0x3c, 0x8, 0x9a, 0xe4, 0x21, 0xe5, 0x2a, 0x78, 0x5a, 0x7b, 0x58, 0x79, 0x80, 0x55, 0x27, 0xfe, 0x28, 0x7, 0x23, 0x6d, 0xf5, 0x55, 0xde, 0x4c, 0x75, 0x1d, 0x74, 0x17, 0xc2, 0x6, 0x60, 0xb0, 0x13, 0x21, 0x1b, 0xfc, 0x89, 0x50, 0xed, 0x8c, 0xa0, 0x23, 0x5f, 0x4, 0xfb, 0x30, 0x38, 0x1f, 0xcc, 0x80, 0x72, 0x1b, 0xb8, 0x52, 0x41, 0x55, 0x3b, 0xda, 0xb0, 0x58, 0x55, 0x31, 0xea, 0x9b, 0xbc, 0x99, 0x31, 0x65, 0x16, 0x35, 0x27, 0xf7, 0x3b, 0x1a, 0x5f, 0x5, 0xae, 0xc3, 0xef, 0x53, 0x3a, 0xa2, 0xf, 0xc7, 0xe1, 0xcb, 0x69, 0x63, 0x39, 0xf, 0xf4, 0xd9, 0x24, 0xcf, 0x8, 0x67, 0xe1, 0x60, 0xaa, 0x8e, 0xd0, 0x1d, 0x4d, 0xf9, 0x74, 0x70, 0xe, 0x38, 0x13, 0x9c, 0x4, 0x9a, 0xe4, 0xa0, 0x9a, 0x13, 0xd4, 0x97, 0x3e, 0xbd, 0x31, 0xb6, 0xd, 0xda, 0x6d, 0xd6, 0x16, 0xb5, 0x1d, 0xe8, 0x37, 0x1, 0xbf, 0xee, 0x6f, 0xa6, 0x6d, 0xfa, 0x35, 0xc, 0x3f, 0xda, 0xfb, 0x5b, 0xe3, 0xa2, 0xbf, 0x45, 0x62, 0x7f, 0x50, 0x54, 0xd, 0x2a, 0x7, 0xc4, 0xe7, 0xb1, 0x1, 0xa9, 0x26, 0x88, 0xde, 0xa7, 0x85, 0x2f, 0x88, 0xcd, 0x80, 0xb5, 0xe0, 0xd, 0xc0, 0xb3, 0x63, 0x14, 0xfa, 0x37, 0x8d, 0xb7, 0x81, 0xbb, 0xc1, 0x6d, 0xc0, 0x7f, 0xa2, 0x1e, 0x81, 0x27, 0xea, 0x1a, 0x4b, 0xd4, 0x4f, 0x82, 0x57, 0x81, 0x8, 0xe7, 0xc5, 0x20, 0x3c, 0xb8, 0x6a, 0xab, 0x4a, 0x9d, 0x5b, 0xe7, 0x44, 0x70, 0x4a, 0x86, 0x99, 0xe2, 0x93, 0xe5, 0x4, 0x70, 0x2c, 0x78, 0x19, 0xd0, 0xc6, 0x76, 0x4f, 0x82, 0x27, 0x80, 0xef, 0x5c, 0xfc, 0xb, 0xec, 0x2, 0xae, 0xbc, 0x1, 0xd8, 0xa, 0x1e, 0xc2, 0x7f, 0x5a, 0x79, 0xe4, 0x44, 0xf8, 0x4f, 0x19, 0x40, 0xa1, 0xb6, 0x18, 0xb9, 0x7a, 0xa2, 0xec, 0x7f, 0x27, 0x77, 0xca, 0xf8, 0x2b, 0x28, 0xe6, 0x63, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; - - - - + (NSData *)twitter_icon3x_png { - return [NSData dataWithBytes:twitter_icon3x_png length:sizeof(twitter_icon3x_png)]; - } - -@end diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Other/ParseUI.h b/FoodbLog/Pods/ParseUI/ParseUI/Other/ParseUI.h deleted file mode 100644 index 788a4b0..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Other/ParseUI.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 -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Other/ParseUIConstants.h b/FoodbLog/Pods/ParseUI/ParseUI/Other/ParseUIConstants.h deleted file mode 100644 index edd970a..0000000 --- a/FoodbLog/Pods/ParseUI/ParseUI/Other/ParseUIConstants.h +++ /dev/null @@ -1,44 +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 - -#ifndef ParseUI_ParseUIConstants_h -#define ParseUI_ParseUIConstants_h - -///-------------------------------------- -/// @name Deprecated Macros -///-------------------------------------- - -#ifndef PARSE_UI_DEPRECATED -# ifdef __deprecated_msg -# define PARSE_UI_DEPRECATED(_MSG) (deprecated(_MSG)) -# else -# ifdef __deprecated -# define PARSE_UI_DEPRECATED(_MSG) (deprecated) -# else -# define PARSE_UI_DEPRECATED(_MSG) -# endif -# endif -#endif - -#endif diff --git a/FoodbLog/Pods/ParseUI/ParseUI/Resources/Localization/en.lproj/ParseUI.strings b/FoodbLog/Pods/ParseUI/ParseUI/Resources/Localization/en.lproj/ParseUI.strings deleted file mode 100644 index 998662295e68838b7a263a8971d5cbcb8518aa52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6528 zcmd5>TTc@~6h6=ViVX=N@d18-F-m|EA^{Z8=hBu!EUmUh!k<^aZ^q%Ax$JhU<&vg! zcjnyhGyMLwEpMcf9qHq9BXfKwGM284u=+-}Wlh$LyX)A0hi~2PTVSpMpVUu5Z-&o3 zXiveX!ruYj2jEx9t$UsUW{9T>5{w;AM~(nLlta9K!Ri3`yH2_}@F$RPgtaMPRZe0K zK(PyWYH*L=xm@GPawLZt)~9kOy+@sAfVy^)R&og{11ATi96LGZ;91G0Y{&=v-Gb(7 zf#>CGZMzGJ$IxOBdCab=objrqvIpJnL1%>DuJh17tV1hX`!+!-mu9G#>xq1oWBB<* zc4QBpK9&PmHTZK6>-oOrRNl8d_DwVdy1J&c>{^VU+d*w(@dMnt)ZtIyrygRCkOODs zzI$Ul4xxA7d68M+vrsLe94q)_IVvR?|AmUxs)HzD%w0m7iF`9YOLvrez7tbqtPMep zH6g7S?;{S)ke1^jNGk!O?@Z2R2l03$`-n%if4-+&N_&mZaz zJw%C9h^Mr&PUOnjwj-YqcdVTc(6#1m!Ph+gi!S;m|qs+Y-qm5+ee|yo~*?qBGG5lhwQutgZ`lLbx_}=L25BoghfH}vi zGk5R*(}NiwLr@|w+LnEoyiyHH5LV_B`Do&UZ%VmvJvYNl zvC7GY^39@IW%ZPst!C%08FXOp;_Sz1YgN&=1zMrE=lXqi{Mc3NeP4-%YOj&?|8r|o zmtRd5NO77qy+z#8Q;cNRVXN(Gqdmki=YKzMlNTeTLe9je2RnJ6K4w5$Osnw)bR!?0 zcc>4u>@{f2Ot*5i*SLgfHP$Kjb?C}2F?gKN+v=HP)#=FU^TW+LzDCwZt?yfhh=q1@ zP<`a_yy>G+&!L?E`iQhp`L0|CsW5*{Af1nNRz|+@wAs!QtKwv>cK{j3_)d`tJ$PpX znL5~S7Z)Y;j0M`l-r3154+b`N@^3}w4V6O`rJ zaefY`nzWMnTL~MVtC_*Hm*poZ)uI{7Y7yp_%1toZYvXmLoUS*~DtRHsx1Orw5yM!1 zw&Jn2bI$GJ#OiN%80TSr^Et_!>H%Fu$%R$Vzo`h&-JrCWNy^wcw zSNKrwa4%J^pD!nYwLa_VPgryWxq0uWvNEURnrMAdUr$18ESjZh;gHoOTcq5*PiSkE zH}^|An<%W+%~tQ1;B7sS&p1yN|GB->X+&>Nm&pNEW1hSgXF|%a?~eRQ*~%BMTUr;0MAj-jHH12o?kK%{$5Z?RcM%~( diff --git a/FoodbLog/Pods/ParseUI/README.md b/FoodbLog/Pods/ParseUI/README.md deleted file mode 100644 index 7cb8a41..0000000 --- a/FoodbLog/Pods/ParseUI/README.md +++ /dev/null @@ -1,115 +0,0 @@ -# ParseUI - -[![Build Status](http://img.shields.io/travis/ParsePlatform/ParseUI-iOS/master.svg?style=flat)](https://travis-ci.org/ParsePlatform/ParseUI-iOS) -[![Pod Version](http://img.shields.io/cocoapods/v/ParseUI.svg?style=flat)](http://cocoadocs.org/docsets/ParseUI/) -[![Pod Platform](http://img.shields.io/cocoapods/p/ParseUI.svg?style=flat)](http://cocoadocs.org/docsets/ParseUI/) -[![Pod License](http://img.shields.io/cocoapods/l/ParseUI.svg?style=flat)](https://github.com/ParsePlatform/ParseUI-iOS/blob/master/LICENSE) - -## Overview - -`ParseUI` is a collection of a handy user interface components to be used with Parse iOS SDK, -which streamline and simplify logging in / signing up `PFUser`s and displaying a list of `PFObject`s. - -## Getting Started - -#### CocoaPods - -`ParseUI` is available on CocoaPods. -Add the following to your `Podfile`: - -```ruby -pod 'ParseUI' -``` - -#### Packaged Releases - -You can download the latest release in a form of `ParseUI.framework` from our [Releases](https://github.com/ParsePlatform/ParseUI-iOS/releases) page. - -Add `ParseUI.framework` to your Xcode project by dragging it into your project folder target, then add the following to any files that use `ParseUI` components: - - #import - -#### Build from Source - -`ParseUI` can also be built from source and supports Xcode subproject referencing. -Follow these steps to build and run via source code: -- Download the source code via `git clone` or in an archive -- Run `pod install` in the repo root to download all the dependencies -- Open `ParseUI.xcworkspace` -- Build and Run `ParseUIDemo` target - -## Components - -#### PFLogInViewController -If you are using Parse to manage users in your mobile app, you are already familiar with the `PFUser` class. -At some point in your app, you might want to present a screen to log in your `PFUser`. -`ParseUI` provides a view controller that does exactly this: -```objective-c -PFLogInViewController *logInViewController = [[PFLogInViewController alloc] init]; -logInViewController.delegate = self; -[self presentViewController:logInViewController animated:YES completion:nil]; -``` - -#### PFSignUpViewController -If you are using `PFLogInViewController` with the `PFLogInFieldsSignUpButton` option enabled, -you do not need to do any additional work to enable the sign up functionality. -When your user taps on the sign up button on the log in screen - a sign up screen will appear. -However, there are occasions where you might want to use the sign up screen independently of the log in screen. -This is when the `PFSignUpViewController` comes in handy. -```objective-c -PFSignUpViewController *controller = [[PFSignUpViewController alloc] init]; -controller.delegate = self; -[self presentViewController:controller animated:YES completion:nil]; -``` - -#### PFQueryTableViewController -Data oriented iOS applications are mostly a collection of `UITableViewController`s and corresponding `UITableView`s. -When using Parse, each cell of a `UITableView` typically represents data from a `PFObject`. -`PFQueryTableViewController` is a sub-class of `UITableViewController` that provides a layer of abstraction that lets you easily display data from one of your Parse classes. -```objective-c -PFQueryTableViewController *controller = [[PFQueryTableViewController alloc] initWithStyle:UITableViewStylePlain className:@"Todo"]; -[self presentViewController:controller animated:YES completion:nil]; -``` - -#### PFQueryCollectionViewController -A lot of advanced use cases usually include displaying data in a custom dynamic layout that is different from a simple list. -`PFQueryTableViewController` is a sub-class of `UICollectionViewController` that provides a layer of abstraction that lets you easily display data from one of your Parse classes in any dynamic and custom layout you might think of - -To display data in a simple grid layout you can use the default `UICollectionViewFlowLayout`: -```objective-c -PFQueryCollectionViewController *controller = [[PFQueryCollectionViewController alloc] initWithClassName:@"Todo"]; -UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *)controller.collectionViewLayout; -flowLayout.itemSize = CGSizeMake(100.0f, 100.0f); -[self presentViewController:controller animated:YES completion:nil]; -``` - -And, for example, to display data in a circular layout - you can pass an instance of `UICollectionViewLayout` at initialization time: -```objective-c -UICollectionViewLayout *customCircularLayout = ...; -PFQueryCollectionViewController *controller = [[PFQueryCollectionViewController alloc] initWithCollectionViewLayout:customCircularLayout - className:@"Todo"]; -[self presentViewController:controller animated:YES completion:nil]; -``` - -#### PFImageView -Many apps need to display images stored in the Parse Cloud as `PFFile`s. -However, to load remote images with the built-in `UIImageView` involves writing many lines of boilerplate code. -`PFImageView` simplifies this task by abstracting away these parts. -```objective-c -PFImageView *imageView = [[PFImageView alloc] init]; -imageView.image = [UIImage imageNamed:@"..."]; // placeholder image -imageView.file = (PFFile *)someObject[@"picture"]; // remote image -[imageView loadInBackground]; -``` - -#### PFProductTableViewController -`PFProductTableViewController` is a subclass of `PFQueryTableViewController` that displays all IAP products in a table view. Some content apps, such as an app that sells comic books or video tutorials, may find it handy to use `PFProductTableViewController` to sell the products. By default, each cell is a product, and tapping on a cell initiates the purchase for the product. If the product has associated downloadable content, the download will start when the cell is selected and a progress bar is displayed to indicate the progress of the download. - -## Learn More -- Check out [ParseUIDemo](https://github.com/ParsePlatform/ParseUI-iOS/tree/master/ParseUIDemo) project -- Read the [iOS Guides](https://parse.com/docs/ios_guide#ui/iOS) -- Browse official [API Reference](https://parse.com/docs/ios/api/) -- Follow few [tutorials](https://parse.com/tutorials/) - -## Contributing -See the CONTRIBUTING file for how to help out. diff --git a/FoodbLog/Pods/Pods.xcodeproj/project.pbxproj b/FoodbLog/Pods/Pods.xcodeproj/project.pbxproj deleted file mode 100644 index ee22423..0000000 --- a/FoodbLog/Pods/Pods.xcodeproj/project.pbxproj +++ /dev/null @@ -1,4696 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 000A86E96A999630D18730F9FE407521 /* PFSessionUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = AC7DB93B4EAA0F9CF5C79181A315DD5D /* PFSessionUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0136E37C32D8DE8DF43162608ACD7EF5 /* PFQueryCollectionViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = E272D407AC4A249F7DCA0B9CA3115B66 /* PFQueryCollectionViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 01BB74BC139D1D09260F64D925379F49 /* PFQueryUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 58AE592385190B7467E751B3B8DACB38 /* PFQueryUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0354AEA3E753D30AE8E6B94A701A1A90 /* PFRESTFileCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 436C46A02A32E7AC27D14D39EC7C1837 /* PFRESTFileCommand.m */; }; - 03737B28D6BAF57168047F81B5FC83DC /* PFAnonymousUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = B6F772B42BF7CA65B75F996B143430CD /* PFAnonymousUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 03C60FBD9CB7547B458B40058168BB28 /* UNIHTTPClientHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = EAE6707081D74AD48DDC2CD34E54F4A5 /* UNIHTTPClientHelper.h */; }; - 03E5826A251D0DE9BF070EAB5A3F6B07 /* PFSQLiteStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = 66D7E61A2DA0CCA139659AE3C52ADAC5 /* PFSQLiteStatement.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 03FDAA175EB6B999D72B4EB88E67B03E /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = E05ADC8B41F427B22AC3E815A19350EB /* BFCancellationTokenRegistration.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 049FE09CD66461A8ABBDCD0F41EA4532 /* PFLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = B0315B64F3C557F7C3897F4E68B228A5 /* PFLoadingView.m */; }; - 04BE8237D681A07B607B091DCB0FCE6A /* PFRESTUserCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 78DF666508E81974752F6338C9BD57F0 /* PFRESTUserCommand.m */; }; - 04CB32149BEA0320CF6F9640A78D8327 /* PFConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4133DB2BFB881FA9162EC51EF7038118 /* PFConfigController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 04DBFADECB060B72536903FAD0684BBE /* FUISegmentedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A7EC5204AF6AD0ACD56CD9B3D27A7E8 /* FUISegmentedControl.m */; }; - 055F10145C443934BB202FE4BE8E3DB2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - 056DDAB5F33D617C977BAE5F25ECD98C /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 447A70708A6608EE3D4BD4E556895AE6 /* AFHTTPRequestOperation.m */; }; - 05896B286C7BD0C5F16B9AFE7857FAC4 /* PFACL.m in Sources */ = {isa = PBXBuildFile; fileRef = 0528637876B6E3CD1CC1904766E72FCF /* PFACL.m */; }; - 064CF6A1C6BD102075020713D14FB109 /* PFFileDataStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CF00F1FC0F39F69845946C2AD585948 /* PFFileDataStream.m */; }; - 07A6B25857900B4C1A2C450E1B6CC2C6 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */; }; - 084E0CA489A67284CCA0A3CACBF8B0E7 /* PFInstallationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BC3203CA8DEAE4E766361C3772E32DF /* PFInstallationConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0871B276C9E86024967A75834BF8BA6A /* UIButton+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 89DE757655305B9DAB2E3EA0D59AE60D /* UIButton+Chameleon.m */; }; - 0918720A79F5B3CE0D7CCB713DCD4F16 /* IQUITextFieldView+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 22F7F0A49C5577FAC19A72BBDAE54073 /* IQUITextFieldView+Additions.m */; }; - 0925FC3D640ECBAF8B8D0AA184F95BEF /* PFActionButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 56EFB542F9FA3A986A2C18607C6BA01A /* PFActionButton.m */; }; - 09292E938D63ED03EE26FFF12249BDD0 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 78392292469D781C93066CD8051EC869 /* BFCancellationToken.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 09AD6095076F77A17AF15C8FA5DADC7A /* PFJSONSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = E4ED7A0517A36ECA8CCCE78610B55016 /* PFJSONSerialization.m */; }; - 09FDD64FF016A46433ABC8E1A95CE5B6 /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = B77EC240733E6F154C558B7682AB8B94 /* Bolts.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 0B59DB8E6AB6779CC25A6E28EF151996 /* IQKeyboardReturnKeyHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = A37B0AEE4085E5EAF1D675B479E83F07 /* IQKeyboardReturnKeyHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0BFBDC63C826F1DAD4758E0549141BE7 /* PFPrimaryButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 826F299C0C32FA4481DAE44FA6FA0A1E /* PFPrimaryButton.m */; }; - 0C0D5C75A59E94327ABF2F1277BA6325 /* UIBarButtonItem+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 81A894C8CDCCFEAB2B5E90D348379A43 /* UIBarButtonItem+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0C4D15C99084144F0AE0AACF24644554 /* PFRESTCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = CF296274D6055775584EBDE9FFA27649 /* PFRESTCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0C90ECF0F1EE859A59AFA69F87780746 /* PFHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 8924CD04B6BFE4AAC5C88AEA98869B06 /* PFHash.m */; }; - 0CC24C2247F9698B3E15F4CD4A651E9D /* PFURLSessionDataTaskDelegate_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DA5EF8C3E29EFFDABDC9EE3902FE630 /* PFURLSessionDataTaskDelegate_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0CCEBBF735A04B98E5C808E82DAE4CA8 /* PFObjectBatchController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A7B4A661CDD8F7A507BC897C1C1F57D /* PFObjectBatchController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0D433D2B67E6C443BD7CE63B01107D09 /* IQUIViewController+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C73CA6320217923A2DFB485254CC628 /* IQUIViewController+Additions.m */; }; - 0D7ACCD56C3A035010D6E8DE07225906 /* PFTextButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EDD0EDAAEC49A923F963CFF2EB1A94F /* PFTextButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0E46571B85EE1DEB0E0BBE4324B2F5CE /* PFFileDataStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F5D0B6D294347476FD73D958F09ED17 /* PFFileDataStream.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0F5680893697DCD762345A72BE90A107 /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FA89EADBEBD0F217B329170BCD40A4C /* UIProgressView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0FA4BDB376E469CB553E01E199BBB63A /* PFRESTPushCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = D2E0EEEC88F8887028FA6F0DDA67548B /* PFRESTPushCommand.m */; }; - 0FC757A2467A1C8278B3C8E0FD126CB9 /* PFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 3424FEAC2E4DE6A897AE678346A16EB3 /* PFObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0FF92B7CA2702E3FB545DBC76EB8F7DD /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D60463E70F6B8741716B5430ED6586F /* UIActivityIndicatorView+AFNetworking.m */; }; - 105080EA61E3AD581D9D992B1C5EB418 /* PFOfflineQueryLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = ED353E01D2DC7C2CFC849BFC56253F3F /* PFOfflineQueryLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1053442EE9C1B64B2AAD7CB91CC8F960 /* PFHash.h in Headers */ = {isa = PBXBuildFile; fileRef = EC4A64A0CD9BB0968D9668774F8AB562 /* PFHash.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 112A2B2F920B6739EF4388D9F5F09D1D /* PFLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 80476201DCD8D8BD6436D2B68B92209C /* PFLoadingView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 11BCBDEFED4629E3C8FC48ED753E74E6 /* PFPaymentTransactionObserver_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D093C8CB7A26243277525B5AAEEFDAC /* PFPaymentTransactionObserver_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1233214C807850AC28C1C7BC25C7606D /* PFSQLiteDatabaseResult.h in Headers */ = {isa = PBXBuildFile; fileRef = DC59FC62BE26AD5C562D7BBF2224A10E /* PFSQLiteDatabaseResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 12818D0029FE4E7608CDA06B0E38E47D /* flat-ui-icons-regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 70B003B9161DCD2E0A45781DF2576C89 /* flat-ui-icons-regular.ttf */; }; - 135A844B6167C7B3BBC7AED7CA8826DA /* PFObjectFilePersistenceController.h in Headers */ = {isa = PBXBuildFile; fileRef = A0B75CA0A1B123DC95D30ED0D3F93513 /* PFObjectFilePersistenceController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1383661E416ECA10B53C370FD7DA478C /* PFMultiProcessFileLockController.h in Headers */ = {isa = PBXBuildFile; fileRef = DD67EEF35668EABDA6CDE4706E5C10D0 /* PFMultiProcessFileLockController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 13CDBBD7FCCA51D3FD1983ED9C0486D1 /* UNIHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BBDBA1C6D3C481A980BC35C14B1BAEF /* UNIHTTPRequest.h */; }; - 13EFAF7127423EC8B6BE3BC894FAB0DC /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 18D28DEFCE0FAFDD3C9195B9594781FC /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1443D972565FC29DF40A16022899A59D /* UIColor+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 97B2351AC859811A6FD2A910BB95E71D /* UIColor+ChameleonPrivate.m */; }; - 15821E308FD874609FFFE7B07AA7BEE9 /* PFOfflineQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 57F620D9F908B6A65FB1CEE68626BF6E /* PFOfflineQueryController.m */; }; - 16ADBCAD54B5CF1F3995F1AF0154F67B /* PFSessionController.m in Sources */ = {isa = PBXBuildFile; fileRef = E92240B95F45B88D980A83809E4BCE74 /* PFSessionController.m */; }; - 16B523016828FB603F9E4D9DB07CD7AF /* PFUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D0A81E8C2565C9257E716AD6F1840C1 /* PFUserController.m */; }; - 16C9563FC522AFCBB4B9593E72899D21 /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A7B398E287C24BCC8433260FC465DB3 /* SDWebImage-dummy.m */; }; - 16CFA704931431EC2146912A493064F2 /* PFObjectEstimatedData.m in Sources */ = {isa = PBXBuildFile; fileRef = 8727E4ED80EA777438361FDA993B9BE4 /* PFObjectEstimatedData.m */; }; - 170B81C1284725FB6076446FABCCDFE3 /* PFConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 67B1DADD0464EB28623E46BA51F4E731 /* PFConfig.m */; }; - 1723BEF336768A66DA2AF9BCF2BE3BB2 /* PFProductTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B852FCF809F069DBCAB8194541BD2D2 /* PFProductTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17407DB318F6ECE65359F1988EB587C6 /* PFConfig_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 793A3BFEC9783DDC1830CDC4663B9EC4 /* PFConfig_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 17826DD59204D4468835FC0C09E9EBA5 /* UNIJsonNode.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = A616ECB7E02535F4B9005E0B7B570609 /* UNIJsonNode.h */; }; - 17987D10D1BCBE60B5B277B9194A1CE1 /* PFPushController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B765AFD4A4848FC69B9C8A2E9F26602 /* PFPushController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 17FFB9A78D520A8A0C2133681F0C4589 /* PFQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 70E696DD69E7E5ED847216871E48280C /* PFQueryController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1810DA64266F52B6508F1AF0754D7D1F /* FUIPopoverBackgroundView.h in Headers */ = {isa = PBXBuildFile; fileRef = BFB3C1E76C4F806EFCDE8512A39D23C2 /* FUIPopoverBackgroundView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1891EB569E88E565A1387A243A000F4A /* PFColor.m in Sources */ = {isa = PBXBuildFile; fileRef = A3F525305019C6D6103B6394A0D2FFAB /* PFColor.m */; }; - 18BFB3DF28A19F110FE09F0BCC652A99 /* PFPinningObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 2100573153580E93D49B528DA64E5E5F /* PFPinningObjectStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 192494CAD9AAE36D9D54BE9950D74FA4 /* PFUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = AE6967C88C45F046AD5C10E7ACE7F9DE /* PFUserState.m */; }; - 196100D6BA1B2CA2FC16F09196B9F48C /* PFLogInView.m in Sources */ = {isa = PBXBuildFile; fileRef = AA873AB0DE8D007CA8F0042C3B6675E3 /* PFLogInView.m */; }; - 19BEEA34AF0C75BF7625B3E99E24D16B /* PFQueryState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 25A6BCE1E348D02F01E197A0C48E07E7 /* PFQueryState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1A18FCCEB1D3BF943E9E049EC19EA46D /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = CB77AF007BC5AA8EA10347DB05702138 /* AFURLResponseSerialization.m */; }; - 1A30E79E21EC2187DB34AA1B105B741A /* PFSignUpView.h in Headers */ = {isa = PBXBuildFile; fileRef = CB00637E4C07D93AA94189E0D17D0509 /* PFSignUpView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1A8275935FF8BACEEA3858BEA3434421 /* PFUserAuthenticationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 10327370A383E65FA840807957C88BCD /* PFUserAuthenticationDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1AF8E5D403591848BFA38386949654ED /* PFInstallationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FCCA3A37B3313BAF696EBB3102DF427 /* PFInstallationPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1AFB8287EE97FBB14C982D3730384309 /* PFObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DFE6A76A1CE11D7A2988AB23405FE3D /* PFObjectControlling.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1B3EB346D29198E022DC233258C133B7 /* PFURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 524E125E9BB16B2EA346C11FA2CCF3DB /* PFURLSession.m */; }; - 1B63D74CBA62C2E4CEA16D613970A1D9 /* PFPinningEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = F148BFBBDD8AB8A9E87918D610748144 /* PFPinningEventuallyQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1B7B817BF37A32BD3EC434F3C36C4764 /* UITabBar+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B1DC4F3EA65E8107DBC6146CF990FFF /* UITabBar+FlatUI.m */; }; - 1BE7576A9CF85332BF9CE0A20A4654FE /* PFTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCA492568C51FFC3E67F860276C05E61 /* PFTableViewCell.m */; }; - 1C6C96BE29A770F780EDC084673E03DA /* PFCoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DA0612D4D7F2E82006DC4C386EE7835 /* PFCoreManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1CC6FFF7532AECCB61FF240C59D3748E /* PFLogInViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FB8156015613925F2F535F01040F256 /* PFLogInViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1D1597CB5319D82AB03C4656A4FFC3E2 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F62BD8D055CECF254F18875CD46DFA2 /* CoreLocation.framework */; }; - 1D4F83C8E6A5CCD96E035DF6E03A7C58 /* PFRESTAnalyticsCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E425907A301715A116FF9A3132EFC63 /* PFRESTAnalyticsCommand.m */; }; - 1DBDEF199D3AEF9310F2935DBBBF1F89 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - 1DD099BB263B6FC964DF781D1887C906 /* PFCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 089CCF84955BA2531A9DA4EB301EE774 /* PFCategoryLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1E82CB078732A340B2516F9D5971E917 /* UNIJsonNode.h in Headers */ = {isa = PBXBuildFile; fileRef = A616ECB7E02535F4B9005E0B7B570609 /* UNIJsonNode.h */; }; - 1E8D6949CBCA40DB1BB2E04CBAC3A80F /* Unirest-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DE1C0FA9FAF3336E0D882CF851F8D942 /* Unirest-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1EA53431B0411D64E969C75020D2253D /* PFUserFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = CA81F6D4EC4A09874076DCCE8890B484 /* PFUserFileCodingLogic.m */; }; - 1EBA3D2F590571ADD7C4824FD35C6CD2 /* UIPopoverController+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DDE204F56A235BFC67201687941B5F5 /* UIPopoverController+FlatUI.m */; }; - 1EDEA12414A8201331E9B8B22F1B7F92 /* PFPin.h in Headers */ = {isa = PBXBuildFile; fileRef = A7B9CAD0F05D1A202F8BFBCEC0C7F240 /* PFPin.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1EF0C2E2ADE21F09A52C24D1C6A1DEB5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - 1F14458F8079F45B39F591632AF289EE /* PFRESTObjectCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F975DFB0B29996EF17B1A0A3E07BC65 /* PFRESTObjectCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1F74418A1A844AD6F2D0BE55DB5A565B /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 749D4221E99EEA9B5BC4964E736739C2 /* AFNetworkActivityIndicatorManager.m */; }; - 1FC72C12CFE43E264EA429E7DB7C7787 /* UNIHTTPResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = F6390E9096EABF37B25ABD5CAB5B561B /* UNIHTTPResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 20E7C991D833842AC8BD7B3F676A5CCE /* IQToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 97EE31EC4749C71A2BAD9783137A7666 /* IQToolbar.m */; }; - 2122B48610E7556893633F090FF877DB /* ChameleonConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 63A96BD4D5CE686506290E2B2F6864B5 /* ChameleonConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2142C67AE21760B7CC6503EA03FF5F66 /* PFAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EE2A8D1E5AFBD0420E65DA1389499B3 /* PFAnalytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 21486DFB5F9A1C12F5615840459CF0E1 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6721C44FB15736B15A7A9FF9DEE5BA27 /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 21BCE7766FE3C1F059C9002704419CA1 /* PFPaymentTransactionObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 1934CD496BF357F3D85BDB55F2D42649 /* PFPaymentTransactionObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 21DC14D176AC70D4936783626B9F0377 /* PFSQLiteDatabase_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E0CC60D5D61DAC18565BFA86B04B3091 /* PFSQLiteDatabase_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 21E02BBD258139C9B5170C242EAB46EB /* PFCommandRunningConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A5FAEE78A4702D335F3353DE5B22486B /* PFCommandRunningConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 21F70A540678BB24C4996F1CD1855CA9 /* UIColor+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = BF928DF49EC124F57C165424C653912E /* UIColor+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2248CB8CC7031E8FAA06E3E917BC5734 /* PFRESTPushCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC40AAE4F66D4423B9D67D418FE9E45 /* PFRESTPushCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2267E143F866BBFEB39DDB060F71B943 /* UNIHTTPBinaryResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = C8C622D61D94B0BB8BC678A39B314790 /* UNIHTTPBinaryResponse.h */; }; - 22BAE8994ADCD5A6A4D71352BA0D0954 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3780C220917B4DD9DC02DDD7323405B0 /* SystemConfiguration.framework */; }; - 22C4D0EA9DC115B2C820CC447AA2DCBC /* PFSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B54AB9EA09EEEF30796D34F7D163FE45 /* PFSession_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 235CA0C0E4047D17A23597B064580FDC /* PFLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 14B527B21E752166A0ECE57755F5B742 /* PFLocationManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 237A599B046B4F3EB709E88AC0C2F107 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DE1802829062F013D376CB812C19065 /* UIKit.framework */; }; - 23852A0A5F7CE41D512D4613ECBD39DA /* fr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = CAF92C30B6888E0F131016AB7EE40127 /* fr.lproj */; }; - 244941FCFAF0AF23318B474B95FDC752 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = C0B062364FAD300B57FFF2CD44278F60 /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 244DC49E1540D69F3CF41F9E39418FD4 /* PFImage.m in Sources */ = {isa = PBXBuildFile; fileRef = F14562D32CD87B15414FD459F3B13C75 /* PFImage.m */; }; - 24C5777AA30FE28C5A943689139B9DA1 /* PFAsyncTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = DC28C0625C2B08E7619AEFBF99128019 /* PFAsyncTaskQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 24D23BC1BBB0A7A7F30C9EC3F45CCBB8 /* UNISimpleRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C46519EC14E1637D6277AAE86419317 /* UNISimpleRequest.h */; }; - 24F2BC96841F8A37EC52957AB59F2B70 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */; }; - 250A6A22ADFC9DCDE240E81BF031C373 /* PFMutableUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = F30BAE81C83BFC24C3F09853774210B8 /* PFMutableUserState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 25716D382DCFCAD7F4D883C97A203B25 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BE0320666C40F6DC06AF96C24A87FFC /* BFTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2577E5E644A5FDDF4CB92BAF5F31EC7D /* PFPushUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A163F69034220CA4460D8608674DCAD /* PFPushUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 262301EFB0DF84B163076AE6AE233A63 /* PFUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A13FE5C7D35D0AE5753E0BBDB76B4DD /* PFUser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2644C9F43A44BDE784C59C428084FC25 /* PFRESTCloudCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 95314205CD5BD2133AB7512597330119 /* PFRESTCloudCommand.m */; }; - 265EC3AA4B084F65A25382B691F9B3A7 /* PFSignUpView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A79E98AEE84BCDEC2A44AC20B564C75 /* PFSignUpView.m */; }; - 278C6EAEEE0A5BF8D626590F9CE97ACD /* PFMutableFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = C8EA7A9046754051261628FE4A4FBC57 /* PFMutableFileState.m */; }; - 287FFE08BB132472B7CE5BB3F47506B6 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F47F6AD14A34D9AF4DC5B0EC8FF52D24 /* CFNetwork.framework */; }; - 2921ACB9BA038E23AD06882CA0726C09 /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 59ECECD66E1B23B4D503CFCF46952262 /* AFSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2B08FFD13779AF38637AE45D96FC4539 /* ParseUI.h in Headers */ = {isa = PBXBuildFile; fileRef = B7308BC8BA2DF875593DADD527D898A7 /* ParseUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2D88653DF74717862CA3930405E6B1A6 /* UISlider+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = FB2160A0B485224469FAF6BA39EB0364 /* UISlider+FlatUI.m */; }; - 2D9C9874A5E0BFD7EC15207A5008A2E9 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */; }; - 2DE51A8444F0CEE2BEA32BBE1D5A2C54 /* PFSQLiteDatabaseResult.m in Sources */ = {isa = PBXBuildFile; fileRef = B9699B645F9D9FD06B73D75CA3FB069B /* PFSQLiteDatabaseResult.m */; }; - 2EE700C80315947D821E53B00AA74847 /* Parse.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B9244AA4FFAD4954BC0B0ACB67D2F4C /* Parse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2FCE284E00285EE0D6C39B4039CD0621 /* IQPreviousNextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C159A4F2438A5E10FDA73505BEFA94D /* IQPreviousNextView.m */; }; - 2FFABE52A081FE4BE451A2B1F06E2149 /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = DC7BB69962EB8928BACCE0021E544A5E /* en.lproj */; }; - 30363108F907B435D4933CECA8A71F1C /* PFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C6149FA7454A58C374DE984CBB2B5D5 /* PFNetworkActivityIndicatorManager.m */; }; - 303EF0EA5F4EC4173321804ADF5C4A8E /* PFRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 74507F19D1FF215BD94690AA2D88047B /* PFRect.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 30EE70080B2F12E67F05AD0CAC186B75 /* NSArray+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = CD004273FD354237F7D844A9BEAA8D1E /* NSArray+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 312C40EA300F699058F45DE66C7F9C51 /* UNIBaseRequest.h in Copy HttpRequest Public Headers */ = {isa = PBXBuildFile; fileRef = F002184D6C52C347609B0935CC6CF065 /* UNIBaseRequest.h */; }; - 313BD1D22D3DE3450A1B4727713A15E9 /* UIAlertView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 992F6F2CF6AA0579EA8E24CB235D73BA /* UIAlertView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 31C43362935AD5BBD696F7FAA1492DD0 /* PFCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B85775602BF2725E42724F544D6ECD0 /* PFCategoryLoader.m */; }; - 31F9A88DA1F14642D4C4092CE9F01590 /* PFQueryTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 93DC759AA838D19EFDB5EE39A0FD3B8A /* PFQueryTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 324F9FD525319CA2193E87C87FD96700 /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 110AAF7EB53ECB71214D319069E26CBB /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32B13741B4A59633A35C03D3BD085300 /* PFPush.h in Headers */ = {isa = PBXBuildFile; fileRef = C64D42AAE0A0E697FE455FDDF0F6AF44 /* PFPush.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32C1805D7037A65C326F15AAD4BE4831 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = CE1F8CA7790E14B93C4917A7AA6806F0 /* BFCancellationTokenSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32F3C97B6182D3AC5A80BA4739537E08 /* UITabBar+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = C566D49A7C726CF5969F4B79AA9ED6C7 /* UITabBar+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 33263E341C1322500C5F2632B22EECA7 /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = FD5C4496FDDA02FC33B9EF297AD6BF6A /* UIWebView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3365FAB014526B23559C5872E3437594 /* PFObjectFileCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D50D22BBDCF4938379296E2F238F866 /* PFObjectFileCoder.m */; }; - 33DDA524C70EF2A533A82C76BC02D588 /* UNISimpleRequest.h in Copy HttpRequest Public Headers */ = {isa = PBXBuildFile; fileRef = 7C46519EC14E1637D6277AAE86419317 /* UNISimpleRequest.h */; }; - 33E6684C7788A971BC853F79DFF4CEBB /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 53CEB84926E7FC9E2CFE13206641FDF1 /* BFCancellationToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 34282579CDF97D7263F08A2B79AF81D6 /* PFEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 029C15EA534199B8D6FF5549EDA5174A /* PFEncoder.m */; }; - 34548E9B4CDB70E6E52F11A181092423 /* UNIHTTPRequestWithBody.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = E1429F34AED40EF32B9C37C25F4B5395 /* UNIHTTPRequestWithBody.h */; }; - 348A4B6738A8BD6637F87F3926564CEF /* UIImage+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D9DF0C4B326ED5F2D1D4EAE13266284 /* UIImage+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 34A10781FF0D6156B2F0E33BB5DF0224 /* PFDefaultACLController.m in Sources */ = {isa = PBXBuildFile; fileRef = B09F7439A6613B5442F51FD2DEE7DFB7 /* PFDefaultACLController.m */; }; - 34FB30E858367D47FED90E6B3E4605AA /* PFSignUpViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 17A8A4A862EC921341A6294A505E8C17 /* PFSignUpViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 354857C6F33F12FCA2CFDB52898A2255 /* UNIHTTPBinaryResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = F84345E7863ED40A20705BCC540EF530 /* UNIHTTPBinaryResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 35DFE8F14A41999C6A59595E8B8A147F /* PFObjectUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = B19AA6954ACEF35AEBBB17B964C0E14C /* PFObjectUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 365CF97A9023756C3B71A78C0F150024 /* ParseModule.h in Headers */ = {isa = PBXBuildFile; fileRef = A747F1408C49254D6028E4F8891C4084 /* ParseModule.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 37A3F447E3723760E69C1AC533341CF4 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 719F3201FA8FF71792294DDA9C2E0678 /* UIRefreshControl+AFNetworking.m */; }; - 38633D20F3A40F43C90014227D54371B /* PFConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DDFDA2543E81B2D6485145052BA73C2 /* PFConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 38B64A887C7C04EAEE5414A2715EEC58 /* UNIHTTPJsonResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 328E074028831B7162CC31C478F53164 /* UNIHTTPJsonResponse.h */; }; - 38D829CEA9E110D82321565160D8394C /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 829A5C4EB781110BB7C73A0432188FD5 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 390E4C4935A539E3C35633049F4C4C0D /* NSArray+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = B4749B8DD730E19C293B814FC52D7503 /* NSArray+Chameleon.m */; }; - 3A066B9A2C17944AB5CE63613BCB1EC5 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 13621BDB45C7DD8B00AEED3D06BB3D73 /* BFCancellationTokenRegistration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3A1CC2DA6F8F25B29230E84636D88D6D /* PFCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = E65E7AF0524FDBEF23D5EFA1398195EF /* PFCloud.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3A83FC797677226A54553528FDC17526 /* PFURLSessionUploadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A71FEF7E5647E074B2A574E5FE4CDF3E /* PFURLSessionUploadTaskDelegate.m */; }; - 3AF7CAD58044A895437E02A54D89803F /* IQTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B577949D6BEA39F003EEBD1157A4423 /* IQTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3BC2F4893F897433C613EEEE5EE935A2 /* FUIPopoverBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = 518E2B391F997E4CCF271F754FA363A8 /* FUIPopoverBackgroundView.m */; }; - 3BFD15515778438F53184FB409F433FA /* PFHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 65BFCDD2C8EE6E26312798F208A450E4 /* PFHTTPRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C4D35E189329636BFF6117BF20985E3 /* FUITextField.h in Headers */ = {isa = PBXBuildFile; fileRef = 4576727BB25DE279D205E8F0DB89DB48 /* FUITextField.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C8E21B73FA1F3272C097FF1635AE123 /* PFJSONSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = B6B448028CCE0AD7EDBEC9BE86199EC1 /* PFJSONSerialization.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3DBB6503CA0A6A4010CBF5811D2EF6A0 /* PFOfflineObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = 183F4922424C98CDCBAF70F6694F7186 /* PFOfflineObjectController.m */; }; - 3E3D4C3FBC3D5752FB6F7D8CEC6DD58C /* PFEventuallyPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 920C6629AB79F0D4396D3F62D12B3527 /* PFEventuallyPin.m */; }; - 3E9C3B14F625AD4489FB47F637D3AD44 /* PFKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 79FD47C9A55EA483579D7171540525DC /* PFKeychainStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3F2C1610BA5B0F27BAB9D3067AC8FB30 /* PFBaseState.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3BF9878F0834C3730E36D502F45185 /* PFBaseState.m */; }; - 3F9F253CF143CE15C66E99719E1296F6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - 4017F157B6276B31A37E281C033F7D41 /* UINavigationBar+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = F4F2DBF73DDDA25055C195018E9186F0 /* UINavigationBar+FlatUI.m */; }; - 402896AEC22293D8BCD6860E87020689 /* BFDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CD3DF3B3BA00C9C3B9025084D6018EA /* BFDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 40EE14623331B78066A61917BB957969 /* IQTitleBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 848D623C2A83A163ACAD11BD0385C867 /* IQTitleBarButtonItem.m */; }; - 40F68DEA67982D3B13DF8EC32D23C859 /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = A6710EB1470E4F0F7701E1C154191C58 /* AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 424186E1571F6A9EA76817C716384271 /* PFTextButton.m in Sources */ = {isa = PBXBuildFile; fileRef = A89A6272C760E24D4FCB53B305AD1CCB /* PFTextButton.m */; }; - 4258F7777937094D7BE116408C78DC46 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA6600846C35A33A9E0A0436C4B4BC26 /* StoreKit.framework */; }; - 42B6719FA91532EEEF59E348C9F722F6 /* PFRelation.h in Headers */ = {isa = PBXBuildFile; fileRef = 373B403D2BC5D282CCC10F9AF474DEE1 /* PFRelation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 43F3A74CC45BE08D52C8BCDC56F58617 /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 523B0739D98E30356009D72E50CC1DDB /* UIButton+AFNetworking.m */; }; - 446C0BBFFD9EAB06C6FCCF34AE0E5286 /* FUISwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FE2DCAC734B4286316670697800D439 /* FUISwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 448ED42670A895C7549BEB4765047AB3 /* PFURLSessionDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9493E918DE059197B488AEB66DA6E6DF /* PFURLSessionDataTaskDelegate.m */; }; - 44C1F895434928D4584C6938E69F6D32 /* PFUserPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 249176052C8E9FF258B54C64D59D6DD2 /* PFUserPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 44D664F52828716532BBE6F0A5D9BF6B /* PFPushChannelsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 212A31C3327EAA3D513C3DE44A109768 /* PFPushChannelsController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 44E515AEC571BC7E0022D7EC3E46C355 /* ParseUIConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7C94F9DF9D3C658BC5608AEB9B49B1 /* ParseUIConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 456125DA576BBA0E50106E319FF73A44 /* PFCommandURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 487BDB4CA79192A229759CBAEB510235 /* PFCommandURLRequestConstructor.m */; }; - 457A1B73EB100DB2139DCBA29A6DB28A /* PFURLSessionJSONDataTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8967DDB36504C317B821DF34152AC486 /* PFURLSessionJSONDataTaskDelegate.m */; }; - 466DA06DD6F7E087A1C72AA91896B56C /* PFMutableACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D0B8387029A2FBE4D1B3128F06E3921 /* PFMutableACLState.m */; }; - 467950FEB327FA58BF3AB19866202783 /* PFActivityIndicatorCollectionReusableView.h in Headers */ = {isa = PBXBuildFile; fileRef = E261E97A551F62268F5002DB529D4A74 /* PFActivityIndicatorCollectionReusableView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 46A85D0B3E105715569CB1BC5C7C88C8 /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 41755FA2662E2489FEB0E6FEC30BCAE0 /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 46BF99BEBFFD63DBE8BC085CD18A4024 /* PFRESTAnalyticsCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D13E9CC7C55D6E5308CFD2BDDF4E3E35 /* PFRESTAnalyticsCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 46C66D1485581BB40EFAB6E834BD8C47 /* PFEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = F16B2F09DDA3B581B0D212FFDBAA7BEE /* PFEncoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 46F36C74EF8B07192275578A983B1E96 /* PFAnalyticsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 75D3AA3139CAC105C690DB23C90E64BF /* PFAnalyticsUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4777B57796CCF2501C8E4035ABC45459 /* PFRESTConfigCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 033347FAE6C04EC4566EFBDC24DB4DC8 /* PFRESTConfigCommand.m */; }; - 4835ED1722E656D7F6B5E9FD14D4F5DB /* PFTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DD4060F8826F9A5E5D4C4FC4E7A3256 /* PFTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 48E6C81111ABE83FB43D7E16A07D423B /* IQKeyboardManagerConstantsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 82C057CF73EC05C9B670CD36A4FF9DC1 /* IQKeyboardManagerConstantsInternal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 49213E71A202E706B4C67562EC826709 /* PFUserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = DA7D6B40CA043E1F26CF1737EE7C2D8D /* PFUserConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4927A5D31337BBF09B4D630EEBB29762 /* PFACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E759BDB2280614B1E223A5BF6593C20 /* PFACLState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 493A39F7AB5CC399A17F93EB112A7C15 /* ChameleonMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 40375E85CA508E2B057CECEF9AC0A466 /* ChameleonMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 494AB2A28A1FE50E4A600C9EA897D4DD /* PFInstallationIdentifierStore.h in Headers */ = {isa = PBXBuildFile; fileRef = D9ABEBD69361FA1FD8939A21C71A86B3 /* PFInstallationIdentifierStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 499795646572C0F4982F952399B79430 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = F051420DDB92AA7A4614BFE96C0B4881 /* AFSecurityPolicy.m */; }; - 49DF183B1AF52E821ED5A77B97CF6DCB /* UNIHTTPJsonResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C63D8CB09610644959B555ABF676D45 /* UNIHTTPJsonResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 4B2AFEB8AA38E3742467F54CF68224C6 /* PFEventuallyPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 444C17DA53AAC790C006E8C77C606141 /* PFEventuallyPin.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4B711F7739F9BC189B32ABDB6BA90A0F /* PFCurrentObjectControlling.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F899C2DE9446CFBD4258DF3146777DA /* PFCurrentObjectControlling.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4BAD01BECD8E7D90990BF6B30EAC04C3 /* PFAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEB824107C28055F7FDA4A9A2034A36 /* PFAnalytics.m */; }; - 4C94CABF04CF5B40BA9A93E090EB08AD /* PFHTTPURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BFDADA3217FE77D6F8E68621BA9FD77E /* PFHTTPURLRequestConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4CAADF796B7A0A57121A9E3C287127C5 /* UIViewController+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F5AC19CF9E1DB86BB619A83FD60C580 /* UIViewController+Chameleon.m */; }; - 4CFA03024DDB3D22E34E21E6B93577B9 /* IQKeyboardManagerConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A038B70DE9AC30C4BE5735BDCF379F95 /* IQKeyboardManagerConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4D410BAF4CB2B1C8C7AD0F85700EE2D8 /* PFAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C31022C27A2C8C1FBE857406C9AF09F /* PFAssert.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4D78D87B1BB66CD942A878041185C7C0 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 13BA722BB3C5D60330A639CBB1030486 /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 4D9D2707B9A1C9724DFCD9D69B993FA1 /* AFNetworking-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2809CC499F34E67434A2065F3F90217D /* AFNetworking-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DA3E886A13F59B8C595071C71911700 /* IQPreviousNextView.h in Headers */ = {isa = PBXBuildFile; fileRef = ED6DBBE9C8F59A2808A1B55CA7815B1A /* IQPreviousNextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4E149934317AEC01048B753730F6EA9F /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F83EC07F9C3FF86C4D9BD2A58B549B0E /* AFURLSessionManager.m */; }; - 4E349CA31573A68A02AD4F89FDFAA05B /* UNIRest.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 0D36B7A5D9F6AF7F4E01B2320E7BB931 /* UNIRest.h */; }; - 4EDC3D68FA4D08025BAF6A25AFB5E65B /* PFReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5942670B140FE51902C19AA1DE9A9F3C /* PFReachability.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4F8534F0CB4CD037ACE1B5BF6460999D /* IQKeyboardManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CF8C2D7B1873D1DE1458FA7D18F57592 /* IQKeyboardManager.m */; }; - 4FB349659BB29F142EB4C5A11CF8D33E /* PFDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C3AAD13195F59C43C31D7B68EBD3011 /* PFDevice.m */; }; - 4FEBA5F071565CE6BEFF968CD56E365A /* PFRESTObjectBatchCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 831DABB79EABDA3FF9164AB3067B2154 /* PFRESTObjectBatchCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5064614BEFC3E1DCB85B376E7C849393 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E4DAF9930C43CB43E5BF52055CD68F1 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 50696775E4E363709DA7C32DDE26C749 /* PFPushController.m in Sources */ = {isa = PBXBuildFile; fileRef = D5A1769B7D39E3622EBE828E69A03539 /* PFPushController.m */; }; - 509F838C90BD33FB102E30FA553546A5 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC336EDAC9FA746257F40BD540DC9A75 /* Security.framework */; }; - 50A74BA500644CFE9D103329CBEB0D32 /* PFObjectLocalIdStore.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6237226D0A898842335421FF28BB4E /* PFObjectLocalIdStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 50C18B976C17A2FBB0886EA75DF5BAAA /* IQKeyboardReturnKeyHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E8D9690AF80D6F60B62DDAF44050907 /* IQKeyboardReturnKeyHandler.m */; }; - 5114F8D6A5939B847DDDC41E2B75D419 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */; }; - 516412468B9D294B708BB12CCDE0E76E /* PFSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BAB143961E7B37C103224026BB1A6A4 /* PFSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 519234A19A528D630BC6A20215E7B467 /* IQUIScrollView+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C177476B0E75BABF4B4FCB549A41A30 /* IQUIScrollView+Additions.m */; }; - 52347D4DE0F39E74CAFB1591E68221E7 /* PFObjectEstimatedData.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FF0ED8615CFE41B1191D7A379331688 /* PFObjectEstimatedData.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 523D7711F694B582C1B3E89E912DF6B3 /* PFPushState.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E6F93F75316C1B80CAAF5C92F8366AF /* PFPushState.m */; }; - 525611A9C3408922BB8EB81692E6D161 /* PFFileController.m in Sources */ = {isa = PBXBuildFile; fileRef = 52F2CC34E25309A7D0C44241B0F15DEB /* PFFileController.m */; }; - 525727E37B9DFED1CD3A18CFF752383C /* ChameleonFramework-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D2290841E77758DEB6EAFA4F67271A3 /* ChameleonFramework-dummy.m */; }; - 52D60DFB5AF85D51AE70D3FA3B5F8633 /* PFURLSessionCommandRunner_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 857186AEF8B59B6AE45A44A595FC38D1 /* PFURLSessionCommandRunner_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 53363111800D0961A419E660FABB61E8 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62333A4D0E9AF8700874F1F22E9827D6 /* AudioToolbox.framework */; }; - 533BECEF90857A789B965FE3C20DA467 /* PFRelationState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 85342B421353B094FC8A7B1ABA28B021 /* PFRelationState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 533D41F33F1F148F6D7BBC7BB5C3DEA6 /* PFObjectFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = DDC009A128625087767288D7706E4920 /* PFObjectFileCodingLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 535123250BC23D2854597629C68EF4F1 /* PFMutableObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = DC1FF3B7F18FCF2F0A4EFD477BE62BAA /* PFMutableObjectState.m */; }; - 53C9A682E744C8CD8A71E7926530B78D /* UNIHTTPResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 7175B962AF396E26B597D16DC3A5CAAB /* UNIHTTPResponse.h */; }; - 53CB0FAB7D337B035394604A48E7A357 /* PFUserConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = D89292EA416BFB4E38CFA341905BFDFD /* PFUserConstants.m */; }; - 53EC95B96212B86A7482BE9466EB41BF /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = E5EABACCD833603D71DDA83AF8267A78 /* UIWebView+AFNetworking.m */; }; - 543BA9CDC20915D1B7D6CE986E3C86BC /* PFQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = F41BA5906F72B08707A6E9500176C911 /* PFQueryState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 54C7D79891D053A424B0DF7E9E73B36A /* PFImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 18E5B4F6DD54D3DFEE040D4E42491397 /* PFImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 54FA74375505B520AC81A5FE3C892313 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 90B7F377A6C76455F713F9A2956AE3E4 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5630A2F69424A9E46E93DE4E4407AE1C /* UIImage+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = CF09587F6E7B5C55B2DBC4F76D84C78F /* UIImage+ChameleonPrivate.m */; }; - 56CAFB300305782D5B129B4DD0B0EE58 /* PFRESTConfigCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 16A83694A1281D2628E8C6E4A5050DE4 /* PFRESTConfigCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5717FB78F8B2247DAF6CC1D1F0CD1D98 /* PFPushPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 947FF1F683D3B81772BB3703B214E58F /* PFPushPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 57372144DB1FA2903B634AF173F67242 /* PFImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 448743DDA2013C8A9A70568A441DEF22 /* PFImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 57595893801E77A08FC28462EA856C40 /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CE1D7CADD6B787D221D22A300F04F5B1 /* AFNetworking-dummy.m */; }; - 58A62415FFD7B1782701548E67E4E8D0 /* UIFont+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = CEED91958785BC6C656DF48AF67670D7 /* UIFont+FlatUI.m */; }; - 590AD04854053AF10E3397F20A648CFF /* IQBarButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = E515F384B4FC8E3B8439F1DB578EB3E5 /* IQBarButtonItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 59E5D1E2428A166DDC257FAF4FB9F9C3 /* PFPropertyInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 0415F5BE04092407D9C3DF323C2DDA93 /* PFPropertyInfo.m */; }; - 5A25D889204C1D0838E27A486CEE76AA /* PFSession.m in Sources */ = {isa = PBXBuildFile; fileRef = BA8F4C6CB58404CBBBB266E5FD1A21F8 /* PFSession.m */; }; - 5BB2CC688FADABE72F1EE80DBCDE28A5 /* UNIBodyRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7AE561E188BF127BA12657694BA340 /* UNIBodyRequest.h */; }; - 5BE7BF61E2C24AFF20EE09847B3462AA /* PFPaymentTransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 339B985FE4916FC0EAD33315A7189218 /* PFPaymentTransactionObserver.m */; }; - 5C069A9D5B4CAE514B4F46117B04E888 /* UITableViewCell+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = BE14B64B7D94E9A0E083FC542AECB820 /* UITableViewCell+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5CCE8599A31182489B7556A9A94C0CE7 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 5896B97D426354756157FC55B080FD82 /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 5D0F6EB9FF087444D8C35C94F587FA90 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */; }; - 5E13FE4DEC63873FCFEE5E3F62CF76B3 /* UNIHTTPStringResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = F06A9FEFC03282E0E3A86AAE7A3A6FBC /* UNIHTTPStringResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 5E1CA14AAE9164EA9144A2D66C7ABCED /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - 5E1DA51B25F43C73FAEC3F35A34CF6D7 /* UIProgressView+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = ED1B808831668BFCE5B5641495D4D294 /* UIProgressView+FlatUI.m */; }; - 5E55D469ABDA00CB5E22565486F051AE /* PFKeyValueCache.h in Headers */ = {isa = PBXBuildFile; fileRef = FB87370F76BC674AD21F1FABEB5464F9 /* PFKeyValueCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5F7CFB98E474841AFEAC9142671E1607 /* PFURLSessionUploadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B208B6F44DC353307586ECDE943C9F4 /* PFURLSessionUploadTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5FC03CE121193E811A7A38226CEB7FE6 /* UIToolbar+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B72B0C51A38197D37BB6563BDCA4FC1 /* UIToolbar+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 60235CFEA89AAEDCC92FD14F7B13642E /* PFTaskQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = E82CA19BA3E0DE4964F0C052630016EF /* PFTaskQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6117F0C2CD693D1223FF88671015CE8B /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C66681DF328D06725C4357E76019D12 /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 6195644CA3E3419A95951B95B12769B1 /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 57F5879358C84148A7DCDE756C38208B /* AFURLConnectionOperation.m */; }; - 625FF9AE4686AEA4FDCDA12811832704 /* PFSQLiteStatement.m in Sources */ = {isa = PBXBuildFile; fileRef = E8084FC656FBBB0FFE9F542CFE82DFC8 /* PFSQLiteStatement.m */; }; - 62868B8A6396629E54D5A1B9EDC2DCED /* PFFileStagingController.h in Headers */ = {isa = PBXBuildFile; fileRef = BB2C9ECA5C083B1C1AB04DAF1E83046E /* PFFileStagingController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 62930E5DA75B433CF56BD46ACCDF18F0 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */; }; - 6355D259CFE41FA5DB24D153FB7A462A /* PFCurrentInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 283A6A064CA65E920533C0B11919385E /* PFCurrentInstallationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 63972B7F495EB80B6B9A732BCFFC62D0 /* UIImage+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = B4B17635A35B3C414378999631FEB0AD /* UIImage+FlatUI.m */; }; - 63B554E188C8F0ECE4E2FE49DC187B71 /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 29E0F094F0637842397AB96FB4423477 /* AFURLSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 63BA863394E7EEC25970ADD618763ADE /* UNIUrlConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB08B7E9CFEBFDFED3FC2C86EF02981 /* UNIUrlConnection.h */; }; - 63C8A6145BA13CC1357BACF7619571A9 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A0B96CBB6636A7BDCBA964478F20F8F /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 63FAAFF9D8F289AB5D001057E0A6E0C2 /* UIImage+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A94C4B6698BAB7FAD0158E1D025AFD0 /* UIImage+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 646E86EA149691E2A103AABC8ED83B3E /* Lato-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 02461850BFE597052075F46B27750287 /* Lato-Regular.ttf */; }; - 6474A151BAB6300B587DF01C1F4FFD7E /* PFCachedQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = E69D548BB3EF5F5499142B94DC2D4D2D /* PFCachedQueryController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 658DD32CED473FCE3E157760C94A6AB9 /* FlatUIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 80A30BF5DA2904576C9A695E79AEBC44 /* FlatUIKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 65954C025FD7062A89E4CAB5E385B3DF /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = C971E759236FF5C44EDF586ABA1FDD1A /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 661AE9E6CC11D489ACDAA85361690949 /* PFQueryCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EFF140CE5FEE134EEDE89A382783CD66 /* PFQueryCollectionViewController.m */; }; - 66761408528652240616F11E28CA1AD4 /* PFLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = D869C16E6B92E4E4DAEC9B9363D8D3F6 /* PFLogging.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 66DB7FE778575C04997A47CE9AA4C978 /* ParseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 58D1011532F802CDF880D3B55F389975 /* ParseManager.m */; }; - 676779CDA73D9EB7101859B2DEFD12C2 /* PFLogInView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B4FA5364701AAA618A9F456A6322416E /* PFLogInView_Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 67E47244AD75E871069A0531DD9C9608 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 562ED9F06683670B4C58AD183A5119AE /* PFURLSessionFileDownloadTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 67E9AAA2DF855990B53C8E37179D1B08 /* PFAnalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 57EE6DBB3BE682C35873FDA83F44B5FC /* PFAnalyticsUtilities.m */; }; - 684E3449A728EFEBE2160ED5F8E37900 /* Parse-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 73B7094CD00334DE71FFD9ED9F4AFE8D /* Parse-dummy.m */; }; - 69EBAC092096215DC0EA9C889002873B /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B1E5C0E4125427F0E3FDE91F5CBA4513 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 69F700981DD5FE492C5E69C0AAD478C3 /* PFLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 312CFE7334F9820D693DB8F87FDF58BA /* PFLocationManager.m */; }; - 6A8840784D210166F0E75E0AF8E413AD /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 32D1EED54067102FB95B998DE807EB80 /* UIButton+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6A8962718D8E9D7C66B2D3013F40D5C0 /* PFOfflineQueryLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = EE7E578477183FF7B01EB42B97FB5875 /* PFOfflineQueryLogic.m */; }; - 6AEE6C668ADED265E5073A0C10F14DEA /* Parse.m in Sources */ = {isa = PBXBuildFile; fileRef = 7063EC865492F550FE5219FA73C9583A /* Parse.m */; }; - 6B9A30C0DEEE650ACE7112BEF04EB351 /* PFLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 3552A7840686D24CD44668B0CDA0BF24 /* PFLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6C0B0898DDB38E27DC6B993EFCFBEEB4 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DE1802829062F013D376CB812C19065 /* UIKit.framework */; }; - 6C9D9AB66755FD1D4F7DA70220CAE7DA /* pt-BR.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 45D59B3477CE4E1E8A8D72DAA36AE180 /* pt-BR.lproj */; }; - 6CE0BDF4BC45D85351D65C54058ADCA8 /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 30900CE96B834D956AE04457A32EC9B2 /* BFTask.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 6D0EDE2C0500E59D3BCCDF8014073A8B /* PFOfflineObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 287B74C03E5984086449C9EC4671728B /* PFOfflineObjectController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6D856BD6272DC3B97FBAC3D6503343D8 /* UNIHTTPStringResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = DBE6819D41549A1CBD4D69F3085F2562 /* UNIHTTPStringResponse.h */; }; - 6DA6530898EC420505935E4CBB869ADB /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 58C02A1A5B90D578646A551B3EE8B09B /* UIKit+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6DDD9E6F6119619D1120F3D382CA208A /* PFObjectSubclassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F8393736BD5D73AC01DBCF37963E6EA /* PFObjectSubclassInfo.m */; }; - 6EB34C4A888CD75B1347430E8E2DC8AB /* PFPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0211A72E4EA58246830A20585FB161A7 /* PFPropertyInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6EC4D234025E1A35DBB519302842C887 /* PFCoreDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 4373AB8A755D4DB6F49BA37DEFE4C9CF /* PFCoreDataProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6ED02164B5E06B799C50961364EEC1DC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - 6EFE18C45AAF6979BA21513D0DC45732 /* PFRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = CEFF5B62376E2591D6E5EAF93B76997E /* PFRelationState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 700F5568DDA1E624C522F380B8738A42 /* PFAsyncTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 3870EE2EF73F00569F66764B6840BA48 /* PFAsyncTaskQueue.m */; }; - 70AF59761E0C2A4A726B6E59FEE3CC24 /* PFProduct.m in Sources */ = {isa = PBXBuildFile; fileRef = 968C1C61689C3F23A5FC509269AE1B6C /* PFProduct.m */; }; - 71406894593D147D7656C97D0BE33AE0 /* PFFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E5C55CFEDDC650E3CDF3F59B2865200 /* PFFileManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 714FB212B725F8BDF3683F38B7F6B4CE /* AFHTTPRequestOperationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ECD2B9CBAE08A9410E23E90B706CC79 /* AFHTTPRequestOperationManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 71535E3B142F488A3F510A0A2D854A26 /* PFErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = AC4DC6A2437F65F8A83CB36C3B66723C /* PFErrorUtilities.m */; }; - 72312D1A5AE5A6C1B984412285CF5E92 /* PFWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D5F1CE5891DAE96AE6580471A3F81CD /* PFWeakValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 72CEF78CC6C2341AB78EC7ED7A3B2844 /* AFURLConnectionOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 45756B2B291EADD70CF96E443BAD2FF1 /* AFURLConnectionOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 72FAFB0F0E6FF8AB2E9CB406A0C6D66B /* Parse_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D3EE32A19F2CA37F68E600E3B1A8BAB6 /* Parse_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 733D1FF755A7E59F0218E2A9225E9ECA /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DA03E39CAF7E8EFC0E5EDDCBC9F3BD0 /* UIImage+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 73468106D270D5373F13A88722F0F42B /* FlatUIKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B834CB346FEDD46855AF57AD06DE5791 /* FlatUIKit-dummy.m */; }; - 73530A369BC0C71417737C7732EE4BE5 /* PFUserAuthenticationController.m in Sources */ = {isa = PBXBuildFile; fileRef = DEA92EAFBD2F6D31CC60C9BD2B8B1F9E /* PFUserAuthenticationController.m */; }; - 746B0BD3442F7C333D7F7E2C518E9031 /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = A816AB5A1E39050DB3C8267CC75B6308 /* UIRefreshControl+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74942D131A05E345D9BC3D47F8487C58 /* PFHTTPURLRequestConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 22EC91ED4B69A438A78BF10A844BE247 /* PFHTTPURLRequestConstructor.m */; }; - 74D6C8F8FFCA98252D63ECB118C4A832 /* PFInstallationIdentifierStore_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B8B26D22A8D50D5756DCEABC1E2F39B /* PFInstallationIdentifierStore_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 75DFF5A155538F100BE6FD0AEF6B2EEF /* PFMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 69EB7978B5C927F6B8DB109710F1A3A9 /* PFMulticastDelegate.m */; }; - 7604B65CA0E258822D5401A28AD4F6E0 /* PFFieldOperationDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = AE235869020CAD616253B91718814EB4 /* PFFieldOperationDecoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7652337C6698F42EC8AA67BEBABC57E8 /* PFFileController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FC877593D9C3597554FD4F63EA7265D /* PFFileController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 76F0ADD573F39F6C2E6AA583EE3E28AD /* PFOperationSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 20B2A45932656A04E9A644FBC0DA4689 /* PFOperationSet.m */; }; - 7715B49F4FD719BFF228560746AC6F96 /* PFInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E6B3CC888343CC69943B63141268699 /* PFInstallation.m */; }; - 772FAB57D507F834419A8B53F81775FE /* PFCommandCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 13E84B7E5A4B30014D5A54B0F163A44F /* PFCommandCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7757891143F134EF973508DD56821CA6 /* PFRole.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A9951560A51BC6B7877E46E76741F7E /* PFRole.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 77894BDDAFFE8441526B64E1BBB856C7 /* PFURLSessionCommandRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = 09E57153667D515CCBCF5953009ED8FC /* PFURLSessionCommandRunner.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7879E7CFEED86DB1E505DC098A9897C6 /* ParseUI-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F126906F253F3C3848FA05C0D242D4D9 /* ParseUI-dummy.m */; }; - 78CCEA1A83DC9E7EFD3198F14D7AB289 /* PFLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = CD550819AF8416A5DB414CAA7025CB06 /* PFLogger.m */; }; - 79227FA8FC3B6B7EA7D79083B641E36C /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B54797159113BD42DEF825808E96506 /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 79D5AB7ED99F6F3FB99421D0DD941FC6 /* PFNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 69AB457D67396F5B1AE602EB9BE91C33 /* PFNullability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 79D915DCC0E57B431C2DB968A7BB6674 /* UIView+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D2A07DA0436A22DB926D8F8BA8F922A /* UIView+ChameleonPrivate.m */; }; - 79E30128DA0EB3E973E7089926A04270 /* PFGeoPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AEE82C4E7D4C887B812D322BF6616C6 /* PFGeoPoint.m */; }; - 7B1AC5CBBF99FE9A4DF4918085F741E7 /* PFPinningObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 7625D472ACC8D44E3E9CF86870FB700F /* PFPinningObjectStore.m */; }; - 7B7E112AD433BAF56C889FF2C8D8828F /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B6C075902DFE55B31A76D31208A4280 /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 7B7EE0F54A3687CFB442555D1F00B532 /* PFPurchase.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AF187A6BDAC9D45C8425EE5D9869AA9 /* PFPurchase.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7BB986930A679B4F4A6E2F0567AA1118 /* UIPopoverController+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 21D8E4F6E3FE9751A9C71B96F1DA3755 /* UIPopoverController+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7BE8B7B3771AAA185FA9AF266ACB51D0 /* PFPurchaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = FC11F4C9F01877A5D56739B9BBA85621 /* PFPurchaseController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7C404DEBEDF06360F28C8E6C457520AF /* NSString+Icons.h in Headers */ = {isa = PBXBuildFile; fileRef = C7BC9D529DFB9C2876F1B26C742549E5 /* NSString+Icons.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7C534B05C9F8A8CA0A573629B03C076B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DE1802829062F013D376CB812C19065 /* UIKit.framework */; }; - 7CA0EC245101545B13439BA0D2D9B8CA /* PFOfflineStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C279362F3C05B272F24D95D7C88397A /* PFOfflineStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7CBF2011432C597B6BC5A384EE6454B3 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 799A25ED12D346D0E10745AF43D345D4 /* MobileCoreServices.framework */; }; - 7CE03C57C94CDC8B9A2074371BF4DD5E /* PFRelationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DAEBE8AEEE1FAA4664DBEB20E14CE68 /* PFRelationPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7DA854BB5C3326B269441322D1C2628B /* PFProduct+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0264EE9F5AFC365618A7A86369BDF5E5 /* PFProduct+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7E4206E2E57E51D8EDF9E49677C3DA3D /* AFHTTPRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0322D52D22023BE2411F2CCAACEE304A /* AFHTTPRequestOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7F514C48A1433CC4E7666EED8526EB82 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 73CC9A342B0099AB7F2D13D603FCFC71 /* UIImageView+AFNetworking.m */; }; - 7FBDBBC09E7D8CE63696847366DCFEE3 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = E01DF6BF8E0DB15494DA23A118BCDE49 /* AFURLResponseSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7FDF8C860061C943C172B1CD123039BF /* PFPropertyInfo_Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = A78B6320A995FD2334C69BD6DD530AAB /* PFPropertyInfo_Runtime.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8011E13C93B1251BE83F73849CBA41D4 /* Base64.h in Headers */ = {isa = PBXBuildFile; fileRef = 06BFD711819A59BFBB5685332131E5BF /* Base64.h */; }; - 80701E4D0A3C6FD04DB9EA02163971E5 /* PFBaseState.h in Headers */ = {isa = PBXBuildFile; fileRef = 1698F26D15551C1829449B813F474E0F /* PFBaseState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 808B6A1291FF164B160C5ED8A99652A5 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3691CA8C96F3BE2D408B9E1E7FCDD5A3 /* ImageIO.framework */; }; - 808F096E62506786671896B6BE8FC00E /* PFCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 96F352501E39A78917919E6827D9662D /* PFCloud.m */; }; - 80E0DE86061F5656E6CE5D4D06A38853 /* UITableViewCell+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 46422AC887FA952A4892854E29579089 /* UITableViewCell+FlatUI.m */; }; - 8169F60E91A5DCF1BCD770127B09C896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */; }; - 81CD1C3D3AEE6561FC8B25231388EDBA /* UNIJsonNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 71FEF17E88601C7390E60B7D3C7D86D9 /* UNIJsonNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 82193516C2657105BB1B20F27C8C012A /* PFRESTUserCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 0644AF28ADE45E9FB2616BBB3A6B43F3 /* PFRESTUserCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 831065AD23377EF92A22E15118931DED /* PFQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = BEF4FF7171109B841E52DAB6544DCFB3 /* PFQueryState.m */; }; - 83E42BD304254F2EA45636E1EBFEBCD5 /* PFAnalytics_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BAEDB2E65A042469BB0C6C0651AD122 /* PFAnalytics_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 848290264E2010E537F5B77148DD4D32 /* PFSQLiteDatabaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A621B8940AFC7648C5072806B4B9311 /* PFSQLiteDatabaseController.m */; }; - 85A58BD000E6A4ADF674465A45C88D41 /* PFConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FB02385D3C2C2A0EB07A7BD82B8DE4B /* PFConfigController.m */; }; - 869568B070A4B8CAC7778AE5EE71BD5A /* UIStepper+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA6B39941ACCBCAFA2A4F26CF1AF48C /* UIStepper+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 86E6118CAFA8C90FC0ABF1688FE6E65E /* PFOperationSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E056AC96A8AACCF1DD32256DE702C88 /* PFOperationSet.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8702D2031C885CF3BB2D8795A6FC0C3A /* FUISegmentedControl.h in Headers */ = {isa = PBXBuildFile; fileRef = B585A7167FD23401CC0AC3C94F615F46 /* FUISegmentedControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 87753E6E8545A51BB7F4BDBD7DD3FAC2 /* PFObjectController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BC693C636CC87A6217C7C5DBD4D7A4A /* PFObjectController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 881A85BA5B670D61BFD52254E3C8239C /* PFImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = E1507F321942D4FD208B55803D3583FF /* PFImageView.m */; }; - 881CD8405ABE6BEFB471F1622F70BC8D /* Lato-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 19DAC19FA8196CB203717E1E2DF33FC0 /* Lato-Light.ttf */; }; - 894AA3587AF5C3A6D545C4A4BA5B58AC /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A8B03638085EFF11C1EAAF09ED235E2 /* UIActivityIndicatorView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 896FD5D0C72F697DF9C5D17F7B529E61 /* PFEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C2680C64F9681DB935CEC6C07AECD7F /* PFEventuallyQueue.m */; }; - 89982466919DA42C5657FB1D75221B9C /* ParseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 982A9041ADE39E009726C8B46D8C4515 /* ParseManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8A89A0B9F1586CA458B63C76E953F154 /* PFApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 279C7B8C6BAEF8CDFC3B4C468EA5C328 /* PFApplication.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8ACA8ACCF631EB59400D1E29CE40C30A /* PFProductTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7299ED8195E626646307BF4A8D40A058 /* PFProductTableViewController.m */; }; - 8AF62FF179A471E00F0F81C59A82DFD2 /* PFTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 6120BA628BADDB347735942BA78DB2BC /* PFTextField.m */; }; - 8C450FC7E1CB66D28CD46981530E0A8C /* IQUIScrollView+Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9569F3B77A7977F33A12712389BEACFC /* IQUIScrollView+Additions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8CCFEC94CDC419B16F917810D8439F39 /* UIFont+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = BAB3C187C0719EC147E9F61E5E85BC65 /* UIFont+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D7B15921E081CC2B3191D35B5C4CEAF /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = E8530B9B30D42F583B3BC811E303DBD3 /* BFExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 8E3CAFDA290A60D8B3A289E6DAD97C53 /* FUICellBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = FCD70579BE96CFBD090F1E64FC7A1E4E /* FUICellBackgroundView.m */; }; - 8EEF8A9731DE9C088F894071C9248FB3 /* IQUIView+Hierarchy.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E2DA89B7784D376EAF5F391CD3E45B /* IQUIView+Hierarchy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8F17B1B66C878E45560A44574817D6E1 /* PFLogInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F63505CC4ACA8270E183DAA52A22B58A /* PFLogInViewController.m */; }; - 8F43E873C338BF50D7914531236AAEDB /* UNIHTTPRequestWithBody.m in Sources */ = {isa = PBXBuildFile; fileRef = 49C9AED1403F10EAEF0BDD8C5D1D3ED4 /* UNIHTTPRequestWithBody.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 8F495189348B03AE6F7B46DA0413D883 /* PFPushState.h in Headers */ = {isa = PBXBuildFile; fileRef = BC45FC112DCEC836AB7FC34C7DEC3DD9 /* PFPushState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8F498BF52B76ACF30337C019FF3B30EC /* PFCommandRunningConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 4557A74A01F29629FD85B18F24E777A5 /* PFCommandRunningConstants.m */; }; - 8F6BC9571604760D4F4E1AAA4105F39A /* PFDateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B0FFF3EEE8DA5E91EDEB8EA6DD38164 /* PFDateFormatter.m */; }; - 8F78EF384897E4D8632DD80FB74EB452 /* PFProductsRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 58A2B45D80BC9668A48207A6F9EEC39D /* PFProductsRequestHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8F8BD8F9E8C2408792AE189075B4B7BC /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B4C034A030FAA4EDA0401F0A8DA0E1 /* BFTaskCompletionSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 8FAC5B4DDD700682A6B3A9167F863290 /* FUITextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 1297CEA60937D63A7F97997D134CB8BB /* FUITextField.m */; }; - 8FB1DF7D54B01E7F8B51A01CCD305E7C /* PFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = BF5D4519F2FD959DD3A51A80CF8C52D8 /* PFFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8FD6FCE130BFD1E16FB2A68476BED532 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = D9045979C5B73816C81F6DC6CB9C26C6 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 91498D9A5A6A6D196994EF09622612CF /* PFResources.m in Sources */ = {isa = PBXBuildFile; fileRef = A0AE3560BE9FC94C3B71D94028EB8928 /* PFResources.m */; }; - 91752E5ED76E71C38BC521664A4FD5B6 /* PFQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FB30C451B1E7FFB9382796A11C5943B /* PFQuery.m */; }; - 91D1F2E5F9AECFF5785A6814972F9054 /* Lato-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2BA2B31088E6C331D800CCAB32D64F16 /* Lato-Italic.ttf */; }; - 91F72E1C525A78F015595B286044D120 /* PFCommandRunning.m in Sources */ = {isa = PBXBuildFile; fileRef = 836407DF9AE49E6F3CF05A57B2F3E0A1 /* PFCommandRunning.m */; }; - 9303E978E2E7E3C00257DD5DC7B6E9B7 /* PFObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 735FD83521BA17D09CAE866022FD78C7 /* PFObjectConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9310D82E97611942915A3940EC448CB4 /* PFMutableUserState.m in Sources */ = {isa = PBXBuildFile; fileRef = 46CD8E4F61AC27B42941BB20FCCC1C2F /* PFMutableUserState.m */; }; - 940E81601DA01C64F91AF1BAFE5D84AC /* PFPurchaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 331297A6C5AA9401BD6372032CD02FED /* PFPurchaseController.m */; }; - 9411A8D1DF493F321B801931CFB501E5 /* PFImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = C317661A6C63BF31F4516396085D1DDD /* PFImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 94A9BD60599FB2C2AA2B0AB35934B758 /* PFCloudCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = B4C9DD585C2ACD9EBCBC81F91C89331A /* PFCloudCodeController.m */; }; - 94D401C18BF19BD75CFAC4BFB763CE7C /* PFUserState.h in Headers */ = {isa = PBXBuildFile; fileRef = E6492D62837F81793852C022F8DDDE48 /* PFUserState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9566EE1DC82CDB9049D8D21CB842C386 /* PFWeakValue.m in Sources */ = {isa = PBXBuildFile; fileRef = BC22009CD0CB35CBE3E0FE126DC1372A /* PFWeakValue.m */; }; - 962F75F303F57D0673BD35FE3835415A /* PFMutablePushState.m in Sources */ = {isa = PBXBuildFile; fileRef = E6E8FDE318E4C904383C402577CB676E /* PFMutablePushState.m */; }; - 965E194205240C804A5CC4E09422F906 /* PFAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B64FDF9AB420DD2D5082AAFDADB7FDA /* PFAnalyticsController.m */; }; - 966DE4286AC2490A6FCBACA8413C8067 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D7FFC332FE37C75EC2BBEEB205C3392 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96AF27C042B48DFA54ACF2FAADFA773D /* PFRelation.m in Sources */ = {isa = PBXBuildFile; fileRef = 532DBEDE2A0498233B11E32D118785DB /* PFRelation.m */; }; - 96BE3ED0FDDA9CBA6D0DF772A7BA40E0 /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FAE01CF4B380A313FEBB6E495A58C24 /* UIImageView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96E3D29B214EBF429C504C8CA55D1B9F /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 6142F4E83D523220AAA5D1451FD4BD96 /* en.lproj */; }; - 97328A6D629EDD7889FB3194C26619E4 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F16F15C48D3F05417CA21097C2E54EDC /* AFNetworkReachabilityManager.m */; }; - 97BEC95DB23314A8FEB59FD75DE72D66 /* PFSQLiteDatabaseController.h in Headers */ = {isa = PBXBuildFile; fileRef = 120FA99F09676AEC262A7A964B7F118B /* PFSQLiteDatabaseController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 97DAA182EA0457ECE6DF454FDFB50E71 /* PFURLConstructor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EC3750FD01543193A7B71DB65C65C6C /* PFURLConstructor.m */; }; - 9835F5DE63612AE5CB247BEDF9F6BAD9 /* Lato-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3DC055B41165FBC9ADAFA20E9AFEC94E /* Lato-Bold.ttf */; }; - 98D637C604695D57419F1D6809F263D6 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC336EDAC9FA746257F40BD540DC9A75 /* Security.framework */; }; - 98DA10F38127EB1D4AFF2BDB077F68B7 /* ParseModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E9D4BAA6FB13BABFA6610DB1C1A516A /* ParseModule.m */; }; - 98E9E7DA23152B6ABA2CCE66175BEDA9 /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 74D0634B76E4EE3C7476264586B47F18 /* AFHTTPSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 993DAD4DC798A7883F3C30AE13359184 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 32719F277BAE80948D0BEA83DAC8F658 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 99BD144694112221EBA83A41C8D34F77 /* IQTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 80CB234E37168DF49DEAB9D544A0C5FB /* IQTextView.m */; }; - 99D4F3E015F413FE2AC39FABE7E8D931 /* PFInstallationController.h in Headers */ = {isa = PBXBuildFile; fileRef = AC9A5F70E2DE419835876FAA80A1B09C /* PFInstallationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9A93633A0CB818C83EC1FC7B7662BB75 /* PFMutableRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CF35D4AC32619FDEC1F5F4FC52084A9 /* PFMutableRelationState.m */; }; - 9B651075445D3C80AF9F6C538F4B04FE /* IQUIWindow+Hierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = 648C65817ACE24AD1C674B8C829B4E36 /* IQUIWindow+Hierarchy.m */; }; - 9BC741341F7A3E9797DA6EB1C47662E1 /* PFInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = A7FF321DDDFD4C9D30F6C27AE6F15255 /* PFInternalUtils.m */; }; - 9C0514948A37A2930EC6A3B4F5DF52AE /* PFResources.h in Headers */ = {isa = PBXBuildFile; fileRef = BED06D69A31505FA7CD8316C179CDFAC /* PFResources.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9C13735A4125C01C40EBD9209594EAD7 /* PFPrimaryButton.h in Headers */ = {isa = PBXBuildFile; fileRef = D8DF24ADAADAC243785A71EB5043ECB5 /* PFPrimaryButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9CB57B8503F184A68E407640D207ADAC /* PFPushManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0600787BA30BFE74CE957F9E90F3BBBA /* PFPushManager.m */; }; - 9CEF7DD95429E95AAA42B8ED323DDA01 /* PFRESTCommand_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B7D47CF2CED52BB8C4DBF504E0FD9A5 /* PFRESTCommand_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9DB442303F0400FF942BB74CE5BB31D0 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = A672C404782F472C63BC1B4FF31B6004 /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9E4F5CDEEE091D095F1769FD0423C07C /* IQToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 744ACCE6B933BA912384E2E1F34A3BA7 /* IQToolbar.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9E95E582F430EE008AD319FBD4D2F352 /* PFPush.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E42C21E2CF24EB6317C3418E412FAC0 /* PFPush.m */; }; - 9F17CC9DD4071EB42DA080EF5B2905EC /* PFObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 150F4AC40940FEC7C1C20AAD696887E5 /* PFObject.m */; }; - 9F3D52953CC0694BC6FDE81CD221A27C /* PFRect.m in Sources */ = {isa = PBXBuildFile; fileRef = CC3E170282FD37E519479DFEEE7D55B2 /* PFRect.m */; }; - 9FCD98AAEE8AD79C20BD6854611C7421 /* PFObjectSubclassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A8E778140C33BF8B75C390520FC2B65 /* PFObjectSubclassInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A0345C0C15762A801A8E2CAD19B637F3 /* PFRESTObjectBatchCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = EE598A4F3D9378CEBAD8365FAB0D2291 /* PFRESTObjectBatchCommand.m */; }; - A038878D88F1510B6E0A20E100FAC74C /* UNIHTTPRequest.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8BBDBA1C6D3C481A980BC35C14B1BAEF /* UNIHTTPRequest.h */; }; - A0B32A29C37C2FD2C97C80F4F4E9BB2E /* PFObject+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F49279416DD3E891AA4D2508E5DEDA /* PFObject+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A0D8132A74C3DD45A066B66B96872A8D /* PFRelationState.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A264B2075C9820174A1D049067B3CBF /* PFRelationState.m */; }; - A160951FFCA747F6D3865F68468227C1 /* PFEventuallyQueue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CB6945F45579087C28867C89A928DECD /* PFEventuallyQueue_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A17802ED40EC2AA21BA76147AB4AD71B /* PFPushManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6360B90072C4B548E77BF105665B6C37 /* PFPushManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A1C0916A3268ADF687DDA3BA26ECCB4F /* PFGeoPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AECBBD0EFF420415B93C5A23FCB6BCD /* PFGeoPoint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A1FC37F2116E19070ECBC786636BD411 /* UNIHTTPBinaryResponse.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = C8C622D61D94B0BB8BC678A39B314790 /* UNIHTTPBinaryResponse.h */; }; - A2245AAA5B2933D9DF90599CF9F14F1E /* PFUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 4ED9C82C3A61619800659B958E8E749E /* PFUser.m */; }; - A271CE741A0CB0405BBE24DEC09F7ADB /* PFRESTQueryCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D2CC7EA24171E936D65F3D1CE945A69 /* PFRESTQueryCommand.m */; }; - A2C0656F1C90FA35634A60E17128300D /* PFRESTFileCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C522A64AC5540AAD98319C36F3E135 /* PFRESTFileCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A386DD98979FC8C7E89C0C04EAA0FCF7 /* PFMutableQueryState.m in Sources */ = {isa = PBXBuildFile; fileRef = AD0FE61335BED497567057BA19502825 /* PFMutableQueryState.m */; }; - A41AA45BCD642898558436AF46D198BC /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 7491B40A0184FAC7223E8121B02FB307 /* AFNetworkReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A46EEDC8DCA2052DACCF4C8B558ADD01 /* PFURLSession_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 44A129BE492571A758DC14026E10AB87 /* PFURLSession_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A4C736E58BDA8172D6667A19851FDEC2 /* IQUITextFieldView+Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 96430B20989715A8573563A41C2C9B2B /* IQUITextFieldView+Additions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A53F8B0DE57890778BFB311DF00E862B /* PFPropertyInfo_Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = E095BAA9FC8B747A000DE925306793BE /* PFPropertyInfo_Runtime.m */; }; - A543D21D249A4C570A3C1F9660FFFE4D /* UNIUrlConnection.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 2BB08B7E9CFEBFDFED3FC2C86EF02981 /* UNIUrlConnection.h */; }; - A5EC9DBA68F789AE7442C6EA6D182285 /* ChameleonFramework-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C3AC194441355C5C035DA3351650C99E /* ChameleonFramework-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A5F3A45286A396D2C6C2756E87A6FEFD /* FUICellBackgroundView.h in Headers */ = {isa = PBXBuildFile; fileRef = BD17758C6D9E58B355428B80263D17EA /* FUICellBackgroundView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A652CE778B758C13386CAA2CE8285644 /* PFPurchaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 209B5F6CA85EBF47851F7BAB625D9974 /* PFPurchaseTableViewCell.m */; }; - A677EA486B6C150619DB9868EF9771BD /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */; }; - A6ADA7DB7955937E81F5AC2A9BB71A46 /* PFUserState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 571A49A343233979AB4B93973BE75E50 /* PFUserState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A75ECFAB2C512E4E952D146A0B14729E /* PFCurrentInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 73E92AE01951AA70475BDC4CB43A6528 /* PFCurrentInstallationController.m */; }; - A7FDEA1C1A76CA8E5DF230F4BA31677D /* PFObjectFilePersistenceController.m in Sources */ = {isa = PBXBuildFile; fileRef = 42BF37A08F24B8A4D646021BAC4A89B8 /* PFObjectFilePersistenceController.m */; }; - A83FB900F4477F11C2DCD7F8B69209B3 /* PFCurrentUserController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2BF4F04D9236FEB54B0E9C3385222C8 /* PFCurrentUserController.m */; }; - A8689F6902D3755B75C02E5ED73DD9DD /* IQUIView+IQKeyboardToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = A5AB58CE9D615EDAA234854092081DEA /* IQUIView+IQKeyboardToolbar.m */; }; - A87EDB8E2777D3E2D232BCB2A6CFE489 /* PFMutablePushState.h in Headers */ = {isa = PBXBuildFile; fileRef = CF0865463F092E74770E7110F2D76193 /* PFMutablePushState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A8F6AAD9D6A648D30F327911D8CE53CE /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C112C5EA6B10F17C8A8DC5699FFED81 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AA0FC201A1809E7157E034B695A569F2 /* UISlider+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = B53CFF61083EF9E417C641E96A20A279 /* UISlider+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AA1026B1D369DE93692B71C618D3A82A /* BFTask+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 810047E1F16DB679BCA0CC9D8C9337B7 /* BFTask+Private.m */; }; - AA217B621ABD283FBA8020E902BB96AD /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = BDAEBE02C021E3A5CC6C2481DDB70A37 /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - AB7A59AE59C71EE96481D322D85D64F8 /* PFAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 463691C0AD9E31BB5AD4BDB493C34D0D /* PFAlertView.m */; }; - ABB094B942B56188EF4189D1F88D5903 /* PFObjectController_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6627F2203B9CE43FB51C48DEC6485120 /* PFObjectController_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ACA8475381335DA76ADC114838D0274C /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = 143B16D45EA328180F3DC8ADB2E0F355 /* Bolts.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AD07E8D874E4871FF64FA7BDF298C678 /* UIBarButtonItem+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 34856B703E5606ED1C3566F49C8E8DF4 /* UIBarButtonItem+FlatUI.m */; }; - AD1CB3E55033674B9517582A59A1E2AC /* PFObjectFileCodingLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = D0C44D70A8C988A5FC533435B05B77CB /* PFObjectFileCodingLogic.m */; }; - AE6DA539CD6C6FFEFEB1CA40BF9998CE /* UNIHTTPClientHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E8C2D556022D673D9A39AEE75A92D7B7 /* UNIHTTPClientHelper.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - AE7B412FE2E9E3E2F7CE6FBED6304B96 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - AEDEB8A43CD152EBE7A2E0C3080CE070 /* BoltsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = CB2C2E44C04D75E24B7B90AAA247551E /* BoltsVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AEF9213E35168A3EB14E0CDA9D7E44E6 /* UNIBodyRequest.h in Copy HttpRequest Public Headers */ = {isa = PBXBuildFile; fileRef = 8E7AE561E188BF127BA12657694BA340 /* UNIBodyRequest.h */; }; - AF12089323AED5E530B41B0F4FCA25E7 /* PFKeyValueCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B66BB1A1B150F73F53A51DB0EF89A285 /* PFKeyValueCache_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AF27938E3A4D924379F07AD58990CC7F /* PFSignUpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AB0CD6365496172E27CBD57A2266391 /* PFSignUpViewController.m */; }; - AF3B908A52FDFCC291BABD7DEA6A4C3B /* PFACLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 32917B1510914295787D683689498DCC /* PFACLPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AF9A03B5B4E1AFB497391551CFB9EBA4 /* PFPushChannelsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B84C7E4CD2F561F248C7DAD46DAB372 /* PFPushChannelsController.m */; }; - B012C2B3E0D50B9AB1CDFFCB0E76CA7B /* PFThreadsafety.h in Headers */ = {isa = PBXBuildFile; fileRef = 9051E6207606F6E900A4A30F93EE6FE1 /* PFThreadsafety.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B0647F5D1F335773BA3C155C2FE34280 /* UIView+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 73A9A926D0BDDC98D57EA6CCBC0E91AC /* UIView+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B0B5582F003288C5C96AFA142471D43D /* PFReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = D305BB43DFE0C6524796909B892CDE28 /* PFReachability.m */; }; - B2471816ECEF65C1A92D0AC65357602B /* PFFileState.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DD6269DBB74E9E2A4341B46B3B2240C /* PFFileState.m */; }; - B2AC279F28767EE398BD6A3187018651 /* PFActivityIndicatorTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = BDB6900AC0DB1620F42D3AA6F1A09E5D /* PFActivityIndicatorTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B2F43ACBCFE5596CE46D95C7AA1399D1 /* IQKeyboardManager.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CB1D7D1EE6ECB93DA929D451A913B2F9 /* IQKeyboardManager.bundle */; }; - B31A56A27408319D70D1547B5FA51EAD /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 11733E9AB23CFF872D2D8C693E69A845 /* CoreText.framework */; }; - B322A3CEE4151E27F3073CBEC0BBA270 /* PFRESTSessionCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = B485708557E6CB2DE1F09BD5E1B8F90F /* PFRESTSessionCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B337B1573E6106190658E45630AD4381 /* PFQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = B1D876439A55825F2D698021F318F11B /* PFQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B3CCC9CE6FF7374AE8CA9882F02F0425 /* ParseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = F756DED267DAEAA45B7B75F44B527FE0 /* ParseInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B3E81351F8E1BDBF2F584E84B3A49B8E /* PFSubclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = 59579E28C00752CB33687F0116BCE918 /* PFSubclassing.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B3F2988C9D5F3C144651BF0A698F6394 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 64197C6CBE27CDF8450C86E247333C27 /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B471B47E09E3665845AC1C686A63D6B0 /* UNISimpleRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5ED9BE76CA272DD593432FBBB31A0802 /* UNISimpleRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B4EC18486C52A92FE8E7BD6F5CA0CC07 /* ParseUI-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A43EB961420A5AF4805BFDFA34DCDB3 /* ParseUI-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B4FF3032C86287B3EB198AE9902F83A5 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B559DA039E8A1B57AA78991E706A8C2 /* AFURLRequestSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B535D14A88056AFF1A1B7CB70B9664B2 /* FUIAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 59C4881749E08C596424F2235546B787 /* FUIAlertView.m */; }; - B5A306F6D83114B15C2C3A82F443F112 /* PFKeyValueCache.m in Sources */ = {isa = PBXBuildFile; fileRef = EBA6B31F193A3582597871E09B2C0D55 /* PFKeyValueCache.m */; }; - B5D2DB65CD96809A3E305A54A7A9D2D4 /* IQNSArray+Sort.m in Sources */ = {isa = PBXBuildFile; fileRef = C1D45ADCE0464957F823585B3FDF82FB /* IQNSArray+Sort.m */; }; - B5E41D5D6349F5F3843295A17A9BDDB2 /* Base64.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 06BFD711819A59BFBB5685332131E5BF /* Base64.h */; }; - B67A0B1855A78C232CA8CA4193480797 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CAAD28C58C66EB0A98AA015C265FDCE /* UIProgressView+AFNetworking.m */; }; - B69EFF69C1045685D6C9529BB5D56453 /* FUIButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BF939D82D860D7ABEC9DC1665E9AFFC /* FUIButton.m */; }; - B6D5E48011E309C95B0D178AF8AA0494 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = BB8F0303D37F7A5C0E989A3297D5D05E /* BFCancellationTokenSource.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B6DFDA7AEEE3818FB42BF55BB43EA79B /* PFInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = A1046A49BB31CE2EDA5FADB31A184D95 /* PFInternalUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B7189A5111E54D1C0475383753974988 /* PFProductsRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 560C0E4A9A88A8BCA7929A45B476EDE1 /* PFProductsRequestHandler.m */; }; - B8184053368C7A9E1DC9520118C1E928 /* UNIBaseRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = FE4BA056F7A9AC13CC0B5DC014161925 /* UNIBaseRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B82E90F4E6AE4160EAC6E395B4D91A73 /* PFDismissButton.h in Headers */ = {isa = PBXBuildFile; fileRef = B59CF43B52C3F67340E0866557906257 /* PFDismissButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B84EC5076309422B9A2C7A55CDABF5EB /* PFCurrentConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C8AC497AFA3C26AABE01AA1D7E3F66D /* PFCurrentConfigController.m */; }; - B8E17F40332B9A8B4AD153AC08C7C60B /* UILabel+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 68485F33091E36236F52B5769528EB54 /* UILabel+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B90CAC2F3B9B544961A70A906B16CC1C /* PFQueryTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 47A62753B34D273314D19513D5331BC8 /* PFQueryTableViewController.m */; }; - B93A8E1F2FBE4ECDF4C19B2E1698AD3E /* PFDateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 94DF9C4055D9F72566E7A9544165FE9D /* PFDateFormatter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B953AB7BAE43C522F0DC429FFD1CBEB8 /* PFAnonymousAuthenticationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = E13BC81FEAB08337AF37599B924A0B92 /* PFAnonymousAuthenticationProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B9667C60685EA0031CA019D522B3028F /* PFRESTCloudCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 41B531CB3F68644A7CA2E2C2C2A0A399 /* PFRESTCloudCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B97B1932591A9DC33101F6DC39CACFA0 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F76DB2BC23017FA90C4165EAE8CFB396 /* AFHTTPSessionManager.m */; }; - BA6DFE37B6BBCC3575139A1C0A6989A1 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1222D529EEC7D53C3D01CCE61951FE2B /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BAFB7DE6902268900B1B195416BE4D04 /* PFOfflineQueryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 73BC7B9783D64F0A868195064BC3BE46 /* PFOfflineQueryController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BB068C0CCE5128CAED93094E6A3164DB /* PFDefaultACLController.h in Headers */ = {isa = PBXBuildFile; fileRef = 39A9911126C27100A1F40C2590B1A921 /* PFDefaultACLController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BB197948814E822050EAD045575FA763 /* PFCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 50B6CCE1DD1F1B571E064C44E3D7CC87 /* PFCollectionViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BB9E8B6CA1A0F28FE241638A9272ED77 /* PFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 384BDE20DFFC6A0E2458D1BC282F4420 /* PFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC5EB4978A6158F54C41E94D40FB3A40 /* PFInstallationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 74D802D8056ADFE99B20602EAA26F7B2 /* PFInstallationConstants.m */; }; - BC69C3F29FE101D4247B541115AB8848 /* PFRole.m in Sources */ = {isa = PBXBuildFile; fileRef = FC35A11ED7B0DCD6819A7CBB019FE94C /* PFRole.m */; }; - BD2636AC38047EE877D06873DC7EF988 /* UNIHTTPRequestWithBody.h in Headers */ = {isa = PBXBuildFile; fileRef = E1429F34AED40EF32B9C37C25F4B5395 /* UNIHTTPRequestWithBody.h */; }; - BD2D9BCFDCA527EA0CEBA86E82943CE0 /* UIToolbar+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 90AFF1F5771F5C74F72298841B0D450E /* UIToolbar+FlatUI.m */; }; - BD4F7DE5F808676F975022B06C963C28 /* PFURLSessionDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D29EBF6D740449C59B201746886CD2A /* PFURLSessionDataTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BDF6A32A836F3709640D087117D096FE /* PFPurchase.m in Sources */ = {isa = PBXBuildFile; fileRef = 08CFC3FCA7FE77B46041821976AF2BA6 /* PFPurchase.m */; }; - BE32F7A8ED25F80F8FA9558A89EBEAAF /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A97E94420846C84B8140C33CF337FE2C /* AFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BE7B9DCC1918965D09FCB459C6908AFF /* UNIUrlConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3130F150ABEFE07878D5F834F7C368 /* UNIUrlConnection.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - BF8D6320B7CD58347D2D83FFD03CF8C7 /* PFRESTQueryCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 6784E3A646029063B6761DB858CC2A64 /* PFRESTQueryCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BFBF76808AF82215541A512281405BE3 /* PFObjectState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A7377E6FF89E05208972680783752B9A /* PFObjectState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C0DC97F79BE2050D4DE691E1D991A391 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3780C220917B4DD9DC02DDD7323405B0 /* SystemConfiguration.framework */; }; - C102035B25414733AA5D99E52A896424 /* PFDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC5F15FE7360B5B3103BBC0CDF77057 /* PFDevice.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C1514CF8F5DC189265CCE541F189F4BD /* PFCommandRunning.h in Headers */ = {isa = PBXBuildFile; fileRef = BF0F1E060D039DB2ED92B2064E9324FC /* PFCommandRunning.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C1A609EC0AACF147369E9433683D4C1D /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 81D0A63D86D41097D8121FB31AFAFEEA /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - C1FCB24C1B387306C08722AD05271F71 /* PFApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = D63A69F4B3F958DFFF7944B7D8290D88 /* PFApplication.m */; }; - C21257ABEC8456229A8715EE704A7DF1 /* PFObjectSubclassingController.h in Headers */ = {isa = PBXBuildFile; fileRef = B37A54E62CF8CA8E0CAB38A547E00BBD /* PFObjectSubclassingController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C22ECBA602D338BD6C554258C6C80DAB /* PFMultiProcessFileLock.m in Sources */ = {isa = PBXBuildFile; fileRef = 078CF89D1976FA56CB71DB442293247A /* PFMultiProcessFileLock.m */; }; - C2678B91068F7931D5742BEB0AE154FF /* PFRESTObjectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 041219D95934148272D9D11F04A65097 /* PFRESTObjectCommand.m */; }; - C47ED1A4BB88FE7511F228BF5BA3EB4A /* PFUIAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = E074D43B725F9C362400C9DF86A4123D /* PFUIAlertView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C4885489A964BAC5764A68106B49CE84 /* PFAnonymousUtils_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E06A7119515F4910F956F06EF911C715 /* PFAnonymousUtils_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C590E355367085B3F71811AD1D8AE9BC /* PFObjectController.m in Sources */ = {isa = PBXBuildFile; fileRef = FE9E03DE7A25EA6F5C94C4201C60D18B /* PFObjectController.m */; }; - C5BDF2C3F576679C66B34129891D1919 /* PFACLState.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DC55D2B463E6818D02D571FF341E73B /* PFACLState.m */; }; - C7526D6608B593099FEC8D0896359897 /* PFCoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 144E3BE8EEEEF124C9859E3D7ADBE20F /* PFCoreManager.m */; }; - C7A351D5E8CBD94236D7A7B43E6E228A /* PFDataProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 023393764250C8DBC9744BAAF26A4B90 /* PFDataProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C7F5E4E05604B5ABC2B37F8FA933A19F /* IQUIViewController+Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 33EFCD2A806F168B502839B5E06004C6 /* IQUIViewController+Additions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C8CCDFB80193D1AC799456689D8B1C55 /* UIColor+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = B2ED2797E56832F52396742BD5AC40B1 /* UIColor+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C8E3699CC4885FE30DB9B4F6733EBFDA /* PFMutableRelationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 435F2CA4899F4863E2CCBD079FDB969F /* PFMutableRelationState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C9780FA67E5B8C292063A552C855FB90 /* PFObjectLocalIdStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 7259AEBFEEBDDB3685DB53543C199135 /* PFObjectLocalIdStore.m */; }; - CA5F23766F60847E0A35969F56BE64E3 /* PFCommandCache_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 692F0A966BB11E58EB1DF1EFEEE973F3 /* PFCommandCache_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CA6093691030EB225102EA5B084B9966 /* PFUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BA130676F12B046A542250B72B807BA /* PFUserController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CA6BAD1169CA01807573AE331781DCB5 /* PFSessionController.h in Headers */ = {isa = PBXBuildFile; fileRef = BF72FEFBC6FF8F58CB7CB79FB1C8A7BE /* PFSessionController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CAC05D738F63DFDB78C95C9EE1E6FC8C /* IQUIView+Hierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = BE1AA56FB3518F5ACF08ABFFB8F71661 /* IQUIView+Hierarchy.m */; }; - CC1B6334BB55493205C13E94D92F3421 /* IQBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C56C342942346FB5B3BCF38AFC2442C /* IQBarButtonItem.m */; }; - CC3CACD5E552F8287FF72CCEDB01EDE9 /* Chameleon_.h in Headers */ = {isa = PBXBuildFile; fileRef = BB0313D8856E1ACFFE80F68A9635BD01 /* Chameleon_.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CC4E8765CAC02E51F101B700BDB09598 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */; }; - CC8AEBF8D6620E619F26B670189D49C8 /* PFPropertyInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B1D30808B74647E6437CF9F248FF87E /* PFPropertyInfo_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CE68EA7C522F468D775F060CAF3E705D /* PFObjectUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 764482CB123621C18470E54689AE1D1A /* PFObjectUtilities.m */; }; - CE94EBF86870898CC0BDAA6ED65C6BF4 /* BFTask+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 405B14A1911C958897CB6F7AA3CA87B0 /* BFTask+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CF023CFF89B2E017CC525D92766B31C5 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 84F48C253BD5BE7290BF97DBB488394B /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - CF17EAE278CDD50904A3B07140E9DFD6 /* PFURLSessionJSONDataTaskDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C29C184DBBCE87B995B672F7F51F2EA /* PFURLSessionJSONDataTaskDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CF20CC7E23BD16017EB85C1F6D100F8A /* UIAlertView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = B27416461ADADD8D3ADF8E8D35A3ACE1 /* UIAlertView+AFNetworking.m */; }; - CF4D60758633BAE6D1B122456EC24F75 /* Parse-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D72AEC533D655C8D593C07A53F1D747F /* Parse-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D03E2E09CD4A257BF7CF59BC14F39774 /* ChameleonConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = D996C2666AEBC5DE15F1132F7519EEFA /* ChameleonConstants.m */; }; - D041E5A116E9A902A377085D66C03139 /* PFLogInView.h in Headers */ = {isa = PBXBuildFile; fileRef = E619BDE14AB08B9FB930109F4E31D8CD /* PFLogInView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D079F0D0F75347213786652AF578F521 /* PFFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 88D5A072EC90FD6AC9092E73B90F9254 /* PFFileManager.m */; }; - D08A4B442A5964C417489F08A81784F5 /* PFSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 47DEEC6F87A4C44266E60D0FE9D3CD84 /* PFSQLiteDatabase.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D08EE9C2CF0357A7FD1D76F9B93776C4 /* PFObjectSubclassingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 39E688412771E938F26B8F10C0191798 /* PFObjectSubclassingController.m */; }; - D17AEA993640DA0427EAEEEBF50DA02F /* IQKeyboardManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 62CF11BB195FBEDB741B155A299E3F4C /* IQKeyboardManager-dummy.m */; }; - D1816449E827B54FC644A5285C5E79E7 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D7A3AD7DED9F7674DF066157B83874E1 /* PFURLSessionFileDownloadTaskDelegate.m */; }; - D184483D8564CEEE9E25688918814972 /* IQNSArray+Sort.h in Headers */ = {isa = PBXBuildFile; fileRef = 39A51D0C532BCF6377526E08062DE36D /* IQNSArray+Sort.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D1ABCFFF2DBFE6D749E1C7C772262D39 /* PFACLState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FB6B6FE77562EFAE3F96B1E69E8AC7BB /* PFACLState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D1BB40613CBDD8C6DAA7812E7FFFF26C /* PFAnonymousAuthenticationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEB1C5E9BC1B761C1D681F6ED6D8494 /* PFAnonymousAuthenticationProvider.m */; }; - D2305969E531EBA7A255D3C4302E7665 /* Bolts-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3689BC9116ABAB64895F8C584E42DFC6 /* Bolts-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D243F10448E2A25C9E2900BFD359D668 /* UNIHTTPJsonResponse.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = 328E074028831B7162CC31C478F53164 /* UNIHTTPJsonResponse.h */; }; - D2641614DC999C027E62514B55A06016 /* PFCommandResult.h in Headers */ = {isa = PBXBuildFile; fileRef = A86E6037DE1255155FC0C886F04E3B93 /* PFCommandResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D2FE57DEAD266E99D8CDBD42BC46CA3F /* PFAnonymousUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = E15CB84F6EAC100D531B6BCAAA2815AB /* PFAnonymousUtils.m */; }; - D48ADA5A04EC8BD8FFB980445E0DE387 /* PFNetworkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E6BF5C5D003F29D1B91F74088E1F30B /* PFNetworkCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D4C5AECA4AEB0E17B93EECD0ADD06AEE /* PFMutableACLState.h in Headers */ = {isa = PBXBuildFile; fileRef = C45DABCF47D9B4496B4627C78ACA5F5B /* PFMutableACLState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D50C7B2A36FA249BB8504A699EB42614 /* PFObjectPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A25890C6749766D2FA0F6910C5AFB555 /* PFObjectPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D5B1F28C17002CBE60420F56B85DC2BF /* IQUIView+IQKeyboardToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A8213D4F0DEBAD8576AB50551D8B094 /* IQUIView+IQKeyboardToolbar.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D62B907A64D301A42B3CE20A27B9DD20 /* PFDismissButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 9005E4E32F1EF9E3F28CB2D81637B524 /* PFDismissButton.m */; }; - D67DF497D24A2D6049AF0B75A46AE48F /* PFACL.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B4B936F403CF30DCA18AD72190FCFC9 /* PFACL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6870DB8F518AC2F91F9FB95CFF384D9 /* PFAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = A7B79D3518D2C9F3E903CF4F1BF00D13 /* PFAlertView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D6A76FC088B728E09BE669238269A3F6 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = EACA9F3764C09E78E6A493517CC775B9 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D75ADB82D221CE073A2385D9BF116313 /* PFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 35ACB630538A121CBF33BD2A43D210F7 /* PFDecoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D79592AB3645A0C669F9F71022E80008 /* PFActivityIndicatorTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E1AFB8E063415AF1B76421BD1E70D71 /* PFActivityIndicatorTableViewCell.m */; }; - D7AB05392442CA0F7360E9A0DEFDF10F /* UNIRest.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D36B7A5D9F6AF7F4E01B2320E7BB931 /* UNIRest.h */; }; - D804E6D1B5A4F1ED130362B6610693FE /* PFCloudCodeController.h in Headers */ = {isa = PBXBuildFile; fileRef = A59BC2D719A6FE36F8A22D143D3E4E76 /* PFCloudCodeController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D80843081D15837B4B5C8D66D2A8036D /* PFCommandCache.m in Sources */ = {isa = PBXBuildFile; fileRef = B7EF29C21D7B2E9DCDB866FFBB91594A /* PFCommandCache.m */; }; - D880721F15CF00B4947F68BBDAE3BC19 /* PFPushUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 603FE11A5C1B8C0DC8233656AE9ED2CA /* PFPushUtilities.m */; }; - D8959E35373758B9DF78F533C55FFC08 /* PFProduct.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C01979AC575C3DF44D871EBE33C80D1 /* PFProduct.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D89C08E3CB7C04D6DCC8D18E7149069E /* PFInstallationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 62292C896B27EDFF3089011E9218A54F /* PFInstallationController.m */; }; - D912EE794EA43F144E2BFDB5E306D3BC /* PFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 41C1D92DF62E21AFDBB85A53A4D4712E /* PFDecoder.m */; }; - D9FA43E9B824136A20E678A3C9CE7507 /* ChameleonEnums.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F7C8A872250C0A49C96DA6FE264847D /* ChameleonEnums.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA339154E42740D763E1E4E42DDB9A1E /* PFFileState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 67C82E63D914F4652D462D1EF746789E /* PFFileState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DA468AF6666C79B9CE948EBEC956317A /* PFInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 39D6DC64510F8D6816ED4A2F7DFB52AF /* PFInstallation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAAD175EBECAE7AF5296008E30760A93 /* PFSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = F23678C89071A5C346F5BE0C1DFE5EC2 /* PFSQLiteDatabase.m */; }; - DAD63D2B12385137F611785D8087B0C7 /* PFObjectFileCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 201D0AF4758543C8B03C221952439864 /* PFObjectFileCoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DB6AD4AA0A96598835F98152FDD9EAA6 /* PFQueryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = C0A12B9EF7949B48A1FA4D686A7BA5F9 /* PFQueryPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DC7BA7D1F02949DCEE942B23DFEEC45E /* UNIHTTPRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D6C2112669072AE57F3B1EF2C2D85B3D /* UNIHTTPRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - DDCAA9BE250EAD797FB91253079205E5 /* UIColor+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CDA46DB859C98B0E388E4E3FBFB36FB /* UIColor+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DDFB747838D1B33306D14FB92112203A /* PFCurrentConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = FB9516C98F43C642D31BA9E3D82C8206 /* PFCurrentConfigController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DE0A0C5803FF6B8465951B95A6EE1AF8 /* PFImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = C237413667676F66D932237A4073CB42 /* PFImageCache.m */; }; - DE6FF42AA13354302CCE67FBA5AE3056 /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 27FD73571D1F0E411532F29E810FE8F4 /* BFTaskCompletionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DEEA2648058B3E6F40892B4E254501F9 /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B539B882529715D46F58AA7C0F7277A6 /* AFHTTPRequestOperationManager.m */; }; - DEF9DDF8C9F9606CCDB79286AE41A95F /* PFQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 33A844344DE513F67DA9B594005E312F /* PFQueryController.m */; }; - DF088B8852C119D2181A3D18888CA8D2 /* PFCachedQueryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 92AA3B35831850C75A93CFD081927516 /* PFCachedQueryController.m */; }; - DF3181F400F49532145EAF90931261AB /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7158256AD2EEA035C9BB1BF017053123 /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - DF5C7E7715762DEE188F738217816938 /* PFMultiProcessFileLockController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E818A121570D3A0F0DA80F2825AFB6D /* PFMultiProcessFileLockController.m */; }; - DF6BE3AEF2D65C63BB86491AF2D1D74F /* PFMultiProcessFileLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F123ABB578E3F518DF039070BC96D0B /* PFMultiProcessFileLock.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DFA57BC7705BEA564355F07D921005B0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - E073A9FAA1E4FBFEED33E37680301216 /* FUIButton.h in Headers */ = {isa = PBXBuildFile; fileRef = E5673AE21FC295054FE51806B2157579 /* FUIButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E11377D77F494E8D27302892123A6C88 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F468E6B33E9C6CF3D86F7DE8C388C8B /* AFURLRequestSerialization.m */; }; - E15973B7000BAF44794642F5C614DEB2 /* UIViewController+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EE09B13391CB4E2288B618D9989B7CF /* UIViewController+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E15EBFD04B36AD3E47934A1D0EDE2A76 /* PFPurchaseTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9731541F793BCF26FDF4582BC3D06C4B /* PFPurchaseTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E187E8D8CF825E41E24E4ECF043D165B /* Pods-FoodbLog-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 71E8757C5E655C53AAFA0481265D031B /* Pods-FoodbLog-dummy.m */; }; - E283FC5D5F9002724D4E524E59577F76 /* PFObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = E17C805A5EBB9F99E87AE99981812FC7 /* PFObjectState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E2C42C2EC9B809BA3AEDE05F92643393 /* PFMutableObjectState.h in Headers */ = {isa = PBXBuildFile; fileRef = EC68094E74192E9415DE284736276F42 /* PFMutableObjectState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E2FF904D58EF803363F83C88EFDC1EBC /* PFLocalization.h in Headers */ = {isa = PBXBuildFile; fileRef = F6A33DD502114C23783D6D52977D75D2 /* PFLocalization.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E31DB9FC1B6D203D4C442A4E001AA9F8 /* PFTaskQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DC5561D6E88870E46F7C10C1B8A21CC /* PFTaskQueue.m */; }; - E32B12CDAA8A832881EA08013F74B10A /* UNIRest.m in Sources */ = {isa = PBXBuildFile; fileRef = 302EA9A2809EC2AE89E8395AE0606DC9 /* UNIRest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - E333D533DE4361D5A3CE2F9D62281084 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - E3C98A1E8B44CB98C75C72B0153311FA /* PFFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 28B369CD0FD6B2267684D60BAD74B807 /* PFFileState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E3DE284C9F31AEA272123577A8454947 /* PFFieldOperationDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F817FA3B2D6B6B355ABF9815AD40608 /* PFFieldOperationDecoder.m */; }; - E422151D5688228672DB1F43821D0AB9 /* UIButton+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F2B4DBA35116B6042915F19733A7176 /* UIButton+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E44F9A7B9A2B8D6F8C679EB26957DCB1 /* UNIHTTPResponse.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = 7175B962AF396E26B597D16DC3A5CAAB /* UNIHTTPResponse.h */; }; - E58B15E1388E3893149BE0E2AF7C021D /* PFAnalyticsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F8F1DF2A2E6067126652008A009717A /* PFAnalyticsController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E6074F2DE1234DE003E339251CE655DC /* PFMutableFileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 78698705CCE8B41B0BB2C29A99DAED74 /* PFMutableFileState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E67A6D29E52E288E8B60D39C878CF960 /* Chameleon_.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E432ED6C4BACD597B5F4F2DB17116EA /* Chameleon_.m */; }; - E89DF5C4D859407455A3E294EE9D420A /* UNIHTTPClientHelper.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = EAE6707081D74AD48DDC2CD34E54F4A5 /* UNIHTTPClientHelper.h */; }; - E8D145B6A8F126EE542D4560DA53C04B /* PFEventuallyQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A2E073D3DA8C342D0440403A0447C26 /* PFEventuallyQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E8E206B9EEE20D20F0D9BEFE46B653D1 /* PFPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A5E8C51D8EFCE54951AFBA268A07EC5 /* PFPin.m */; }; - E9157D80838E300F27801069DA1BF917 /* Bolts-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 07A0976E8712629AD60DA98871FCF0DE /* Bolts-dummy.m */; }; - E94EB5FE3AAD983E3DEC7DC48A2A91A7 /* Unirest-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 602303506554C7182024859B53F84A23 /* Unirest-dummy.m */; }; - E94EE26A559D916232409D3B78C1330C /* PFOfflineStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B36583C8B8073E88C7FBCEDD319D548 /* PFOfflineStore.m */; }; - E99B3AC70816797E71FD03AD9F6ED794 /* PFUserFileCodingLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 385FE35508EFAD1A522AC72D9A9F3F0D /* PFUserFileCodingLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EBAD17678C41DA0FC100BAF0C597CF1D /* PFFieldOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 7013A29B1EA77F5E42B21D0847570E86 /* PFFieldOperation.m */; }; - EBE6A0A4F9476D021AF772A03BCA694A /* PFActionButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 1496C6331BE5CE68663D0C65DEB7E653 /* PFActionButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EC13F1DF9025A5C3E0CB90E9376BD62F /* IQKeyboardManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EF08F0FD1BF57A2E09B192B96E023021 /* IQKeyboardManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EC1CBC5AB12E4C488819653A72B5E19F /* IQKeyboardManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4012B08564DD4ED326E07CC6F074DD1B /* IQKeyboardManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EC4BF1A648624D63284CED0E9A6992CA /* PFMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D24DD97B5EB009793F423B2E12526C9 /* PFMulticastDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED29E4C820CC9842AAD8DC8AD8DE1B7C /* PFInstallationIdentifierStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D69D5263055F55D91F01C506D8E89BAD /* PFInstallationIdentifierStore.m */; }; - ED7504BB4E39C1BD0DBBC215994E7D77 /* PFURLConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F2C6A11EEEA34D04A61B4281AC80E6C /* PFURLConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED9C3556AC3D5037CB6FF529D816FB12 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = B965B81CCEE7979B459AD921D6689D66 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EE537F59676DDE713D6A023B2C160F03 /* PFTextField.h in Headers */ = {isa = PBXBuildFile; fileRef = 9101FCF180E53E25AAE24FD11B0AB42B /* PFTextField.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EEBA3FE1C7E10F722123D0898B8A3390 /* Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D7568E836055BBF820E548BA267D097 /* Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EF985A767B2C450FA8F0640769D206AD /* UNIBaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = F002184D6C52C347609B0935CC6CF065 /* UNIBaseRequest.h */; }; - EFC43ED31D5EAC920327974ECFCEEE03 /* PFFile_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AF27CCB4FCEF9871BEE69541BB6C7107 /* PFFile_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F05460F7ED57F04C670F8CF2A121BFD7 /* UIColor+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = F84F91BBE51B1905554065F47F8129B3 /* UIColor+Chameleon.m */; }; - F0F92512DD701E369E2EE06A213E11DD /* UINavigationBar+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = A1464A1B89739CFFDC2231D2B2BFEF97 /* UINavigationBar+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F0FBC0D30A36AD2329B48A43A17C4F73 /* PFFileStagingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EE458611A33294A7976CAE3AC79A962 /* PFFileStagingController.m */; }; - F1A626CC96C4F5309BDB955D24C08340 /* FlatUIKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D308000BF600D71810C6CD2499427CD7 /* FlatUIKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F257CA05C061D91DBF8FF42DF83ACB48 /* PFThreadsafety.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C77C2B15C731F7A514C22FFCFAD61F4 /* PFThreadsafety.m */; }; - F2A824CD4CFB7203FD1871E0F3BE5EBD /* PFColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A16F60868674C544C93C2FC19B449CF /* PFColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F31306E41FB51E5765D496D169EA1C87 /* PFRESTCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 960742FAC6FDF1CD37B19A3DA2797830 /* PFRESTCommand.m */; }; - F3208A893E46B96AEB700BA316A28496 /* PFConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = ECD2083274B0707629CB97D4D8099431 /* PFConstants.m */; }; - F33EECCDE7368710D4AB061B4D4EF441 /* Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = D64494125FCBF8578381C4A3DFC24582 /* Base64.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - F35BD45463573B117E40D3CAEEF20AC4 /* FUISwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = 11570DEE95441A341ED290D310B99750 /* FUISwitch.m */; }; - F3A723074159B52AECB8DB92DCC9068D /* UINavigationController+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 538710A479D4D4516F3473CEB00D6341 /* UINavigationController+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F3FE63C82D6575686809B65BB48AE8C8 /* IQUIWindow+Hierarchy.h in Headers */ = {isa = PBXBuildFile; fileRef = F32062803128DABF9E52794D64204AA2 /* IQUIWindow+Hierarchy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F408B67DE22C6E247BE9587685BFD844 /* PFMutableQueryState.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CB6840C12F6DE61721C1D23DAD8176F /* PFMutableQueryState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F4259C77CC1398618A0AB193BD065D6D /* UNIBodyRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B57AB3BA641DCFA726A7D3F91B31F320 /* UNIBodyRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - F4A3C9920EDEA3E824FE7C0843DD52CE /* PFCommandResult.m in Sources */ = {isa = PBXBuildFile; fileRef = D81124330876EB85D8CCB6C9378D2E8C /* PFCommandResult.m */; }; - F578343769211EBC6B3F9E68ACCD6A8C /* PFMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 9279D9795C913BECFB930DCA0A4CBF9B /* PFMacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F58ECDD2CAFE685F6DACB73F5451956A /* PFUIAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = C2660605B5FB0E40D12FF6A4B131C4A2 /* PFUIAlertView.m */; }; - F59673E41BF429818335D4E6BA080037 /* PFBase64Encoder.m in Sources */ = {isa = PBXBuildFile; fileRef = E843676E8B7DE282A6605A76DC99E8D3 /* PFBase64Encoder.m */; }; - F5A1F5648B57F8EE92271219D9640F86 /* FUIAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = F60B9EE41FD4D8BAB2516F180F00B059 /* FUIAlertView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F5BA0DBEDD8F1AE74F6BF8E3AF1034EC /* UIStepper+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = AD86AC16AA572CE40EAE3336DB4D3602 /* UIStepper+FlatUI.m */; }; - F668EAE6CBB9ADC856DF7885478C3693 /* NSString+Icons.m in Sources */ = {isa = PBXBuildFile; fileRef = C2D25A48A5669C4EEA1A1278B5AADCC8 /* NSString+Icons.m */; }; - F66FB96E58063242636624CC93CB1481 /* PFObjectBatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A99D12CF0886074F54F4101B90E0209 /* PFObjectBatchController.m */; }; - F6CD1E97BE26915E38C4670CEB95CFAE /* UIColor+FlatUI.m in Sources */ = {isa = PBXBuildFile; fileRef = C6465177F56344D8A62FB5F181EEDB03 /* UIColor+FlatUI.m */; }; - F738741C0DA60836C6691930B8903F44 /* PFBase64Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = EF5EAF79A06EE932EE7BB85498679562 /* PFBase64Encoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F73C65E428DB0FF941082D3A5112C901 /* PFGeoPointPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 51829BFD42C53387BD853B53595A4859 /* PFGeoPointPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F77A9F2C3BA210256751313BC23B8BAA /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = CA0F759EB3B8FF5747A3FF8D9A670ED4 /* BFExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F7A4DCF50AE508452A448EA22797EEBB /* PFSessionUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 36829EB394DB6476915698282D533FA4 /* PFSessionUtilities.m */; }; - F7F1F58441A29C3E9E037BF03A1E0172 /* PFErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 131DCAADD2A7478906370E28CF44D71A /* PFErrorUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F816F1EB5E6293AEB6C05213922DD332 /* PFActivityIndicatorCollectionReusableView.m in Sources */ = {isa = PBXBuildFile; fileRef = C0FA4E1F34830F2463FCB811EAD24A79 /* PFActivityIndicatorCollectionReusableView.m */; }; - F83A166A204E7F70BAABFD2E4CA21FC7 /* PFRESTSessionCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = DF7A671748B1795733EB163457D9959D /* PFRESTSessionCommand.m */; }; - F8B195D52D2D7BE80CF4EE6B726204A6 /* PFConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = C80EE7051488F41E849C0913BFE85299 /* PFConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F8CAF02F1E612CEFB2AB6C3B731ADA87 /* PFPinningEventuallyQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5170BF555CAA15C414E5FFBAFBA0560C /* PFPinningEventuallyQueue.m */; }; - F8D55F4F51D08B48B8B0776E9DE8E4D2 /* PFPushState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F0D7E94728407981CD0D00CFC842764D /* PFPushState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F906BA7712F8F45BF05FD888A25ADB6F /* PFFieldOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 036DE49E350AD26884D01409BB02CCEF /* PFFieldOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F914B72A685B4117F89010C60D49A74D /* PFCurrentUserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 109E7534E27B2BE53FBD782EF3EA62A9 /* PFCurrentUserController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F9352FCBA2935DB07B38CDCC3E5D04F5 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E82AC36F045BE087ECE7253B8EEB06EB /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F9410635D2A13AC2DC7A9CCB266F8596 /* UIProgressView+FlatUI.h in Headers */ = {isa = PBXBuildFile; fileRef = F8E604995C153FE58AF3F074F1262AEA /* UIProgressView+FlatUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F9BF113DAE31AC0FFE2C2DEA50F75891 /* UNIHTTPStringResponse.h in Copy HttpResponse Public Headers */ = {isa = PBXBuildFile; fileRef = DBE6819D41549A1CBD4D69F3085F2562 /* UNIHTTPStringResponse.h */; }; - FA71321B6035542D5D30B828DB77FB8C /* PFCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = EAA0C3C67C7D908A2F7182249E71C853 /* PFCollectionViewCell.m */; }; - FB3FC81067E5C451ADFBFF6918D8FFCA /* IQTitleBarButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A93EE71639FC1F292FCD2110B27A625 /* IQTitleBarButtonItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FB47B2B3700081A29B32CAB0B8361303 /* UILabel+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = E07A6A98D3D5AABF5C8EFFD18AB58BC3 /* UILabel+Chameleon.m */; }; - FBF3606D5AA052B28AAF18AFA1F6F5E1 /* PFFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 19D22DE6F0EF2AF9D2D7C2F20FD61ADD /* PFFile.m */; }; - FD18EFB419117DE421FCB38ACF9151AF /* PFKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = FCDFA364DF4CC49FC21ECB8993B987F4 /* PFKeychainStore.m */; }; - FDB6E1D811A52AD01DFD1128E8EF8911 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */; }; - FDCA64A498A1F1C61C0DE0342920FDB6 /* UINavigationController+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = E0FADD9A90F6B97C2F05721EFB03C404 /* UINavigationController+Chameleon.m */; }; - FE3FEBF0DEEFD932C5106CA7DCCC1FF3 /* PFCommandURLRequestConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 91DA321208E1EF09682615B34F8542E4 /* PFCommandURLRequestConstructor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FE7ED99030498028605F37EB2B3518B7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */; }; - FEACB369279A460ECFC54C005A741AE0 /* PFObjectConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B6F63E91EEC4427BD74F56EC4CDA08B /* PFObjectConstants.m */; }; - FEAF74C28B30197791132CA4C268A2CD /* Pods-FoodbLog-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 47B8D17F18C41D9E28B5AD8E78B23877 /* Pods-FoodbLog-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FED8724CB7E797F857A8B6954F9672F7 /* PFQueryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D48E39DBDC5F4A1596DCF448DB2C584 /* PFQueryUtilities.m */; }; - FEEB54C300BDC23661F4B2D1C4BD939C /* PFUserAuthenticationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 989F197281037053568D90FE2E45034F /* PFUserAuthenticationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FF4D68C2DEC5B1C462849F1F5EC83C76 /* PFURLSessionCommandRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = D961C77262C7D151CC89E6164FA6D52C /* PFURLSessionCommandRunner.m */; }; - FF73BEC217D2099177CEFA7DFEA4A4FD /* PFURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E61178295191BF6E6785AA01F3B06A /* PFURLSession.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FFDEA159E9BE6B9B53FB5726020990FE /* PFObjectState.m in Sources */ = {isa = PBXBuildFile; fileRef = 033CF3680745525AA290EAA350C6D644 /* PFObjectState.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 4534AFDCFE4E3F47A2AAF5DE9AA0B163 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 42465A188431886AB035275F049824D3; - remoteInfo = Bolts; - }; - 5CB0E17673C4FF6B06461CFF4BE9F890 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = FBA456CB50E371584C11231929A0971E; - remoteInfo = IQKeyboardManager; - }; - 6C7FDBC1A588296B19BD2ECF54A19EC8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 42465A188431886AB035275F049824D3; - remoteInfo = Bolts; - }; - 6EC43FB8FA6F24A56C8B29A3321EE415 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7F3FE5658AEC4AF2B296EDA73A218182; - remoteInfo = Parse; - }; - 725D87B5A2A247E05A8144C4ADDAFBE9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 96F971576D7B3914510B0B2FB38F43A2; - remoteInfo = ParseUI; - }; - 791C3327C12F11ED3A0B6E43F941ECB7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = DD9AC66E330E40497F19A867C63FBAAA; - remoteInfo = Unirest; - }; - 85555F6EC589E33A03E90D2664B57C19 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 42465A188431886AB035275F049824D3; - remoteInfo = Bolts; - }; - 8D628D385D9F5A838D8C30142748A1ED /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7F3FE5658AEC4AF2B296EDA73A218182; - remoteInfo = Parse; - }; - 98BDC34B972C5A1BDCE7F5F879B31FBF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 28BFDC89BA4363F4F3576DEC70EE10AE; - remoteInfo = ChameleonFramework; - }; - E1E69F9F813F9240A8C96E8C112A0D1C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 923099EAAC66CBEDD533E3FE43830166; - remoteInfo = FlatUIKit; - }; - E3C263ED9E54BDFD17A2DAECF7277C9D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0130B3724283586C0E9D2A112D4F2AA1; - remoteInfo = AFNetworking; - }; - FDC3896FC173C665902C83FA3FA7B269 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; - remoteInfo = SDWebImage; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 4C463E297FC3B0D0A43041080634DD7C /* Copy HttpResponse Public Headers */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "$(PUBLIC_HEADERS_FOLDER_PATH)/HttpResponse"; - dstSubfolderSpec = 16; - files = ( - A1FC37F2116E19070ECBC786636BD411 /* UNIHTTPBinaryResponse.h in Copy HttpResponse Public Headers */, - D243F10448E2A25C9E2900BFD359D668 /* UNIHTTPJsonResponse.h in Copy HttpResponse Public Headers */, - E44F9A7B9A2B8D6F8C679EB26957DCB1 /* UNIHTTPResponse.h in Copy HttpResponse Public Headers */, - F9BF113DAE31AC0FFE2C2DEA50F75891 /* UNIHTTPStringResponse.h in Copy HttpResponse Public Headers */, - 17826DD59204D4468835FC0C09E9EBA5 /* UNIJsonNode.h in Copy HttpResponse Public Headers */, - ); - name = "Copy HttpResponse Public Headers"; - runOnlyForDeploymentPostprocessing = 0; - }; - 90E8C54D0CE7627A9E9FA12FB6859335 /* Copy . Public Headers */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "$(PUBLIC_HEADERS_FOLDER_PATH)/."; - dstSubfolderSpec = 16; - files = ( - B5E41D5D6349F5F3843295A17A9BDDB2 /* Base64.h in Copy . Public Headers */, - E89DF5C4D859407455A3E294EE9D420A /* UNIHTTPClientHelper.h in Copy . Public Headers */, - A038878D88F1510B6E0A20E100FAC74C /* UNIHTTPRequest.h in Copy . Public Headers */, - 34548E9B4CDB70E6E52F11A181092423 /* UNIHTTPRequestWithBody.h in Copy . Public Headers */, - 4E349CA31573A68A02AD4F89FDFAA05B /* UNIRest.h in Copy . Public Headers */, - A543D21D249A4C570A3C1F9660FFFE4D /* UNIUrlConnection.h in Copy . Public Headers */, - ); - name = "Copy . Public Headers"; - runOnlyForDeploymentPostprocessing = 0; - }; - AC965A15FD8A8C4AF6FC3464500E5A12 /* Copy HttpRequest Public Headers */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "$(PUBLIC_HEADERS_FOLDER_PATH)/HttpRequest"; - dstSubfolderSpec = 16; - files = ( - 312C40EA300F699058F45DE66C7F9C51 /* UNIBaseRequest.h in Copy HttpRequest Public Headers */, - AEF9213E35168A3EB14E0CDA9D7E44E6 /* UNIBodyRequest.h in Copy HttpRequest Public Headers */, - 33DDA524C70EF2A533A82C76BC02D588 /* UNISimpleRequest.h in Copy HttpRequest Public Headers */, - ); - name = "Copy HttpRequest Public Headers"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 008FE4C757A98BF3F85D56B16B909C95 /* ParseUI.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ParseUI.debug.xcconfig; sourceTree = ""; }; - 0211A72E4EA58246830A20585FB161A7 /* PFPropertyInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo.h; sourceTree = ""; }; - 023393764250C8DBC9744BAAF26A4B90 /* PFDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDataProvider.h; path = Parse/Internal/PFDataProvider.h; sourceTree = ""; }; - 02461850BFE597052075F46B27750287 /* Lato-Regular.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "Lato-Regular.ttf"; path = "Resources/Lato-Regular.ttf"; sourceTree = ""; }; - 0264EE9F5AFC365618A7A86369BDF5E5 /* PFProduct+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFProduct+Private.h"; path = "Parse/Internal/Product/PFProduct+Private.h"; sourceTree = ""; }; - 029C15EA534199B8D6FF5549EDA5174A /* PFEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEncoder.m; path = Parse/Internal/PFEncoder.m; sourceTree = ""; }; - 0322D52D22023BE2411F2CCAACEE304A /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperation.h; path = AFNetworking/AFHTTPRequestOperation.h; sourceTree = ""; }; - 033347FAE6C04EC4566EFBDC24DB4DC8 /* PFRESTConfigCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTConfigCommand.m; path = Parse/Internal/Commands/PFRESTConfigCommand.m; sourceTree = ""; }; - 033CF3680745525AA290EAA350C6D644 /* PFObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectState.m; path = Parse/Internal/Object/State/PFObjectState.m; sourceTree = ""; }; - 036DE49E350AD26884D01409BB02CCEF /* PFFieldOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperation.h; path = Parse/Internal/FieldOperation/PFFieldOperation.h; sourceTree = ""; }; - 0383903D05EDD5C442C682C1F7A1752D /* ChameleonFramework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ChameleonFramework; path = ChameleonFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 041219D95934148272D9D11F04A65097 /* PFRESTObjectCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectCommand.m; path = Parse/Internal/Commands/PFRESTObjectCommand.m; sourceTree = ""; }; - 0415F5BE04092407D9C3DF323C2DDA93 /* PFPropertyInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo.m; sourceTree = ""; }; - 0528637876B6E3CD1CC1904766E72FCF /* PFACL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACL.m; path = Parse/PFACL.m; sourceTree = ""; }; - 0600787BA30BFE74CE957F9E90F3BBBA /* PFPushManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushManager.m; path = Parse/Internal/Push/Manager/PFPushManager.m; sourceTree = ""; }; - 062054FC97AAAB3D2F4AB253A7CDE385 /* ParseUI */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ParseUI; path = ParseUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0625A1B69859FE4C804D6DB1E4977BA5 /* IQKeyboardManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManager.modulemap; sourceTree = ""; }; - 0644AF28ADE45E9FB2616BBB3A6B43F3 /* PFRESTUserCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTUserCommand.h; path = Parse/Internal/Commands/PFRESTUserCommand.h; sourceTree = ""; }; - 0652F2476C7C87C6C0F6CB68072EA25F /* Parse */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Parse; path = Parse.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 06BFD711819A59BFBB5685332131E5BF /* Base64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Base64.h; path = Unirest/Base64.h; sourceTree = ""; }; - 078CF89D1976FA56CB71DB442293247A /* PFMultiProcessFileLock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLock.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.m; sourceTree = ""; }; - 07A0976E8712629AD60DA98871FCF0DE /* Bolts-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-dummy.m"; sourceTree = ""; }; - 08801F02130F31B03B1B8F0EE396CC30 /* Parse-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Parse-Info.plist"; sourceTree = ""; }; - 089CCF84955BA2531A9DA4EB301EE774 /* PFCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCategoryLoader.h; path = Parse/Internal/PFCategoryLoader.h; sourceTree = ""; }; - 08CFC3FCA7FE77B46041821976AF2BA6 /* PFPurchase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchase.m; path = Parse/PFPurchase.m; sourceTree = ""; }; - 09E57153667D515CCBCF5953009ED8FC /* PFURLSessionCommandRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.h; sourceTree = ""; }; - 0A13FE5C7D35D0AE5753E0BBDB76B4DD /* PFUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUser.h; path = Parse/PFUser.h; sourceTree = ""; }; - 0B0FFF3EEE8DA5E91EDEB8EA6DD38164 /* PFDateFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDateFormatter.m; path = Parse/Internal/PFDateFormatter.m; sourceTree = ""; }; - 0B1D30808B74647E6437CF9F248FF87E /* PFPropertyInfo_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Private.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Private.h; sourceTree = ""; }; - 0B1DC4F3EA65E8107DBC6146CF990FFF /* UITabBar+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITabBar+FlatUI.m"; path = "Classes/ios/UITabBar+FlatUI.m"; sourceTree = ""; }; - 0B36583C8B8073E88C7FBCEDD319D548 /* PFOfflineStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineStore.m; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.m; sourceTree = ""; }; - 0B4B936F403CF30DCA18AD72190FCFC9 /* PFACL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACL.h; path = Parse/PFACL.h; sourceTree = ""; }; - 0B559DA039E8A1B57AA78991E706A8C2 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; - 0B852FCF809F069DBCAB8194541BD2D2 /* PFProductTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductTableViewController.h; path = ParseUI/Classes/ProductTableViewController/PFProductTableViewController.h; sourceTree = ""; }; - 0C01979AC575C3DF44D871EBE33C80D1 /* PFProduct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProduct.h; path = Parse/PFProduct.h; sourceTree = ""; }; - 0C63D8CB09610644959B555ABF676D45 /* UNIHTTPJsonResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPJsonResponse.m; path = Unirest/HttpResponse/UNIHTTPJsonResponse.m; sourceTree = ""; }; - 0CAAD28C58C66EB0A98AA015C265FDCE /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; - 0D36B7A5D9F6AF7F4E01B2320E7BB931 /* UNIRest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIRest.h; path = Unirest/UNIRest.h; sourceTree = ""; }; - 0D50D22BBDCF4938379296E2F238F866 /* PFObjectFileCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCoder.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.m; sourceTree = ""; }; - 0DEB54A8B8D441D44B09F0FA01E8E95B /* ParseUI-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ParseUI-Info.plist"; sourceTree = ""; }; - 0E42C21E2CF24EB6317C3418E412FAC0 /* PFPush.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPush.m; path = Parse/PFPush.m; sourceTree = ""; }; - 0F8F1DF2A2E6067126652008A009717A /* PFAnalyticsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsController.h; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.h; sourceTree = ""; }; - 10327370A383E65FA840807957C88BCD /* PFUserAuthenticationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationDelegate.h; path = Parse/PFUserAuthenticationDelegate.h; sourceTree = ""; }; - 109E7534E27B2BE53FBD782EF3EA62A9 /* PFCurrentUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentUserController.h; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.h; sourceTree = ""; }; - 110AAF7EB53ECB71214D319069E26CBB /* SDWebImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDecoder.h; path = SDWebImage/SDWebImageDecoder.h; sourceTree = ""; }; - 11570DEE95441A341ED290D310B99750 /* FUISwitch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUISwitch.m; path = Classes/ios/FUISwitch.m; sourceTree = ""; }; - 11733E9AB23CFF872D2D8C693E69A845 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; - 11CBBD39FFE4DF992FED341E869D5277 /* Pods-FoodbLog-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-FoodbLog-frameworks.sh"; sourceTree = ""; }; - 120FA99F09676AEC262A7A964B7F118B /* PFSQLiteDatabaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseController.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.h; sourceTree = ""; }; - 1222D529EEC7D53C3D01CCE61951FE2B /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; - 1297CEA60937D63A7F97997D134CB8BB /* FUITextField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUITextField.m; path = Classes/ios/FUITextField.m; sourceTree = ""; }; - 131DCAADD2A7478906370E28CF44D71A /* PFErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFErrorUtilities.h; path = Parse/Internal/PFErrorUtilities.h; sourceTree = ""; }; - 13621BDB45C7DD8B00AEED3D06BB3D73 /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; - 13BA722BB3C5D60330A639CBB1030486 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; - 13E84B7E5A4B30014D5A54B0F163A44F /* PFCommandCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache.h; path = Parse/Internal/PFCommandCache.h; sourceTree = ""; }; - 143B16D45EA328180F3DC8ADB2E0F355 /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; - 144E3BE8EEEEF124C9859E3D7ADBE20F /* PFCoreManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCoreManager.m; path = Parse/Internal/PFCoreManager.m; sourceTree = ""; }; - 1496C6331BE5CE68663D0C65DEB7E653 /* PFActionButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActionButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFActionButton.h; sourceTree = ""; }; - 14B527B21E752166A0ECE57755F5B742 /* PFLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocationManager.h; path = Parse/Internal/PFLocationManager.h; sourceTree = ""; }; - 150F4AC40940FEC7C1C20AAD696887E5 /* PFObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObject.m; path = Parse/PFObject.m; sourceTree = ""; }; - 1698F26D15551C1829449B813F474E0F /* PFBaseState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBaseState.h; path = Parse/Internal/PFBaseState.h; sourceTree = ""; }; - 16A83694A1281D2628E8C6E4A5050DE4 /* PFRESTConfigCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTConfigCommand.h; path = Parse/Internal/Commands/PFRESTConfigCommand.h; sourceTree = ""; }; - 17A8A4A862EC921341A6294A505E8C17 /* PFSignUpViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSignUpViewController.h; path = ParseUI/Classes/SignUpViewController/PFSignUpViewController.h; sourceTree = ""; }; - 17F49279416DD3E891AA4D2508E5DEDA /* PFObject+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PFObject+Subclass.h"; path = "Parse/PFObject+Subclass.h"; sourceTree = ""; }; - 183F4922424C98CDCBAF70F6694F7186 /* PFOfflineObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineObjectController.m; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.m; sourceTree = ""; }; - 18D28DEFCE0FAFDD3C9195B9594781FC /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; - 18E5B4F6DD54D3DFEE040D4E42491397 /* PFImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImageCache.h; path = ParseUI/Classes/Internal/PFImageCache.h; sourceTree = ""; }; - 1934CD496BF357F3D85BDB55F2D42649 /* PFPaymentTransactionObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.h; sourceTree = ""; }; - 194C09CE6BAFEA2233F1C90D5FB06DE2 /* IQKeyboardManager.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManager.release.xcconfig; sourceTree = ""; }; - 19D22DE6F0EF2AF9D2D7C2F20FD61ADD /* PFFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFile.m; path = Parse/PFFile.m; sourceTree = ""; }; - 19DAC19FA8196CB203717E1E2DF33FC0 /* Lato-Light.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "Lato-Light.ttf"; path = "Resources/Lato-Light.ttf"; sourceTree = ""; }; - 1A16F60868674C544C93C2FC19B449CF /* PFColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFColor.h; path = ParseUI/Classes/Internal/Extensions/PFColor.h; sourceTree = ""; }; - 1A2E073D3DA8C342D0440403A0447C26 /* PFEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue.h; path = Parse/Internal/PFEventuallyQueue.h; sourceTree = ""; }; - 1A79E98AEE84BCDEC2A44AC20B564C75 /* PFSignUpView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSignUpView.m; path = ParseUI/Classes/SignUpViewController/PFSignUpView.m; sourceTree = ""; }; - 1AF187A6BDAC9D45C8425EE5D9869AA9 /* PFPurchase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchase.h; path = Parse/PFPurchase.h; sourceTree = ""; }; - 1BAEDB2E65A042469BB0C6C0651AD122 /* PFAnalytics_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics_Private.h; path = Parse/Internal/Analytics/PFAnalytics_Private.h; sourceTree = ""; }; - 1CF00F1FC0F39F69845946C2AD585948 /* PFFileDataStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileDataStream.m; path = Parse/Internal/File/FileDataStream/PFFileDataStream.m; sourceTree = ""; }; - 1D3130F150ABEFE07878D5F834F7C368 /* UNIUrlConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIUrlConnection.m; path = Unirest/UNIUrlConnection.m; sourceTree = ""; }; - 1D60463E70F6B8741716B5430ED6586F /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; - 1D7FFC332FE37C75EC2BBEEB205C3392 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; - 1DA0612D4D7F2E82006DC4C386EE7835 /* PFCoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreManager.h; path = Parse/Internal/PFCoreManager.h; sourceTree = ""; }; - 1E425907A301715A116FF9A3132EFC63 /* PFRESTAnalyticsCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTAnalyticsCommand.m; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.m; sourceTree = ""; }; - 1E5C55CFEDDC650E3CDF3F59B2865200 /* PFFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileManager.h; path = Parse/Internal/PFFileManager.h; sourceTree = ""; }; - 1ECD2B9CBAE08A9410E23E90B706CC79 /* AFHTTPRequestOperationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperationManager.h; path = AFNetworking/AFHTTPRequestOperationManager.h; sourceTree = ""; }; - 1F899C2DE9446CFBD4258DF3146777DA /* PFCurrentObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentObjectControlling.h; path = Parse/Internal/Object/CurrentController/PFCurrentObjectControlling.h; sourceTree = ""; }; - 1FA89EADBEBD0F217B329170BCD40A4C /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; - 201D0AF4758543C8B03C221952439864 /* PFObjectFileCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCoder.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCoder.h; sourceTree = ""; }; - 2079E3916C3DD67D0736BF3A3B847C80 /* IQKeyboardManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardManager-Info.plist"; sourceTree = ""; }; - 209B5F6CA85EBF47851F7BAB625D9974 /* PFPurchaseTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseTableViewCell.m; path = ParseUI/Classes/Cells/PFPurchaseTableViewCell.m; sourceTree = ""; }; - 20B2A45932656A04E9A644FBC0DA4689 /* PFOperationSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOperationSet.m; path = Parse/Internal/Object/OperationSet/PFOperationSet.m; sourceTree = ""; }; - 2100573153580E93D49B528DA64E5E5F /* PFPinningObjectStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningObjectStore.h; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.h; sourceTree = ""; }; - 212A31C3327EAA3D513C3DE44A109768 /* PFPushChannelsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushChannelsController.h; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.h; sourceTree = ""; }; - 217CAA0272C352818C8E463AFB4904F7 /* FlatUIKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FlatUIKit-Info.plist"; sourceTree = ""; }; - 21D8E4F6E3FE9751A9C71B96F1DA3755 /* UIPopoverController+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIPopoverController+FlatUI.h"; path = "Classes/ios/UIPopoverController+FlatUI.h"; sourceTree = ""; }; - 22E30A762CBA7D97BB4E81283F3DACDA /* Bolts.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.release.xcconfig; sourceTree = ""; }; - 22EC91ED4B69A438A78BF10A844BE247 /* PFHTTPURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHTTPURLRequestConstructor.m; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.m; sourceTree = ""; }; - 22F7F0A49C5577FAC19A72BBDAE54073 /* IQUITextFieldView+Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUITextFieldView+Additions.m"; path = "IQKeyboardManager/Categories/IQUITextFieldView+Additions.m"; sourceTree = ""; }; - 249176052C8E9FF258B54C64D59D6DD2 /* PFUserPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserPrivate.h; path = Parse/Internal/User/PFUserPrivate.h; sourceTree = ""; }; - 25A6BCE1E348D02F01E197A0C48E07E7 /* PFQueryState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState_Private.h; path = Parse/Internal/Query/State/PFQueryState_Private.h; sourceTree = ""; }; - 25AE04E3363DD54258BA17EE714BC7DE /* FlatUIKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FlatUIKit.debug.xcconfig; sourceTree = ""; }; - 2737B1F251EAB771EB977928EF4E9B9A /* Unirest-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Unirest-Info.plist"; sourceTree = ""; }; - 279C7B8C6BAEF8CDFC3B4C468EA5C328 /* PFApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFApplication.h; path = Parse/Internal/PFApplication.h; sourceTree = ""; }; - 27FD73571D1F0E411532F29E810FE8F4 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; - 2809CC499F34E67434A2065F3F90217D /* AFNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-umbrella.h"; sourceTree = ""; }; - 283A6A064CA65E920533C0B11919385E /* PFCurrentInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentInstallationController.h; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.h; sourceTree = ""; }; - 287B74C03E5984086449C9EC4671728B /* PFOfflineObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineObjectController.h; path = Parse/Internal/Object/Controller/OfflineController/PFOfflineObjectController.h; sourceTree = ""; }; - 28B369CD0FD6B2267684D60BAD74B807 /* PFFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState.h; path = Parse/Internal/File/State/PFFileState.h; sourceTree = ""; }; - 29E0F094F0637842397AB96FB4423477 /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; - 2A163F69034220CA4460D8608674DCAD /* PFPushUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushUtilities.h; path = Parse/Internal/Push/Utilites/PFPushUtilities.h; sourceTree = ""; }; - 2AECBBD0EFF420415B93C5A23FCB6BCD /* PFGeoPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPoint.h; path = Parse/PFGeoPoint.h; sourceTree = ""; }; - 2AEE82C4E7D4C887B812D322BF6616C6 /* PFGeoPoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFGeoPoint.m; path = Parse/PFGeoPoint.m; sourceTree = ""; }; - 2BA2B31088E6C331D800CCAB32D64F16 /* Lato-Italic.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "Lato-Italic.ttf"; path = "Resources/Lato-Italic.ttf"; sourceTree = ""; }; - 2BB08B7E9CFEBFDFED3FC2C86EF02981 /* UNIUrlConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIUrlConnection.h; path = Unirest/UNIUrlConnection.h; sourceTree = ""; }; - 2C29C184DBBCE87B995B672F7F51F2EA /* PFURLSessionJSONDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionJSONDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.h; sourceTree = ""; }; - 2C3AAD13195F59C43C31D7B68EBD3011 /* PFDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDevice.m; path = Parse/Internal/PFDevice.m; sourceTree = ""; }; - 2C6149FA7454A58C374DE984CBB2B5D5 /* PFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFNetworkActivityIndicatorManager.m; path = Parse/PFNetworkActivityIndicatorManager.m; sourceTree = ""; }; - 2C77C2B15C731F7A514C22FFCFAD61F4 /* PFThreadsafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFThreadsafety.m; path = Parse/Internal/ThreadSafety/PFThreadsafety.m; sourceTree = ""; }; - 2CD3DF3B3BA00C9C3B9025084D6018EA /* BFDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFDefines.h; path = Bolts/Common/BFDefines.h; sourceTree = ""; }; - 2D0B8387029A2FBE4D1B3128F06E3921 /* PFMutableACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableACLState.m; path = Parse/Internal/ACL/State/PFMutableACLState.m; sourceTree = ""; }; - 2D29EBF6D740449C59B201746886CD2A /* PFURLSessionDataTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.h; sourceTree = ""; }; - 2DC55D2B463E6818D02D571FF341E73B /* PFACLState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFACLState.m; path = Parse/Internal/ACL/State/PFACLState.m; sourceTree = ""; }; - 2DD6269DBB74E9E2A4341B46B3B2240C /* PFFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileState.m; path = Parse/Internal/File/State/PFFileState.m; sourceTree = ""; }; - 2E056AC96A8AACCF1DD32256DE702C88 /* PFOperationSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOperationSet.h; path = Parse/Internal/Object/OperationSet/PFOperationSet.h; sourceTree = ""; }; - 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 2EE2A8D1E5AFBD0420E65DA1389499B3 /* PFAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalytics.h; path = Parse/PFAnalytics.h; sourceTree = ""; }; - 2F7C8A872250C0A49C96DA6FE264847D /* ChameleonEnums.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonEnums.h; path = "Pod/Classes/Objective-C/ChameleonEnums.h"; sourceTree = ""; }; - 2F817FA3B2D6B6B355ABF9815AD40608 /* PFFieldOperationDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperationDecoder.m; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.m; sourceTree = ""; }; - 2FE2DCAC734B4286316670697800D439 /* FUISwitch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUISwitch.h; path = Classes/ios/FUISwitch.h; sourceTree = ""; }; - 302EA9A2809EC2AE89E8395AE0606DC9 /* UNIRest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIRest.m; path = Unirest/UNIRest.m; sourceTree = ""; }; - 30900CE96B834D956AE04457A32EC9B2 /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; - 312CFE7334F9820D693DB8F87FDF58BA /* PFLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLocationManager.m; path = Parse/Internal/PFLocationManager.m; sourceTree = ""; }; - 32719F277BAE80948D0BEA83DAC8F658 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; - 328E074028831B7162CC31C478F53164 /* UNIHTTPJsonResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPJsonResponse.h; path = Unirest/HttpResponse/UNIHTTPJsonResponse.h; sourceTree = ""; }; - 32917B1510914295787D683689498DCC /* PFACLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLPrivate.h; path = Parse/Internal/ACL/PFACLPrivate.h; sourceTree = ""; }; - 32D1EED54067102FB95B998DE807EB80 /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; - 331297A6C5AA9401BD6372032CD02FED /* PFPurchaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPurchaseController.m; path = Parse/Internal/Purchase/Controller/PFPurchaseController.m; sourceTree = ""; }; - 339B985FE4916FC0EAD33315A7189218 /* PFPaymentTransactionObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPaymentTransactionObserver.m; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver.m; sourceTree = ""; }; - 33A844344DE513F67DA9B594005E312F /* PFQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryController.m; path = Parse/Internal/Query/Controller/PFQueryController.m; sourceTree = ""; }; - 33EFCD2A806F168B502839B5E06004C6 /* IQUIViewController+Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIViewController+Additions.h"; path = "IQKeyboardManager/Categories/IQUIViewController+Additions.h"; sourceTree = ""; }; - 3424FEAC2E4DE6A897AE678346A16EB3 /* PFObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObject.h; path = Parse/PFObject.h; sourceTree = ""; }; - 34856B703E5606ED1C3566F49C8E8DF4 /* UIBarButtonItem+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIBarButtonItem+FlatUI.m"; path = "Classes/ios/UIBarButtonItem+FlatUI.m"; sourceTree = ""; }; - 34B4C034A030FAA4EDA0401F0A8DA0E1 /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; - 3552A7840686D24CD44668B0CDA0BF24 /* PFLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogger.h; path = Parse/Internal/PFLogger.h; sourceTree = ""; }; - 35ACB630538A121CBF33BD2A43D210F7 /* PFDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDecoder.h; path = Parse/Internal/PFDecoder.h; sourceTree = ""; }; - 36829EB394DB6476915698282D533FA4 /* PFSessionUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionUtilities.m; path = Parse/Internal/Session/Utilities/PFSessionUtilities.m; sourceTree = ""; }; - 3689BC9116ABAB64895F8C584E42DFC6 /* Bolts-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-umbrella.h"; sourceTree = ""; }; - 3691B24171C74EFD1F8433B4605C38E8 /* ParseUI-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ParseUI-prefix.pch"; sourceTree = ""; }; - 3691CA8C96F3BE2D408B9E1E7FCDD5A3 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; - 373B403D2BC5D282CCC10F9AF474DEE1 /* PFRelation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelation.h; path = Parse/PFRelation.h; sourceTree = ""; }; - 3780C220917B4DD9DC02DDD7323405B0 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 384BDE20DFFC6A0E2458D1BC282F4420 /* PFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkActivityIndicatorManager.h; path = Parse/PFNetworkActivityIndicatorManager.h; sourceTree = ""; }; - 385FE35508EFAD1A522AC72D9A9F3F0D /* PFUserFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserFileCodingLogic.h; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.h; sourceTree = ""; }; - 3870EE2EF73F00569F66764B6840BA48 /* PFAsyncTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAsyncTaskQueue.m; path = Parse/Internal/PFAsyncTaskQueue.m; sourceTree = ""; }; - 39A51D0C532BCF6377526E08062DE36D /* IQNSArray+Sort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQNSArray+Sort.h"; path = "IQKeyboardManager/Categories/IQNSArray+Sort.h"; sourceTree = ""; }; - 39A9911126C27100A1F40C2590B1A921 /* PFDefaultACLController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDefaultACLController.h; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.h; sourceTree = ""; }; - 39D6DC64510F8D6816ED4A2F7DFB52AF /* PFInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallation.h; path = Parse/PFInstallation.h; sourceTree = ""; }; - 39E688412771E938F26B8F10C0191798 /* PFObjectSubclassingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassingController.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.m; sourceTree = ""; }; - 3A0B96CBB6636A7BDCBA964478F20F8F /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; - 3A621B8940AFC7648C5072806B4B9311 /* PFSQLiteDatabaseController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseController.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseController.m; sourceTree = ""; }; - 3A7B398E287C24BCC8433260FC465DB3 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; - 3A7EC5204AF6AD0ACD56CD9B3D27A7E8 /* FUISegmentedControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUISegmentedControl.m; path = Classes/ios/FUISegmentedControl.m; sourceTree = ""; }; - 3A8E778140C33BF8B75C390520FC2B65 /* PFObjectSubclassInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassInfo.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.h; sourceTree = ""; }; - 3A93EE71639FC1F292FCD2110B27A625 /* IQTitleBarButtonItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQTitleBarButtonItem.h; path = IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.h; sourceTree = ""; }; - 3A9951560A51BC6B7877E46E76741F7E /* PFRole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRole.h; path = Parse/PFRole.h; sourceTree = ""; }; - 3B8B26D22A8D50D5756DCEABC1E2F39B /* PFInstallationIdentifierStore_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore_Private.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore_Private.h; sourceTree = ""; }; - 3BF939D82D860D7ABEC9DC1665E9AFFC /* FUIButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUIButton.m; path = Classes/ios/FUIButton.m; sourceTree = ""; }; - 3C41CA94D6F9231F57C05FC27DC0014F /* Unirest.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Unirest.modulemap; sourceTree = ""; }; - 3C56C342942346FB5B3BCF38AFC2442C /* IQBarButtonItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQBarButtonItem.m; path = IQKeyboardManager/IQToolbar/IQBarButtonItem.m; sourceTree = ""; }; - 3CB6840C12F6DE61721C1D23DAD8176F /* PFMutableQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableQueryState.h; path = Parse/Internal/Query/State/PFMutableQueryState.h; sourceTree = ""; }; - 3D2290841E77758DEB6EAFA4F67271A3 /* ChameleonFramework-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ChameleonFramework-dummy.m"; sourceTree = ""; }; - 3DA5EF8C3E29EFFDABDC9EE3902FE630 /* PFURLSessionDataTaskDelegate_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionDataTaskDelegate_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate_Private.h; sourceTree = ""; }; - 3DC055B41165FBC9ADAFA20E9AFEC94E /* Lato-Bold.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "Lato-Bold.ttf"; path = "Resources/Lato-Bold.ttf"; sourceTree = ""; }; - 3DE1802829062F013D376CB812C19065 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 3E6B3CC888343CC69943B63141268699 /* PFInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallation.m; path = Parse/PFInstallation.m; sourceTree = ""; }; - 3E6F93F75316C1B80CAAF5C92F8366AF /* PFPushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushState.m; path = Parse/Internal/Push/State/PFPushState.m; sourceTree = ""; }; - 3E8D9690AF80D6F60B62DDAF44050907 /* IQKeyboardReturnKeyHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQKeyboardReturnKeyHandler.m; path = IQKeyboardManager/IQKeyboardReturnKeyHandler.m; sourceTree = ""; }; - 3F123ABB578E3F518DF039070BC96D0B /* PFMultiProcessFileLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLock.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLock.h; sourceTree = ""; }; - 3F5D0B6D294347476FD73D958F09ED17 /* PFFileDataStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileDataStream.h; path = Parse/Internal/File/FileDataStream/PFFileDataStream.h; sourceTree = ""; }; - 3F8393736BD5D73AC01DBCF37963E6EA /* PFObjectSubclassInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectSubclassInfo.m; path = Parse/Internal/Object/Subclassing/PFObjectSubclassInfo.m; sourceTree = ""; }; - 3FB02385D3C2C2A0EB07A7BD82B8DE4B /* PFConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfigController.m; path = Parse/Internal/Config/Controller/PFConfigController.m; sourceTree = ""; }; - 4012B08564DD4ED326E07CC6F074DD1B /* IQKeyboardManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManager.h; path = IQKeyboardManager/IQKeyboardManager.h; sourceTree = ""; }; - 40375E85CA508E2B057CECEF9AC0A466 /* ChameleonMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonMacros.h; path = "Pod/Classes/Objective-C/ChameleonMacros.h"; sourceTree = ""; }; - 405B14A1911C958897CB6F7AA3CA87B0 /* BFTask+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Private.h"; path = "Parse/Internal/BFTask+Private.h"; sourceTree = ""; }; - 4117F3C2B16BF78B5EBD1BEACABFF34B /* ChameleonFramework-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ChameleonFramework-Info.plist"; sourceTree = ""; }; - 4133DB2BFB881FA9162EC51EF7038118 /* PFConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfigController.h; path = Parse/Internal/Config/Controller/PFConfigController.h; sourceTree = ""; }; - 41755FA2662E2489FEB0E6FEC30BCAE0 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDecoder.m; path = SDWebImage/SDWebImageDecoder.m; sourceTree = ""; }; - 41B531CB3F68644A7CA2E2C2C2A0A399 /* PFRESTCloudCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCloudCommand.h; path = Parse/Internal/Commands/PFRESTCloudCommand.h; sourceTree = ""; }; - 41C1D92DF62E21AFDBB85A53A4D4712E /* PFDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDecoder.m; path = Parse/Internal/PFDecoder.m; sourceTree = ""; }; - 42BF37A08F24B8A4D646021BAC4A89B8 /* PFObjectFilePersistenceController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFilePersistenceController.m; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.m; sourceTree = ""; }; - 435F2CA4899F4863E2CCBD079FDB969F /* PFMutableRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableRelationState.h; path = Parse/Internal/Relation/State/PFMutableRelationState.h; sourceTree = ""; }; - 436C46A02A32E7AC27D14D39EC7C1837 /* PFRESTFileCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTFileCommand.m; path = Parse/Internal/Commands/PFRESTFileCommand.m; sourceTree = ""; }; - 4373AB8A755D4DB6F49BA37DEFE4C9CF /* PFCoreDataProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCoreDataProvider.h; path = Parse/Internal/PFCoreDataProvider.h; sourceTree = ""; }; - 444C17DA53AAC790C006E8C77C606141 /* PFEventuallyPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyPin.h; path = Parse/Internal/PFEventuallyPin.h; sourceTree = ""; }; - 447A70708A6608EE3D4BD4E556895AE6 /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperation.m; path = AFNetworking/AFHTTPRequestOperation.m; sourceTree = ""; }; - 448743DDA2013C8A9A70568A441DEF22 /* PFImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImage.h; path = ParseUI/Classes/Internal/Extensions/PFImage.h; sourceTree = ""; }; - 44A129BE492571A758DC14026E10AB87 /* PFURLSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession_Private.h; sourceTree = ""; }; - 4557A74A01F29629FD85B18F24E777A5 /* PFCommandRunningConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunningConstants.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.m; sourceTree = ""; }; - 45756B2B291EADD70CF96E443BAD2FF1 /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLConnectionOperation.h; path = AFNetworking/AFURLConnectionOperation.h; sourceTree = ""; }; - 4576727BB25DE279D205E8F0DB89DB48 /* FUITextField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUITextField.h; path = Classes/ios/FUITextField.h; sourceTree = ""; }; - 45D59B3477CE4E1E8A8D72DAA36AE180 /* pt-BR.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = "pt-BR.lproj"; path = "ParseUI/Resources/Localization/pt-BR.lproj"; sourceTree = ""; }; - 463691C0AD9E31BB5AD4BDB493C34D0D /* PFAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAlertView.m; path = Parse/Internal/PFAlertView.m; sourceTree = ""; }; - 46422AC887FA952A4892854E29579089 /* UITableViewCell+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableViewCell+FlatUI.m"; path = "Classes/ios/UITableViewCell+FlatUI.m"; sourceTree = ""; }; - 46CD8E4F61AC27B42941BB20FCCC1C2F /* PFMutableUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableUserState.m; path = Parse/Internal/User/State/PFMutableUserState.m; sourceTree = ""; }; - 46E040DEB7A5A629D47173D5EB8CD36C /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; - 47A62753B34D273314D19513D5331BC8 /* PFQueryTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryTableViewController.m; path = ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.m; sourceTree = ""; }; - 47B8D17F18C41D9E28B5AD8E78B23877 /* Pods-FoodbLog-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-FoodbLog-umbrella.h"; sourceTree = ""; }; - 47DEEC6F87A4C44266E60D0FE9D3CD84 /* PFSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.h; sourceTree = ""; }; - 487BDB4CA79192A229759CBAEB510235 /* PFCommandURLRequestConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandURLRequestConstructor.m; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.m; sourceTree = ""; }; - 49C9AED1403F10EAEF0BDD8C5D1D3ED4 /* UNIHTTPRequestWithBody.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPRequestWithBody.m; path = Unirest/UNIHTTPRequestWithBody.m; sourceTree = ""; }; - 4A6D3469A0C446BC153A71D249DD118C /* Unirest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Unirest.release.xcconfig; sourceTree = ""; }; - 4A8B03638085EFF11C1EAAF09ED235E2 /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; - 4A99D12CF0886074F54F4101B90E0209 /* PFObjectBatchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectBatchController.m; path = Parse/Internal/Object/BatchController/PFObjectBatchController.m; sourceTree = ""; }; - 4C112C5EA6B10F17C8A8DC5699FFED81 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; - 4D093C8CB7A26243277525B5AAEEFDAC /* PFPaymentTransactionObserver_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPaymentTransactionObserver_Private.h; path = Parse/Internal/Purchase/PaymentTransactionObserver/PFPaymentTransactionObserver_Private.h; sourceTree = ""; }; - 4D7568E836055BBF820E548BA267D097 /* Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Chameleon.h; path = "Pod/Classes/Objective-C/Chameleon.h"; sourceTree = ""; }; - 4D9DF0C4B326ED5F2D1D4EAE13266284 /* UIImage+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+FlatUI.h"; path = "Classes/ios/UIImage+FlatUI.h"; sourceTree = ""; }; - 4DA03E39CAF7E8EFC0E5EDDCBC9F3BD0 /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; - 4DC5561D6E88870E46F7C10C1B8A21CC /* PFTaskQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTaskQueue.m; path = Parse/Internal/PFTaskQueue.m; sourceTree = ""; }; - 4DD4060F8826F9A5E5D4C4FC4E7A3256 /* PFTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTableViewCell.h; path = ParseUI/Classes/Cells/PFTableViewCell.h; sourceTree = ""; }; - 4DFE6A76A1CE11D7A2988AB23405FE3D /* PFObjectControlling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectControlling.h; path = Parse/Internal/Object/Controller/PFObjectControlling.h; sourceTree = ""; }; - 4E4DAF9930C43CB43E5BF52055CD68F1 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; - 4E759BDB2280614B1E223A5BF6593C20 /* PFACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState.h; path = Parse/Internal/ACL/State/PFACLState.h; sourceTree = ""; }; - 4EC3750FD01543193A7B71DB65C65C6C /* PFURLConstructor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLConstructor.m; path = Parse/Internal/HTTPRequest/PFURLConstructor.m; sourceTree = ""; }; - 4ED9C82C3A61619800659B958E8E749E /* PFUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUser.m; path = Parse/PFUser.m; sourceTree = ""; }; - 4EDD0EDAAEC49A923F963CFF2EB1A94F /* PFTextButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTextButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFTextButton.h; sourceTree = ""; }; - 4EEBB37503F5FF0C662950C8F1DECA80 /* IQKeyboardManager.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManager.debug.xcconfig; sourceTree = ""; }; - 4FB30C451B1E7FFB9382796A11C5943B /* PFQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQuery.m; path = Parse/PFQuery.m; sourceTree = ""; }; - 4FCCA3A37B3313BAF696EBB3102DF427 /* PFInstallationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationPrivate.h; path = Parse/Internal/Installation/PFInstallationPrivate.h; sourceTree = ""; }; - 50B6CCE1DD1F1B571E064C44E3D7CC87 /* PFCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCollectionViewCell.h; path = ParseUI/Classes/Cells/PFCollectionViewCell.h; sourceTree = ""; }; - 5170BF555CAA15C414E5FFBAFBA0560C /* PFPinningEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningEventuallyQueue.m; path = Parse/Internal/PFPinningEventuallyQueue.m; sourceTree = ""; }; - 51829BFD42C53387BD853B53595A4859 /* PFGeoPointPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFGeoPointPrivate.h; path = Parse/Internal/PFGeoPointPrivate.h; sourceTree = ""; }; - 518E2B391F997E4CCF271F754FA363A8 /* FUIPopoverBackgroundView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUIPopoverBackgroundView.m; path = Classes/ios/FUIPopoverBackgroundView.m; sourceTree = ""; }; - 523B0739D98E30356009D72E50CC1DDB /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; - 524E125E9BB16B2EA346C11FA2CCF3DB /* PFURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSession.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.m; sourceTree = ""; }; - 52F2CC34E25309A7D0C44241B0F15DEB /* PFFileController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileController.m; path = Parse/Internal/File/Controller/PFFileController.m; sourceTree = ""; }; - 532DBEDE2A0498233B11E32D118785DB /* PFRelation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelation.m; path = Parse/PFRelation.m; sourceTree = ""; }; - 538710A479D4D4516F3473CEB00D6341 /* UINavigationController+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationController+Chameleon.h"; path = "Pod/Classes/Objective-C/UINavigationController+Chameleon.h"; sourceTree = ""; }; - 53AED7B37E59FD4C2906C8CD48F1549D /* Unirest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Unirest.debug.xcconfig; sourceTree = ""; }; - 53CEB84926E7FC9E2CFE13206641FDF1 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; - 560C0E4A9A88A8BCA7929A45B476EDE1 /* PFProductsRequestHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductsRequestHandler.m; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.m; sourceTree = ""; }; - 562ED9F06683670B4C58AD183A5119AE /* PFURLSessionFileDownloadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionFileDownloadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.h; sourceTree = ""; }; - 564869040FE2AC538A52B329B2EE83BE /* FlatUIKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FlatUIKit.release.xcconfig; sourceTree = ""; }; - 56EFB542F9FA3A986A2C18607C6BA01A /* PFActionButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActionButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFActionButton.m; sourceTree = ""; }; - 571A49A343233979AB4B93973BE75E50 /* PFUserState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState_Private.h; path = Parse/Internal/User/State/PFUserState_Private.h; sourceTree = ""; }; - 57EE6DBB3BE682C35873FDA83F44B5FC /* PFAnalyticsUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsUtilities.m; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.m; sourceTree = ""; }; - 57F5879358C84148A7DCDE756C38208B /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLConnectionOperation.m; path = AFNetworking/AFURLConnectionOperation.m; sourceTree = ""; }; - 57F620D9F908B6A65FB1CEE68626BF6E /* PFOfflineQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryController.m; path = Parse/Internal/Query/Controller/PFOfflineQueryController.m; sourceTree = ""; }; - 5896B97D426354756157FC55B080FD82 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; - 58A2B45D80BC9668A48207A6F9EEC39D /* PFProductsRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFProductsRequestHandler.h; path = Parse/Internal/Product/ProductsRequestHandler/PFProductsRequestHandler.h; sourceTree = ""; }; - 58AE592385190B7467E751B3B8DACB38 /* PFQueryUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryUtilities.h; path = Parse/Internal/Query/Utilities/PFQueryUtilities.h; sourceTree = ""; }; - 58C02A1A5B90D578646A551B3EE8B09B /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; - 58D1011532F802CDF880D3B55F389975 /* ParseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseManager.m; path = Parse/Internal/ParseManager.m; sourceTree = ""; }; - 59340BADC818D8D3EE97EF49C93B9657 /* AFNetworking.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.release.xcconfig; sourceTree = ""; }; - 5942670B140FE51902C19AA1DE9A9F3C /* PFReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFReachability.h; path = Parse/Internal/PFReachability.h; sourceTree = ""; }; - 59579E28C00752CB33687F0116BCE918 /* PFSubclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSubclassing.h; path = Parse/PFSubclassing.h; sourceTree = ""; }; - 59C4881749E08C596424F2235546B787 /* FUIAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUIAlertView.m; path = Classes/ios/FUIAlertView.m; sourceTree = ""; }; - 59ECECD66E1B23B4D503CFCF46952262 /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; - 5A8213D4F0DEBAD8576AB50551D8B094 /* IQUIView+IQKeyboardToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIView+IQKeyboardToolbar.h"; path = "IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h"; sourceTree = ""; }; - 5B6D1ADF24E834ADDC3684C7A9BEBA9A /* Bolts.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Bolts.modulemap; sourceTree = ""; }; - 5B765AFD4A4848FC69B9C8A2E9F26602 /* PFPushController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushController.h; path = Parse/Internal/Push/Controller/PFPushController.h; sourceTree = ""; }; - 5B85775602BF2725E42724F544D6ECD0 /* PFCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCategoryLoader.m; path = Parse/Internal/PFCategoryLoader.m; sourceTree = ""; }; - 5BA130676F12B046A542250B72B807BA /* PFUserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserController.h; path = Parse/Internal/User/Controller/PFUserController.h; sourceTree = ""; }; - 5BC3203CA8DEAE4E766361C3772E32DF /* PFInstallationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationConstants.h; path = Parse/Internal/Installation/Constants/PFInstallationConstants.h; sourceTree = ""; }; - 5D0A81E8C2565C9257E716AD6F1840C1 /* PFUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserController.m; path = Parse/Internal/User/Controller/PFUserController.m; sourceTree = ""; }; - 5D2A07DA0436A22DB926D8F8BA8F922A /* UIView+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIView+ChameleonPrivate.m"; sourceTree = ""; }; - 5D2CC7EA24171E936D65F3D1CE945A69 /* PFRESTQueryCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTQueryCommand.m; path = Parse/Internal/Commands/PFRESTQueryCommand.m; sourceTree = ""; }; - 5D48E39DBDC5F4A1596DCF448DB2C584 /* PFQueryUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryUtilities.m; path = Parse/Internal/Query/Utilities/PFQueryUtilities.m; sourceTree = ""; }; - 5E1AFB8E063415AF1B76421BD1E70D71 /* PFActivityIndicatorTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActivityIndicatorTableViewCell.m; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.m; sourceTree = ""; }; - 5E6BF5C5D003F29D1B91F74088E1F30B /* PFNetworkCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNetworkCommand.h; path = Parse/Internal/PFNetworkCommand.h; sourceTree = ""; }; - 5E8A133C5B52375ED7ED0B08ADBD8537 /* Pods-FoodbLog.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FoodbLog.release.xcconfig"; sourceTree = ""; }; - 5ED9BE76CA272DD593432FBBB31A0802 /* UNISimpleRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNISimpleRequest.m; path = Unirest/HttpRequest/UNISimpleRequest.m; sourceTree = ""; }; - 5EE09B13391CB4E2288B618D9989B7CF /* UIViewController+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+Chameleon.h"; path = "Pod/Classes/Objective-C/UIViewController+Chameleon.h"; sourceTree = ""; }; - 5F2C6A11EEEA34D04A61B4281AC80E6C /* PFURLConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLConstructor.h; path = Parse/Internal/HTTPRequest/PFURLConstructor.h; sourceTree = ""; }; - 5F468E6B33E9C6CF3D86F7DE8C388C8B /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; - 602303506554C7182024859B53F84A23 /* Unirest-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Unirest-dummy.m"; sourceTree = ""; }; - 603FE11A5C1B8C0DC8233656AE9ED2CA /* PFPushUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushUtilities.m; path = Parse/Internal/Push/Utilites/PFPushUtilities.m; sourceTree = ""; }; - 6120BA628BADDB347735942BA78DB2BC /* PFTextField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTextField.m; path = ParseUI/Classes/Views/PFTextField.m; sourceTree = ""; }; - 6142F4E83D523220AAA5D1451FD4BD96 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = en.lproj; path = Parse/Resources/en.lproj; sourceTree = ""; }; - 62292C896B27EDFF3089011E9218A54F /* PFInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationController.m; path = Parse/Internal/Installation/Controller/PFInstallationController.m; sourceTree = ""; }; - 62333A4D0E9AF8700874F1F22E9827D6 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; - 62CF11BB195FBEDB741B155A299E3F4C /* IQKeyboardManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManager-dummy.m"; sourceTree = ""; }; - 6360B90072C4B548E77BF105665B6C37 /* PFPushManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushManager.h; path = Parse/Internal/Push/Manager/PFPushManager.h; sourceTree = ""; }; - 63A96BD4D5CE686506290E2B2F6864B5 /* ChameleonConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonConstants.h; path = "Pod/Classes/Objective-C/ChameleonConstants.h"; sourceTree = ""; }; - 64197C6CBE27CDF8450C86E247333C27 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; - 648C65817ACE24AD1C674B8C829B4E36 /* IQUIWindow+Hierarchy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIWindow+Hierarchy.m"; path = "IQKeyboardManager/Categories/IQUIWindow+Hierarchy.m"; sourceTree = ""; }; - 65BFCDD2C8EE6E26312798F208A450E4 /* PFHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPRequest.h; path = Parse/Internal/HTTPRequest/PFHTTPRequest.h; sourceTree = ""; }; - 6627F2203B9CE43FB51C48DEC6485120 /* PFObjectController_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController_Private.h; path = Parse/Internal/Object/Controller/PFObjectController_Private.h; sourceTree = ""; }; - 66D7E61A2DA0CCA139659AE3C52ADAC5 /* PFSQLiteStatement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteStatement.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.h; sourceTree = ""; }; - 6720A87D6066BFEDE6B83971F452B9BD /* Bolts-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Bolts-Info.plist"; sourceTree = ""; }; - 6721C44FB15736B15A7A9FF9DEE5BA27 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; - 6784E3A646029063B6761DB858CC2A64 /* PFRESTQueryCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTQueryCommand.h; path = Parse/Internal/Commands/PFRESTQueryCommand.h; sourceTree = ""; }; - 67A6FB7F80EB38941450A0B66E1843B4 /* Parse.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.debug.xcconfig; sourceTree = ""; }; - 67B1DADD0464EB28623E46BA51F4E731 /* PFConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConfig.m; path = Parse/PFConfig.m; sourceTree = ""; }; - 67C82E63D914F4652D462D1EF746789E /* PFFileState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileState_Private.h; path = Parse/Internal/File/State/PFFileState_Private.h; sourceTree = ""; }; - 68485F33091E36236F52B5769528EB54 /* UILabel+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UILabel+Chameleon.h"; path = "Pod/Classes/Objective-C/UILabel+Chameleon.h"; sourceTree = ""; }; - 692F0A966BB11E58EB1DF1EFEEE973F3 /* PFCommandCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandCache_Private.h; path = Parse/Internal/PFCommandCache_Private.h; sourceTree = ""; }; - 69AB457D67396F5B1AE602EB9BE91C33 /* PFNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFNullability.h; path = Parse/PFNullability.h; sourceTree = ""; }; - 69EB7978B5C927F6B8DB109710F1A3A9 /* PFMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMulticastDelegate.m; path = Parse/Internal/PFMulticastDelegate.m; sourceTree = ""; }; - 6AB0CD6365496172E27CBD57A2266391 /* PFSignUpViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSignUpViewController.m; path = ParseUI/Classes/SignUpViewController/PFSignUpViewController.m; sourceTree = ""; }; - 6B6F63E91EEC4427BD74F56EC4CDA08B /* PFObjectConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectConstants.m; path = Parse/Internal/Object/Constants/PFObjectConstants.m; sourceTree = ""; }; - 6B9244AA4FFAD4954BC0B0ACB67D2F4C /* Parse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse.h; path = Parse/Parse.h; sourceTree = ""; }; - 6C279362F3C05B272F24D95D7C88397A /* PFOfflineStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineStore.h; path = Parse/Internal/LocalDataStore/OfflineStore/PFOfflineStore.h; sourceTree = ""; }; - 6C66681DF328D06725C4357E76019D12 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; - 6CDA46DB859C98B0E388E4E3FBFB36FB /* UIColor+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIColor+ChameleonPrivate.h"; sourceTree = ""; }; - 6DAEBE8AEEE1FAA4664DBEB20E14CE68 /* PFRelationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationPrivate.h; path = Parse/Internal/Relation/PFRelationPrivate.h; sourceTree = ""; }; - 6F3BF9878F0834C3730E36D502F45185 /* PFBaseState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBaseState.m; path = Parse/Internal/PFBaseState.m; sourceTree = ""; }; - 6FC877593D9C3597554FD4F63EA7265D /* PFFileController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileController.h; path = Parse/Internal/File/Controller/PFFileController.h; sourceTree = ""; }; - 7013A29B1EA77F5E42B21D0847570E86 /* PFFieldOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFieldOperation.m; path = Parse/Internal/FieldOperation/PFFieldOperation.m; sourceTree = ""; }; - 7063EC865492F550FE5219FA73C9583A /* Parse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Parse.m; path = Parse/Parse.m; sourceTree = ""; }; - 70B003B9161DCD2E0A45781DF2576C89 /* flat-ui-icons-regular.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "flat-ui-icons-regular.ttf"; path = "Resources/flat-ui-icons-regular.ttf"; sourceTree = ""; }; - 70E696DD69E7E5ED847216871E48280C /* PFQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryController.h; path = Parse/Internal/Query/Controller/PFQueryController.h; sourceTree = ""; }; - 7158256AD2EEA035C9BB1BF017053123 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; - 7175B962AF396E26B597D16DC3A5CAAB /* UNIHTTPResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPResponse.h; path = Unirest/HttpResponse/UNIHTTPResponse.h; sourceTree = ""; }; - 719F3201FA8FF71792294DDA9C2E0678 /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; - 71E8757C5E655C53AAFA0481265D031B /* Pods-FoodbLog-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-FoodbLog-dummy.m"; sourceTree = ""; }; - 71FEF17E88601C7390E60B7D3C7D86D9 /* UNIJsonNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIJsonNode.m; path = Unirest/HttpResponse/UNIJsonNode.m; sourceTree = ""; }; - 7259AEBFEEBDDB3685DB53543C199135 /* PFObjectLocalIdStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectLocalIdStore.m; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.m; sourceTree = ""; }; - 7299ED8195E626646307BF4A8D40A058 /* PFProductTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProductTableViewController.m; path = ParseUI/Classes/ProductTableViewController/PFProductTableViewController.m; sourceTree = ""; }; - 735FD83521BA17D09CAE866022FD78C7 /* PFObjectConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectConstants.h; path = Parse/Internal/Object/Constants/PFObjectConstants.h; sourceTree = ""; }; - 73A9A926D0BDDC98D57EA6CCBC0E91AC /* UIView+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIView+ChameleonPrivate.h"; sourceTree = ""; }; - 73B7094CD00334DE71FFD9ED9F4AFE8D /* Parse-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Parse-dummy.m"; sourceTree = ""; }; - 73BC7B9783D64F0A868195064BC3BE46 /* PFOfflineQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryController.h; path = Parse/Internal/Query/Controller/PFOfflineQueryController.h; sourceTree = ""; }; - 73CC9A342B0099AB7F2D13D603FCFC71 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; - 73E92AE01951AA70475BDC4CB43A6528 /* PFCurrentInstallationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentInstallationController.m; path = Parse/Internal/Installation/CurrentInstallationController/PFCurrentInstallationController.m; sourceTree = ""; }; - 744ACCE6B933BA912384E2E1F34A3BA7 /* IQToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQToolbar.h; path = IQKeyboardManager/IQToolbar/IQToolbar.h; sourceTree = ""; }; - 74507F19D1FF215BD94690AA2D88047B /* PFRect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRect.h; path = ParseUI/Classes/Internal/Extensions/PFRect.h; sourceTree = ""; }; - 7491B40A0184FAC7223E8121B02FB307 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; - 749D4221E99EEA9B5BC4964E736739C2 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; - 74D0634B76E4EE3C7476264586B47F18 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; - 74D802D8056ADFE99B20602EAA26F7B2 /* PFInstallationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationConstants.m; path = Parse/Internal/Installation/Constants/PFInstallationConstants.m; sourceTree = ""; }; - 75D3AA3139CAC105C690DB23C90E64BF /* PFAnalyticsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnalyticsUtilities.h; path = Parse/Internal/Analytics/Utilities/PFAnalyticsUtilities.h; sourceTree = ""; }; - 7625D472ACC8D44E3E9CF86870FB700F /* PFPinningObjectStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPinningObjectStore.m; path = Parse/Internal/Object/PinningStore/PFPinningObjectStore.m; sourceTree = ""; }; - 764482CB123621C18470E54689AE1D1A /* PFObjectUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectUtilities.m; path = Parse/Internal/Object/Utilities/PFObjectUtilities.m; sourceTree = ""; }; - 78392292469D781C93066CD8051EC869 /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; - 78698705CCE8B41B0BB2C29A99DAED74 /* PFMutableFileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableFileState.h; path = Parse/Internal/File/State/PFMutableFileState.h; sourceTree = ""; }; - 78DF666508E81974752F6338C9BD57F0 /* PFRESTUserCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTUserCommand.m; path = Parse/Internal/Commands/PFRESTUserCommand.m; sourceTree = ""; }; - 79167CD3E04E39F302F7B16FAA2250AF /* IQKeyboardManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManager-prefix.pch"; sourceTree = ""; }; - 793A3BFEC9783DDC1830CDC4663B9EC4 /* PFConfig_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig_Private.h; path = Parse/Internal/Config/PFConfig_Private.h; sourceTree = ""; }; - 799A25ED12D346D0E10745AF43D345D4 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; - 79FD47C9A55EA483579D7171540525DC /* PFKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeychainStore.h; path = Parse/Internal/PFKeychainStore.h; sourceTree = ""; }; - 7A264B2075C9820174A1D049067B3CBF /* PFRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRelationState.m; path = Parse/Internal/Relation/State/PFRelationState.m; sourceTree = ""; }; - 7A7B4A661CDD8F7A507BC897C1C1F57D /* PFObjectBatchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectBatchController.h; path = Parse/Internal/Object/BatchController/PFObjectBatchController.h; sourceTree = ""; }; - 7B54797159113BD42DEF825808E96506 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; - 7B72B0C51A38197D37BB6563BDCA4FC1 /* UIToolbar+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIToolbar+FlatUI.h"; path = "Classes/ios/UIToolbar+FlatUI.h"; sourceTree = ""; }; - 7C2680C64F9681DB935CEC6C07AECD7F /* PFEventuallyQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyQueue.m; path = Parse/Internal/PFEventuallyQueue.m; sourceTree = ""; }; - 7C46519EC14E1637D6277AAE86419317 /* UNISimpleRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNISimpleRequest.h; path = Unirest/HttpRequest/UNISimpleRequest.h; sourceTree = ""; }; - 7C73CA6320217923A2DFB485254CC628 /* IQUIViewController+Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIViewController+Additions.m"; path = "IQKeyboardManager/Categories/IQUIViewController+Additions.m"; sourceTree = ""; }; - 7C92F31D9E400B1B46DA37ADD0B84189 /* ChameleonFramework.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ChameleonFramework.modulemap; sourceTree = ""; }; - 7D24DD97B5EB009793F423B2E12526C9 /* PFMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMulticastDelegate.h; path = Parse/Internal/PFMulticastDelegate.h; sourceTree = ""; }; - 7DB4F4E4B2256634770AE493DF1F4302 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; - 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 7DDE204F56A235BFC67201687941B5F5 /* UIPopoverController+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIPopoverController+FlatUI.m"; path = "Classes/ios/UIPopoverController+FlatUI.m"; sourceTree = ""; }; - 7DDFDA2543E81B2D6485145052BA73C2 /* PFConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConstants.h; path = Parse/PFConstants.h; sourceTree = ""; }; - 7E432ED6C4BACD597B5F4F2DB17116EA /* Chameleon_.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Chameleon_.m; path = "Pod/Classes/Objective-C/Chameleon_.m"; sourceTree = ""; }; - 7E9D4BAA6FB13BABFA6610DB1C1A516A /* ParseModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ParseModule.m; path = Parse/Internal/ParseModule.m; sourceTree = ""; }; - 7F2B4DBA35116B6042915F19733A7176 /* UIButton+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+Chameleon.h"; path = "Pod/Classes/Objective-C/UIButton+Chameleon.h"; sourceTree = ""; }; - 7F5AC19CF9E1DB86BB619A83FD60C580 /* UIViewController+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+Chameleon.m"; path = "Pod/Classes/Objective-C/UIViewController+Chameleon.m"; sourceTree = ""; }; - 7FB8156015613925F2F535F01040F256 /* PFLogInViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInViewController.h; path = ParseUI/Classes/LogInViewController/PFLogInViewController.h; sourceTree = ""; }; - 7FF0ED8615CFE41B1191D7A379331688 /* PFObjectEstimatedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectEstimatedData.h; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.h; sourceTree = ""; }; - 80178C233F043FB5B04F2B531880B028 /* ChameleonFramework.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ChameleonFramework.release.xcconfig; sourceTree = ""; }; - 80476201DCD8D8BD6436D2B68B92209C /* PFLoadingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLoadingView.h; path = ParseUI/Classes/Internal/Views/PFLoadingView.h; sourceTree = ""; }; - 80A30BF5DA2904576C9A695E79AEBC44 /* FlatUIKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlatUIKit.h; path = Classes/ios/FlatUIKit.h; sourceTree = ""; }; - 80CB234E37168DF49DEAB9D544A0C5FB /* IQTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQTextView.m; path = IQKeyboardManager/IQTextView/IQTextView.m; sourceTree = ""; }; - 810047E1F16DB679BCA0CC9D8C9337B7 /* BFTask+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Private.m"; path = "Parse/Internal/BFTask+Private.m"; sourceTree = ""; }; - 81A894C8CDCCFEAB2B5E90D348379A43 /* UIBarButtonItem+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIBarButtonItem+FlatUI.h"; path = "Classes/ios/UIBarButtonItem+FlatUI.h"; sourceTree = ""; }; - 81D0A63D86D41097D8121FB31AFAFEEA /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; - 826F299C0C32FA4481DAE44FA6FA0A1E /* PFPrimaryButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPrimaryButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.m; sourceTree = ""; }; - 829A5C4EB781110BB7C73A0432188FD5 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; - 82C057CF73EC05C9B670CD36A4FF9DC1 /* IQKeyboardManagerConstantsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManagerConstantsInternal.h; path = IQKeyboardManager/Constants/IQKeyboardManagerConstantsInternal.h; sourceTree = ""; }; - 831DABB79EABDA3FF9164AB3067B2154 /* PFRESTObjectBatchCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectBatchCommand.h; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.h; sourceTree = ""; }; - 836407DF9AE49E6F3CF05A57B2F3E0A1 /* PFCommandRunning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandRunning.m; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.m; sourceTree = ""; }; - 83C522A64AC5540AAD98319C36F3E135 /* PFRESTFileCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTFileCommand.h; path = Parse/Internal/Commands/PFRESTFileCommand.h; sourceTree = ""; }; - 848D623C2A83A163ACAD11BD0385C867 /* IQTitleBarButtonItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQTitleBarButtonItem.m; path = IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.m; sourceTree = ""; }; - 849E5A8317B6998E948A27507E902A90 /* Pods-FoodbLog.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-FoodbLog.debug.xcconfig"; sourceTree = ""; }; - 84E61178295191BF6E6785AA01F3B06A /* PFURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSession.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/PFURLSession.h; sourceTree = ""; }; - 84F48C253BD5BE7290BF97DBB488394B /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; - 85342B421353B094FC8A7B1ABA28B021 /* PFRelationState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState_Private.h; path = Parse/Internal/Relation/State/PFRelationState_Private.h; sourceTree = ""; }; - 857186AEF8B59B6AE45A44A595FC38D1 /* PFURLSessionCommandRunner_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionCommandRunner_Private.h; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner_Private.h; sourceTree = ""; }; - 8727E4ED80EA777438361FDA993B9BE4 /* PFObjectEstimatedData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectEstimatedData.m; path = Parse/Internal/Object/EstimatedData/PFObjectEstimatedData.m; sourceTree = ""; }; - 88D5A072EC90FD6AC9092E73B90F9254 /* PFFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileManager.m; path = Parse/Internal/PFFileManager.m; sourceTree = ""; }; - 8924CD04B6BFE4AAC5C88AEA98869B06 /* PFHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFHash.m; path = Parse/Internal/PFHash.m; sourceTree = ""; }; - 8967DDB36504C317B821DF34152AC486 /* PFURLSessionJSONDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionJSONDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionJSONDataTaskDelegate.m; sourceTree = ""; }; - 89DE757655305B9DAB2E3EA0D59AE60D /* UIButton+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+Chameleon.m"; path = "Pod/Classes/Objective-C/UIButton+Chameleon.m"; sourceTree = ""; }; - 8A5E8C51D8EFCE54951AFBA268A07EC5 /* PFPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPin.m; path = Parse/Internal/LocalDataStore/Pin/PFPin.m; sourceTree = ""; }; - 8A94C4B6698BAB7FAD0158E1D025AFD0 /* UIImage+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIImage+ChameleonPrivate.h"; sourceTree = ""; }; - 8B577949D6BEA39F003EEBD1157A4423 /* IQTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQTextView.h; path = IQKeyboardManager/IQTextView/IQTextView.h; sourceTree = ""; }; - 8B7D47CF2CED52BB8C4DBF504E0FD9A5 /* PFRESTCommand_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand_Private.h; path = Parse/Internal/Commands/PFRESTCommand_Private.h; sourceTree = ""; }; - 8BAB143961E7B37C103224026BB1A6A4 /* PFSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession.h; path = Parse/PFSession.h; sourceTree = ""; }; - 8BBDBA1C6D3C481A980BC35C14B1BAEF /* UNIHTTPRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPRequest.h; path = Unirest/UNIHTTPRequest.h; sourceTree = ""; }; - 8BC693C636CC87A6217C7C5DBD4D7A4A /* PFObjectController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectController.h; path = Parse/Internal/Object/Controller/PFObjectController.h; sourceTree = ""; }; - 8C177476B0E75BABF4B4FCB549A41A30 /* IQUIScrollView+Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIScrollView+Additions.m"; path = "IQKeyboardManager/Categories/IQUIScrollView+Additions.m"; sourceTree = ""; }; - 8C31022C27A2C8C1FBE857406C9AF09F /* PFAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAssert.h; path = Parse/Internal/PFAssert.h; sourceTree = ""; }; - 8C8AC497AFA3C26AABE01AA1D7E3F66D /* PFCurrentConfigController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentConfigController.m; path = Parse/Internal/Config/Controller/PFCurrentConfigController.m; sourceTree = ""; }; - 8E7AE561E188BF127BA12657694BA340 /* UNIBodyRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIBodyRequest.h; path = Unirest/HttpRequest/UNIBodyRequest.h; sourceTree = ""; }; - 8F7F9F74CC5A4F15ADE6F15432160734 /* Pods-FoodbLog-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-FoodbLog-acknowledgements.markdown"; sourceTree = ""; }; - 8F975DFB0B29996EF17B1A0A3E07BC65 /* PFRESTObjectCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTObjectCommand.h; path = Parse/Internal/Commands/PFRESTObjectCommand.h; sourceTree = ""; }; - 9005E4E32F1EF9E3F28CB2D81637B524 /* PFDismissButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDismissButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.m; sourceTree = ""; }; - 9051E6207606F6E900A4A30F93EE6FE1 /* PFThreadsafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFThreadsafety.h; path = Parse/Internal/ThreadSafety/PFThreadsafety.h; sourceTree = ""; }; - 90AFF1F5771F5C74F72298841B0D450E /* UIToolbar+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIToolbar+FlatUI.m"; path = "Classes/ios/UIToolbar+FlatUI.m"; sourceTree = ""; }; - 90B7F377A6C76455F713F9A2956AE3E4 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; - 9101FCF180E53E25AAE24FD11B0AB42B /* PFTextField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTextField.h; path = ParseUI/Classes/Views/PFTextField.h; sourceTree = ""; }; - 91DA321208E1EF09682615B34F8542E4 /* PFCommandURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandURLRequestConstructor.h; path = Parse/Internal/Commands/CommandRunner/URLRequestConstructor/PFCommandURLRequestConstructor.h; sourceTree = ""; }; - 920C6629AB79F0D4396D3F62D12B3527 /* PFEventuallyPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFEventuallyPin.m; path = Parse/Internal/PFEventuallyPin.m; sourceTree = ""; }; - 9279D9795C913BECFB930DCA0A4CBF9B /* PFMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMacros.h; path = Parse/Internal/PFMacros.h; sourceTree = ""; }; - 9295942D69DE1369ECE1A9BCC87CA017 /* Pods-FoodbLog-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FoodbLog-Info.plist"; sourceTree = ""; }; - 92AA3B35831850C75A93CFD081927516 /* PFCachedQueryController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCachedQueryController.m; path = Parse/Internal/Query/Controller/PFCachedQueryController.m; sourceTree = ""; }; - 93DC759AA838D19EFDB5EE39A0FD3B8A /* PFQueryTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryTableViewController.h; path = ParseUI/Classes/QueryTableViewController/PFQueryTableViewController.h; sourceTree = ""; }; - 947FF1F683D3B81772BB3703B214E58F /* PFPushPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushPrivate.h; path = Parse/Internal/Push/PFPushPrivate.h; sourceTree = ""; }; - 9493E918DE059197B488AEB66DA6E6DF /* PFURLSessionDataTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionDataTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionDataTaskDelegate.m; sourceTree = ""; }; - 94DF9C4055D9F72566E7A9544165FE9D /* PFDateFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDateFormatter.h; path = Parse/Internal/PFDateFormatter.h; sourceTree = ""; }; - 95314205CD5BD2133AB7512597330119 /* PFRESTCloudCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCloudCommand.m; path = Parse/Internal/Commands/PFRESTCloudCommand.m; sourceTree = ""; }; - 9569F3B77A7977F33A12712389BEACFC /* IQUIScrollView+Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIScrollView+Additions.h"; path = "IQKeyboardManager/Categories/IQUIScrollView+Additions.h"; sourceTree = ""; }; - 960742FAC6FDF1CD37B19A3DA2797830 /* PFRESTCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTCommand.m; path = Parse/Internal/Commands/PFRESTCommand.m; sourceTree = ""; }; - 96430B20989715A8573563A41C2C9B2B /* IQUITextFieldView+Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUITextFieldView+Additions.h"; path = "IQKeyboardManager/Categories/IQUITextFieldView+Additions.h"; sourceTree = ""; }; - 968C1C61689C3F23A5FC509269AE1B6C /* PFProduct.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFProduct.m; path = Parse/PFProduct.m; sourceTree = ""; }; - 96F352501E39A78917919E6827D9662D /* PFCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloud.m; path = Parse/PFCloud.m; sourceTree = ""; }; - 9731541F793BCF26FDF4582BC3D06C4B /* PFPurchaseTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseTableViewCell.h; path = ParseUI/Classes/Cells/PFPurchaseTableViewCell.h; sourceTree = ""; }; - 97B2351AC859811A6FD2A910BB95E71D /* UIColor+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIColor+ChameleonPrivate.m"; sourceTree = ""; }; - 97EE31EC4749C71A2BAD9783137A7666 /* IQToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQToolbar.m; path = IQKeyboardManager/IQToolbar/IQToolbar.m; sourceTree = ""; }; - 982A9041ADE39E009726C8B46D8C4515 /* ParseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseManager.h; path = Parse/Internal/ParseManager.h; sourceTree = ""; }; - 98527D7196957AAB07B79E2E2AFDE23E /* IQKeyboardManager */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardManager; path = IQKeyboardManager.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 989F197281037053568D90FE2E45034F /* PFUserAuthenticationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserAuthenticationController.h; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.h; sourceTree = ""; }; - 98F87F122A15B9E739F85D722AA24C2B /* Unirest-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Unirest-prefix.pch"; sourceTree = ""; }; - 992F6F2CF6AA0579EA8E24CB235D73BA /* UIAlertView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertView+AFNetworking.h"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.h"; sourceTree = ""; }; - 9A43EB961420A5AF4805BFDFA34DCDB3 /* ParseUI-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ParseUI-umbrella.h"; sourceTree = ""; }; - 9AC2743E8EC297C24BDC808D253215BC /* SDWebImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.release.xcconfig; sourceTree = ""; }; - 9AC40AAE4F66D4423B9D67D418FE9E45 /* PFRESTPushCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTPushCommand.h; path = Parse/Internal/Commands/PFRESTPushCommand.h; sourceTree = ""; }; - 9B208B6F44DC353307586ECDE943C9F4 /* PFURLSessionUploadTaskDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFURLSessionUploadTaskDelegate.h; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.h; sourceTree = ""; }; - 9B64FDF9AB420DD2D5082AAFDADB7FDA /* PFAnalyticsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalyticsController.m; path = Parse/Internal/Analytics/Controller/PFAnalyticsController.m; sourceTree = ""; }; - 9B6C075902DFE55B31A76D31208A4280 /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; - 9B84C7E4CD2F561F248C7DAD46DAB372 /* PFPushChannelsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushChannelsController.m; path = Parse/Internal/Push/ChannelsController/PFPushChannelsController.m; sourceTree = ""; }; - 9B8F1BF1B5F349B7005451DA741B0047 /* Parse.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Parse.modulemap; sourceTree = ""; }; - 9BE0320666C40F6DC06AF96C24A87FFC /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; - 9C159A4F2438A5E10FDA73505BEFA94D /* IQPreviousNextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQPreviousNextView.m; path = IQKeyboardManager/IQToolbar/IQPreviousNextView.m; sourceTree = ""; }; - 9CF35D4AC32619FDEC1F5F4FC52084A9 /* PFMutableRelationState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableRelationState.m; path = Parse/Internal/Relation/State/PFMutableRelationState.m; sourceTree = ""; }; - 9D5F1CE5891DAE96AE6580471A3F81CD /* PFWeakValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFWeakValue.h; path = Parse/Internal/PFWeakValue.h; sourceTree = ""; }; - 9D79F1F6C34E951AA6AE27F54B6C7662 /* Bolts-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-prefix.pch"; sourceTree = ""; }; - 9D7C94F9DF9D3C658BC5608AEB9B49B1 /* ParseUIConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseUIConstants.h; path = ParseUI/Other/ParseUIConstants.h; sourceTree = ""; }; - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9E818A121570D3A0F0DA80F2825AFB6D /* PFMultiProcessFileLockController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMultiProcessFileLockController.m; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.m; sourceTree = ""; }; - 9EE458611A33294A7976CAE3AC79A962 /* PFFileStagingController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFFileStagingController.m; path = Parse/Internal/File/Controller/PFFileStagingController.m; sourceTree = ""; }; - 9F62BD8D055CECF254F18875CD46DFA2 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; - 9FAE01CF4B380A313FEBB6E495A58C24 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; - A038B70DE9AC30C4BE5735BDCF379F95 /* IQKeyboardManagerConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManagerConstants.h; path = IQKeyboardManager/Constants/IQKeyboardManagerConstants.h; sourceTree = ""; }; - A04E1674F330FF3E8705ACDA5294CAF0 /* ParseUI.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ParseUI.release.xcconfig; sourceTree = ""; }; - A0AE3560BE9FC94C3B71D94028EB8928 /* PFResources.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFResources.m; path = ParseUI/Generated/PFResources.m; sourceTree = ""; }; - A0B75CA0A1B123DC95D30ED0D3F93513 /* PFObjectFilePersistenceController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFilePersistenceController.h; path = Parse/Internal/Object/FilePersistence/PFObjectFilePersistenceController.h; sourceTree = ""; }; - A1046A49BB31CE2EDA5FADB31A184D95 /* PFInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInternalUtils.h; path = Parse/Internal/PFInternalUtils.h; sourceTree = ""; }; - A1464A1B89739CFFDC2231D2B2BFEF97 /* UINavigationBar+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationBar+FlatUI.h"; path = "Classes/ios/UINavigationBar+FlatUI.h"; sourceTree = ""; }; - A25890C6749766D2FA0F6910C5AFB555 /* PFObjectPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectPrivate.h; path = Parse/Internal/Object/PFObjectPrivate.h; sourceTree = ""; }; - A37B0AEE4085E5EAF1D675B479E83F07 /* IQKeyboardReturnKeyHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardReturnKeyHandler.h; path = IQKeyboardManager/IQKeyboardReturnKeyHandler.h; sourceTree = ""; }; - A3F525305019C6D6103B6394A0D2FFAB /* PFColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFColor.m; path = ParseUI/Classes/Internal/Extensions/PFColor.m; sourceTree = ""; }; - A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AFNetworking; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A59BC2D719A6FE36F8A22D143D3E4E76 /* PFCloudCodeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloudCodeController.h; path = Parse/Internal/CloudCode/PFCloudCodeController.h; sourceTree = ""; }; - A5AB58CE9D615EDAA234854092081DEA /* IQUIView+IQKeyboardToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIView+IQKeyboardToolbar.m"; path = "IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m"; sourceTree = ""; }; - A5AD6E00DDF3F7D4C05FC0098C099B2E /* ParseUI.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ParseUI.modulemap; sourceTree = ""; }; - A5FAEE78A4702D335F3353DE5B22486B /* PFCommandRunningConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunningConstants.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunningConstants.h; sourceTree = ""; }; - A616ECB7E02535F4B9005E0B7B570609 /* UNIJsonNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIJsonNode.h; path = Unirest/HttpResponse/UNIJsonNode.h; sourceTree = ""; }; - A62DEB07190D9A48B19931ABEF8231C7 /* Pods-FoodbLog.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-FoodbLog.modulemap"; sourceTree = ""; }; - A6710EB1470E4F0F7701E1C154191C58 /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; - A672C404782F472C63BC1B4FF31B6004 /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; - A71FEF7E5647E074B2A574E5FE4CDF3E /* PFURLSessionUploadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionUploadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionUploadTaskDelegate.m; sourceTree = ""; }; - A7377E6FF89E05208972680783752B9A /* PFObjectState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState_Private.h; path = Parse/Internal/Object/State/PFObjectState_Private.h; sourceTree = ""; }; - A747F1408C49254D6028E4F8891C4084 /* ParseModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseModule.h; path = Parse/Internal/ParseModule.h; sourceTree = ""; }; - A78B6320A995FD2334C69BD6DD530AAB /* PFPropertyInfo_Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPropertyInfo_Runtime.h; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.h; sourceTree = ""; }; - A7B79D3518D2C9F3E903CF4F1BF00D13 /* PFAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAlertView.h; path = Parse/Internal/PFAlertView.h; sourceTree = ""; }; - A7B9CAD0F05D1A202F8BFBCEC0C7F240 /* PFPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPin.h; path = Parse/Internal/LocalDataStore/Pin/PFPin.h; sourceTree = ""; }; - A7FF321DDDFD4C9D30F6C27AE6F15255 /* PFInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInternalUtils.m; path = Parse/Internal/PFInternalUtils.m; sourceTree = ""; }; - A816AB5A1E39050DB3C8267CC75B6308 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; - A86E6037DE1255155FC0C886F04E3B93 /* PFCommandResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandResult.h; path = Parse/Internal/PFCommandResult.h; sourceTree = ""; }; - A89A6272C760E24D4FCB53B305AD1CCB /* PFTextButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTextButton.m; path = ParseUI/Classes/Internal/Views/Buttons/PFTextButton.m; sourceTree = ""; }; - A97E94420846C84B8140C33CF337FE2C /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; - AA873AB0DE8D007CA8F0042C3B6675E3 /* PFLogInView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogInView.m; path = ParseUI/Classes/LogInViewController/PFLogInView.m; sourceTree = ""; }; - AAC5F15FE7360B5B3103BBC0CDF77057 /* PFDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDevice.h; path = Parse/Internal/PFDevice.h; sourceTree = ""; }; - AB6237226D0A898842335421FF28BB4E /* PFObjectLocalIdStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectLocalIdStore.h; path = Parse/Internal/Object/LocalIdStore/PFObjectLocalIdStore.h; sourceTree = ""; }; - AC4DC6A2437F65F8A83CB36C3B66723C /* PFErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFErrorUtilities.m; path = Parse/Internal/PFErrorUtilities.m; sourceTree = ""; }; - AC7DB93B4EAA0F9CF5C79181A315DD5D /* PFSessionUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionUtilities.h; path = Parse/Internal/Session/Utilities/PFSessionUtilities.h; sourceTree = ""; }; - AC9A5F70E2DE419835876FAA80A1B09C /* PFInstallationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationController.h; path = Parse/Internal/Installation/Controller/PFInstallationController.h; sourceTree = ""; }; - AD0FE61335BED497567057BA19502825 /* PFMutableQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableQueryState.m; path = Parse/Internal/Query/State/PFMutableQueryState.m; sourceTree = ""; }; - AD86AC16AA572CE40EAE3336DB4D3602 /* UIStepper+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIStepper+FlatUI.m"; path = "Classes/ios/UIStepper+FlatUI.m"; sourceTree = ""; }; - AE235869020CAD616253B91718814EB4 /* PFFieldOperationDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFieldOperationDecoder.h; path = Parse/Internal/FieldOperation/PFFieldOperationDecoder.h; sourceTree = ""; }; - AE6967C88C45F046AD5C10E7ACE7F9DE /* PFUserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserState.m; path = Parse/Internal/User/State/PFUserState.m; sourceTree = ""; }; - AF27CCB4FCEF9871BEE69541BB6C7107 /* PFFile_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile_Private.h; path = Parse/Internal/File/PFFile_Private.h; sourceTree = ""; }; - B03124BAD3BD5D9AAEFF7FC003DC0B1C /* AFNetworking.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.debug.xcconfig; sourceTree = ""; }; - B0315B64F3C557F7C3897F4E68B228A5 /* PFLoadingView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLoadingView.m; path = ParseUI/Classes/Internal/Views/PFLoadingView.m; sourceTree = ""; }; - B09F7439A6613B5442F51FD2DEE7DFB7 /* PFDefaultACLController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFDefaultACLController.m; path = Parse/Internal/ACL/DefaultACLController/PFDefaultACLController.m; sourceTree = ""; }; - B0B214D775196BA7CA8E17E53048A493 /* SDWebImage */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B19AA6954ACEF35AEBBB17B964C0E14C /* PFObjectUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectUtilities.h; path = Parse/Internal/Object/Utilities/PFObjectUtilities.h; sourceTree = ""; }; - B1D876439A55825F2D698021F318F11B /* PFQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQuery.h; path = Parse/PFQuery.h; sourceTree = ""; }; - B1E5C0E4125427F0E3FDE91F5CBA4513 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; - B27416461ADADD8D3ADF8E8D35A3ACE1 /* UIAlertView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertView+AFNetworking.m"; path = "UIKit+AFNetworking/UIAlertView+AFNetworking.m"; sourceTree = ""; }; - B2ED2797E56832F52396742BD5AC40B1 /* UIColor+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+Chameleon.h"; path = "Pod/Classes/Objective-C/UIColor+Chameleon.h"; sourceTree = ""; }; - B37A54E62CF8CA8E0CAB38A547E00BBD /* PFObjectSubclassingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectSubclassingController.h; path = Parse/Internal/Object/Subclassing/PFObjectSubclassingController.h; sourceTree = ""; }; - B4749B8DD730E19C293B814FC52D7503 /* NSArray+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+Chameleon.m"; path = "Pod/Classes/Objective-C/NSArray+Chameleon.m"; sourceTree = ""; }; - B485708557E6CB2DE1F09BD5E1B8F90F /* PFRESTSessionCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTSessionCommand.h; path = Parse/Internal/Commands/PFRESTSessionCommand.h; sourceTree = ""; }; - B4B17635A35B3C414378999631FEB0AD /* UIImage+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+FlatUI.m"; path = "Classes/ios/UIImage+FlatUI.m"; sourceTree = ""; }; - B4C9DD585C2ACD9EBCBC81F91C89331A /* PFCloudCodeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCloudCodeController.m; path = Parse/Internal/CloudCode/PFCloudCodeController.m; sourceTree = ""; }; - B4FA5364701AAA618A9F456A6322416E /* PFLogInView_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInView_Private.h; path = ParseUI/Classes/LogInViewController/PFLogInView_Private.h; sourceTree = ""; }; - B539B882529715D46F58AA7C0F7277A6 /* AFHTTPRequestOperationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperationManager.m; path = AFNetworking/AFHTTPRequestOperationManager.m; sourceTree = ""; }; - B53CFF61083EF9E417C641E96A20A279 /* UISlider+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UISlider+FlatUI.h"; path = "Classes/ios/UISlider+FlatUI.h"; sourceTree = ""; }; - B54AB9EA09EEEF30796D34F7D163FE45 /* PFSession_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSession_Private.h; path = Parse/Internal/Session/PFSession_Private.h; sourceTree = ""; }; - B57AB3BA641DCFA726A7D3F91B31F320 /* UNIBodyRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIBodyRequest.m; path = Unirest/HttpRequest/UNIBodyRequest.m; sourceTree = ""; }; - B585A7167FD23401CC0AC3C94F615F46 /* FUISegmentedControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUISegmentedControl.h; path = Classes/ios/FUISegmentedControl.h; sourceTree = ""; }; - B59CF43B52C3F67340E0866557906257 /* PFDismissButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFDismissButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFDismissButton.h; sourceTree = ""; }; - B62EA9E3F43DB044529820595B489487 /* AFNetworking.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AFNetworking.modulemap; sourceTree = ""; }; - B66BB1A1B150F73F53A51DB0EF89A285 /* PFKeyValueCache_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache_Private.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache_Private.h; sourceTree = ""; }; - B6B448028CCE0AD7EDBEC9BE86199EC1 /* PFJSONSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFJSONSerialization.h; path = Parse/Internal/PFJSONSerialization.h; sourceTree = ""; }; - B6F772B42BF7CA65B75F996B143430CD /* PFAnonymousUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils.h; path = Parse/PFAnonymousUtils.h; sourceTree = ""; }; - B7308BC8BA2DF875593DADD527D898A7 /* ParseUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseUI.h; path = ParseUI/Other/ParseUI.h; sourceTree = ""; }; - B77EC240733E6F154C558B7682AB8B94 /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; - B7EF29C21D7B2E9DCDB866FFBB91594A /* PFCommandCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandCache.m; path = Parse/Internal/PFCommandCache.m; sourceTree = ""; }; - B834CB346FEDD46855AF57AD06DE5791 /* FlatUIKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FlatUIKit-dummy.m"; sourceTree = ""; }; - B8FB8CBAC0C2BDE02C1657F0EF9462AC /* SDWebImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SDWebImage-Info.plist"; sourceTree = ""; }; - B965B81CCEE7979B459AD921D6689D66 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; - B9699B645F9D9FD06B73D75CA3FB069B /* PFSQLiteDatabaseResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabaseResult.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.m; sourceTree = ""; }; - BA8F4C6CB58404CBBBB266E5FD1A21F8 /* PFSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSession.m; path = Parse/PFSession.m; sourceTree = ""; }; - BAB3C187C0719EC147E9F61E5E85BC65 /* UIFont+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIFont+FlatUI.h"; path = "Classes/ios/UIFont+FlatUI.h"; sourceTree = ""; }; - BB0313D8856E1ACFFE80F68A9635BD01 /* Chameleon_.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Chameleon_.h; path = "Pod/Classes/Objective-C/Chameleon_.h"; sourceTree = ""; }; - BB2C9ECA5C083B1C1AB04DAF1E83046E /* PFFileStagingController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFileStagingController.h; path = Parse/Internal/File/Controller/PFFileStagingController.h; sourceTree = ""; }; - BB8F0303D37F7A5C0E989A3297D5D05E /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; - BC22009CD0CB35CBE3E0FE126DC1372A /* PFWeakValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFWeakValue.m; path = Parse/Internal/PFWeakValue.m; sourceTree = ""; }; - BC45FC112DCEC836AB7FC34C7DEC3DD9 /* PFPushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState.h; path = Parse/Internal/Push/State/PFPushState.h; sourceTree = ""; }; - BCA492568C51FFC3E67F860276C05E61 /* PFTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFTableViewCell.m; path = ParseUI/Classes/Cells/PFTableViewCell.m; sourceTree = ""; }; - BCF2FF91155574F810AA6ADB7F19CC31 /* FlatUIKit */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FlatUIKit; path = FlatUIKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BD16E875A751C74763634BD2E94CEEE6 /* ChameleonFramework-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChameleonFramework-prefix.pch"; sourceTree = ""; }; - BD17758C6D9E58B355428B80263D17EA /* FUICellBackgroundView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUICellBackgroundView.h; path = Classes/ios/FUICellBackgroundView.h; sourceTree = ""; }; - BD8A148C1C76BD03BEFC12CCE8F7BB3E /* ChameleonFramework.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ChameleonFramework.debug.xcconfig; sourceTree = ""; }; - BDAEBE02C021E3A5CC6C2481DDB70A37 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; - BDB6900AC0DB1620F42D3AA6F1A09E5D /* PFActivityIndicatorTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActivityIndicatorTableViewCell.h; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorTableViewCell.h; sourceTree = ""; }; - BE02B4D17FFF5AE2EC743420048DBAFD /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = ""; }; - BE14B64B7D94E9A0E083FC542AECB820 /* UITableViewCell+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableViewCell+FlatUI.h"; path = "Classes/ios/UITableViewCell+FlatUI.h"; sourceTree = ""; }; - BE1AA56FB3518F5ACF08ABFFB8F71661 /* IQUIView+Hierarchy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIView+Hierarchy.m"; path = "IQKeyboardManager/Categories/IQUIView+Hierarchy.m"; sourceTree = ""; }; - BE438FFCF26860EECC1343543A60226D /* Bolts.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Bolts.debug.xcconfig; sourceTree = ""; }; - BE4797FEB12AB168882290F20F22E1B3 /* AFNetworking-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "AFNetworking-Info.plist"; sourceTree = ""; }; - BED06D69A31505FA7CD8316C179CDFAC /* PFResources.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFResources.h; path = ParseUI/Generated/PFResources.h; sourceTree = ""; }; - BEF4FF7171109B841E52DAB6544DCFB3 /* PFQueryState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryState.m; path = Parse/Internal/Query/State/PFQueryState.m; sourceTree = ""; }; - BF0F1E060D039DB2ED92B2064E9324FC /* PFCommandRunning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCommandRunning.h; path = Parse/Internal/Commands/CommandRunner/PFCommandRunning.h; sourceTree = ""; }; - BF5D4519F2FD959DD3A51A80CF8C52D8 /* PFFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFFile.h; path = Parse/PFFile.h; sourceTree = ""; }; - BF72FEFBC6FF8F58CB7CB79FB1C8A7BE /* PFSessionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSessionController.h; path = Parse/Internal/Session/Controller/PFSessionController.h; sourceTree = ""; }; - BF928DF49EC124F57C165424C653912E /* UIColor+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+FlatUI.h"; path = "Classes/ios/UIColor+FlatUI.h"; sourceTree = ""; }; - BFB3C1E76C4F806EFCDE8512A39D23C2 /* FUIPopoverBackgroundView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUIPopoverBackgroundView.h; path = Classes/ios/FUIPopoverBackgroundView.h; sourceTree = ""; }; - BFDADA3217FE77D6F8E68621BA9FD77E /* PFHTTPURLRequestConstructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHTTPURLRequestConstructor.h; path = Parse/Internal/HTTPRequest/PFHTTPURLRequestConstructor.h; sourceTree = ""; }; - C0A12B9EF7949B48A1FA4D686A7BA5F9 /* PFQueryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryPrivate.h; path = Parse/Internal/Query/PFQueryPrivate.h; sourceTree = ""; }; - C0B062364FAD300B57FFF2CD44278F60 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; - C0FA4E1F34830F2463FCB811EAD24A79 /* PFActivityIndicatorCollectionReusableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFActivityIndicatorCollectionReusableView.m; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.m; sourceTree = ""; }; - C174512300F259E9E9FF44BD14218FED /* FlatUIKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FlatUIKit-prefix.pch"; sourceTree = ""; }; - C1D45ADCE0464957F823585B3FDF82FB /* IQNSArray+Sort.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQNSArray+Sort.m"; path = "IQKeyboardManager/Categories/IQNSArray+Sort.m"; sourceTree = ""; }; - C237413667676F66D932237A4073CB42 /* PFImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImageCache.m; path = ParseUI/Classes/Internal/PFImageCache.m; sourceTree = ""; }; - C2660605B5FB0E40D12FF6A4B131C4A2 /* PFUIAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUIAlertView.m; path = ParseUI/Classes/Internal/Extensions/PFUIAlertView.m; sourceTree = ""; }; - C2D25A48A5669C4EEA1A1278B5AADCC8 /* NSString+Icons.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Icons.m"; path = "Classes/ios/NSString+Icons.m"; sourceTree = ""; }; - C317661A6C63BF31F4516396085D1DDD /* PFImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFImageView.h; path = ParseUI/Classes/Views/PFImageView.h; sourceTree = ""; }; - C3AC194441355C5C035DA3351650C99E /* ChameleonFramework-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChameleonFramework-umbrella.h"; sourceTree = ""; }; - C3E2DA89B7784D376EAF5F391CD3E45B /* IQUIView+Hierarchy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIView+Hierarchy.h"; path = "IQKeyboardManager/Categories/IQUIView+Hierarchy.h"; sourceTree = ""; }; - C4239D037D62B4A06D9768E33ECD692F /* Parse.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Parse.release.xcconfig; sourceTree = ""; }; - C45DABCF47D9B4496B4627C78ACA5F5B /* PFMutableACLState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableACLState.h; path = Parse/Internal/ACL/State/PFMutableACLState.h; sourceTree = ""; }; - C566D49A7C726CF5969F4B79AA9ED6C7 /* UITabBar+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITabBar+FlatUI.h"; path = "Classes/ios/UITabBar+FlatUI.h"; sourceTree = ""; }; - C6465177F56344D8A62FB5F181EEDB03 /* UIColor+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+FlatUI.m"; path = "Classes/ios/UIColor+FlatUI.m"; sourceTree = ""; }; - C64D42AAE0A0E697FE455FDDF0F6AF44 /* PFPush.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPush.h; path = Parse/PFPush.h; sourceTree = ""; }; - C7BC9D529DFB9C2876F1B26C742549E5 /* NSString+Icons.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Icons.h"; path = "Classes/ios/NSString+Icons.h"; sourceTree = ""; }; - C80EE7051488F41E849C0913BFE85299 /* PFConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFConfig.h; path = Parse/PFConfig.h; sourceTree = ""; }; - C8C622D61D94B0BB8BC678A39B314790 /* UNIHTTPBinaryResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPBinaryResponse.h; path = Unirest/HttpResponse/UNIHTTPBinaryResponse.h; sourceTree = ""; }; - C8EA7A9046754051261628FE4A4FBC57 /* PFMutableFileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableFileState.m; path = Parse/Internal/File/State/PFMutableFileState.m; sourceTree = ""; }; - C971E759236FF5C44EDF586ABA1FDD1A /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; - CA0F759EB3B8FF5747A3FF8D9A670ED4 /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; - CA81F6D4EC4A09874076DCCE8890B484 /* PFUserFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserFileCodingLogic.m; path = Parse/Internal/User/Coder/File/PFUserFileCodingLogic.m; sourceTree = ""; }; - CAF92C30B6888E0F131016AB7EE40127 /* fr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = fr.lproj; path = ParseUI/Resources/Localization/fr.lproj; sourceTree = ""; }; - CB00637E4C07D93AA94189E0D17D0509 /* PFSignUpView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSignUpView.h; path = ParseUI/Classes/SignUpViewController/PFSignUpView.h; sourceTree = ""; }; - CB1D7D1EE6ECB93DA929D451A913B2F9 /* IQKeyboardManager.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = IQKeyboardManager.bundle; path = IQKeyboardManager/Resources/IQKeyboardManager.bundle; sourceTree = ""; }; - CB2C2E44C04D75E24B7B90AAA247551E /* BoltsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BoltsVersion.h; path = Bolts/Common/BoltsVersion.h; sourceTree = ""; }; - CB6945F45579087C28867C89A928DECD /* PFEventuallyQueue_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEventuallyQueue_Private.h; path = Parse/Internal/PFEventuallyQueue_Private.h; sourceTree = ""; }; - CB77AF007BC5AA8EA10347DB05702138 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; - CC336EDAC9FA746257F40BD540DC9A75 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - CC3E170282FD37E519479DFEEE7D55B2 /* PFRect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRect.m; path = ParseUI/Classes/Internal/Extensions/PFRect.m; sourceTree = ""; }; - CD004273FD354237F7D844A9BEAA8D1E /* NSArray+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+Chameleon.h"; path = "Pod/Classes/Objective-C/NSArray+Chameleon.h"; sourceTree = ""; }; - CD46520D8BCDA2FED7653A676AE1DB78 /* SDWebImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.debug.xcconfig; sourceTree = ""; }; - CD550819AF8416A5DB414CAA7025CB06 /* PFLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogger.m; path = Parse/Internal/PFLogger.m; sourceTree = ""; }; - CE1D7CADD6B787D221D22A300F04F5B1 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; - CE1F8CA7790E14B93C4917A7AA6806F0 /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; - CEEB1C5E9BC1B761C1D681F6ED6D8494 /* PFAnonymousAuthenticationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousAuthenticationProvider.m; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.m; sourceTree = ""; }; - CEED91958785BC6C656DF48AF67670D7 /* UIFont+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIFont+FlatUI.m"; path = "Classes/ios/UIFont+FlatUI.m"; sourceTree = ""; }; - CEFF5B62376E2591D6E5EAF93B76997E /* PFRelationState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRelationState.h; path = Parse/Internal/Relation/State/PFRelationState.h; sourceTree = ""; }; - CF0865463F092E74770E7110F2D76193 /* PFMutablePushState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutablePushState.h; path = Parse/Internal/Push/State/PFMutablePushState.h; sourceTree = ""; }; - CF09587F6E7B5C55B2DBC4F76D84C78F /* UIImage+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIImage+ChameleonPrivate.m"; sourceTree = ""; }; - CF296274D6055775584EBDE9FFA27649 /* PFRESTCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTCommand.h; path = Parse/Internal/Commands/PFRESTCommand.h; sourceTree = ""; }; - CF8C2D7B1873D1DE1458FA7D18F57592 /* IQKeyboardManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQKeyboardManager.m; path = IQKeyboardManager/IQKeyboardManager.m; sourceTree = ""; }; - D0C44D70A8C988A5FC533435B05B77CB /* PFObjectFileCodingLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectFileCodingLogic.m; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.m; sourceTree = ""; }; - D13E9CC7C55D6E5308CFD2BDDF4E3E35 /* PFRESTAnalyticsCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFRESTAnalyticsCommand.h; path = Parse/Internal/Commands/PFRESTAnalyticsCommand.h; sourceTree = ""; }; - D2BF4F04D9236FEB54B0E9C3385222C8 /* PFCurrentUserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCurrentUserController.m; path = Parse/Internal/User/CurrentUserController/PFCurrentUserController.m; sourceTree = ""; }; - D2E0EEEC88F8887028FA6F0DDA67548B /* PFRESTPushCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTPushCommand.m; path = Parse/Internal/Commands/PFRESTPushCommand.m; sourceTree = ""; }; - D305BB43DFE0C6524796909B892CDE28 /* PFReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFReachability.m; path = Parse/Internal/PFReachability.m; sourceTree = ""; }; - D308000BF600D71810C6CD2499427CD7 /* FlatUIKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FlatUIKit-umbrella.h"; sourceTree = ""; }; - D3EE32A19F2CA37F68E600E3B1A8BAB6 /* Parse_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Parse_Private.h; path = Parse/Internal/Parse_Private.h; sourceTree = ""; }; - D5A1769B7D39E3622EBE828E69A03539 /* PFPushController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPushController.m; path = Parse/Internal/Push/Controller/PFPushController.m; sourceTree = ""; }; - D63A69F4B3F958DFFF7944B7D8290D88 /* PFApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFApplication.m; path = Parse/Internal/PFApplication.m; sourceTree = ""; }; - D64494125FCBF8578381C4A3DFC24582 /* Base64.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Base64.m; path = Unirest/Base64.m; sourceTree = ""; }; - D69D5263055F55D91F01C506D8E89BAD /* PFInstallationIdentifierStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFInstallationIdentifierStore.m; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m; sourceTree = ""; }; - D6C2112669072AE57F3B1EF2C2D85B3D /* UNIHTTPRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPRequest.m; path = Unirest/UNIHTTPRequest.m; sourceTree = ""; }; - D6CC7CC57AD4796048E05E9C30825826 /* Unirest */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Unirest; path = Unirest.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - D72AEC533D655C8D593C07A53F1D747F /* Parse-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-umbrella.h"; sourceTree = ""; }; - D7A3AD7DED9F7674DF066157B83874E1 /* PFURLSessionFileDownloadTaskDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionFileDownloadTaskDelegate.m; path = Parse/Internal/Commands/CommandRunner/URLSession/Session/TaskDelegate/PFURLSessionFileDownloadTaskDelegate.m; sourceTree = ""; }; - D81124330876EB85D8CCB6C9378D2E8C /* PFCommandResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCommandResult.m; path = Parse/Internal/PFCommandResult.m; sourceTree = ""; }; - D869C16E6B92E4E4DAEC9B9363D8D3F6 /* PFLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogging.h; path = Parse/Internal/PFLogging.h; sourceTree = ""; }; - D89292EA416BFB4E38CFA341905BFDFD /* PFUserConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserConstants.m; path = Parse/Internal/User/Constants/PFUserConstants.m; sourceTree = ""; }; - D8DF24ADAADAC243785A71EB5043ECB5 /* PFPrimaryButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPrimaryButton.h; path = ParseUI/Classes/Internal/Views/Buttons/PFPrimaryButton.h; sourceTree = ""; }; - D9045979C5B73816C81F6DC6CB9C26C6 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; - D961C77262C7D151CC89E6164FA6D52C /* PFURLSessionCommandRunner.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFURLSessionCommandRunner.m; path = Parse/Internal/Commands/CommandRunner/URLSession/PFURLSessionCommandRunner.m; sourceTree = ""; }; - D996C2666AEBC5DE15F1132F7519EEFA /* ChameleonConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ChameleonConstants.m; path = "Pod/Classes/Objective-C/ChameleonConstants.m"; sourceTree = ""; }; - D9ABEBD69361FA1FD8939A21C71A86B3 /* PFInstallationIdentifierStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFInstallationIdentifierStore.h; path = Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.h; sourceTree = ""; }; - DA7D6B40CA043E1F26CF1737EE7C2D8D /* PFUserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserConstants.h; path = Parse/Internal/User/Constants/PFUserConstants.h; sourceTree = ""; }; - DBE6819D41549A1CBD4D69F3085F2562 /* UNIHTTPStringResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPStringResponse.h; path = Unirest/HttpResponse/UNIHTTPStringResponse.h; sourceTree = ""; }; - DC1FF3B7F18FCF2F0A4EFD477BE62BAA /* PFMutableObjectState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutableObjectState.m; path = Parse/Internal/Object/State/PFMutableObjectState.m; sourceTree = ""; }; - DC28C0625C2B08E7619AEFBF99128019 /* PFAsyncTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAsyncTaskQueue.h; path = Parse/Internal/PFAsyncTaskQueue.h; sourceTree = ""; }; - DC59FC62BE26AD5C562D7BBF2224A10E /* PFSQLiteDatabaseResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabaseResult.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabaseResult.h; sourceTree = ""; }; - DC7BB69962EB8928BACCE0021E544A5E /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = en.lproj; path = ParseUI/Resources/Localization/en.lproj; sourceTree = ""; }; - DC82E912A46E0D98C54FA4D7AA8638BA /* Pods-FoodbLog */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-FoodbLog"; path = Pods_FoodbLog.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DD67EEF35668EABDA6CDE4706E5C10D0 /* PFMultiProcessFileLockController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMultiProcessFileLockController.h; path = Parse/Internal/MultiProcessLock/PFMultiProcessFileLockController.h; sourceTree = ""; }; - DDC009A128625087767288D7706E4920 /* PFObjectFileCodingLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectFileCodingLogic.h; path = Parse/Internal/Object/Coder/File/PFObjectFileCodingLogic.h; sourceTree = ""; }; - DDEB824107C28055F7FDA4A9A2034A36 /* PFAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnalytics.m; path = Parse/PFAnalytics.m; sourceTree = ""; }; - DE1C0FA9FAF3336E0D882CF851F8D942 /* Unirest-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Unirest-umbrella.h"; sourceTree = ""; }; - DEA92EAFBD2F6D31CC60C9BD2B8B1F9E /* PFUserAuthenticationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFUserAuthenticationController.m; path = Parse/Internal/User/AuthenticationProviders/Controller/PFUserAuthenticationController.m; sourceTree = ""; }; - DF7780DB20224001BE268ACB15378FC2 /* FlatUIKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FlatUIKit.modulemap; sourceTree = ""; }; - DF7A671748B1795733EB163457D9959D /* PFRESTSessionCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTSessionCommand.m; path = Parse/Internal/Commands/PFRESTSessionCommand.m; sourceTree = ""; }; - E01DF6BF8E0DB15494DA23A118BCDE49 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; - E05ADC8B41F427B22AC3E815A19350EB /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; - E06A7119515F4910F956F06EF911C715 /* PFAnonymousUtils_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousUtils_Private.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousUtils_Private.h; sourceTree = ""; }; - E074D43B725F9C362400C9DF86A4123D /* PFUIAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUIAlertView.h; path = ParseUI/Classes/Internal/Extensions/PFUIAlertView.h; sourceTree = ""; }; - E07A6A98D3D5AABF5C8EFFD18AB58BC3 /* UILabel+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UILabel+Chameleon.m"; path = "Pod/Classes/Objective-C/UILabel+Chameleon.m"; sourceTree = ""; }; - E095BAA9FC8B747A000DE925306793BE /* PFPropertyInfo_Runtime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFPropertyInfo_Runtime.m; path = Parse/Internal/PropertyInfo/PFPropertyInfo_Runtime.m; sourceTree = ""; }; - E0CC60D5D61DAC18565BFA86B04B3091 /* PFSQLiteDatabase_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFSQLiteDatabase_Private.h; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase_Private.h; sourceTree = ""; }; - E0FADD9A90F6B97C2F05721EFB03C404 /* UINavigationController+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UINavigationController+Chameleon.m"; path = "Pod/Classes/Objective-C/UINavigationController+Chameleon.m"; sourceTree = ""; }; - E13BC81FEAB08337AF37599B924A0B92 /* PFAnonymousAuthenticationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFAnonymousAuthenticationProvider.h; path = Parse/Internal/User/AuthenticationProviders/Providers/Anonymous/PFAnonymousAuthenticationProvider.h; sourceTree = ""; }; - E1429F34AED40EF32B9C37C25F4B5395 /* UNIHTTPRequestWithBody.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPRequestWithBody.h; path = Unirest/UNIHTTPRequestWithBody.h; sourceTree = ""; }; - E1507F321942D4FD208B55803D3583FF /* PFImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImageView.m; path = ParseUI/Classes/Views/PFImageView.m; sourceTree = ""; }; - E15CB84F6EAC100D531B6BCAAA2815AB /* PFAnonymousUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFAnonymousUtils.m; path = Parse/PFAnonymousUtils.m; sourceTree = ""; }; - E17C805A5EBB9F99E87AE99981812FC7 /* PFObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFObjectState.h; path = Parse/Internal/Object/State/PFObjectState.h; sourceTree = ""; }; - E261E97A551F62268F5002DB529D4A74 /* PFActivityIndicatorCollectionReusableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFActivityIndicatorCollectionReusableView.h; path = ParseUI/Classes/Internal/Cells/PFActivityIndicatorCollectionReusableView.h; sourceTree = ""; }; - E272D407AC4A249F7DCA0B9CA3115B66 /* PFQueryCollectionViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryCollectionViewController.h; path = ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.h; sourceTree = ""; }; - E4ED7A0517A36ECA8CCCE78610B55016 /* PFJSONSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFJSONSerialization.m; path = Parse/Internal/PFJSONSerialization.m; sourceTree = ""; }; - E515F384B4FC8E3B8439F1DB578EB3E5 /* IQBarButtonItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQBarButtonItem.h; path = IQKeyboardManager/IQToolbar/IQBarButtonItem.h; sourceTree = ""; }; - E5673AE21FC295054FE51806B2157579 /* FUIButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUIButton.h; path = Classes/ios/FUIButton.h; sourceTree = ""; }; - E5EABACCD833603D71DDA83AF8267A78 /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; - E619BDE14AB08B9FB930109F4E31D8CD /* PFLogInView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLogInView.h; path = ParseUI/Classes/LogInViewController/PFLogInView.h; sourceTree = ""; }; - E6492D62837F81793852C022F8DDDE48 /* PFUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFUserState.h; path = Parse/Internal/User/State/PFUserState.h; sourceTree = ""; }; - E65E7AF0524FDBEF23D5EFA1398195EF /* PFCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCloud.h; path = Parse/PFCloud.h; sourceTree = ""; }; - E69D548BB3EF5F5499142B94DC2D4D2D /* PFCachedQueryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCachedQueryController.h; path = Parse/Internal/Query/Controller/PFCachedQueryController.h; sourceTree = ""; }; - E6E8FDE318E4C904383C402577CB676E /* PFMutablePushState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFMutablePushState.m; path = Parse/Internal/Push/State/PFMutablePushState.m; sourceTree = ""; }; - E8084FC656FBBB0FFE9F542CFE82DFC8 /* PFSQLiteStatement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteStatement.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteStatement.m; sourceTree = ""; }; - E82AC36F045BE087ECE7253B8EEB06EB /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; - E82CA19BA3E0DE4964F0C052630016EF /* PFTaskQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFTaskQueue.h; path = Parse/Internal/PFTaskQueue.h; sourceTree = ""; }; - E843676E8B7DE282A6605A76DC99E8D3 /* PFBase64Encoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFBase64Encoder.m; path = Parse/Internal/PFBase64Encoder.m; sourceTree = ""; }; - E8530B9B30D42F583B3BC811E303DBD3 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; - E8C2D556022D673D9A39AEE75A92D7B7 /* UNIHTTPClientHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPClientHelper.m; path = Unirest/UNIHTTPClientHelper.m; sourceTree = ""; }; - E92240B95F45B88D980A83809E4BCE74 /* PFSessionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSessionController.m; path = Parse/Internal/Session/Controller/PFSessionController.m; sourceTree = ""; }; - EA6600846C35A33A9E0A0436C4B4BC26 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; - EAA0C3C67C7D908A2F7182249E71C853 /* PFCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFCollectionViewCell.m; path = ParseUI/Classes/Cells/PFCollectionViewCell.m; sourceTree = ""; }; - EACA9F3764C09E78E6A493517CC775B9 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; - EAE6707081D74AD48DDC2CD34E54F4A5 /* UNIHTTPClientHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIHTTPClientHelper.h; path = Unirest/UNIHTTPClientHelper.h; sourceTree = ""; }; - EBA6B31F193A3582597871E09B2C0D55 /* PFKeyValueCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeyValueCache.m; path = Parse/Internal/KeyValueCache/PFKeyValueCache.m; sourceTree = ""; }; - EC4A64A0CD9BB0968D9668774F8AB562 /* PFHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFHash.h; path = Parse/Internal/PFHash.h; sourceTree = ""; }; - EC68094E74192E9415DE284736276F42 /* PFMutableObjectState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableObjectState.h; path = Parse/Internal/Object/State/PFMutableObjectState.h; sourceTree = ""; }; - ECD2083274B0707629CB97D4D8099431 /* PFConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFConstants.m; path = Parse/PFConstants.m; sourceTree = ""; }; - ED1B808831668BFCE5B5641495D4D294 /* UIProgressView+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+FlatUI.m"; path = "Classes/ios/UIProgressView+FlatUI.m"; sourceTree = ""; }; - ED353E01D2DC7C2CFC849BFC56253F3F /* PFOfflineQueryLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFOfflineQueryLogic.h; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.h; sourceTree = ""; }; - ED6DBBE9C8F59A2808A1B55CA7815B1A /* IQPreviousNextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQPreviousNextView.h; path = IQKeyboardManager/IQToolbar/IQPreviousNextView.h; sourceTree = ""; }; - EE0570671EA39BDDB0C88A5BB610E898 /* Parse-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Parse-prefix.pch"; sourceTree = ""; }; - EE598A4F3D9378CEBAD8365FAB0D2291 /* PFRESTObjectBatchCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRESTObjectBatchCommand.m; path = Parse/Internal/Commands/PFRESTObjectBatchCommand.m; sourceTree = ""; }; - EE7E578477183FF7B01EB42B97FB5875 /* PFOfflineQueryLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFOfflineQueryLogic.m; path = Parse/Internal/LocalDataStore/OfflineQueryLogic/PFOfflineQueryLogic.m; sourceTree = ""; }; - EF08F0FD1BF57A2E09B192B96E023021 /* IQKeyboardManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManager-umbrella.h"; sourceTree = ""; }; - EF5EAF79A06EE932EE7BB85498679562 /* PFBase64Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFBase64Encoder.h; path = Parse/Internal/PFBase64Encoder.h; sourceTree = ""; }; - EFF140CE5FEE134EEDE89A382783CD66 /* PFQueryCollectionViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFQueryCollectionViewController.m; path = ParseUI/Classes/QueryCollectionViewController/PFQueryCollectionViewController.m; sourceTree = ""; }; - F002184D6C52C347609B0935CC6CF065 /* UNIBaseRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UNIBaseRequest.h; path = Unirest/HttpRequest/UNIBaseRequest.h; sourceTree = ""; }; - F051420DDB92AA7A4614BFE96C0B4881 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; - F06A9FEFC03282E0E3A86AAE7A3A6FBC /* UNIHTTPStringResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPStringResponse.m; path = Unirest/HttpResponse/UNIHTTPStringResponse.m; sourceTree = ""; }; - F0D7E94728407981CD0D00CFC842764D /* PFPushState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPushState_Private.h; path = Parse/Internal/Push/State/PFPushState_Private.h; sourceTree = ""; }; - F126906F253F3C3848FA05C0D242D4D9 /* ParseUI-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ParseUI-dummy.m"; sourceTree = ""; }; - F14562D32CD87B15414FD459F3B13C75 /* PFImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFImage.m; path = ParseUI/Classes/Internal/Extensions/PFImage.m; sourceTree = ""; }; - F148BFBBDD8AB8A9E87918D610748144 /* PFPinningEventuallyQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPinningEventuallyQueue.h; path = Parse/Internal/PFPinningEventuallyQueue.h; sourceTree = ""; }; - F16B2F09DDA3B581B0D212FFDBAA7BEE /* PFEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFEncoder.h; path = Parse/Internal/PFEncoder.h; sourceTree = ""; }; - F16F15C48D3F05417CA21097C2E54EDC /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; - F23678C89071A5C346F5BE0C1DFE5EC2 /* PFSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFSQLiteDatabase.m; path = Parse/Internal/LocalDataStore/SQLite/PFSQLiteDatabase.m; sourceTree = ""; }; - F30BAE81C83BFC24C3F09853774210B8 /* PFMutableUserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFMutableUserState.h; path = Parse/Internal/User/State/PFMutableUserState.h; sourceTree = ""; }; - F32062803128DABF9E52794D64204AA2 /* IQUIWindow+Hierarchy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIWindow+Hierarchy.h"; path = "IQKeyboardManager/Categories/IQUIWindow+Hierarchy.h"; sourceTree = ""; }; - F41BA5906F72B08707A6E9500176C911 /* PFQueryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFQueryState.h; path = Parse/Internal/Query/State/PFQueryState.h; sourceTree = ""; }; - F47F6AD14A34D9AF4DC5B0EC8FF52D24 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - F4F2DBF73DDDA25055C195018E9186F0 /* UINavigationBar+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UINavigationBar+FlatUI.m"; path = "Classes/ios/UINavigationBar+FlatUI.m"; sourceTree = ""; }; - F60B9EE41FD4D8BAB2516F180F00B059 /* FUIAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FUIAlertView.h; path = Classes/ios/FUIAlertView.h; sourceTree = ""; }; - F63505CC4ACA8270E183DAA52A22B58A /* PFLogInViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFLogInViewController.m; path = ParseUI/Classes/LogInViewController/PFLogInViewController.m; sourceTree = ""; }; - F6390E9096EABF37B25ABD5CAB5B561B /* UNIHTTPResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPResponse.m; path = Unirest/HttpResponse/UNIHTTPResponse.m; sourceTree = ""; }; - F6A33DD502114C23783D6D52977D75D2 /* PFLocalization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFLocalization.h; path = ParseUI/Classes/Internal/PFLocalization.h; sourceTree = ""; }; - F756DED267DAEAA45B7B75F44B527FE0 /* ParseInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParseInternal.h; path = Parse/Internal/ParseInternal.h; sourceTree = ""; }; - F76DB2BC23017FA90C4165EAE8CFB396 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; - F83EC07F9C3FF86C4D9BD2A58B549B0E /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; - F84345E7863ED40A20705BCC540EF530 /* UNIHTTPBinaryResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIHTTPBinaryResponse.m; path = Unirest/HttpResponse/UNIHTTPBinaryResponse.m; sourceTree = ""; }; - F84B331B5D6AAF1548DD1BB004AE5C2A /* Bolts */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Bolts; path = Bolts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F84F91BBE51B1905554065F47F8129B3 /* UIColor+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+Chameleon.m"; path = "Pod/Classes/Objective-C/UIColor+Chameleon.m"; sourceTree = ""; }; - F8E604995C153FE58AF3F074F1262AEA /* UIProgressView+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+FlatUI.h"; path = "Classes/ios/UIProgressView+FlatUI.h"; sourceTree = ""; }; - FAA6B39941ACCBCAFA2A4F26CF1AF48C /* UIStepper+FlatUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIStepper+FlatUI.h"; path = "Classes/ios/UIStepper+FlatUI.h"; sourceTree = ""; }; - FB2160A0B485224469FAF6BA39EB0364 /* UISlider+FlatUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UISlider+FlatUI.m"; path = "Classes/ios/UISlider+FlatUI.m"; sourceTree = ""; }; - FB6B6FE77562EFAE3F96B1E69E8AC7BB /* PFACLState_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFACLState_Private.h; path = Parse/Internal/ACL/State/PFACLState_Private.h; sourceTree = ""; }; - FB87370F76BC674AD21F1FABEB5464F9 /* PFKeyValueCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFKeyValueCache.h; path = Parse/Internal/KeyValueCache/PFKeyValueCache.h; sourceTree = ""; }; - FB9516C98F43C642D31BA9E3D82C8206 /* PFCurrentConfigController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFCurrentConfigController.h; path = Parse/Internal/Config/Controller/PFCurrentConfigController.h; sourceTree = ""; }; - FC11F4C9F01877A5D56739B9BBA85621 /* PFPurchaseController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PFPurchaseController.h; path = Parse/Internal/Purchase/Controller/PFPurchaseController.h; sourceTree = ""; }; - FC35A11ED7B0DCD6819A7CBB019FE94C /* PFRole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFRole.m; path = Parse/PFRole.m; sourceTree = ""; }; - FCD70579BE96CFBD090F1E64FC7A1E4E /* FUICellBackgroundView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FUICellBackgroundView.m; path = Classes/ios/FUICellBackgroundView.m; sourceTree = ""; }; - FCDFA364DF4CC49FC21ECB8993B987F4 /* PFKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFKeychainStore.m; path = Parse/Internal/PFKeychainStore.m; sourceTree = ""; }; - FD5C4496FDDA02FC33B9EF297AD6BF6A /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; - FD99F6C0C8D35C9AECD61CAC8D4951B4 /* Pods-FoodbLog-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-FoodbLog-acknowledgements.plist"; sourceTree = ""; }; - FE4BA056F7A9AC13CC0B5DC014161925 /* UNIBaseRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UNIBaseRequest.m; path = Unirest/HttpRequest/UNIBaseRequest.m; sourceTree = ""; }; - FE9E03DE7A25EA6F5C94C4201C60D18B /* PFObjectController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PFObjectController.m; path = Parse/Internal/Object/Controller/PFObjectController.m; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 0AF9CF3C76DBE562539FE47E28672C5A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FDB6E1D811A52AD01DFD1128E8EF8911 /* CoreGraphics.framework in Frameworks */, - E333D533DE4361D5A3CE2F9D62281084 /* Foundation.framework in Frameworks */, - 5114F8D6A5939B847DDDC41E2B75D419 /* QuartzCore.framework in Frameworks */, - 237A599B046B4F3EB709E88AC0C2F107 /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1ACEAF5CB53FDEBADFADE9621F25DB2B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 07A6B25857900B4C1A2C450E1B6CC2C6 /* CoreGraphics.framework in Frameworks */, - DFA57BC7705BEA564355F07D921005B0 /* Foundation.framework in Frameworks */, - 2D9C9874A5E0BFD7EC15207A5008A2E9 /* QuartzCore.framework in Frameworks */, - 7C534B05C9F8A8CA0A573629B03C076B /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4391EAF3DDC2963B7871286D3F9D9614 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 62930E5DA75B433CF56BD46ACCDF18F0 /* CoreGraphics.framework in Frameworks */, - 1EF0C2E2ADE21F09A52C24D1C6A1DEB5 /* Foundation.framework in Frameworks */, - 8169F60E91A5DCF1BCD770127B09C896 /* QuartzCore.framework in Frameworks */, - 6C0B0898DDB38E27DC6B993EFCFBEEB4 /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 535965DE03A38610A3DF44D409F1BDF8 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FE7ED99030498028605F37EB2B3518B7 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5C1186D4F3AA17F08B0E5E18291421B4 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - B31A56A27408319D70D1547B5FA51EAD /* CoreText.framework in Frameworks */, - 5E1CA14AAE9164EA9144A2D66C7ABCED /* Foundation.framework in Frameworks */, - 5D0F6EB9FF087444D8C35C94F587FA90 /* QuartzCore.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6F507917EE997E5E24E07D04329502F4 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1DBDEF199D3AEF9310F2935DBBBF1F89 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 70B9087E2E161834B897DE5A668DCA45 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 53363111800D0961A419E660FABB61E8 /* AudioToolbox.framework in Frameworks */, - 287FFE08BB132472B7CE5BB3F47506B6 /* CFNetwork.framework in Frameworks */, - 24F2BC96841F8A37EC52957AB59F2B70 /* CoreGraphics.framework in Frameworks */, - 1D1597CB5319D82AB03C4656A4FFC3E2 /* CoreLocation.framework in Frameworks */, - 055F10145C443934BB202FE4BE8E3DB2 /* Foundation.framework in Frameworks */, - A677EA486B6C150619DB9868EF9771BD /* QuartzCore.framework in Frameworks */, - 509F838C90BD33FB102E30FA553546A5 /* Security.framework in Frameworks */, - 4258F7777937094D7BE116408C78DC46 /* StoreKit.framework in Frameworks */, - C0DC97F79BE2050D4DE691E1D991A391 /* SystemConfiguration.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A7595237C8CA923B81E67B2998909D90 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - CC4E8765CAC02E51F101B700BDB09598 /* CoreGraphics.framework in Frameworks */, - 6ED02164B5E06B799C50961364EEC1DC /* Foundation.framework in Frameworks */, - 7CBF2011432C597B6BC5A384EE6454B3 /* MobileCoreServices.framework in Frameworks */, - 98D637C604695D57419F1D6809F263D6 /* Security.framework in Frameworks */, - 22BAE8994ADCD5A6A4D71352BA0D0954 /* SystemConfiguration.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C76329B6D29A067AF194CAACFB3A8B2D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 3F9F253CF143CE15C66E99719E1296F6 /* Foundation.framework in Frameworks */, - 808B6A1291FF164B160C5ED8A99652A5 /* ImageIO.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E5E0181A204601DE496DB5E7D4ABE0B1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AE7B412FE2E9E3E2F7CE6FBED6304B96 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 172C6AB29CA1720C0D85F380DD22AFB9 /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - CC67B748D6D89E34B3EBA3591D5D4298 /* Pods-FoodbLog */, - ); - name = "Targets Support Files"; - sourceTree = ""; - }; - 1A1236C094017AC9C2C86482E88B6267 /* IQKeyboardManager */ = { - isa = PBXGroup; - children = ( - E515F384B4FC8E3B8439F1DB578EB3E5 /* IQBarButtonItem.h */, - 3C56C342942346FB5B3BCF38AFC2442C /* IQBarButtonItem.m */, - 4012B08564DD4ED326E07CC6F074DD1B /* IQKeyboardManager.h */, - CF8C2D7B1873D1DE1458FA7D18F57592 /* IQKeyboardManager.m */, - A038B70DE9AC30C4BE5735BDCF379F95 /* IQKeyboardManagerConstants.h */, - 82C057CF73EC05C9B670CD36A4FF9DC1 /* IQKeyboardManagerConstantsInternal.h */, - A37B0AEE4085E5EAF1D675B479E83F07 /* IQKeyboardReturnKeyHandler.h */, - 3E8D9690AF80D6F60B62DDAF44050907 /* IQKeyboardReturnKeyHandler.m */, - 39A51D0C532BCF6377526E08062DE36D /* IQNSArray+Sort.h */, - C1D45ADCE0464957F823585B3FDF82FB /* IQNSArray+Sort.m */, - ED6DBBE9C8F59A2808A1B55CA7815B1A /* IQPreviousNextView.h */, - 9C159A4F2438A5E10FDA73505BEFA94D /* IQPreviousNextView.m */, - 8B577949D6BEA39F003EEBD1157A4423 /* IQTextView.h */, - 80CB234E37168DF49DEAB9D544A0C5FB /* IQTextView.m */, - 3A93EE71639FC1F292FCD2110B27A625 /* IQTitleBarButtonItem.h */, - 848D623C2A83A163ACAD11BD0385C867 /* IQTitleBarButtonItem.m */, - 744ACCE6B933BA912384E2E1F34A3BA7 /* IQToolbar.h */, - 97EE31EC4749C71A2BAD9783137A7666 /* IQToolbar.m */, - 9569F3B77A7977F33A12712389BEACFC /* IQUIScrollView+Additions.h */, - 8C177476B0E75BABF4B4FCB549A41A30 /* IQUIScrollView+Additions.m */, - 96430B20989715A8573563A41C2C9B2B /* IQUITextFieldView+Additions.h */, - 22F7F0A49C5577FAC19A72BBDAE54073 /* IQUITextFieldView+Additions.m */, - C3E2DA89B7784D376EAF5F391CD3E45B /* IQUIView+Hierarchy.h */, - BE1AA56FB3518F5ACF08ABFFB8F71661 /* IQUIView+Hierarchy.m */, - 5A8213D4F0DEBAD8576AB50551D8B094 /* IQUIView+IQKeyboardToolbar.h */, - A5AB58CE9D615EDAA234854092081DEA /* IQUIView+IQKeyboardToolbar.m */, - 33EFCD2A806F168B502839B5E06004C6 /* IQUIViewController+Additions.h */, - 7C73CA6320217923A2DFB485254CC628 /* IQUIViewController+Additions.m */, - F32062803128DABF9E52794D64204AA2 /* IQUIWindow+Hierarchy.h */, - 648C65817ACE24AD1C674B8C829B4E36 /* IQUIWindow+Hierarchy.m */, - 5346416BDCBA591CC9F9A3B964F83782 /* Resources */, - 708A68883023B96262CA436953D3A180 /* Support Files */, - ); - name = IQKeyboardManager; - path = IQKeyboardManager; - sourceTree = ""; - }; - 2060B9D5D3F6298565E5805102291334 /* Security */ = { - isa = PBXGroup; - children = ( - 59ECECD66E1B23B4D503CFCF46952262 /* AFSecurityPolicy.h */, - F051420DDB92AA7A4614BFE96C0B4881 /* AFSecurityPolicy.m */, - ); - name = Security; - sourceTree = ""; - }; - 221E052A8AFDB44D77227FF60A110FF3 /* Pods */ = { - isa = PBXGroup; - children = ( - 4B623989A7584AD4A0E8CF1067329FE0 /* AFNetworking */, - 3BEF4610E16B3A9A8411E7E551A7B1CC /* Bolts */, - EED214742741A6815D2FD502A3958CC1 /* ChameleonFramework */, - 6FAFD0A27024CDBFFE2A754024EC0052 /* FlatUIKit */, - 1A1236C094017AC9C2C86482E88B6267 /* IQKeyboardManager */, - A9C390BE4A98FCC6786CE69CAF18E10B /* Parse */, - 8072B1F77714727D2BA4CDB6803AAE1F /* ParseUI */, - D05441F363DA5C39F91284F9B5CEDACC /* SDWebImage */, - 3AE7B9721CD35F860143D929B3C54A41 /* Unirest */, - ); - name = Pods; - sourceTree = ""; - }; - 25EEC3565A27693E64AB8F08DCF47B36 /* iOS */ = { - isa = PBXGroup; - children = ( - 62333A4D0E9AF8700874F1F22E9827D6 /* AudioToolbox.framework */, - F47F6AD14A34D9AF4DC5B0EC8FF52D24 /* CFNetwork.framework */, - D70B7C8487C6735F7C0D1016E743D173 /* CoreGraphics.framework */, - 9F62BD8D055CECF254F18875CD46DFA2 /* CoreLocation.framework */, - 11733E9AB23CFF872D2D8C693E69A845 /* CoreText.framework */, - 7DD167515154ECF2A5ABB9D3732E76A5 /* Foundation.framework */, - 3691CA8C96F3BE2D408B9E1E7FCDD5A3 /* ImageIO.framework */, - 799A25ED12D346D0E10745AF43D345D4 /* MobileCoreServices.framework */, - 2ED40CD76CB181802A9B088FC26BBE52 /* QuartzCore.framework */, - CC336EDAC9FA746257F40BD540DC9A75 /* Security.framework */, - EA6600846C35A33A9E0A0436C4B4BC26 /* StoreKit.framework */, - 3780C220917B4DD9DC02DDD7323405B0 /* SystemConfiguration.framework */, - 3DE1802829062F013D376CB812C19065 /* UIKit.framework */, - ); - name = iOS; - sourceTree = ""; - }; - 29AEB72CCB634C4DC790FA617430A8A1 /* Tasks */ = { - isa = PBXGroup; - children = ( - 53CEB84926E7FC9E2CFE13206641FDF1 /* BFCancellationToken.h */, - 78392292469D781C93066CD8051EC869 /* BFCancellationToken.m */, - 13621BDB45C7DD8B00AEED3D06BB3D73 /* BFCancellationTokenRegistration.h */, - E05ADC8B41F427B22AC3E815A19350EB /* BFCancellationTokenRegistration.m */, - CE1F8CA7790E14B93C4917A7AA6806F0 /* BFCancellationTokenSource.h */, - BB8F0303D37F7A5C0E989A3297D5D05E /* BFCancellationTokenSource.m */, - 2CD3DF3B3BA00C9C3B9025084D6018EA /* BFDefines.h */, - CA0F759EB3B8FF5747A3FF8D9A670ED4 /* BFExecutor.h */, - E8530B9B30D42F583B3BC811E303DBD3 /* BFExecutor.m */, - 9BE0320666C40F6DC06AF96C24A87FFC /* BFTask.h */, - 30900CE96B834D956AE04457A32EC9B2 /* BFTask.m */, - 27FD73571D1F0E411532F29E810FE8F4 /* BFTaskCompletionSource.h */, - 34B4C034A030FAA4EDA0401F0A8DA0E1 /* BFTaskCompletionSource.m */, - 143B16D45EA328180F3DC8ADB2E0F355 /* Bolts.h */, - B77EC240733E6F154C558B7682AB8B94 /* Bolts.m */, - CB2C2E44C04D75E24B7B90AAA247551E /* BoltsVersion.h */, - ); - name = Tasks; - sourceTree = ""; - }; - 2D895094421AE2644DD1699AC14C24ED /* NSURLSession */ = { - isa = PBXGroup; - children = ( - 74D0634B76E4EE3C7476264586B47F18 /* AFHTTPSessionManager.h */, - F76DB2BC23017FA90C4165EAE8CFB396 /* AFHTTPSessionManager.m */, - 29E0F094F0637842397AB96FB4423477 /* AFURLSessionManager.h */, - F83EC07F9C3FF86C4D9BD2A58B549B0E /* AFURLSessionManager.m */, - ); - name = NSURLSession; - sourceTree = ""; - }; - 2DEDCFFEE26FCED942FDE957C2A6025E /* Resources */ = { - isa = PBXGroup; - children = ( - 70B003B9161DCD2E0A45781DF2576C89 /* flat-ui-icons-regular.ttf */, - 3DC055B41165FBC9ADAFA20E9AFEC94E /* Lato-Bold.ttf */, - 2BA2B31088E6C331D800CCAB32D64F16 /* Lato-Italic.ttf */, - 19DAC19FA8196CB203717E1E2DF33FC0 /* Lato-Light.ttf */, - 02461850BFE597052075F46B27750287 /* Lato-Regular.ttf */, - ); - name = Resources; - sourceTree = ""; - }; - 35E526B6E4CA6A7E89FE8C5A5B1F2259 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 25EEC3565A27693E64AB8F08DCF47B36 /* iOS */, - ); - name = Frameworks; - sourceTree = ""; - }; - 3AE7B9721CD35F860143D929B3C54A41 /* Unirest */ = { - isa = PBXGroup; - children = ( - 06BFD711819A59BFBB5685332131E5BF /* Base64.h */, - D64494125FCBF8578381C4A3DFC24582 /* Base64.m */, - F002184D6C52C347609B0935CC6CF065 /* UNIBaseRequest.h */, - FE4BA056F7A9AC13CC0B5DC014161925 /* UNIBaseRequest.m */, - 8E7AE561E188BF127BA12657694BA340 /* UNIBodyRequest.h */, - B57AB3BA641DCFA726A7D3F91B31F320 /* UNIBodyRequest.m */, - C8C622D61D94B0BB8BC678A39B314790 /* UNIHTTPBinaryResponse.h */, - F84345E7863ED40A20705BCC540EF530 /* UNIHTTPBinaryResponse.m */, - EAE6707081D74AD48DDC2CD34E54F4A5 /* UNIHTTPClientHelper.h */, - E8C2D556022D673D9A39AEE75A92D7B7 /* UNIHTTPClientHelper.m */, - 328E074028831B7162CC31C478F53164 /* UNIHTTPJsonResponse.h */, - 0C63D8CB09610644959B555ABF676D45 /* UNIHTTPJsonResponse.m */, - 8BBDBA1C6D3C481A980BC35C14B1BAEF /* UNIHTTPRequest.h */, - D6C2112669072AE57F3B1EF2C2D85B3D /* UNIHTTPRequest.m */, - E1429F34AED40EF32B9C37C25F4B5395 /* UNIHTTPRequestWithBody.h */, - 49C9AED1403F10EAEF0BDD8C5D1D3ED4 /* UNIHTTPRequestWithBody.m */, - 7175B962AF396E26B597D16DC3A5CAAB /* UNIHTTPResponse.h */, - F6390E9096EABF37B25ABD5CAB5B561B /* UNIHTTPResponse.m */, - DBE6819D41549A1CBD4D69F3085F2562 /* UNIHTTPStringResponse.h */, - F06A9FEFC03282E0E3A86AAE7A3A6FBC /* UNIHTTPStringResponse.m */, - A616ECB7E02535F4B9005E0B7B570609 /* UNIJsonNode.h */, - 71FEF17E88601C7390E60B7D3C7D86D9 /* UNIJsonNode.m */, - 0D36B7A5D9F6AF7F4E01B2320E7BB931 /* UNIRest.h */, - 302EA9A2809EC2AE89E8395AE0606DC9 /* UNIRest.m */, - 7C46519EC14E1637D6277AAE86419317 /* UNISimpleRequest.h */, - 5ED9BE76CA272DD593432FBBB31A0802 /* UNISimpleRequest.m */, - 2BB08B7E9CFEBFDFED3FC2C86EF02981 /* UNIUrlConnection.h */, - 1D3130F150ABEFE07878D5F834F7C368 /* UNIUrlConnection.m */, - 6080B766415EA78C1E0CD3658451D1AF /* Support Files */, - ); - name = Unirest; - path = Unirest; - sourceTree = ""; - }; - 3BEF4610E16B3A9A8411E7E551A7B1CC /* Bolts */ = { - isa = PBXGroup; - children = ( - 9A3B31B4F7EA1475FF834BD44162623C /* Support Files */, - 29AEB72CCB634C4DC790FA617430A8A1 /* Tasks */, - ); - name = Bolts; - path = Bolts; - sourceTree = ""; - }; - 44789702D5917B55E9A85E1CE10515B0 /* NSURLConnection */ = { - isa = PBXGroup; - children = ( - 0322D52D22023BE2411F2CCAACEE304A /* AFHTTPRequestOperation.h */, - 447A70708A6608EE3D4BD4E556895AE6 /* AFHTTPRequestOperation.m */, - 1ECD2B9CBAE08A9410E23E90B706CC79 /* AFHTTPRequestOperationManager.h */, - B539B882529715D46F58AA7C0F7277A6 /* AFHTTPRequestOperationManager.m */, - 45756B2B291EADD70CF96E443BAD2FF1 /* AFURLConnectionOperation.h */, - 57F5879358C84148A7DCDE756C38208B /* AFURLConnectionOperation.m */, - ); - name = NSURLConnection; - sourceTree = ""; - }; - 4B623989A7584AD4A0E8CF1067329FE0 /* AFNetworking */ = { - isa = PBXGroup; - children = ( - A6710EB1470E4F0F7701E1C154191C58 /* AFNetworking.h */, - 44789702D5917B55E9A85E1CE10515B0 /* NSURLConnection */, - 2D895094421AE2644DD1699AC14C24ED /* NSURLSession */, - 8D79697AE2D866947AF882E9A01E14EE /* Reachability */, - 2060B9D5D3F6298565E5805102291334 /* Security */, - CBBBB1AC47AD554DE9F0A578ECDE67F4 /* Serialization */, - E7E648388FFBDFCD741DBEC0FA599F68 /* Support Files */, - FD3AA9CE5FEF18CC6A3164F66A98AFDD /* UIKit */, - ); - name = AFNetworking; - path = AFNetworking; - sourceTree = ""; - }; - 5346416BDCBA591CC9F9A3B964F83782 /* Resources */ = { - isa = PBXGroup; - children = ( - CB1D7D1EE6ECB93DA929D451A913B2F9 /* IQKeyboardManager.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - 562C511EFDAF67D6E1E8DC99740F61F2 /* Default */ = { - isa = PBXGroup; - children = ( - 4D7568E836055BBF820E548BA267D097 /* Chameleon.h */, - BB0313D8856E1ACFFE80F68A9635BD01 /* Chameleon_.h */, - 7E432ED6C4BACD597B5F4F2DB17116EA /* Chameleon_.m */, - 63A96BD4D5CE686506290E2B2F6864B5 /* ChameleonConstants.h */, - D996C2666AEBC5DE15F1132F7519EEFA /* ChameleonConstants.m */, - 2F7C8A872250C0A49C96DA6FE264847D /* ChameleonEnums.h */, - 40375E85CA508E2B057CECEF9AC0A466 /* ChameleonMacros.h */, - CD004273FD354237F7D844A9BEAA8D1E /* NSArray+Chameleon.h */, - B4749B8DD730E19C293B814FC52D7503 /* NSArray+Chameleon.m */, - 7F2B4DBA35116B6042915F19733A7176 /* UIButton+Chameleon.h */, - 89DE757655305B9DAB2E3EA0D59AE60D /* UIButton+Chameleon.m */, - B2ED2797E56832F52396742BD5AC40B1 /* UIColor+Chameleon.h */, - F84F91BBE51B1905554065F47F8129B3 /* UIColor+Chameleon.m */, - 6CDA46DB859C98B0E388E4E3FBFB36FB /* UIColor+ChameleonPrivate.h */, - 97B2351AC859811A6FD2A910BB95E71D /* UIColor+ChameleonPrivate.m */, - 8A94C4B6698BAB7FAD0158E1D025AFD0 /* UIImage+ChameleonPrivate.h */, - CF09587F6E7B5C55B2DBC4F76D84C78F /* UIImage+ChameleonPrivate.m */, - 68485F33091E36236F52B5769528EB54 /* UILabel+Chameleon.h */, - E07A6A98D3D5AABF5C8EFFD18AB58BC3 /* UILabel+Chameleon.m */, - 538710A479D4D4516F3473CEB00D6341 /* UINavigationController+Chameleon.h */, - E0FADD9A90F6B97C2F05721EFB03C404 /* UINavigationController+Chameleon.m */, - 73A9A926D0BDDC98D57EA6CCBC0E91AC /* UIView+ChameleonPrivate.h */, - 5D2A07DA0436A22DB926D8F8BA8F922A /* UIView+ChameleonPrivate.m */, - 5EE09B13391CB4E2288B618D9989B7CF /* UIViewController+Chameleon.h */, - 7F5AC19CF9E1DB86BB619A83FD60C580 /* UIViewController+Chameleon.m */, - ); - name = Default; - sourceTree = ""; - }; - 6080B766415EA78C1E0CD3658451D1AF /* Support Files */ = { - isa = PBXGroup; - children = ( - 3C41CA94D6F9231F57C05FC27DC0014F /* Unirest.modulemap */, - 602303506554C7182024859B53F84A23 /* Unirest-dummy.m */, - 2737B1F251EAB771EB977928EF4E9B9A /* Unirest-Info.plist */, - 98F87F122A15B9E739F85D722AA24C2B /* Unirest-prefix.pch */, - DE1C0FA9FAF3336E0D882CF851F8D942 /* Unirest-umbrella.h */, - 53AED7B37E59FD4C2906C8CD48F1549D /* Unirest.debug.xcconfig */, - 4A6D3469A0C446BC153A71D249DD118C /* Unirest.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Unirest"; - sourceTree = ""; - }; - 68AFE8F905231F3E4C5EBFAA29AD5666 /* Support Files */ = { - isa = PBXGroup; - children = ( - BE02B4D17FFF5AE2EC743420048DBAFD /* SDWebImage.modulemap */, - 3A7B398E287C24BCC8433260FC465DB3 /* SDWebImage-dummy.m */, - B8FB8CBAC0C2BDE02C1657F0EF9462AC /* SDWebImage-Info.plist */, - 46E040DEB7A5A629D47173D5EB8CD36C /* SDWebImage-prefix.pch */, - 1222D529EEC7D53C3D01CCE61951FE2B /* SDWebImage-umbrella.h */, - CD46520D8BCDA2FED7653A676AE1DB78 /* SDWebImage.debug.xcconfig */, - 9AC2743E8EC297C24BDC808D253215BC /* SDWebImage.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/SDWebImage"; - sourceTree = ""; - }; - 6FAFD0A27024CDBFFE2A754024EC0052 /* FlatUIKit */ = { - isa = PBXGroup; - children = ( - 80A30BF5DA2904576C9A695E79AEBC44 /* FlatUIKit.h */, - F60B9EE41FD4D8BAB2516F180F00B059 /* FUIAlertView.h */, - 59C4881749E08C596424F2235546B787 /* FUIAlertView.m */, - E5673AE21FC295054FE51806B2157579 /* FUIButton.h */, - 3BF939D82D860D7ABEC9DC1665E9AFFC /* FUIButton.m */, - BD17758C6D9E58B355428B80263D17EA /* FUICellBackgroundView.h */, - FCD70579BE96CFBD090F1E64FC7A1E4E /* FUICellBackgroundView.m */, - BFB3C1E76C4F806EFCDE8512A39D23C2 /* FUIPopoverBackgroundView.h */, - 518E2B391F997E4CCF271F754FA363A8 /* FUIPopoverBackgroundView.m */, - B585A7167FD23401CC0AC3C94F615F46 /* FUISegmentedControl.h */, - 3A7EC5204AF6AD0ACD56CD9B3D27A7E8 /* FUISegmentedControl.m */, - 2FE2DCAC734B4286316670697800D439 /* FUISwitch.h */, - 11570DEE95441A341ED290D310B99750 /* FUISwitch.m */, - 4576727BB25DE279D205E8F0DB89DB48 /* FUITextField.h */, - 1297CEA60937D63A7F97997D134CB8BB /* FUITextField.m */, - C7BC9D529DFB9C2876F1B26C742549E5 /* NSString+Icons.h */, - C2D25A48A5669C4EEA1A1278B5AADCC8 /* NSString+Icons.m */, - 81A894C8CDCCFEAB2B5E90D348379A43 /* UIBarButtonItem+FlatUI.h */, - 34856B703E5606ED1C3566F49C8E8DF4 /* UIBarButtonItem+FlatUI.m */, - BF928DF49EC124F57C165424C653912E /* UIColor+FlatUI.h */, - C6465177F56344D8A62FB5F181EEDB03 /* UIColor+FlatUI.m */, - BAB3C187C0719EC147E9F61E5E85BC65 /* UIFont+FlatUI.h */, - CEED91958785BC6C656DF48AF67670D7 /* UIFont+FlatUI.m */, - 4D9DF0C4B326ED5F2D1D4EAE13266284 /* UIImage+FlatUI.h */, - B4B17635A35B3C414378999631FEB0AD /* UIImage+FlatUI.m */, - A1464A1B89739CFFDC2231D2B2BFEF97 /* UINavigationBar+FlatUI.h */, - F4F2DBF73DDDA25055C195018E9186F0 /* UINavigationBar+FlatUI.m */, - 21D8E4F6E3FE9751A9C71B96F1DA3755 /* UIPopoverController+FlatUI.h */, - 7DDE204F56A235BFC67201687941B5F5 /* UIPopoverController+FlatUI.m */, - F8E604995C153FE58AF3F074F1262AEA /* UIProgressView+FlatUI.h */, - ED1B808831668BFCE5B5641495D4D294 /* UIProgressView+FlatUI.m */, - B53CFF61083EF9E417C641E96A20A279 /* UISlider+FlatUI.h */, - FB2160A0B485224469FAF6BA39EB0364 /* UISlider+FlatUI.m */, - FAA6B39941ACCBCAFA2A4F26CF1AF48C /* UIStepper+FlatUI.h */, - AD86AC16AA572CE40EAE3336DB4D3602 /* UIStepper+FlatUI.m */, - C566D49A7C726CF5969F4B79AA9ED6C7 /* UITabBar+FlatUI.h */, - 0B1DC4F3EA65E8107DBC6146CF990FFF /* UITabBar+FlatUI.m */, - BE14B64B7D94E9A0E083FC542AECB820 /* UITableViewCell+FlatUI.h */, - 46422AC887FA952A4892854E29579089 /* UITableViewCell+FlatUI.m */, - 7B72B0C51A38197D37BB6563BDCA4FC1 /* UIToolbar+FlatUI.h */, - 90AFF1F5771F5C74F72298841B0D450E /* UIToolbar+FlatUI.m */, - 2DEDCFFEE26FCED942FDE957C2A6025E /* Resources */, - 8953587DCCE207F802452186F963E590 /* Support Files */, - ); - name = FlatUIKit; - path = FlatUIKit; - sourceTree = ""; - }; - 708A68883023B96262CA436953D3A180 /* Support Files */ = { - isa = PBXGroup; - children = ( - 0625A1B69859FE4C804D6DB1E4977BA5 /* IQKeyboardManager.modulemap */, - 62CF11BB195FBEDB741B155A299E3F4C /* IQKeyboardManager-dummy.m */, - 2079E3916C3DD67D0736BF3A3B847C80 /* IQKeyboardManager-Info.plist */, - 79167CD3E04E39F302F7B16FAA2250AF /* IQKeyboardManager-prefix.pch */, - EF08F0FD1BF57A2E09B192B96E023021 /* IQKeyboardManager-umbrella.h */, - 4EEBB37503F5FF0C662950C8F1DECA80 /* IQKeyboardManager.debug.xcconfig */, - 194C09CE6BAFEA2233F1C90D5FB06DE2 /* IQKeyboardManager.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/IQKeyboardManager"; - sourceTree = ""; - }; - 75672FC68C1C2709FC8E1C7ECAFD293D /* Resources */ = { - isa = PBXGroup; - children = ( - DC7BB69962EB8928BACCE0021E544A5E /* en.lproj */, - CAF92C30B6888E0F131016AB7EE40127 /* fr.lproj */, - 45D59B3477CE4E1E8A8D72DAA36AE180 /* pt-BR.lproj */, - ); - name = Resources; - sourceTree = ""; - }; - 799A553949C56D477A1B139C6AC593AE /* Support Files */ = { - isa = PBXGroup; - children = ( - A5AD6E00DDF3F7D4C05FC0098C099B2E /* ParseUI.modulemap */, - F126906F253F3C3848FA05C0D242D4D9 /* ParseUI-dummy.m */, - 0DEB54A8B8D441D44B09F0FA01E8E95B /* ParseUI-Info.plist */, - 3691B24171C74EFD1F8433B4605C38E8 /* ParseUI-prefix.pch */, - 9A43EB961420A5AF4805BFDFA34DCDB3 /* ParseUI-umbrella.h */, - 008FE4C757A98BF3F85D56B16B909C95 /* ParseUI.debug.xcconfig */, - A04E1674F330FF3E8705ACDA5294CAF0 /* ParseUI.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/ParseUI"; - sourceTree = ""; - }; - 802C5321FC5ACB930CE064A17957EF97 /* Support Files */ = { - isa = PBXGroup; - children = ( - 9B8F1BF1B5F349B7005451DA741B0047 /* Parse.modulemap */, - 73B7094CD00334DE71FFD9ED9F4AFE8D /* Parse-dummy.m */, - 08801F02130F31B03B1B8F0EE396CC30 /* Parse-Info.plist */, - EE0570671EA39BDDB0C88A5BB610E898 /* Parse-prefix.pch */, - D72AEC533D655C8D593C07A53F1D747F /* Parse-umbrella.h */, - 67A6FB7F80EB38941450A0B66E1843B4 /* Parse.debug.xcconfig */, - C4239D037D62B4A06D9768E33ECD692F /* Parse.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Parse"; - sourceTree = ""; - }; - 8072B1F77714727D2BA4CDB6803AAE1F /* ParseUI */ = { - isa = PBXGroup; - children = ( - B7308BC8BA2DF875593DADD527D898A7 /* ParseUI.h */, - 9D7C94F9DF9D3C658BC5608AEB9B49B1 /* ParseUIConstants.h */, - 1496C6331BE5CE68663D0C65DEB7E653 /* PFActionButton.h */, - 56EFB542F9FA3A986A2C18607C6BA01A /* PFActionButton.m */, - E261E97A551F62268F5002DB529D4A74 /* PFActivityIndicatorCollectionReusableView.h */, - C0FA4E1F34830F2463FCB811EAD24A79 /* PFActivityIndicatorCollectionReusableView.m */, - BDB6900AC0DB1620F42D3AA6F1A09E5D /* PFActivityIndicatorTableViewCell.h */, - 5E1AFB8E063415AF1B76421BD1E70D71 /* PFActivityIndicatorTableViewCell.m */, - 50B6CCE1DD1F1B571E064C44E3D7CC87 /* PFCollectionViewCell.h */, - EAA0C3C67C7D908A2F7182249E71C853 /* PFCollectionViewCell.m */, - 1A16F60868674C544C93C2FC19B449CF /* PFColor.h */, - A3F525305019C6D6103B6394A0D2FFAB /* PFColor.m */, - B59CF43B52C3F67340E0866557906257 /* PFDismissButton.h */, - 9005E4E32F1EF9E3F28CB2D81637B524 /* PFDismissButton.m */, - 448743DDA2013C8A9A70568A441DEF22 /* PFImage.h */, - F14562D32CD87B15414FD459F3B13C75 /* PFImage.m */, - 18E5B4F6DD54D3DFEE040D4E42491397 /* PFImageCache.h */, - C237413667676F66D932237A4073CB42 /* PFImageCache.m */, - C317661A6C63BF31F4516396085D1DDD /* PFImageView.h */, - E1507F321942D4FD208B55803D3583FF /* PFImageView.m */, - 80476201DCD8D8BD6436D2B68B92209C /* PFLoadingView.h */, - B0315B64F3C557F7C3897F4E68B228A5 /* PFLoadingView.m */, - F6A33DD502114C23783D6D52977D75D2 /* PFLocalization.h */, - E619BDE14AB08B9FB930109F4E31D8CD /* PFLogInView.h */, - AA873AB0DE8D007CA8F0042C3B6675E3 /* PFLogInView.m */, - B4FA5364701AAA618A9F456A6322416E /* PFLogInView_Private.h */, - 7FB8156015613925F2F535F01040F256 /* PFLogInViewController.h */, - F63505CC4ACA8270E183DAA52A22B58A /* PFLogInViewController.m */, - D8DF24ADAADAC243785A71EB5043ECB5 /* PFPrimaryButton.h */, - 826F299C0C32FA4481DAE44FA6FA0A1E /* PFPrimaryButton.m */, - 0B852FCF809F069DBCAB8194541BD2D2 /* PFProductTableViewController.h */, - 7299ED8195E626646307BF4A8D40A058 /* PFProductTableViewController.m */, - 9731541F793BCF26FDF4582BC3D06C4B /* PFPurchaseTableViewCell.h */, - 209B5F6CA85EBF47851F7BAB625D9974 /* PFPurchaseTableViewCell.m */, - E272D407AC4A249F7DCA0B9CA3115B66 /* PFQueryCollectionViewController.h */, - EFF140CE5FEE134EEDE89A382783CD66 /* PFQueryCollectionViewController.m */, - 93DC759AA838D19EFDB5EE39A0FD3B8A /* PFQueryTableViewController.h */, - 47A62753B34D273314D19513D5331BC8 /* PFQueryTableViewController.m */, - 74507F19D1FF215BD94690AA2D88047B /* PFRect.h */, - CC3E170282FD37E519479DFEEE7D55B2 /* PFRect.m */, - BED06D69A31505FA7CD8316C179CDFAC /* PFResources.h */, - A0AE3560BE9FC94C3B71D94028EB8928 /* PFResources.m */, - CB00637E4C07D93AA94189E0D17D0509 /* PFSignUpView.h */, - 1A79E98AEE84BCDEC2A44AC20B564C75 /* PFSignUpView.m */, - 17A8A4A862EC921341A6294A505E8C17 /* PFSignUpViewController.h */, - 6AB0CD6365496172E27CBD57A2266391 /* PFSignUpViewController.m */, - 4DD4060F8826F9A5E5D4C4FC4E7A3256 /* PFTableViewCell.h */, - BCA492568C51FFC3E67F860276C05E61 /* PFTableViewCell.m */, - 4EDD0EDAAEC49A923F963CFF2EB1A94F /* PFTextButton.h */, - A89A6272C760E24D4FCB53B305AD1CCB /* PFTextButton.m */, - 9101FCF180E53E25AAE24FD11B0AB42B /* PFTextField.h */, - 6120BA628BADDB347735942BA78DB2BC /* PFTextField.m */, - E074D43B725F9C362400C9DF86A4123D /* PFUIAlertView.h */, - C2660605B5FB0E40D12FF6A4B131C4A2 /* PFUIAlertView.m */, - 75672FC68C1C2709FC8E1C7ECAFD293D /* Resources */, - 799A553949C56D477A1B139C6AC593AE /* Support Files */, - ); - name = ParseUI; - path = ParseUI; - sourceTree = ""; - }; - 8953587DCCE207F802452186F963E590 /* Support Files */ = { - isa = PBXGroup; - children = ( - DF7780DB20224001BE268ACB15378FC2 /* FlatUIKit.modulemap */, - B834CB346FEDD46855AF57AD06DE5791 /* FlatUIKit-dummy.m */, - 217CAA0272C352818C8E463AFB4904F7 /* FlatUIKit-Info.plist */, - C174512300F259E9E9FF44BD14218FED /* FlatUIKit-prefix.pch */, - D308000BF600D71810C6CD2499427CD7 /* FlatUIKit-umbrella.h */, - 25AE04E3363DD54258BA17EE714BC7DE /* FlatUIKit.debug.xcconfig */, - 564869040FE2AC538A52B329B2EE83BE /* FlatUIKit.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/FlatUIKit"; - sourceTree = ""; - }; - 8D79697AE2D866947AF882E9A01E14EE /* Reachability */ = { - isa = PBXGroup; - children = ( - 7491B40A0184FAC7223E8121B02FB307 /* AFNetworkReachabilityManager.h */, - F16F15C48D3F05417CA21097C2E54EDC /* AFNetworkReachabilityManager.m */, - ); - name = Reachability; - sourceTree = ""; - }; - 9A3B31B4F7EA1475FF834BD44162623C /* Support Files */ = { - isa = PBXGroup; - children = ( - 5B6D1ADF24E834ADDC3684C7A9BEBA9A /* Bolts.modulemap */, - 07A0976E8712629AD60DA98871FCF0DE /* Bolts-dummy.m */, - 6720A87D6066BFEDE6B83971F452B9BD /* Bolts-Info.plist */, - 9D79F1F6C34E951AA6AE27F54B6C7662 /* Bolts-prefix.pch */, - 3689BC9116ABAB64895F8C584E42DFC6 /* Bolts-umbrella.h */, - BE438FFCF26860EECC1343543A60226D /* Bolts.debug.xcconfig */, - 22E30A762CBA7D97BB4E81283F3DACDA /* Bolts.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Bolts"; - sourceTree = ""; - }; - A9C390BE4A98FCC6786CE69CAF18E10B /* Parse */ = { - isa = PBXGroup; - children = ( - 405B14A1911C958897CB6F7AA3CA87B0 /* BFTask+Private.h */, - 810047E1F16DB679BCA0CC9D8C9337B7 /* BFTask+Private.m */, - 6B9244AA4FFAD4954BC0B0ACB67D2F4C /* Parse.h */, - 7063EC865492F550FE5219FA73C9583A /* Parse.m */, - D3EE32A19F2CA37F68E600E3B1A8BAB6 /* Parse_Private.h */, - F756DED267DAEAA45B7B75F44B527FE0 /* ParseInternal.h */, - 982A9041ADE39E009726C8B46D8C4515 /* ParseManager.h */, - 58D1011532F802CDF880D3B55F389975 /* ParseManager.m */, - A747F1408C49254D6028E4F8891C4084 /* ParseModule.h */, - 7E9D4BAA6FB13BABFA6610DB1C1A516A /* ParseModule.m */, - 0B4B936F403CF30DCA18AD72190FCFC9 /* PFACL.h */, - 0528637876B6E3CD1CC1904766E72FCF /* PFACL.m */, - 32917B1510914295787D683689498DCC /* PFACLPrivate.h */, - 4E759BDB2280614B1E223A5BF6593C20 /* PFACLState.h */, - 2DC55D2B463E6818D02D571FF341E73B /* PFACLState.m */, - FB6B6FE77562EFAE3F96B1E69E8AC7BB /* PFACLState_Private.h */, - A7B79D3518D2C9F3E903CF4F1BF00D13 /* PFAlertView.h */, - 463691C0AD9E31BB5AD4BDB493C34D0D /* PFAlertView.m */, - 2EE2A8D1E5AFBD0420E65DA1389499B3 /* PFAnalytics.h */, - DDEB824107C28055F7FDA4A9A2034A36 /* PFAnalytics.m */, - 1BAEDB2E65A042469BB0C6C0651AD122 /* PFAnalytics_Private.h */, - 0F8F1DF2A2E6067126652008A009717A /* PFAnalyticsController.h */, - 9B64FDF9AB420DD2D5082AAFDADB7FDA /* PFAnalyticsController.m */, - 75D3AA3139CAC105C690DB23C90E64BF /* PFAnalyticsUtilities.h */, - 57EE6DBB3BE682C35873FDA83F44B5FC /* PFAnalyticsUtilities.m */, - E13BC81FEAB08337AF37599B924A0B92 /* PFAnonymousAuthenticationProvider.h */, - CEEB1C5E9BC1B761C1D681F6ED6D8494 /* PFAnonymousAuthenticationProvider.m */, - B6F772B42BF7CA65B75F996B143430CD /* PFAnonymousUtils.h */, - E15CB84F6EAC100D531B6BCAAA2815AB /* PFAnonymousUtils.m */, - E06A7119515F4910F956F06EF911C715 /* PFAnonymousUtils_Private.h */, - 279C7B8C6BAEF8CDFC3B4C468EA5C328 /* PFApplication.h */, - D63A69F4B3F958DFFF7944B7D8290D88 /* PFApplication.m */, - 8C31022C27A2C8C1FBE857406C9AF09F /* PFAssert.h */, - DC28C0625C2B08E7619AEFBF99128019 /* PFAsyncTaskQueue.h */, - 3870EE2EF73F00569F66764B6840BA48 /* PFAsyncTaskQueue.m */, - EF5EAF79A06EE932EE7BB85498679562 /* PFBase64Encoder.h */, - E843676E8B7DE282A6605A76DC99E8D3 /* PFBase64Encoder.m */, - 1698F26D15551C1829449B813F474E0F /* PFBaseState.h */, - 6F3BF9878F0834C3730E36D502F45185 /* PFBaseState.m */, - E69D548BB3EF5F5499142B94DC2D4D2D /* PFCachedQueryController.h */, - 92AA3B35831850C75A93CFD081927516 /* PFCachedQueryController.m */, - 089CCF84955BA2531A9DA4EB301EE774 /* PFCategoryLoader.h */, - 5B85775602BF2725E42724F544D6ECD0 /* PFCategoryLoader.m */, - E65E7AF0524FDBEF23D5EFA1398195EF /* PFCloud.h */, - 96F352501E39A78917919E6827D9662D /* PFCloud.m */, - A59BC2D719A6FE36F8A22D143D3E4E76 /* PFCloudCodeController.h */, - B4C9DD585C2ACD9EBCBC81F91C89331A /* PFCloudCodeController.m */, - 13E84B7E5A4B30014D5A54B0F163A44F /* PFCommandCache.h */, - B7EF29C21D7B2E9DCDB866FFBB91594A /* PFCommandCache.m */, - 692F0A966BB11E58EB1DF1EFEEE973F3 /* PFCommandCache_Private.h */, - A86E6037DE1255155FC0C886F04E3B93 /* PFCommandResult.h */, - D81124330876EB85D8CCB6C9378D2E8C /* PFCommandResult.m */, - BF0F1E060D039DB2ED92B2064E9324FC /* PFCommandRunning.h */, - 836407DF9AE49E6F3CF05A57B2F3E0A1 /* PFCommandRunning.m */, - A5FAEE78A4702D335F3353DE5B22486B /* PFCommandRunningConstants.h */, - 4557A74A01F29629FD85B18F24E777A5 /* PFCommandRunningConstants.m */, - 91DA321208E1EF09682615B34F8542E4 /* PFCommandURLRequestConstructor.h */, - 487BDB4CA79192A229759CBAEB510235 /* PFCommandURLRequestConstructor.m */, - C80EE7051488F41E849C0913BFE85299 /* PFConfig.h */, - 67B1DADD0464EB28623E46BA51F4E731 /* PFConfig.m */, - 793A3BFEC9783DDC1830CDC4663B9EC4 /* PFConfig_Private.h */, - 4133DB2BFB881FA9162EC51EF7038118 /* PFConfigController.h */, - 3FB02385D3C2C2A0EB07A7BD82B8DE4B /* PFConfigController.m */, - 7DDFDA2543E81B2D6485145052BA73C2 /* PFConstants.h */, - ECD2083274B0707629CB97D4D8099431 /* PFConstants.m */, - 4373AB8A755D4DB6F49BA37DEFE4C9CF /* PFCoreDataProvider.h */, - 1DA0612D4D7F2E82006DC4C386EE7835 /* PFCoreManager.h */, - 144E3BE8EEEEF124C9859E3D7ADBE20F /* PFCoreManager.m */, - FB9516C98F43C642D31BA9E3D82C8206 /* PFCurrentConfigController.h */, - 8C8AC497AFA3C26AABE01AA1D7E3F66D /* PFCurrentConfigController.m */, - 283A6A064CA65E920533C0B11919385E /* PFCurrentInstallationController.h */, - 73E92AE01951AA70475BDC4CB43A6528 /* PFCurrentInstallationController.m */, - 1F899C2DE9446CFBD4258DF3146777DA /* PFCurrentObjectControlling.h */, - 109E7534E27B2BE53FBD782EF3EA62A9 /* PFCurrentUserController.h */, - D2BF4F04D9236FEB54B0E9C3385222C8 /* PFCurrentUserController.m */, - 023393764250C8DBC9744BAAF26A4B90 /* PFDataProvider.h */, - 94DF9C4055D9F72566E7A9544165FE9D /* PFDateFormatter.h */, - 0B0FFF3EEE8DA5E91EDEB8EA6DD38164 /* PFDateFormatter.m */, - 35ACB630538A121CBF33BD2A43D210F7 /* PFDecoder.h */, - 41C1D92DF62E21AFDBB85A53A4D4712E /* PFDecoder.m */, - 39A9911126C27100A1F40C2590B1A921 /* PFDefaultACLController.h */, - B09F7439A6613B5442F51FD2DEE7DFB7 /* PFDefaultACLController.m */, - AAC5F15FE7360B5B3103BBC0CDF77057 /* PFDevice.h */, - 2C3AAD13195F59C43C31D7B68EBD3011 /* PFDevice.m */, - F16B2F09DDA3B581B0D212FFDBAA7BEE /* PFEncoder.h */, - 029C15EA534199B8D6FF5549EDA5174A /* PFEncoder.m */, - 131DCAADD2A7478906370E28CF44D71A /* PFErrorUtilities.h */, - AC4DC6A2437F65F8A83CB36C3B66723C /* PFErrorUtilities.m */, - 444C17DA53AAC790C006E8C77C606141 /* PFEventuallyPin.h */, - 920C6629AB79F0D4396D3F62D12B3527 /* PFEventuallyPin.m */, - 1A2E073D3DA8C342D0440403A0447C26 /* PFEventuallyQueue.h */, - 7C2680C64F9681DB935CEC6C07AECD7F /* PFEventuallyQueue.m */, - CB6945F45579087C28867C89A928DECD /* PFEventuallyQueue_Private.h */, - 036DE49E350AD26884D01409BB02CCEF /* PFFieldOperation.h */, - 7013A29B1EA77F5E42B21D0847570E86 /* PFFieldOperation.m */, - AE235869020CAD616253B91718814EB4 /* PFFieldOperationDecoder.h */, - 2F817FA3B2D6B6B355ABF9815AD40608 /* PFFieldOperationDecoder.m */, - BF5D4519F2FD959DD3A51A80CF8C52D8 /* PFFile.h */, - 19D22DE6F0EF2AF9D2D7C2F20FD61ADD /* PFFile.m */, - AF27CCB4FCEF9871BEE69541BB6C7107 /* PFFile_Private.h */, - 6FC877593D9C3597554FD4F63EA7265D /* PFFileController.h */, - 52F2CC34E25309A7D0C44241B0F15DEB /* PFFileController.m */, - 3F5D0B6D294347476FD73D958F09ED17 /* PFFileDataStream.h */, - 1CF00F1FC0F39F69845946C2AD585948 /* PFFileDataStream.m */, - 1E5C55CFEDDC650E3CDF3F59B2865200 /* PFFileManager.h */, - 88D5A072EC90FD6AC9092E73B90F9254 /* PFFileManager.m */, - BB2C9ECA5C083B1C1AB04DAF1E83046E /* PFFileStagingController.h */, - 9EE458611A33294A7976CAE3AC79A962 /* PFFileStagingController.m */, - 28B369CD0FD6B2267684D60BAD74B807 /* PFFileState.h */, - 2DD6269DBB74E9E2A4341B46B3B2240C /* PFFileState.m */, - 67C82E63D914F4652D462D1EF746789E /* PFFileState_Private.h */, - 2AECBBD0EFF420415B93C5A23FCB6BCD /* PFGeoPoint.h */, - 2AEE82C4E7D4C887B812D322BF6616C6 /* PFGeoPoint.m */, - 51829BFD42C53387BD853B53595A4859 /* PFGeoPointPrivate.h */, - EC4A64A0CD9BB0968D9668774F8AB562 /* PFHash.h */, - 8924CD04B6BFE4AAC5C88AEA98869B06 /* PFHash.m */, - 65BFCDD2C8EE6E26312798F208A450E4 /* PFHTTPRequest.h */, - BFDADA3217FE77D6F8E68621BA9FD77E /* PFHTTPURLRequestConstructor.h */, - 22EC91ED4B69A438A78BF10A844BE247 /* PFHTTPURLRequestConstructor.m */, - 39D6DC64510F8D6816ED4A2F7DFB52AF /* PFInstallation.h */, - 3E6B3CC888343CC69943B63141268699 /* PFInstallation.m */, - 5BC3203CA8DEAE4E766361C3772E32DF /* PFInstallationConstants.h */, - 74D802D8056ADFE99B20602EAA26F7B2 /* PFInstallationConstants.m */, - AC9A5F70E2DE419835876FAA80A1B09C /* PFInstallationController.h */, - 62292C896B27EDFF3089011E9218A54F /* PFInstallationController.m */, - D9ABEBD69361FA1FD8939A21C71A86B3 /* PFInstallationIdentifierStore.h */, - D69D5263055F55D91F01C506D8E89BAD /* PFInstallationIdentifierStore.m */, - 3B8B26D22A8D50D5756DCEABC1E2F39B /* PFInstallationIdentifierStore_Private.h */, - 4FCCA3A37B3313BAF696EBB3102DF427 /* PFInstallationPrivate.h */, - A1046A49BB31CE2EDA5FADB31A184D95 /* PFInternalUtils.h */, - A7FF321DDDFD4C9D30F6C27AE6F15255 /* PFInternalUtils.m */, - B6B448028CCE0AD7EDBEC9BE86199EC1 /* PFJSONSerialization.h */, - E4ED7A0517A36ECA8CCCE78610B55016 /* PFJSONSerialization.m */, - 79FD47C9A55EA483579D7171540525DC /* PFKeychainStore.h */, - FCDFA364DF4CC49FC21ECB8993B987F4 /* PFKeychainStore.m */, - FB87370F76BC674AD21F1FABEB5464F9 /* PFKeyValueCache.h */, - EBA6B31F193A3582597871E09B2C0D55 /* PFKeyValueCache.m */, - B66BB1A1B150F73F53A51DB0EF89A285 /* PFKeyValueCache_Private.h */, - 14B527B21E752166A0ECE57755F5B742 /* PFLocationManager.h */, - 312CFE7334F9820D693DB8F87FDF58BA /* PFLocationManager.m */, - 3552A7840686D24CD44668B0CDA0BF24 /* PFLogger.h */, - CD550819AF8416A5DB414CAA7025CB06 /* PFLogger.m */, - D869C16E6B92E4E4DAEC9B9363D8D3F6 /* PFLogging.h */, - 9279D9795C913BECFB930DCA0A4CBF9B /* PFMacros.h */, - 7D24DD97B5EB009793F423B2E12526C9 /* PFMulticastDelegate.h */, - 69EB7978B5C927F6B8DB109710F1A3A9 /* PFMulticastDelegate.m */, - 3F123ABB578E3F518DF039070BC96D0B /* PFMultiProcessFileLock.h */, - 078CF89D1976FA56CB71DB442293247A /* PFMultiProcessFileLock.m */, - DD67EEF35668EABDA6CDE4706E5C10D0 /* PFMultiProcessFileLockController.h */, - 9E818A121570D3A0F0DA80F2825AFB6D /* PFMultiProcessFileLockController.m */, - C45DABCF47D9B4496B4627C78ACA5F5B /* PFMutableACLState.h */, - 2D0B8387029A2FBE4D1B3128F06E3921 /* PFMutableACLState.m */, - 78698705CCE8B41B0BB2C29A99DAED74 /* PFMutableFileState.h */, - C8EA7A9046754051261628FE4A4FBC57 /* PFMutableFileState.m */, - EC68094E74192E9415DE284736276F42 /* PFMutableObjectState.h */, - DC1FF3B7F18FCF2F0A4EFD477BE62BAA /* PFMutableObjectState.m */, - CF0865463F092E74770E7110F2D76193 /* PFMutablePushState.h */, - E6E8FDE318E4C904383C402577CB676E /* PFMutablePushState.m */, - 3CB6840C12F6DE61721C1D23DAD8176F /* PFMutableQueryState.h */, - AD0FE61335BED497567057BA19502825 /* PFMutableQueryState.m */, - 435F2CA4899F4863E2CCBD079FDB969F /* PFMutableRelationState.h */, - 9CF35D4AC32619FDEC1F5F4FC52084A9 /* PFMutableRelationState.m */, - F30BAE81C83BFC24C3F09853774210B8 /* PFMutableUserState.h */, - 46CD8E4F61AC27B42941BB20FCCC1C2F /* PFMutableUserState.m */, - 384BDE20DFFC6A0E2458D1BC282F4420 /* PFNetworkActivityIndicatorManager.h */, - 2C6149FA7454A58C374DE984CBB2B5D5 /* PFNetworkActivityIndicatorManager.m */, - 5E6BF5C5D003F29D1B91F74088E1F30B /* PFNetworkCommand.h */, - 69AB457D67396F5B1AE602EB9BE91C33 /* PFNullability.h */, - 3424FEAC2E4DE6A897AE678346A16EB3 /* PFObject.h */, - 150F4AC40940FEC7C1C20AAD696887E5 /* PFObject.m */, - 17F49279416DD3E891AA4D2508E5DEDA /* PFObject+Subclass.h */, - 7A7B4A661CDD8F7A507BC897C1C1F57D /* PFObjectBatchController.h */, - 4A99D12CF0886074F54F4101B90E0209 /* PFObjectBatchController.m */, - 735FD83521BA17D09CAE866022FD78C7 /* PFObjectConstants.h */, - 6B6F63E91EEC4427BD74F56EC4CDA08B /* PFObjectConstants.m */, - 8BC693C636CC87A6217C7C5DBD4D7A4A /* PFObjectController.h */, - FE9E03DE7A25EA6F5C94C4201C60D18B /* PFObjectController.m */, - 6627F2203B9CE43FB51C48DEC6485120 /* PFObjectController_Private.h */, - 4DFE6A76A1CE11D7A2988AB23405FE3D /* PFObjectControlling.h */, - 7FF0ED8615CFE41B1191D7A379331688 /* PFObjectEstimatedData.h */, - 8727E4ED80EA777438361FDA993B9BE4 /* PFObjectEstimatedData.m */, - 201D0AF4758543C8B03C221952439864 /* PFObjectFileCoder.h */, - 0D50D22BBDCF4938379296E2F238F866 /* PFObjectFileCoder.m */, - DDC009A128625087767288D7706E4920 /* PFObjectFileCodingLogic.h */, - D0C44D70A8C988A5FC533435B05B77CB /* PFObjectFileCodingLogic.m */, - A0B75CA0A1B123DC95D30ED0D3F93513 /* PFObjectFilePersistenceController.h */, - 42BF37A08F24B8A4D646021BAC4A89B8 /* PFObjectFilePersistenceController.m */, - AB6237226D0A898842335421FF28BB4E /* PFObjectLocalIdStore.h */, - 7259AEBFEEBDDB3685DB53543C199135 /* PFObjectLocalIdStore.m */, - A25890C6749766D2FA0F6910C5AFB555 /* PFObjectPrivate.h */, - E17C805A5EBB9F99E87AE99981812FC7 /* PFObjectState.h */, - 033CF3680745525AA290EAA350C6D644 /* PFObjectState.m */, - A7377E6FF89E05208972680783752B9A /* PFObjectState_Private.h */, - 3A8E778140C33BF8B75C390520FC2B65 /* PFObjectSubclassInfo.h */, - 3F8393736BD5D73AC01DBCF37963E6EA /* PFObjectSubclassInfo.m */, - B37A54E62CF8CA8E0CAB38A547E00BBD /* PFObjectSubclassingController.h */, - 39E688412771E938F26B8F10C0191798 /* PFObjectSubclassingController.m */, - B19AA6954ACEF35AEBBB17B964C0E14C /* PFObjectUtilities.h */, - 764482CB123621C18470E54689AE1D1A /* PFObjectUtilities.m */, - 287B74C03E5984086449C9EC4671728B /* PFOfflineObjectController.h */, - 183F4922424C98CDCBAF70F6694F7186 /* PFOfflineObjectController.m */, - 73BC7B9783D64F0A868195064BC3BE46 /* PFOfflineQueryController.h */, - 57F620D9F908B6A65FB1CEE68626BF6E /* PFOfflineQueryController.m */, - ED353E01D2DC7C2CFC849BFC56253F3F /* PFOfflineQueryLogic.h */, - EE7E578477183FF7B01EB42B97FB5875 /* PFOfflineQueryLogic.m */, - 6C279362F3C05B272F24D95D7C88397A /* PFOfflineStore.h */, - 0B36583C8B8073E88C7FBCEDD319D548 /* PFOfflineStore.m */, - 2E056AC96A8AACCF1DD32256DE702C88 /* PFOperationSet.h */, - 20B2A45932656A04E9A644FBC0DA4689 /* PFOperationSet.m */, - 1934CD496BF357F3D85BDB55F2D42649 /* PFPaymentTransactionObserver.h */, - 339B985FE4916FC0EAD33315A7189218 /* PFPaymentTransactionObserver.m */, - 4D093C8CB7A26243277525B5AAEEFDAC /* PFPaymentTransactionObserver_Private.h */, - A7B9CAD0F05D1A202F8BFBCEC0C7F240 /* PFPin.h */, - 8A5E8C51D8EFCE54951AFBA268A07EC5 /* PFPin.m */, - F148BFBBDD8AB8A9E87918D610748144 /* PFPinningEventuallyQueue.h */, - 5170BF555CAA15C414E5FFBAFBA0560C /* PFPinningEventuallyQueue.m */, - 2100573153580E93D49B528DA64E5E5F /* PFPinningObjectStore.h */, - 7625D472ACC8D44E3E9CF86870FB700F /* PFPinningObjectStore.m */, - 0C01979AC575C3DF44D871EBE33C80D1 /* PFProduct.h */, - 968C1C61689C3F23A5FC509269AE1B6C /* PFProduct.m */, - 0264EE9F5AFC365618A7A86369BDF5E5 /* PFProduct+Private.h */, - 58A2B45D80BC9668A48207A6F9EEC39D /* PFProductsRequestHandler.h */, - 560C0E4A9A88A8BCA7929A45B476EDE1 /* PFProductsRequestHandler.m */, - 0211A72E4EA58246830A20585FB161A7 /* PFPropertyInfo.h */, - 0415F5BE04092407D9C3DF323C2DDA93 /* PFPropertyInfo.m */, - 0B1D30808B74647E6437CF9F248FF87E /* PFPropertyInfo_Private.h */, - A78B6320A995FD2334C69BD6DD530AAB /* PFPropertyInfo_Runtime.h */, - E095BAA9FC8B747A000DE925306793BE /* PFPropertyInfo_Runtime.m */, - 1AF187A6BDAC9D45C8425EE5D9869AA9 /* PFPurchase.h */, - 08CFC3FCA7FE77B46041821976AF2BA6 /* PFPurchase.m */, - FC11F4C9F01877A5D56739B9BBA85621 /* PFPurchaseController.h */, - 331297A6C5AA9401BD6372032CD02FED /* PFPurchaseController.m */, - C64D42AAE0A0E697FE455FDDF0F6AF44 /* PFPush.h */, - 0E42C21E2CF24EB6317C3418E412FAC0 /* PFPush.m */, - 212A31C3327EAA3D513C3DE44A109768 /* PFPushChannelsController.h */, - 9B84C7E4CD2F561F248C7DAD46DAB372 /* PFPushChannelsController.m */, - 5B765AFD4A4848FC69B9C8A2E9F26602 /* PFPushController.h */, - D5A1769B7D39E3622EBE828E69A03539 /* PFPushController.m */, - 6360B90072C4B548E77BF105665B6C37 /* PFPushManager.h */, - 0600787BA30BFE74CE957F9E90F3BBBA /* PFPushManager.m */, - 947FF1F683D3B81772BB3703B214E58F /* PFPushPrivate.h */, - BC45FC112DCEC836AB7FC34C7DEC3DD9 /* PFPushState.h */, - 3E6F93F75316C1B80CAAF5C92F8366AF /* PFPushState.m */, - F0D7E94728407981CD0D00CFC842764D /* PFPushState_Private.h */, - 2A163F69034220CA4460D8608674DCAD /* PFPushUtilities.h */, - 603FE11A5C1B8C0DC8233656AE9ED2CA /* PFPushUtilities.m */, - B1D876439A55825F2D698021F318F11B /* PFQuery.h */, - 4FB30C451B1E7FFB9382796A11C5943B /* PFQuery.m */, - 70E696DD69E7E5ED847216871E48280C /* PFQueryController.h */, - 33A844344DE513F67DA9B594005E312F /* PFQueryController.m */, - C0A12B9EF7949B48A1FA4D686A7BA5F9 /* PFQueryPrivate.h */, - F41BA5906F72B08707A6E9500176C911 /* PFQueryState.h */, - BEF4FF7171109B841E52DAB6544DCFB3 /* PFQueryState.m */, - 25A6BCE1E348D02F01E197A0C48E07E7 /* PFQueryState_Private.h */, - 58AE592385190B7467E751B3B8DACB38 /* PFQueryUtilities.h */, - 5D48E39DBDC5F4A1596DCF448DB2C584 /* PFQueryUtilities.m */, - 5942670B140FE51902C19AA1DE9A9F3C /* PFReachability.h */, - D305BB43DFE0C6524796909B892CDE28 /* PFReachability.m */, - 373B403D2BC5D282CCC10F9AF474DEE1 /* PFRelation.h */, - 532DBEDE2A0498233B11E32D118785DB /* PFRelation.m */, - 6DAEBE8AEEE1FAA4664DBEB20E14CE68 /* PFRelationPrivate.h */, - CEFF5B62376E2591D6E5EAF93B76997E /* PFRelationState.h */, - 7A264B2075C9820174A1D049067B3CBF /* PFRelationState.m */, - 85342B421353B094FC8A7B1ABA28B021 /* PFRelationState_Private.h */, - D13E9CC7C55D6E5308CFD2BDDF4E3E35 /* PFRESTAnalyticsCommand.h */, - 1E425907A301715A116FF9A3132EFC63 /* PFRESTAnalyticsCommand.m */, - 41B531CB3F68644A7CA2E2C2C2A0A399 /* PFRESTCloudCommand.h */, - 95314205CD5BD2133AB7512597330119 /* PFRESTCloudCommand.m */, - CF296274D6055775584EBDE9FFA27649 /* PFRESTCommand.h */, - 960742FAC6FDF1CD37B19A3DA2797830 /* PFRESTCommand.m */, - 8B7D47CF2CED52BB8C4DBF504E0FD9A5 /* PFRESTCommand_Private.h */, - 16A83694A1281D2628E8C6E4A5050DE4 /* PFRESTConfigCommand.h */, - 033347FAE6C04EC4566EFBDC24DB4DC8 /* PFRESTConfigCommand.m */, - 83C522A64AC5540AAD98319C36F3E135 /* PFRESTFileCommand.h */, - 436C46A02A32E7AC27D14D39EC7C1837 /* PFRESTFileCommand.m */, - 831DABB79EABDA3FF9164AB3067B2154 /* PFRESTObjectBatchCommand.h */, - EE598A4F3D9378CEBAD8365FAB0D2291 /* PFRESTObjectBatchCommand.m */, - 8F975DFB0B29996EF17B1A0A3E07BC65 /* PFRESTObjectCommand.h */, - 041219D95934148272D9D11F04A65097 /* PFRESTObjectCommand.m */, - 9AC40AAE4F66D4423B9D67D418FE9E45 /* PFRESTPushCommand.h */, - D2E0EEEC88F8887028FA6F0DDA67548B /* PFRESTPushCommand.m */, - 6784E3A646029063B6761DB858CC2A64 /* PFRESTQueryCommand.h */, - 5D2CC7EA24171E936D65F3D1CE945A69 /* PFRESTQueryCommand.m */, - B485708557E6CB2DE1F09BD5E1B8F90F /* PFRESTSessionCommand.h */, - DF7A671748B1795733EB163457D9959D /* PFRESTSessionCommand.m */, - 0644AF28ADE45E9FB2616BBB3A6B43F3 /* PFRESTUserCommand.h */, - 78DF666508E81974752F6338C9BD57F0 /* PFRESTUserCommand.m */, - 3A9951560A51BC6B7877E46E76741F7E /* PFRole.h */, - FC35A11ED7B0DCD6819A7CBB019FE94C /* PFRole.m */, - 8BAB143961E7B37C103224026BB1A6A4 /* PFSession.h */, - BA8F4C6CB58404CBBBB266E5FD1A21F8 /* PFSession.m */, - B54AB9EA09EEEF30796D34F7D163FE45 /* PFSession_Private.h */, - BF72FEFBC6FF8F58CB7CB79FB1C8A7BE /* PFSessionController.h */, - E92240B95F45B88D980A83809E4BCE74 /* PFSessionController.m */, - AC7DB93B4EAA0F9CF5C79181A315DD5D /* PFSessionUtilities.h */, - 36829EB394DB6476915698282D533FA4 /* PFSessionUtilities.m */, - 47DEEC6F87A4C44266E60D0FE9D3CD84 /* PFSQLiteDatabase.h */, - F23678C89071A5C346F5BE0C1DFE5EC2 /* PFSQLiteDatabase.m */, - E0CC60D5D61DAC18565BFA86B04B3091 /* PFSQLiteDatabase_Private.h */, - 120FA99F09676AEC262A7A964B7F118B /* PFSQLiteDatabaseController.h */, - 3A621B8940AFC7648C5072806B4B9311 /* PFSQLiteDatabaseController.m */, - DC59FC62BE26AD5C562D7BBF2224A10E /* PFSQLiteDatabaseResult.h */, - B9699B645F9D9FD06B73D75CA3FB069B /* PFSQLiteDatabaseResult.m */, - 66D7E61A2DA0CCA139659AE3C52ADAC5 /* PFSQLiteStatement.h */, - E8084FC656FBBB0FFE9F542CFE82DFC8 /* PFSQLiteStatement.m */, - 59579E28C00752CB33687F0116BCE918 /* PFSubclassing.h */, - E82CA19BA3E0DE4964F0C052630016EF /* PFTaskQueue.h */, - 4DC5561D6E88870E46F7C10C1B8A21CC /* PFTaskQueue.m */, - 9051E6207606F6E900A4A30F93EE6FE1 /* PFThreadsafety.h */, - 2C77C2B15C731F7A514C22FFCFAD61F4 /* PFThreadsafety.m */, - 5F2C6A11EEEA34D04A61B4281AC80E6C /* PFURLConstructor.h */, - 4EC3750FD01543193A7B71DB65C65C6C /* PFURLConstructor.m */, - 84E61178295191BF6E6785AA01F3B06A /* PFURLSession.h */, - 524E125E9BB16B2EA346C11FA2CCF3DB /* PFURLSession.m */, - 44A129BE492571A758DC14026E10AB87 /* PFURLSession_Private.h */, - 09E57153667D515CCBCF5953009ED8FC /* PFURLSessionCommandRunner.h */, - D961C77262C7D151CC89E6164FA6D52C /* PFURLSessionCommandRunner.m */, - 857186AEF8B59B6AE45A44A595FC38D1 /* PFURLSessionCommandRunner_Private.h */, - 2D29EBF6D740449C59B201746886CD2A /* PFURLSessionDataTaskDelegate.h */, - 9493E918DE059197B488AEB66DA6E6DF /* PFURLSessionDataTaskDelegate.m */, - 3DA5EF8C3E29EFFDABDC9EE3902FE630 /* PFURLSessionDataTaskDelegate_Private.h */, - 562ED9F06683670B4C58AD183A5119AE /* PFURLSessionFileDownloadTaskDelegate.h */, - D7A3AD7DED9F7674DF066157B83874E1 /* PFURLSessionFileDownloadTaskDelegate.m */, - 2C29C184DBBCE87B995B672F7F51F2EA /* PFURLSessionJSONDataTaskDelegate.h */, - 8967DDB36504C317B821DF34152AC486 /* PFURLSessionJSONDataTaskDelegate.m */, - 9B208B6F44DC353307586ECDE943C9F4 /* PFURLSessionUploadTaskDelegate.h */, - A71FEF7E5647E074B2A574E5FE4CDF3E /* PFURLSessionUploadTaskDelegate.m */, - 0A13FE5C7D35D0AE5753E0BBDB76B4DD /* PFUser.h */, - 4ED9C82C3A61619800659B958E8E749E /* PFUser.m */, - 989F197281037053568D90FE2E45034F /* PFUserAuthenticationController.h */, - DEA92EAFBD2F6D31CC60C9BD2B8B1F9E /* PFUserAuthenticationController.m */, - 10327370A383E65FA840807957C88BCD /* PFUserAuthenticationDelegate.h */, - DA7D6B40CA043E1F26CF1737EE7C2D8D /* PFUserConstants.h */, - D89292EA416BFB4E38CFA341905BFDFD /* PFUserConstants.m */, - 5BA130676F12B046A542250B72B807BA /* PFUserController.h */, - 5D0A81E8C2565C9257E716AD6F1840C1 /* PFUserController.m */, - 385FE35508EFAD1A522AC72D9A9F3F0D /* PFUserFileCodingLogic.h */, - CA81F6D4EC4A09874076DCCE8890B484 /* PFUserFileCodingLogic.m */, - 249176052C8E9FF258B54C64D59D6DD2 /* PFUserPrivate.h */, - E6492D62837F81793852C022F8DDDE48 /* PFUserState.h */, - AE6967C88C45F046AD5C10E7ACE7F9DE /* PFUserState.m */, - 571A49A343233979AB4B93973BE75E50 /* PFUserState_Private.h */, - 9D5F1CE5891DAE96AE6580471A3F81CD /* PFWeakValue.h */, - BC22009CD0CB35CBE3E0FE126DC1372A /* PFWeakValue.m */, - F2917A2EA574FD298D50A6BBF6D9FBE1 /* Resources */, - 802C5321FC5ACB930CE064A17957EF97 /* Support Files */, - ); - name = Parse; - path = Parse; - sourceTree = ""; - }; - ACE7852A20DA825AE217649C3D71EFB7 /* Products */ = { - isa = PBXGroup; - children = ( - A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking */, - F84B331B5D6AAF1548DD1BB004AE5C2A /* Bolts */, - 0383903D05EDD5C442C682C1F7A1752D /* ChameleonFramework */, - BCF2FF91155574F810AA6ADB7F19CC31 /* FlatUIKit */, - 98527D7196957AAB07B79E2E2AFDE23E /* IQKeyboardManager */, - 0652F2476C7C87C6C0F6CB68072EA25F /* Parse */, - 062054FC97AAAB3D2F4AB253A7CDE385 /* ParseUI */, - DC82E912A46E0D98C54FA4D7AA8638BA /* Pods-FoodbLog */, - B0B214D775196BA7CA8E17E53048A493 /* SDWebImage */, - D6CC7CC57AD4796048E05E9C30825826 /* Unirest */, - ); - name = Products; - sourceTree = ""; - }; - CAE3BE3C05705C076B1EC906EE735FF6 /* Core */ = { - isa = PBXGroup; - children = ( - C971E759236FF5C44EDF586ABA1FDD1A /* NSData+ImageContentType.h */, - 64197C6CBE27CDF8450C86E247333C27 /* NSData+ImageContentType.m */, - A672C404782F472C63BC1B4FF31B6004 /* SDImageCache.h */, - 7B54797159113BD42DEF825808E96506 /* SDImageCache.m */, - 4C112C5EA6B10F17C8A8DC5699FFED81 /* SDWebImageCompat.h */, - 3A0B96CBB6636A7BDCBA964478F20F8F /* SDWebImageCompat.m */, - 110AAF7EB53ECB71214D319069E26CBB /* SDWebImageDecoder.h */, - 41755FA2662E2489FEB0E6FEC30BCAE0 /* SDWebImageDecoder.m */, - D9045979C5B73816C81F6DC6CB9C26C6 /* SDWebImageDownloader.h */, - 5896B97D426354756157FC55B080FD82 /* SDWebImageDownloader.m */, - 18D28DEFCE0FAFDD3C9195B9594781FC /* SDWebImageDownloaderOperation.h */, - 13BA722BB3C5D60330A639CBB1030486 /* SDWebImageDownloaderOperation.m */, - B1E5C0E4125427F0E3FDE91F5CBA4513 /* SDWebImageManager.h */, - 6721C44FB15736B15A7A9FF9DEE5BA27 /* SDWebImageManager.m */, - 32719F277BAE80948D0BEA83DAC8F658 /* SDWebImageOperation.h */, - 1D7FFC332FE37C75EC2BBEEB205C3392 /* SDWebImagePrefetcher.h */, - 6C66681DF328D06725C4357E76019D12 /* SDWebImagePrefetcher.m */, - 90B7F377A6C76455F713F9A2956AE3E4 /* UIButton+WebCache.h */, - 9B6C075902DFE55B31A76D31208A4280 /* UIButton+WebCache.m */, - B965B81CCEE7979B459AD921D6689D66 /* UIImage+GIF.h */, - 81D0A63D86D41097D8121FB31AFAFEEA /* UIImage+GIF.m */, - 829A5C4EB781110BB7C73A0432188FD5 /* UIImage+MultiFormat.h */, - 84F48C253BD5BE7290BF97DBB488394B /* UIImage+MultiFormat.m */, - E82AC36F045BE087ECE7253B8EEB06EB /* UIImageView+HighlightedWebCache.h */, - 7158256AD2EEA035C9BB1BF017053123 /* UIImageView+HighlightedWebCache.m */, - EACA9F3764C09E78E6A493517CC775B9 /* UIImageView+WebCache.h */, - C0B062364FAD300B57FFF2CD44278F60 /* UIImageView+WebCache.m */, - 4E4DAF9930C43CB43E5BF52055CD68F1 /* UIView+WebCacheOperation.h */, - BDAEBE02C021E3A5CC6C2481DDB70A37 /* UIView+WebCacheOperation.m */, - ); - name = Core; - sourceTree = ""; - }; - CBBBB1AC47AD554DE9F0A578ECDE67F4 /* Serialization */ = { - isa = PBXGroup; - children = ( - 0B559DA039E8A1B57AA78991E706A8C2 /* AFURLRequestSerialization.h */, - 5F468E6B33E9C6CF3D86F7DE8C388C8B /* AFURLRequestSerialization.m */, - E01DF6BF8E0DB15494DA23A118BCDE49 /* AFURLResponseSerialization.h */, - CB77AF007BC5AA8EA10347DB05702138 /* AFURLResponseSerialization.m */, - ); - name = Serialization; - sourceTree = ""; - }; - CC67B748D6D89E34B3EBA3591D5D4298 /* Pods-FoodbLog */ = { - isa = PBXGroup; - children = ( - A62DEB07190D9A48B19931ABEF8231C7 /* Pods-FoodbLog.modulemap */, - 8F7F9F74CC5A4F15ADE6F15432160734 /* Pods-FoodbLog-acknowledgements.markdown */, - FD99F6C0C8D35C9AECD61CAC8D4951B4 /* Pods-FoodbLog-acknowledgements.plist */, - 71E8757C5E655C53AAFA0481265D031B /* Pods-FoodbLog-dummy.m */, - 11CBBD39FFE4DF992FED341E869D5277 /* Pods-FoodbLog-frameworks.sh */, - 9295942D69DE1369ECE1A9BCC87CA017 /* Pods-FoodbLog-Info.plist */, - 47B8D17F18C41D9E28B5AD8E78B23877 /* Pods-FoodbLog-umbrella.h */, - 849E5A8317B6998E948A27507E902A90 /* Pods-FoodbLog.debug.xcconfig */, - 5E8A133C5B52375ED7ED0B08ADBD8537 /* Pods-FoodbLog.release.xcconfig */, - ); - name = "Pods-FoodbLog"; - path = "Target Support Files/Pods-FoodbLog"; - sourceTree = ""; - }; - CF1408CF629C7361332E53B88F7BD30C = { - isa = PBXGroup; - children = ( - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 35E526B6E4CA6A7E89FE8C5A5B1F2259 /* Frameworks */, - 221E052A8AFDB44D77227FF60A110FF3 /* Pods */, - ACE7852A20DA825AE217649C3D71EFB7 /* Products */, - 172C6AB29CA1720C0D85F380DD22AFB9 /* Targets Support Files */, - ); - sourceTree = ""; - }; - D05441F363DA5C39F91284F9B5CEDACC /* SDWebImage */ = { - isa = PBXGroup; - children = ( - CAE3BE3C05705C076B1EC906EE735FF6 /* Core */, - 68AFE8F905231F3E4C5EBFAA29AD5666 /* Support Files */, - ); - name = SDWebImage; - path = SDWebImage; - sourceTree = ""; - }; - D8002BE0C5AD88976C0807FA9C6685B5 /* Support Files */ = { - isa = PBXGroup; - children = ( - 7C92F31D9E400B1B46DA37ADD0B84189 /* ChameleonFramework.modulemap */, - 3D2290841E77758DEB6EAFA4F67271A3 /* ChameleonFramework-dummy.m */, - 4117F3C2B16BF78B5EBD1BEACABFF34B /* ChameleonFramework-Info.plist */, - BD16E875A751C74763634BD2E94CEEE6 /* ChameleonFramework-prefix.pch */, - C3AC194441355C5C035DA3351650C99E /* ChameleonFramework-umbrella.h */, - BD8A148C1C76BD03BEFC12CCE8F7BB3E /* ChameleonFramework.debug.xcconfig */, - 80178C233F043FB5B04F2B531880B028 /* ChameleonFramework.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/ChameleonFramework"; - sourceTree = ""; - }; - E7E648388FFBDFCD741DBEC0FA599F68 /* Support Files */ = { - isa = PBXGroup; - children = ( - B62EA9E3F43DB044529820595B489487 /* AFNetworking.modulemap */, - CE1D7CADD6B787D221D22A300F04F5B1 /* AFNetworking-dummy.m */, - BE4797FEB12AB168882290F20F22E1B3 /* AFNetworking-Info.plist */, - 7DB4F4E4B2256634770AE493DF1F4302 /* AFNetworking-prefix.pch */, - 2809CC499F34E67434A2065F3F90217D /* AFNetworking-umbrella.h */, - B03124BAD3BD5D9AAEFF7FC003DC0B1C /* AFNetworking.debug.xcconfig */, - 59340BADC818D8D3EE97EF49C93B9657 /* AFNetworking.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/AFNetworking"; - sourceTree = ""; - }; - EED214742741A6815D2FD502A3958CC1 /* ChameleonFramework */ = { - isa = PBXGroup; - children = ( - 562C511EFDAF67D6E1E8DC99740F61F2 /* Default */, - D8002BE0C5AD88976C0807FA9C6685B5 /* Support Files */, - ); - name = ChameleonFramework; - path = ChameleonFramework; - sourceTree = ""; - }; - F2917A2EA574FD298D50A6BBF6D9FBE1 /* Resources */ = { - isa = PBXGroup; - children = ( - 6142F4E83D523220AAA5D1451FD4BD96 /* en.lproj */, - ); - name = Resources; - sourceTree = ""; - }; - FD3AA9CE5FEF18CC6A3164F66A98AFDD /* UIKit */ = { - isa = PBXGroup; - children = ( - A97E94420846C84B8140C33CF337FE2C /* AFNetworkActivityIndicatorManager.h */, - 749D4221E99EEA9B5BC4964E736739C2 /* AFNetworkActivityIndicatorManager.m */, - 4A8B03638085EFF11C1EAAF09ED235E2 /* UIActivityIndicatorView+AFNetworking.h */, - 1D60463E70F6B8741716B5430ED6586F /* UIActivityIndicatorView+AFNetworking.m */, - 992F6F2CF6AA0579EA8E24CB235D73BA /* UIAlertView+AFNetworking.h */, - B27416461ADADD8D3ADF8E8D35A3ACE1 /* UIAlertView+AFNetworking.m */, - 32D1EED54067102FB95B998DE807EB80 /* UIButton+AFNetworking.h */, - 523B0739D98E30356009D72E50CC1DDB /* UIButton+AFNetworking.m */, - 4DA03E39CAF7E8EFC0E5EDDCBC9F3BD0 /* UIImage+AFNetworking.h */, - 9FAE01CF4B380A313FEBB6E495A58C24 /* UIImageView+AFNetworking.h */, - 73CC9A342B0099AB7F2D13D603FCFC71 /* UIImageView+AFNetworking.m */, - 58C02A1A5B90D578646A551B3EE8B09B /* UIKit+AFNetworking.h */, - 1FA89EADBEBD0F217B329170BCD40A4C /* UIProgressView+AFNetworking.h */, - 0CAAD28C58C66EB0A98AA015C265FDCE /* UIProgressView+AFNetworking.m */, - A816AB5A1E39050DB3C8267CC75B6308 /* UIRefreshControl+AFNetworking.h */, - 719F3201FA8FF71792294DDA9C2E0678 /* UIRefreshControl+AFNetworking.m */, - FD5C4496FDDA02FC33B9EF297AD6BF6A /* UIWebView+AFNetworking.h */, - E5EABACCD833603D71DDA83AF8267A78 /* UIWebView+AFNetworking.m */, - ); - name = UIKit; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 28FAD78D380E7661ADD03202D7BBA130 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 658DD32CED473FCE3E157760C94A6AB9 /* FlatUIKit.h in Headers */, - F1A626CC96C4F5309BDB955D24C08340 /* FlatUIKit-umbrella.h in Headers */, - F5A1F5648B57F8EE92271219D9640F86 /* FUIAlertView.h in Headers */, - E073A9FAA1E4FBFEED33E37680301216 /* FUIButton.h in Headers */, - A5F3A45286A396D2C6C2756E87A6FEFD /* FUICellBackgroundView.h in Headers */, - 1810DA64266F52B6508F1AF0754D7D1F /* FUIPopoverBackgroundView.h in Headers */, - 8702D2031C885CF3BB2D8795A6FC0C3A /* FUISegmentedControl.h in Headers */, - 446C0BBFFD9EAB06C6FCCF34AE0E5286 /* FUISwitch.h in Headers */, - 3C4D35E189329636BFF6117BF20985E3 /* FUITextField.h in Headers */, - 7C404DEBEDF06360F28C8E6C457520AF /* NSString+Icons.h in Headers */, - 0C0D5C75A59E94327ABF2F1277BA6325 /* UIBarButtonItem+FlatUI.h in Headers */, - 21F70A540678BB24C4996F1CD1855CA9 /* UIColor+FlatUI.h in Headers */, - 8CCFEC94CDC419B16F917810D8439F39 /* UIFont+FlatUI.h in Headers */, - 348A4B6738A8BD6637F87F3926564CEF /* UIImage+FlatUI.h in Headers */, - F0F92512DD701E369E2EE06A213E11DD /* UINavigationBar+FlatUI.h in Headers */, - 7BB986930A679B4F4A6E2F0567AA1118 /* UIPopoverController+FlatUI.h in Headers */, - F9410635D2A13AC2DC7A9CCB266F8596 /* UIProgressView+FlatUI.h in Headers */, - AA0FC201A1809E7157E034B695A569F2 /* UISlider+FlatUI.h in Headers */, - 869568B070A4B8CAC7778AE5EE71BD5A /* UIStepper+FlatUI.h in Headers */, - 32F3C97B6182D3AC5A80BA4739537E08 /* UITabBar+FlatUI.h in Headers */, - 5C069A9D5B4CAE514B4F46117B04E888 /* UITableViewCell+FlatUI.h in Headers */, - 5FC03CE121193E811A7A38226CEB7FE6 /* UIToolbar+FlatUI.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 324720C9A5939C3ABB4CCF923B4D2735 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 8011E13C93B1251BE83F73849CBA41D4 /* Base64.h in Headers */, - EF985A767B2C450FA8F0640769D206AD /* UNIBaseRequest.h in Headers */, - 5BB2CC688FADABE72F1EE80DBCDE28A5 /* UNIBodyRequest.h in Headers */, - 2267E143F866BBFEB39DDB060F71B943 /* UNIHTTPBinaryResponse.h in Headers */, - 03C60FBD9CB7547B458B40058168BB28 /* UNIHTTPClientHelper.h in Headers */, - 38B64A887C7C04EAEE5414A2715EEC58 /* UNIHTTPJsonResponse.h in Headers */, - 13CDBBD7FCCA51D3FD1983ED9C0486D1 /* UNIHTTPRequest.h in Headers */, - BD2636AC38047EE877D06873DC7EF988 /* UNIHTTPRequestWithBody.h in Headers */, - 53C9A682E744C8CD8A71E7926530B78D /* UNIHTTPResponse.h in Headers */, - 6D856BD6272DC3B97FBAC3D6503343D8 /* UNIHTTPStringResponse.h in Headers */, - 1E82CB078732A340B2516F9D5971E917 /* UNIJsonNode.h in Headers */, - D7AB05392442CA0F7360E9A0DEFDF10F /* UNIRest.h in Headers */, - 1E8D6949CBCA40DB1BB2E04CBAC3A80F /* Unirest-umbrella.h in Headers */, - 24D23BC1BBB0A7A7F30C9EC3F45CCBB8 /* UNISimpleRequest.h in Headers */, - 63BA863394E7EEC25970ADD618763ADE /* UNIUrlConnection.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3D06C26E89812FB5A93DD6138024C08C /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 590AD04854053AF10E3397F20A648CFF /* IQBarButtonItem.h in Headers */, - EC1CBC5AB12E4C488819653A72B5E19F /* IQKeyboardManager.h in Headers */, - EC13F1DF9025A5C3E0CB90E9376BD62F /* IQKeyboardManager-umbrella.h in Headers */, - 4CFA03024DDB3D22E34E21E6B93577B9 /* IQKeyboardManagerConstants.h in Headers */, - 48E6C81111ABE83FB43D7E16A07D423B /* IQKeyboardManagerConstantsInternal.h in Headers */, - 0B59DB8E6AB6779CC25A6E28EF151996 /* IQKeyboardReturnKeyHandler.h in Headers */, - D184483D8564CEEE9E25688918814972 /* IQNSArray+Sort.h in Headers */, - 4DA3E886A13F59B8C595071C71911700 /* IQPreviousNextView.h in Headers */, - 3AF7CAD58044A895437E02A54D89803F /* IQTextView.h in Headers */, - FB3FC81067E5C451ADFBFF6918D8FFCA /* IQTitleBarButtonItem.h in Headers */, - 9E4F5CDEEE091D095F1769FD0423C07C /* IQToolbar.h in Headers */, - 8C450FC7E1CB66D28CD46981530E0A8C /* IQUIScrollView+Additions.h in Headers */, - A4C736E58BDA8172D6667A19851FDEC2 /* IQUITextFieldView+Additions.h in Headers */, - 8EEF8A9731DE9C088F894071C9248FB3 /* IQUIView+Hierarchy.h in Headers */, - D5B1F28C17002CBE60420F56B85DC2BF /* IQUIView+IQKeyboardToolbar.h in Headers */, - C7F5E4E05604B5ABC2B37F8FA933A19F /* IQUIViewController+Additions.h in Headers */, - F3FE63C82D6575686809B65BB48AE8C8 /* IQUIWindow+Hierarchy.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 43FD6D86FE03BF966B0926576933AC19 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 65954C025FD7062A89E4CAB5E385B3DF /* NSData+ImageContentType.h in Headers */, - 9DB442303F0400FF942BB74CE5BB31D0 /* SDImageCache.h in Headers */, - BA6DFE37B6BBCC3575139A1C0A6989A1 /* SDWebImage-umbrella.h in Headers */, - A8F6AAD9D6A648D30F327911D8CE53CE /* SDWebImageCompat.h in Headers */, - 324F9FD525319CA2193E87C87FD96700 /* SDWebImageDecoder.h in Headers */, - 8FD6FCE130BFD1E16FB2A68476BED532 /* SDWebImageDownloader.h in Headers */, - 13EFAF7127423EC8B6BE3BC894FAB0DC /* SDWebImageDownloaderOperation.h in Headers */, - 69EBAC092096215DC0EA9C889002873B /* SDWebImageManager.h in Headers */, - 993DAD4DC798A7883F3C30AE13359184 /* SDWebImageOperation.h in Headers */, - 966DE4286AC2490A6FCBACA8413C8067 /* SDWebImagePrefetcher.h in Headers */, - 54FA74375505B520AC81A5FE3C892313 /* UIButton+WebCache.h in Headers */, - ED9C3556AC3D5037CB6FF529D816FB12 /* UIImage+GIF.h in Headers */, - 38D829CEA9E110D82321565160D8394C /* UIImage+MultiFormat.h in Headers */, - F9352FCBA2935DB07B38CDCC3E5D04F5 /* UIImageView+HighlightedWebCache.h in Headers */, - D6A76FC088B728E09BE669238269A3F6 /* UIImageView+WebCache.h in Headers */, - 5064614BEFC3E1DCB85B376E7C849393 /* UIView+WebCacheOperation.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 869988D1C6EFA80212F480B9CFCD1838 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - FEAF74C28B30197791132CA4C268A2CD /* Pods-FoodbLog-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A87BA2B7FE18D40CF23B2C76BF652F14 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - CE94EBF86870898CC0BDAA6ED65C6BF4 /* BFTask+Private.h in Headers */, - 2EE700C80315947D821E53B00AA74847 /* Parse.h in Headers */, - CF4D60758633BAE6D1B122456EC24F75 /* Parse-umbrella.h in Headers */, - 72FAFB0F0E6FF8AB2E9CB406A0C6D66B /* Parse_Private.h in Headers */, - B3CCC9CE6FF7374AE8CA9882F02F0425 /* ParseInternal.h in Headers */, - 89982466919DA42C5657FB1D75221B9C /* ParseManager.h in Headers */, - 365CF97A9023756C3B71A78C0F150024 /* ParseModule.h in Headers */, - D67DF497D24A2D6049AF0B75A46AE48F /* PFACL.h in Headers */, - AF3B908A52FDFCC291BABD7DEA6A4C3B /* PFACLPrivate.h in Headers */, - 4927A5D31337BBF09B4D630EEBB29762 /* PFACLState.h in Headers */, - D1ABCFFF2DBFE6D749E1C7C772262D39 /* PFACLState_Private.h in Headers */, - D6870DB8F518AC2F91F9FB95CFF384D9 /* PFAlertView.h in Headers */, - 2142C67AE21760B7CC6503EA03FF5F66 /* PFAnalytics.h in Headers */, - 83E42BD304254F2EA45636E1EBFEBCD5 /* PFAnalytics_Private.h in Headers */, - E58B15E1388E3893149BE0E2AF7C021D /* PFAnalyticsController.h in Headers */, - 46F36C74EF8B07192275578A983B1E96 /* PFAnalyticsUtilities.h in Headers */, - B953AB7BAE43C522F0DC429FFD1CBEB8 /* PFAnonymousAuthenticationProvider.h in Headers */, - 03737B28D6BAF57168047F81B5FC83DC /* PFAnonymousUtils.h in Headers */, - C4885489A964BAC5764A68106B49CE84 /* PFAnonymousUtils_Private.h in Headers */, - 8A89A0B9F1586CA458B63C76E953F154 /* PFApplication.h in Headers */, - 4D410BAF4CB2B1C8C7AD0F85700EE2D8 /* PFAssert.h in Headers */, - 24C5777AA30FE28C5A943689139B9DA1 /* PFAsyncTaskQueue.h in Headers */, - F738741C0DA60836C6691930B8903F44 /* PFBase64Encoder.h in Headers */, - 80701E4D0A3C6FD04DB9EA02163971E5 /* PFBaseState.h in Headers */, - 6474A151BAB6300B587DF01C1F4FFD7E /* PFCachedQueryController.h in Headers */, - 1DD099BB263B6FC964DF781D1887C906 /* PFCategoryLoader.h in Headers */, - 3A1CC2DA6F8F25B29230E84636D88D6D /* PFCloud.h in Headers */, - D804E6D1B5A4F1ED130362B6610693FE /* PFCloudCodeController.h in Headers */, - 772FAB57D507F834419A8B53F81775FE /* PFCommandCache.h in Headers */, - CA5F23766F60847E0A35969F56BE64E3 /* PFCommandCache_Private.h in Headers */, - D2641614DC999C027E62514B55A06016 /* PFCommandResult.h in Headers */, - C1514CF8F5DC189265CCE541F189F4BD /* PFCommandRunning.h in Headers */, - 21E02BBD258139C9B5170C242EAB46EB /* PFCommandRunningConstants.h in Headers */, - FE3FEBF0DEEFD932C5106CA7DCCC1FF3 /* PFCommandURLRequestConstructor.h in Headers */, - F8B195D52D2D7BE80CF4EE6B726204A6 /* PFConfig.h in Headers */, - 17407DB318F6ECE65359F1988EB587C6 /* PFConfig_Private.h in Headers */, - 04CB32149BEA0320CF6F9640A78D8327 /* PFConfigController.h in Headers */, - 38633D20F3A40F43C90014227D54371B /* PFConstants.h in Headers */, - 6EC4D234025E1A35DBB519302842C887 /* PFCoreDataProvider.h in Headers */, - 1C6C96BE29A770F780EDC084673E03DA /* PFCoreManager.h in Headers */, - DDFB747838D1B33306D14FB92112203A /* PFCurrentConfigController.h in Headers */, - 6355D259CFE41FA5DB24D153FB7A462A /* PFCurrentInstallationController.h in Headers */, - 4B711F7739F9BC189B32ABDB6BA90A0F /* PFCurrentObjectControlling.h in Headers */, - F914B72A685B4117F89010C60D49A74D /* PFCurrentUserController.h in Headers */, - C7A351D5E8CBD94236D7A7B43E6E228A /* PFDataProvider.h in Headers */, - B93A8E1F2FBE4ECDF4C19B2E1698AD3E /* PFDateFormatter.h in Headers */, - D75ADB82D221CE073A2385D9BF116313 /* PFDecoder.h in Headers */, - BB068C0CCE5128CAED93094E6A3164DB /* PFDefaultACLController.h in Headers */, - C102035B25414733AA5D99E52A896424 /* PFDevice.h in Headers */, - 46C66D1485581BB40EFAB6E834BD8C47 /* PFEncoder.h in Headers */, - F7F1F58441A29C3E9E037BF03A1E0172 /* PFErrorUtilities.h in Headers */, - 4B2AFEB8AA38E3742467F54CF68224C6 /* PFEventuallyPin.h in Headers */, - E8D145B6A8F126EE542D4560DA53C04B /* PFEventuallyQueue.h in Headers */, - A160951FFCA747F6D3865F68468227C1 /* PFEventuallyQueue_Private.h in Headers */, - F906BA7712F8F45BF05FD888A25ADB6F /* PFFieldOperation.h in Headers */, - 7604B65CA0E258822D5401A28AD4F6E0 /* PFFieldOperationDecoder.h in Headers */, - 8FB1DF7D54B01E7F8B51A01CCD305E7C /* PFFile.h in Headers */, - EFC43ED31D5EAC920327974ECFCEEE03 /* PFFile_Private.h in Headers */, - 7652337C6698F42EC8AA67BEBABC57E8 /* PFFileController.h in Headers */, - 0E46571B85EE1DEB0E0BBE4324B2F5CE /* PFFileDataStream.h in Headers */, - 71406894593D147D7656C97D0BE33AE0 /* PFFileManager.h in Headers */, - 62868B8A6396629E54D5A1B9EDC2DCED /* PFFileStagingController.h in Headers */, - E3C98A1E8B44CB98C75C72B0153311FA /* PFFileState.h in Headers */, - DA339154E42740D763E1E4E42DDB9A1E /* PFFileState_Private.h in Headers */, - A1C0916A3268ADF687DDA3BA26ECCB4F /* PFGeoPoint.h in Headers */, - F73C65E428DB0FF941082D3A5112C901 /* PFGeoPointPrivate.h in Headers */, - 1053442EE9C1B64B2AAD7CB91CC8F960 /* PFHash.h in Headers */, - 3BFD15515778438F53184FB409F433FA /* PFHTTPRequest.h in Headers */, - 4C94CABF04CF5B40BA9A93E090EB08AD /* PFHTTPURLRequestConstructor.h in Headers */, - DA468AF6666C79B9CE948EBEC956317A /* PFInstallation.h in Headers */, - 084E0CA489A67284CCA0A3CACBF8B0E7 /* PFInstallationConstants.h in Headers */, - 99D4F3E015F413FE2AC39FABE7E8D931 /* PFInstallationController.h in Headers */, - 494AB2A28A1FE50E4A600C9EA897D4DD /* PFInstallationIdentifierStore.h in Headers */, - 74D6C8F8FFCA98252D63ECB118C4A832 /* PFInstallationIdentifierStore_Private.h in Headers */, - 1AF8E5D403591848BFA38386949654ED /* PFInstallationPrivate.h in Headers */, - B6DFDA7AEEE3818FB42BF55BB43EA79B /* PFInternalUtils.h in Headers */, - 3C8E21B73FA1F3272C097FF1635AE123 /* PFJSONSerialization.h in Headers */, - 3E9C3B14F625AD4489FB47F637D3AD44 /* PFKeychainStore.h in Headers */, - 5E55D469ABDA00CB5E22565486F051AE /* PFKeyValueCache.h in Headers */, - AF12089323AED5E530B41B0F4FCA25E7 /* PFKeyValueCache_Private.h in Headers */, - 235CA0C0E4047D17A23597B064580FDC /* PFLocationManager.h in Headers */, - 6B9A30C0DEEE650ACE7112BEF04EB351 /* PFLogger.h in Headers */, - 66761408528652240616F11E28CA1AD4 /* PFLogging.h in Headers */, - F578343769211EBC6B3F9E68ACCD6A8C /* PFMacros.h in Headers */, - EC4BF1A648624D63284CED0E9A6992CA /* PFMulticastDelegate.h in Headers */, - DF6BE3AEF2D65C63BB86491AF2D1D74F /* PFMultiProcessFileLock.h in Headers */, - 1383661E416ECA10B53C370FD7DA478C /* PFMultiProcessFileLockController.h in Headers */, - D4C5AECA4AEB0E17B93EECD0ADD06AEE /* PFMutableACLState.h in Headers */, - E6074F2DE1234DE003E339251CE655DC /* PFMutableFileState.h in Headers */, - E2C42C2EC9B809BA3AEDE05F92643393 /* PFMutableObjectState.h in Headers */, - A87EDB8E2777D3E2D232BCB2A6CFE489 /* PFMutablePushState.h in Headers */, - F408B67DE22C6E247BE9587685BFD844 /* PFMutableQueryState.h in Headers */, - C8E3699CC4885FE30DB9B4F6733EBFDA /* PFMutableRelationState.h in Headers */, - 250A6A22ADFC9DCDE240E81BF031C373 /* PFMutableUserState.h in Headers */, - BB9E8B6CA1A0F28FE241638A9272ED77 /* PFNetworkActivityIndicatorManager.h in Headers */, - D48ADA5A04EC8BD8FFB980445E0DE387 /* PFNetworkCommand.h in Headers */, - 79D5AB7ED99F6F3FB99421D0DD941FC6 /* PFNullability.h in Headers */, - 0FC757A2467A1C8278B3C8E0FD126CB9 /* PFObject.h in Headers */, - A0B32A29C37C2FD2C97C80F4F4E9BB2E /* PFObject+Subclass.h in Headers */, - 0CCEBBF735A04B98E5C808E82DAE4CA8 /* PFObjectBatchController.h in Headers */, - 9303E978E2E7E3C00257DD5DC7B6E9B7 /* PFObjectConstants.h in Headers */, - 87753E6E8545A51BB7F4BDBD7DD3FAC2 /* PFObjectController.h in Headers */, - ABB094B942B56188EF4189D1F88D5903 /* PFObjectController_Private.h in Headers */, - 1AFB8287EE97FBB14C982D3730384309 /* PFObjectControlling.h in Headers */, - 52347D4DE0F39E74CAFB1591E68221E7 /* PFObjectEstimatedData.h in Headers */, - DAD63D2B12385137F611785D8087B0C7 /* PFObjectFileCoder.h in Headers */, - 533D41F33F1F148F6D7BBC7BB5C3DEA6 /* PFObjectFileCodingLogic.h in Headers */, - 135A844B6167C7B3BBC7AED7CA8826DA /* PFObjectFilePersistenceController.h in Headers */, - 50A74BA500644CFE9D103329CBEB0D32 /* PFObjectLocalIdStore.h in Headers */, - D50C7B2A36FA249BB8504A699EB42614 /* PFObjectPrivate.h in Headers */, - E283FC5D5F9002724D4E524E59577F76 /* PFObjectState.h in Headers */, - BFBF76808AF82215541A512281405BE3 /* PFObjectState_Private.h in Headers */, - 9FCD98AAEE8AD79C20BD6854611C7421 /* PFObjectSubclassInfo.h in Headers */, - C21257ABEC8456229A8715EE704A7DF1 /* PFObjectSubclassingController.h in Headers */, - 35DFE8F14A41999C6A59595E8B8A147F /* PFObjectUtilities.h in Headers */, - 6D0EDE2C0500E59D3BCCDF8014073A8B /* PFOfflineObjectController.h in Headers */, - BAFB7DE6902268900B1B195416BE4D04 /* PFOfflineQueryController.h in Headers */, - 105080EA61E3AD581D9D992B1C5EB418 /* PFOfflineQueryLogic.h in Headers */, - 7CA0EC245101545B13439BA0D2D9B8CA /* PFOfflineStore.h in Headers */, - 86E6118CAFA8C90FC0ABF1688FE6E65E /* PFOperationSet.h in Headers */, - 21BCE7766FE3C1F059C9002704419CA1 /* PFPaymentTransactionObserver.h in Headers */, - 11BCBDEFED4629E3C8FC48ED753E74E6 /* PFPaymentTransactionObserver_Private.h in Headers */, - 1EDEA12414A8201331E9B8B22F1B7F92 /* PFPin.h in Headers */, - 1B63D74CBA62C2E4CEA16D613970A1D9 /* PFPinningEventuallyQueue.h in Headers */, - 18BFB3DF28A19F110FE09F0BCC652A99 /* PFPinningObjectStore.h in Headers */, - D8959E35373758B9DF78F533C55FFC08 /* PFProduct.h in Headers */, - 7DA854BB5C3326B269441322D1C2628B /* PFProduct+Private.h in Headers */, - 8F78EF384897E4D8632DD80FB74EB452 /* PFProductsRequestHandler.h in Headers */, - 6EB34C4A888CD75B1347430E8E2DC8AB /* PFPropertyInfo.h in Headers */, - CC8AEBF8D6620E619F26B670189D49C8 /* PFPropertyInfo_Private.h in Headers */, - 7FDF8C860061C943C172B1CD123039BF /* PFPropertyInfo_Runtime.h in Headers */, - 7B7EE0F54A3687CFB442555D1F00B532 /* PFPurchase.h in Headers */, - 7BE8B7B3771AAA185FA9AF266ACB51D0 /* PFPurchaseController.h in Headers */, - 32B13741B4A59633A35C03D3BD085300 /* PFPush.h in Headers */, - 44D664F52828716532BBE6F0A5D9BF6B /* PFPushChannelsController.h in Headers */, - 17987D10D1BCBE60B5B277B9194A1CE1 /* PFPushController.h in Headers */, - A17802ED40EC2AA21BA76147AB4AD71B /* PFPushManager.h in Headers */, - 5717FB78F8B2247DAF6CC1D1F0CD1D98 /* PFPushPrivate.h in Headers */, - 8F495189348B03AE6F7B46DA0413D883 /* PFPushState.h in Headers */, - F8D55F4F51D08B48B8B0776E9DE8E4D2 /* PFPushState_Private.h in Headers */, - 2577E5E644A5FDDF4CB92BAF5F31EC7D /* PFPushUtilities.h in Headers */, - B337B1573E6106190658E45630AD4381 /* PFQuery.h in Headers */, - 17FFB9A78D520A8A0C2133681F0C4589 /* PFQueryController.h in Headers */, - DB6AD4AA0A96598835F98152FDD9EAA6 /* PFQueryPrivate.h in Headers */, - 543BA9CDC20915D1B7D6CE986E3C86BC /* PFQueryState.h in Headers */, - 19BEEA34AF0C75BF7625B3E99E24D16B /* PFQueryState_Private.h in Headers */, - 01BB74BC139D1D09260F64D925379F49 /* PFQueryUtilities.h in Headers */, - 4EDC3D68FA4D08025BAF6A25AFB5E65B /* PFReachability.h in Headers */, - 42B6719FA91532EEEF59E348C9F722F6 /* PFRelation.h in Headers */, - 7CE03C57C94CDC8B9A2074371BF4DD5E /* PFRelationPrivate.h in Headers */, - 6EFE18C45AAF6979BA21513D0DC45732 /* PFRelationState.h in Headers */, - 533BECEF90857A789B965FE3C20DA467 /* PFRelationState_Private.h in Headers */, - 46BF99BEBFFD63DBE8BC085CD18A4024 /* PFRESTAnalyticsCommand.h in Headers */, - B9667C60685EA0031CA019D522B3028F /* PFRESTCloudCommand.h in Headers */, - 0C4D15C99084144F0AE0AACF24644554 /* PFRESTCommand.h in Headers */, - 9CEF7DD95429E95AAA42B8ED323DDA01 /* PFRESTCommand_Private.h in Headers */, - 56CAFB300305782D5B129B4DD0B0EE58 /* PFRESTConfigCommand.h in Headers */, - A2C0656F1C90FA35634A60E17128300D /* PFRESTFileCommand.h in Headers */, - 4FEBA5F071565CE6BEFF968CD56E365A /* PFRESTObjectBatchCommand.h in Headers */, - 1F14458F8079F45B39F591632AF289EE /* PFRESTObjectCommand.h in Headers */, - 2248CB8CC7031E8FAA06E3E917BC5734 /* PFRESTPushCommand.h in Headers */, - BF8D6320B7CD58347D2D83FFD03CF8C7 /* PFRESTQueryCommand.h in Headers */, - B322A3CEE4151E27F3073CBEC0BBA270 /* PFRESTSessionCommand.h in Headers */, - 82193516C2657105BB1B20F27C8C012A /* PFRESTUserCommand.h in Headers */, - 7757891143F134EF973508DD56821CA6 /* PFRole.h in Headers */, - 516412468B9D294B708BB12CCDE0E76E /* PFSession.h in Headers */, - 22C4D0EA9DC115B2C820CC447AA2DCBC /* PFSession_Private.h in Headers */, - CA6BAD1169CA01807573AE331781DCB5 /* PFSessionController.h in Headers */, - 000A86E96A999630D18730F9FE407521 /* PFSessionUtilities.h in Headers */, - D08A4B442A5964C417489F08A81784F5 /* PFSQLiteDatabase.h in Headers */, - 21DC14D176AC70D4936783626B9F0377 /* PFSQLiteDatabase_Private.h in Headers */, - 97BEC95DB23314A8FEB59FD75DE72D66 /* PFSQLiteDatabaseController.h in Headers */, - 1233214C807850AC28C1C7BC25C7606D /* PFSQLiteDatabaseResult.h in Headers */, - 03E5826A251D0DE9BF070EAB5A3F6B07 /* PFSQLiteStatement.h in Headers */, - B3E81351F8E1BDBF2F584E84B3A49B8E /* PFSubclassing.h in Headers */, - 60235CFEA89AAEDCC92FD14F7B13642E /* PFTaskQueue.h in Headers */, - B012C2B3E0D50B9AB1CDFFCB0E76CA7B /* PFThreadsafety.h in Headers */, - ED7504BB4E39C1BD0DBBC215994E7D77 /* PFURLConstructor.h in Headers */, - FF73BEC217D2099177CEFA7DFEA4A4FD /* PFURLSession.h in Headers */, - A46EEDC8DCA2052DACCF4C8B558ADD01 /* PFURLSession_Private.h in Headers */, - 77894BDDAFFE8441526B64E1BBB856C7 /* PFURLSessionCommandRunner.h in Headers */, - 52D60DFB5AF85D51AE70D3FA3B5F8633 /* PFURLSessionCommandRunner_Private.h in Headers */, - BD4F7DE5F808676F975022B06C963C28 /* PFURLSessionDataTaskDelegate.h in Headers */, - 0CC24C2247F9698B3E15F4CD4A651E9D /* PFURLSessionDataTaskDelegate_Private.h in Headers */, - 67E47244AD75E871069A0531DD9C9608 /* PFURLSessionFileDownloadTaskDelegate.h in Headers */, - CF17EAE278CDD50904A3B07140E9DFD6 /* PFURLSessionJSONDataTaskDelegate.h in Headers */, - 5F7CFB98E474841AFEAC9142671E1607 /* PFURLSessionUploadTaskDelegate.h in Headers */, - 262301EFB0DF84B163076AE6AE233A63 /* PFUser.h in Headers */, - FEEB54C300BDC23661F4B2D1C4BD939C /* PFUserAuthenticationController.h in Headers */, - 1A8275935FF8BACEEA3858BEA3434421 /* PFUserAuthenticationDelegate.h in Headers */, - 49213E71A202E706B4C67562EC826709 /* PFUserConstants.h in Headers */, - CA6093691030EB225102EA5B084B9966 /* PFUserController.h in Headers */, - E99B3AC70816797E71FD03AD9F6ED794 /* PFUserFileCodingLogic.h in Headers */, - 44C1F895434928D4584C6938E69F6D32 /* PFUserPrivate.h in Headers */, - 94D401C18BF19BD75CFAC4BFB763CE7C /* PFUserState.h in Headers */, - A6ADA7DB7955937E81F5AC2A9BB71A46 /* PFUserState_Private.h in Headers */, - 72312D1A5AE5A6C1B984412285CF5E92 /* PFWeakValue.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AF22F1D7166A225277DB625EE4F4D51A /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - EEBA3FE1C7E10F722123D0898B8A3390 /* Chameleon.h in Headers */, - CC3CACD5E552F8287FF72CCEDB01EDE9 /* Chameleon_.h in Headers */, - 2122B48610E7556893633F090FF877DB /* ChameleonConstants.h in Headers */, - D9FA43E9B824136A20E678A3C9CE7507 /* ChameleonEnums.h in Headers */, - A5EC9DBA68F789AE7442C6EA6D182285 /* ChameleonFramework-umbrella.h in Headers */, - 493A39F7AB5CC399A17F93EB112A7C15 /* ChameleonMacros.h in Headers */, - 30EE70080B2F12E67F05AD0CAC186B75 /* NSArray+Chameleon.h in Headers */, - E422151D5688228672DB1F43821D0AB9 /* UIButton+Chameleon.h in Headers */, - C8CCDFB80193D1AC799456689D8B1C55 /* UIColor+Chameleon.h in Headers */, - DDCAA9BE250EAD797FB91253079205E5 /* UIColor+ChameleonPrivate.h in Headers */, - 63FAAFF9D8F289AB5D001057E0A6E0C2 /* UIImage+ChameleonPrivate.h in Headers */, - B8E17F40332B9A8B4AD153AC08C7C60B /* UILabel+Chameleon.h in Headers */, - F3A723074159B52AECB8DB92DCC9068D /* UINavigationController+Chameleon.h in Headers */, - B0647F5D1F335773BA3C155C2FE34280 /* UIView+ChameleonPrivate.h in Headers */, - E15973B7000BAF44794642F5C614DEB2 /* UIViewController+Chameleon.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D6AF2AB76DD4558E64A5D5ECCDC58114 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 2B08FFD13779AF38637AE45D96FC4539 /* ParseUI.h in Headers */, - B4EC18486C52A92FE8E7BD6F5CA0CC07 /* ParseUI-umbrella.h in Headers */, - 44E515AEC571BC7E0022D7EC3E46C355 /* ParseUIConstants.h in Headers */, - EBE6A0A4F9476D021AF772A03BCA694A /* PFActionButton.h in Headers */, - 467950FEB327FA58BF3AB19866202783 /* PFActivityIndicatorCollectionReusableView.h in Headers */, - B2AC279F28767EE398BD6A3187018651 /* PFActivityIndicatorTableViewCell.h in Headers */, - BB197948814E822050EAD045575FA763 /* PFCollectionViewCell.h in Headers */, - F2A824CD4CFB7203FD1871E0F3BE5EBD /* PFColor.h in Headers */, - B82E90F4E6AE4160EAC6E395B4D91A73 /* PFDismissButton.h in Headers */, - 57372144DB1FA2903B634AF173F67242 /* PFImage.h in Headers */, - 54C7D79891D053A424B0DF7E9E73B36A /* PFImageCache.h in Headers */, - 9411A8D1DF493F321B801931CFB501E5 /* PFImageView.h in Headers */, - 112A2B2F920B6739EF4388D9F5F09D1D /* PFLoadingView.h in Headers */, - E2FF904D58EF803363F83C88EFDC1EBC /* PFLocalization.h in Headers */, - D041E5A116E9A902A377085D66C03139 /* PFLogInView.h in Headers */, - 676779CDA73D9EB7101859B2DEFD12C2 /* PFLogInView_Private.h in Headers */, - 1CC6FFF7532AECCB61FF240C59D3748E /* PFLogInViewController.h in Headers */, - 9C13735A4125C01C40EBD9209594EAD7 /* PFPrimaryButton.h in Headers */, - 1723BEF336768A66DA2AF9BCF2BE3BB2 /* PFProductTableViewController.h in Headers */, - E15EBFD04B36AD3E47934A1D0EDE2A76 /* PFPurchaseTableViewCell.h in Headers */, - 0136E37C32D8DE8DF43162608ACD7EF5 /* PFQueryCollectionViewController.h in Headers */, - 31F9A88DA1F14642D4C4092CE9F01590 /* PFQueryTableViewController.h in Headers */, - 303EF0EA5F4EC4173321804ADF5C4A8E /* PFRect.h in Headers */, - 9C0514948A37A2930EC6A3B4F5DF52AE /* PFResources.h in Headers */, - 1A30E79E21EC2187DB34AA1B105B741A /* PFSignUpView.h in Headers */, - 34FB30E858367D47FED90E6B3E4605AA /* PFSignUpViewController.h in Headers */, - 4835ED1722E656D7F6B5E9FD14D4F5DB /* PFTableViewCell.h in Headers */, - 0D7ACCD56C3A035010D6E8DE07225906 /* PFTextButton.h in Headers */, - EE537F59676DDE713D6A023B2C160F03 /* PFTextField.h in Headers */, - C47ED1A4BB88FE7511F228BF5BA3EB4A /* PFUIAlertView.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E697802B9834E2C0A31B1FCFE32EF0C2 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 7E4206E2E57E51D8EDF9E49677C3DA3D /* AFHTTPRequestOperation.h in Headers */, - 714FB212B725F8BDF3683F38B7F6B4CE /* AFHTTPRequestOperationManager.h in Headers */, - 98E9E7DA23152B6ABA2CCE66175BEDA9 /* AFHTTPSessionManager.h in Headers */, - BE32F7A8ED25F80F8FA9558A89EBEAAF /* AFNetworkActivityIndicatorManager.h in Headers */, - 40F68DEA67982D3B13DF8EC32D23C859 /* AFNetworking.h in Headers */, - 4D9D2707B9A1C9724DFCD9D69B993FA1 /* AFNetworking-umbrella.h in Headers */, - A41AA45BCD642898558436AF46D198BC /* AFNetworkReachabilityManager.h in Headers */, - 2921ACB9BA038E23AD06882CA0726C09 /* AFSecurityPolicy.h in Headers */, - 72CEF78CC6C2341AB78EC7ED7A3B2844 /* AFURLConnectionOperation.h in Headers */, - B4FF3032C86287B3EB198AE9902F83A5 /* AFURLRequestSerialization.h in Headers */, - 7FBDBBC09E7D8CE63696847366DCFEE3 /* AFURLResponseSerialization.h in Headers */, - 63B554E188C8F0ECE4E2FE49DC187B71 /* AFURLSessionManager.h in Headers */, - 894AA3587AF5C3A6D545C4A4BA5B58AC /* UIActivityIndicatorView+AFNetworking.h in Headers */, - 313BD1D22D3DE3450A1B4727713A15E9 /* UIAlertView+AFNetworking.h in Headers */, - 6A8840784D210166F0E75E0AF8E413AD /* UIButton+AFNetworking.h in Headers */, - 733D1FF755A7E59F0218E2A9225E9ECA /* UIImage+AFNetworking.h in Headers */, - 96BE3ED0FDDA9CBA6D0DF772A7BA40E0 /* UIImageView+AFNetworking.h in Headers */, - 6DA6530898EC420505935E4CBB869ADB /* UIKit+AFNetworking.h in Headers */, - 0F5680893697DCD762345A72BE90A107 /* UIProgressView+AFNetworking.h in Headers */, - 746B0BD3442F7C333D7F7E2C518E9031 /* UIRefreshControl+AFNetworking.h in Headers */, - 33263E341C1322500C5F2632B22EECA7 /* UIWebView+AFNetworking.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EE9A4A328AE28C4C48EE44FEDF3F76A5 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 33E6684C7788A971BC853F79DFF4CEBB /* BFCancellationToken.h in Headers */, - 3A066B9A2C17944AB5CE63613BCB1EC5 /* BFCancellationTokenRegistration.h in Headers */, - 32C1805D7037A65C326F15AAD4BE4831 /* BFCancellationTokenSource.h in Headers */, - 402896AEC22293D8BCD6860E87020689 /* BFDefines.h in Headers */, - F77A9F2C3BA210256751313BC23B8BAA /* BFExecutor.h in Headers */, - 25716D382DCFCAD7F4D883C97A203B25 /* BFTask.h in Headers */, - DE6FF42AA13354302CCE67FBA5AE3056 /* BFTaskCompletionSource.h in Headers */, - ACA8475381335DA76ADC114838D0274C /* Bolts.h in Headers */, - D2305969E531EBA7A255D3C4302E7665 /* Bolts-umbrella.h in Headers */, - AEDEB8A43CD152EBE7A2E0C3080CE070 /* BoltsVersion.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 0130B3724283586C0E9D2A112D4F2AA1 /* AFNetworking */ = { - isa = PBXNativeTarget; - buildConfigurationList = B61E8ABD6FC78810EA49DC0E9646BF83 /* Build configuration list for PBXNativeTarget "AFNetworking" */; - buildPhases = ( - E697802B9834E2C0A31B1FCFE32EF0C2 /* Headers */, - AA62F81298E1C83BC728A8E7CF9813D0 /* Sources */, - A7595237C8CA923B81E67B2998909D90 /* Frameworks */, - 63178402A1D67B14B2181EFEA0F16079 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = AFNetworking; - productName = AFNetworking; - productReference = A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking */; - productType = "com.apple.product-type.framework"; - }; - 15DDA603BCB24C941C84C97F8CA1B5CD /* Pods-FoodbLog */ = { - isa = PBXNativeTarget; - buildConfigurationList = 525EE82D6B4EC9040F2C31DA0640A839 /* Build configuration list for PBXNativeTarget "Pods-FoodbLog" */; - buildPhases = ( - 869988D1C6EFA80212F480B9CFCD1838 /* Headers */, - B2727A62DF15F2486A82F69C0FF76993 /* Sources */, - 6F507917EE997E5E24E07D04329502F4 /* Frameworks */, - 35631DD03E3A55A28E1A48B10E6E2610 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 26BF577E7B6AB6B8E19156AB9DB4BA52 /* PBXTargetDependency */, - 65F67EB6EC701BCE75030C640F9F851F /* PBXTargetDependency */, - E466FC4A03782CB442B9DB914BBB5B41 /* PBXTargetDependency */, - 2CB5F1640B51D4E4170CF354596B5722 /* PBXTargetDependency */, - 8286090C9B7C7B47BC58A472692A10D1 /* PBXTargetDependency */, - 2805B3CE7B8E2979AA8738EFC581B4EF /* PBXTargetDependency */, - F2A7B5854CB8644CD1E570D37F1A7D83 /* PBXTargetDependency */, - 2796E28D440467C05BA6F4D2A79E232B /* PBXTargetDependency */, - FD01863452BB1B46FA0095C41DE220F5 /* PBXTargetDependency */, - ); - name = "Pods-FoodbLog"; - productName = Pods_FoodbLog; - productReference = DC82E912A46E0D98C54FA4D7AA8638BA /* Pods-FoodbLog */; - productType = "com.apple.product-type.framework"; - }; - 28BFDC89BA4363F4F3576DEC70EE10AE /* ChameleonFramework */ = { - isa = PBXNativeTarget; - buildConfigurationList = D8BDCAEAFB484664860383CA2CC9C8F8 /* Build configuration list for PBXNativeTarget "ChameleonFramework" */; - buildPhases = ( - AF22F1D7166A225277DB625EE4F4D51A /* Headers */, - A0C03453344651888EB8D38AB148EE1B /* Sources */, - 0AF9CF3C76DBE562539FE47E28672C5A /* Frameworks */, - 85F41D0E1F460926708CD57655E560DD /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = ChameleonFramework; - productName = ChameleonFramework; - productReference = 0383903D05EDD5C442C682C1F7A1752D /* ChameleonFramework */; - productType = "com.apple.product-type.framework"; - }; - 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */ = { - isa = PBXNativeTarget; - buildConfigurationList = 51A78600708B12200B7613A059F264AD /* Build configuration list for PBXNativeTarget "SDWebImage" */; - buildPhases = ( - 43FD6D86FE03BF966B0926576933AC19 /* Headers */, - FC1085334AE2AA872DB58D336C4A4D10 /* Sources */, - C76329B6D29A067AF194CAACFB3A8B2D /* Frameworks */, - 85FF02394D29B5E99D9AFD674983AF4A /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SDWebImage; - productName = SDWebImage; - productReference = B0B214D775196BA7CA8E17E53048A493 /* SDWebImage */; - productType = "com.apple.product-type.framework"; - }; - 42465A188431886AB035275F049824D3 /* Bolts */ = { - isa = PBXNativeTarget; - buildConfigurationList = 45D24D7DA9B5391B128D06A688D5FFEB /* Build configuration list for PBXNativeTarget "Bolts" */; - buildPhases = ( - EE9A4A328AE28C4C48EE44FEDF3F76A5 /* Headers */, - D4B1C8AD04AB4A8712EB1F4D16D87BC7 /* Sources */, - E5E0181A204601DE496DB5E7D4ABE0B1 /* Frameworks */, - 47D8DA7F169DE7BD5DBCB36D514E3F59 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Bolts; - productName = Bolts; - productReference = F84B331B5D6AAF1548DD1BB004AE5C2A /* Bolts */; - productType = "com.apple.product-type.framework"; - }; - 7F3FE5658AEC4AF2B296EDA73A218182 /* Parse */ = { - isa = PBXNativeTarget; - buildConfigurationList = 9C523E6143DB0C70A8B0FEB07F0A5E69 /* Build configuration list for PBXNativeTarget "Parse" */; - buildPhases = ( - A87BA2B7FE18D40CF23B2C76BF652F14 /* Headers */, - 0C424E228E54015C4B670D7DFB7DE551 /* Sources */, - 70B9087E2E161834B897DE5A668DCA45 /* Frameworks */, - 282C7AF05E916B37CFB2A9488C1FB05A /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - A6C7988E73C1F39B88F674770DE63408 /* PBXTargetDependency */, - ); - name = Parse; - productName = Parse; - productReference = 0652F2476C7C87C6C0F6CB68072EA25F /* Parse */; - productType = "com.apple.product-type.framework"; - }; - 923099EAAC66CBEDD533E3FE43830166 /* FlatUIKit */ = { - isa = PBXNativeTarget; - buildConfigurationList = 572543452275637D1FC81DC359D9A50C /* Build configuration list for PBXNativeTarget "FlatUIKit" */; - buildPhases = ( - 28FAD78D380E7661ADD03202D7BBA130 /* Headers */, - 1E97850B772151D7BBBEBFF2E00258F4 /* Sources */, - 5C1186D4F3AA17F08B0E5E18291421B4 /* Frameworks */, - 1111E8A55D0DF9305BDD4D19A219D814 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FlatUIKit; - productName = FlatUIKit; - productReference = BCF2FF91155574F810AA6ADB7F19CC31 /* FlatUIKit */; - productType = "com.apple.product-type.framework"; - }; - 96F971576D7B3914510B0B2FB38F43A2 /* ParseUI */ = { - isa = PBXNativeTarget; - buildConfigurationList = 225DCE9719E06BEB65BC55637D5998C0 /* Build configuration list for PBXNativeTarget "ParseUI" */; - buildPhases = ( - D6AF2AB76DD4558E64A5D5ECCDC58114 /* Headers */, - 49D6EB242F9E9605EEC5CC9C048B0190 /* Sources */, - 4391EAF3DDC2963B7871286D3F9D9614 /* Frameworks */, - 593F70588ECEAAB42FA1D6F7FD4CA1F3 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 6CB9C230B737011EF57D334F2EA7B206 /* PBXTargetDependency */, - D83A001559C85060CAF0B02C23E211DB /* PBXTargetDependency */, - ); - name = ParseUI; - productName = ParseUI; - productReference = 062054FC97AAAB3D2F4AB253A7CDE385 /* ParseUI */; - productType = "com.apple.product-type.framework"; - }; - DD9AC66E330E40497F19A867C63FBAAA /* Unirest */ = { - isa = PBXNativeTarget; - buildConfigurationList = EA7ABE50FB6EA7A4A6CAA4A5C5380BD6 /* Build configuration list for PBXNativeTarget "Unirest" */; - buildPhases = ( - 324720C9A5939C3ABB4CCF923B4D2735 /* Headers */, - 90E8C54D0CE7627A9E9FA12FB6859335 /* Copy . Public Headers */, - AC965A15FD8A8C4AF6FC3464500E5A12 /* Copy HttpRequest Public Headers */, - 4C463E297FC3B0D0A43041080634DD7C /* Copy HttpResponse Public Headers */, - 1E87252F689F2AC232EF6B3E48BFF1C2 /* Sources */, - 535965DE03A38610A3DF44D409F1BDF8 /* Frameworks */, - 1E287E392C1AD3AF02DE35029F5E1FC5 /* Resources */, - 7CE68911DB9A1FB1E22FA541A710F780 /* Create Symlinks to Header Folders */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Unirest; - productName = Unirest; - productReference = D6CC7CC57AD4796048E05E9C30825826 /* Unirest */; - productType = "com.apple.product-type.framework"; - }; - FBA456CB50E371584C11231929A0971E /* IQKeyboardManager */ = { - isa = PBXNativeTarget; - buildConfigurationList = DBB7F00CC890AE3895D236A12C324870 /* Build configuration list for PBXNativeTarget "IQKeyboardManager" */; - buildPhases = ( - 3D06C26E89812FB5A93DD6138024C08C /* Headers */, - FC82330E982EC0FB6691A0ADFAB122E5 /* Sources */, - 1ACEAF5CB53FDEBADFADE9621F25DB2B /* Frameworks */, - FF40B8A71F1A94BD6D0340E8636CFA7C /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = IQKeyboardManager; - productName = IQKeyboardManager; - productReference = 98527D7196957AAB07B79E2E2AFDE23E /* IQKeyboardManager */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - BFDFE7DC352907FC980B868725387E98 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1300; - LastUpgradeCheck = 1300; - }; - buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - Base, - en, - fr, - "pt-BR", - ); - mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = ACE7852A20DA825AE217649C3D71EFB7 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 0130B3724283586C0E9D2A112D4F2AA1 /* AFNetworking */, - 42465A188431886AB035275F049824D3 /* Bolts */, - 28BFDC89BA4363F4F3576DEC70EE10AE /* ChameleonFramework */, - 923099EAAC66CBEDD533E3FE43830166 /* FlatUIKit */, - FBA456CB50E371584C11231929A0971E /* IQKeyboardManager */, - 7F3FE5658AEC4AF2B296EDA73A218182 /* Parse */, - 96F971576D7B3914510B0B2FB38F43A2 /* ParseUI */, - 15DDA603BCB24C941C84C97F8CA1B5CD /* Pods-FoodbLog */, - 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */, - DD9AC66E330E40497F19A867C63FBAAA /* Unirest */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 1111E8A55D0DF9305BDD4D19A219D814 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 12818D0029FE4E7608CDA06B0E38E47D /* flat-ui-icons-regular.ttf in Resources */, - 9835F5DE63612AE5CB247BEDF9F6BAD9 /* Lato-Bold.ttf in Resources */, - 91D1F2E5F9AECFF5785A6814972F9054 /* Lato-Italic.ttf in Resources */, - 881CD8405ABE6BEFB471F1622F70BC8D /* Lato-Light.ttf in Resources */, - 646E86EA149691E2A103AABC8ED83B3E /* Lato-Regular.ttf in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1E287E392C1AD3AF02DE35029F5E1FC5 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 282C7AF05E916B37CFB2A9488C1FB05A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 96E3D29B214EBF429C504C8CA55D1B9F /* en.lproj in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 35631DD03E3A55A28E1A48B10E6E2610 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 47D8DA7F169DE7BD5DBCB36D514E3F59 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 593F70588ECEAAB42FA1D6F7FD4CA1F3 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2FFABE52A081FE4BE451A2B1F06E2149 /* en.lproj in Resources */, - 23852A0A5F7CE41D512D4613ECBD39DA /* fr.lproj in Resources */, - 6C9D9AB66755FD1D4F7DA70220CAE7DA /* pt-BR.lproj in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 63178402A1D67B14B2181EFEA0F16079 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 85F41D0E1F460926708CD57655E560DD /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 85FF02394D29B5E99D9AFD674983AF4A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FF40B8A71F1A94BD6D0340E8636CFA7C /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B2F43ACBCFE5596CE46D95C7AA1399D1 /* IQKeyboardManager.bundle in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 7CE68911DB9A1FB1E22FA541A710F780 /* Create Symlinks to Header Folders */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "Create Symlinks to Header Folders"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "cd \"$CONFIGURATION_BUILD_DIR/$WRAPPER_NAME\" || exit 1\nif [ ! -d Versions ]; then\n # Not a versioned framework, so no need to do anything\n exit 0\nfi\n\npublic_path=\"${PUBLIC_HEADERS_FOLDER_PATH#$CONTENTS_FOLDER_PATH/}\"\nif [ ! -f \"$public_path\" ]; then\n ln -fs \"${PUBLIC_HEADERS_FOLDER_PATH#$WRAPPER_NAME/}\" \"$public_path\"\nfi\n\nprivate_path=\"${PRIVATE_HEADERS_FOLDER_PATH#$CONTENTS_FOLDER_PATH/}\"\nif [ ! -f \"$private_path\" ]; then\n ln -fs \"${PRIVATE_HEADERS_FOLDER_PATH#$WRAPPER_NAME/}\" \"$private_path\"\nfi\n"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 0C424E228E54015C4B670D7DFB7DE551 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AA1026B1D369DE93692B71C618D3A82A /* BFTask+Private.m in Sources */, - 6AEE6C668ADED265E5073A0C10F14DEA /* Parse.m in Sources */, - 684E3449A728EFEBE2160ED5F8E37900 /* Parse-dummy.m in Sources */, - 66DB7FE778575C04997A47CE9AA4C978 /* ParseManager.m in Sources */, - 98DA10F38127EB1D4AFF2BDB077F68B7 /* ParseModule.m in Sources */, - 05896B286C7BD0C5F16B9AFE7857FAC4 /* PFACL.m in Sources */, - C5BDF2C3F576679C66B34129891D1919 /* PFACLState.m in Sources */, - AB7A59AE59C71EE96481D322D85D64F8 /* PFAlertView.m in Sources */, - 4BAD01BECD8E7D90990BF6B30EAC04C3 /* PFAnalytics.m in Sources */, - 965E194205240C804A5CC4E09422F906 /* PFAnalyticsController.m in Sources */, - 67E9AAA2DF855990B53C8E37179D1B08 /* PFAnalyticsUtilities.m in Sources */, - D1BB40613CBDD8C6DAA7812E7FFFF26C /* PFAnonymousAuthenticationProvider.m in Sources */, - D2FE57DEAD266E99D8CDBD42BC46CA3F /* PFAnonymousUtils.m in Sources */, - C1FCB24C1B387306C08722AD05271F71 /* PFApplication.m in Sources */, - 700F5568DDA1E624C522F380B8738A42 /* PFAsyncTaskQueue.m in Sources */, - F59673E41BF429818335D4E6BA080037 /* PFBase64Encoder.m in Sources */, - 3F2C1610BA5B0F27BAB9D3067AC8FB30 /* PFBaseState.m in Sources */, - DF088B8852C119D2181A3D18888CA8D2 /* PFCachedQueryController.m in Sources */, - 31C43362935AD5BBD696F7FAA1492DD0 /* PFCategoryLoader.m in Sources */, - 808F096E62506786671896B6BE8FC00E /* PFCloud.m in Sources */, - 94A9BD60599FB2C2AA2B0AB35934B758 /* PFCloudCodeController.m in Sources */, - D80843081D15837B4B5C8D66D2A8036D /* PFCommandCache.m in Sources */, - F4A3C9920EDEA3E824FE7C0843DD52CE /* PFCommandResult.m in Sources */, - 91F72E1C525A78F015595B286044D120 /* PFCommandRunning.m in Sources */, - 8F498BF52B76ACF30337C019FF3B30EC /* PFCommandRunningConstants.m in Sources */, - 456125DA576BBA0E50106E319FF73A44 /* PFCommandURLRequestConstructor.m in Sources */, - 170B81C1284725FB6076446FABCCDFE3 /* PFConfig.m in Sources */, - 85A58BD000E6A4ADF674465A45C88D41 /* PFConfigController.m in Sources */, - F3208A893E46B96AEB700BA316A28496 /* PFConstants.m in Sources */, - C7526D6608B593099FEC8D0896359897 /* PFCoreManager.m in Sources */, - B84EC5076309422B9A2C7A55CDABF5EB /* PFCurrentConfigController.m in Sources */, - A75ECFAB2C512E4E952D146A0B14729E /* PFCurrentInstallationController.m in Sources */, - A83FB900F4477F11C2DCD7F8B69209B3 /* PFCurrentUserController.m in Sources */, - 8F6BC9571604760D4F4E1AAA4105F39A /* PFDateFormatter.m in Sources */, - D912EE794EA43F144E2BFDB5E306D3BC /* PFDecoder.m in Sources */, - 34A10781FF0D6156B2F0E33BB5DF0224 /* PFDefaultACLController.m in Sources */, - 4FB349659BB29F142EB4C5A11CF8D33E /* PFDevice.m in Sources */, - 34282579CDF97D7263F08A2B79AF81D6 /* PFEncoder.m in Sources */, - 71535E3B142F488A3F510A0A2D854A26 /* PFErrorUtilities.m in Sources */, - 3E3D4C3FBC3D5752FB6F7D8CEC6DD58C /* PFEventuallyPin.m in Sources */, - 896FD5D0C72F697DF9C5D17F7B529E61 /* PFEventuallyQueue.m in Sources */, - EBAD17678C41DA0FC100BAF0C597CF1D /* PFFieldOperation.m in Sources */, - E3DE284C9F31AEA272123577A8454947 /* PFFieldOperationDecoder.m in Sources */, - FBF3606D5AA052B28AAF18AFA1F6F5E1 /* PFFile.m in Sources */, - 525611A9C3408922BB8EB81692E6D161 /* PFFileController.m in Sources */, - 064CF6A1C6BD102075020713D14FB109 /* PFFileDataStream.m in Sources */, - D079F0D0F75347213786652AF578F521 /* PFFileManager.m in Sources */, - F0FBC0D30A36AD2329B48A43A17C4F73 /* PFFileStagingController.m in Sources */, - B2471816ECEF65C1A92D0AC65357602B /* PFFileState.m in Sources */, - 79E30128DA0EB3E973E7089926A04270 /* PFGeoPoint.m in Sources */, - 0C90ECF0F1EE859A59AFA69F87780746 /* PFHash.m in Sources */, - 74942D131A05E345D9BC3D47F8487C58 /* PFHTTPURLRequestConstructor.m in Sources */, - 7715B49F4FD719BFF228560746AC6F96 /* PFInstallation.m in Sources */, - BC5EB4978A6158F54C41E94D40FB3A40 /* PFInstallationConstants.m in Sources */, - D89C08E3CB7C04D6DCC8D18E7149069E /* PFInstallationController.m in Sources */, - ED29E4C820CC9842AAD8DC8AD8DE1B7C /* PFInstallationIdentifierStore.m in Sources */, - 9BC741341F7A3E9797DA6EB1C47662E1 /* PFInternalUtils.m in Sources */, - 09AD6095076F77A17AF15C8FA5DADC7A /* PFJSONSerialization.m in Sources */, - FD18EFB419117DE421FCB38ACF9151AF /* PFKeychainStore.m in Sources */, - B5A306F6D83114B15C2C3A82F443F112 /* PFKeyValueCache.m in Sources */, - 69F700981DD5FE492C5E69C0AAD478C3 /* PFLocationManager.m in Sources */, - 78CCEA1A83DC9E7EFD3198F14D7AB289 /* PFLogger.m in Sources */, - 75DFF5A155538F100BE6FD0AEF6B2EEF /* PFMulticastDelegate.m in Sources */, - C22ECBA602D338BD6C554258C6C80DAB /* PFMultiProcessFileLock.m in Sources */, - DF5C7E7715762DEE188F738217816938 /* PFMultiProcessFileLockController.m in Sources */, - 466DA06DD6F7E087A1C72AA91896B56C /* PFMutableACLState.m in Sources */, - 278C6EAEEE0A5BF8D626590F9CE97ACD /* PFMutableFileState.m in Sources */, - 535123250BC23D2854597629C68EF4F1 /* PFMutableObjectState.m in Sources */, - 962F75F303F57D0673BD35FE3835415A /* PFMutablePushState.m in Sources */, - A386DD98979FC8C7E89C0C04EAA0FCF7 /* PFMutableQueryState.m in Sources */, - 9A93633A0CB818C83EC1FC7B7662BB75 /* PFMutableRelationState.m in Sources */, - 9310D82E97611942915A3940EC448CB4 /* PFMutableUserState.m in Sources */, - 30363108F907B435D4933CECA8A71F1C /* PFNetworkActivityIndicatorManager.m in Sources */, - 9F17CC9DD4071EB42DA080EF5B2905EC /* PFObject.m in Sources */, - F66FB96E58063242636624CC93CB1481 /* PFObjectBatchController.m in Sources */, - FEACB369279A460ECFC54C005A741AE0 /* PFObjectConstants.m in Sources */, - C590E355367085B3F71811AD1D8AE9BC /* PFObjectController.m in Sources */, - 16CFA704931431EC2146912A493064F2 /* PFObjectEstimatedData.m in Sources */, - 3365FAB014526B23559C5872E3437594 /* PFObjectFileCoder.m in Sources */, - AD1CB3E55033674B9517582A59A1E2AC /* PFObjectFileCodingLogic.m in Sources */, - A7FDEA1C1A76CA8E5DF230F4BA31677D /* PFObjectFilePersistenceController.m in Sources */, - C9780FA67E5B8C292063A552C855FB90 /* PFObjectLocalIdStore.m in Sources */, - FFDEA159E9BE6B9B53FB5726020990FE /* PFObjectState.m in Sources */, - 6DDD9E6F6119619D1120F3D382CA208A /* PFObjectSubclassInfo.m in Sources */, - D08EE9C2CF0357A7FD1D76F9B93776C4 /* PFObjectSubclassingController.m in Sources */, - CE68EA7C522F468D775F060CAF3E705D /* PFObjectUtilities.m in Sources */, - 3DBB6503CA0A6A4010CBF5811D2EF6A0 /* PFOfflineObjectController.m in Sources */, - 15821E308FD874609FFFE7B07AA7BEE9 /* PFOfflineQueryController.m in Sources */, - 6A8962718D8E9D7C66B2D3013F40D5C0 /* PFOfflineQueryLogic.m in Sources */, - E94EE26A559D916232409D3B78C1330C /* PFOfflineStore.m in Sources */, - 76F0ADD573F39F6C2E6AA583EE3E28AD /* PFOperationSet.m in Sources */, - 5BE7BF61E2C24AFF20EE09847B3462AA /* PFPaymentTransactionObserver.m in Sources */, - E8E206B9EEE20D20F0D9BEFE46B653D1 /* PFPin.m in Sources */, - F8CAF02F1E612CEFB2AB6C3B731ADA87 /* PFPinningEventuallyQueue.m in Sources */, - 7B1AC5CBBF99FE9A4DF4918085F741E7 /* PFPinningObjectStore.m in Sources */, - 70AF59761E0C2A4A726B6E59FEE3CC24 /* PFProduct.m in Sources */, - B7189A5111E54D1C0475383753974988 /* PFProductsRequestHandler.m in Sources */, - 59E5D1E2428A166DDC257FAF4FB9F9C3 /* PFPropertyInfo.m in Sources */, - A53F8B0DE57890778BFB311DF00E862B /* PFPropertyInfo_Runtime.m in Sources */, - BDF6A32A836F3709640D087117D096FE /* PFPurchase.m in Sources */, - 940E81601DA01C64F91AF1BAFE5D84AC /* PFPurchaseController.m in Sources */, - 9E95E582F430EE008AD319FBD4D2F352 /* PFPush.m in Sources */, - AF9A03B5B4E1AFB497391551CFB9EBA4 /* PFPushChannelsController.m in Sources */, - 50696775E4E363709DA7C32DDE26C749 /* PFPushController.m in Sources */, - 9CB57B8503F184A68E407640D207ADAC /* PFPushManager.m in Sources */, - 523D7711F694B582C1B3E89E912DF6B3 /* PFPushState.m in Sources */, - D880721F15CF00B4947F68BBDAE3BC19 /* PFPushUtilities.m in Sources */, - 91752E5ED76E71C38BC521664A4FD5B6 /* PFQuery.m in Sources */, - DEF9DDF8C9F9606CCDB79286AE41A95F /* PFQueryController.m in Sources */, - 831065AD23377EF92A22E15118931DED /* PFQueryState.m in Sources */, - FED8724CB7E797F857A8B6954F9672F7 /* PFQueryUtilities.m in Sources */, - B0B5582F003288C5C96AFA142471D43D /* PFReachability.m in Sources */, - 96AF27C042B48DFA54ACF2FAADFA773D /* PFRelation.m in Sources */, - A0D8132A74C3DD45A066B66B96872A8D /* PFRelationState.m in Sources */, - 1D4F83C8E6A5CCD96E035DF6E03A7C58 /* PFRESTAnalyticsCommand.m in Sources */, - 2644C9F43A44BDE784C59C428084FC25 /* PFRESTCloudCommand.m in Sources */, - F31306E41FB51E5765D496D169EA1C87 /* PFRESTCommand.m in Sources */, - 4777B57796CCF2501C8E4035ABC45459 /* PFRESTConfigCommand.m in Sources */, - 0354AEA3E753D30AE8E6B94A701A1A90 /* PFRESTFileCommand.m in Sources */, - A0345C0C15762A801A8E2CAD19B637F3 /* PFRESTObjectBatchCommand.m in Sources */, - C2678B91068F7931D5742BEB0AE154FF /* PFRESTObjectCommand.m in Sources */, - 0FA4BDB376E469CB553E01E199BBB63A /* PFRESTPushCommand.m in Sources */, - A271CE741A0CB0405BBE24DEC09F7ADB /* PFRESTQueryCommand.m in Sources */, - F83A166A204E7F70BAABFD2E4CA21FC7 /* PFRESTSessionCommand.m in Sources */, - 04BE8237D681A07B607B091DCB0FCE6A /* PFRESTUserCommand.m in Sources */, - BC69C3F29FE101D4247B541115AB8848 /* PFRole.m in Sources */, - 5A25D889204C1D0838E27A486CEE76AA /* PFSession.m in Sources */, - 16ADBCAD54B5CF1F3995F1AF0154F67B /* PFSessionController.m in Sources */, - F7A4DCF50AE508452A448EA22797EEBB /* PFSessionUtilities.m in Sources */, - DAAD175EBECAE7AF5296008E30760A93 /* PFSQLiteDatabase.m in Sources */, - 848290264E2010E537F5B77148DD4D32 /* PFSQLiteDatabaseController.m in Sources */, - 2DE51A8444F0CEE2BEA32BBE1D5A2C54 /* PFSQLiteDatabaseResult.m in Sources */, - 625FF9AE4686AEA4FDCDA12811832704 /* PFSQLiteStatement.m in Sources */, - E31DB9FC1B6D203D4C442A4E001AA9F8 /* PFTaskQueue.m in Sources */, - F257CA05C061D91DBF8FF42DF83ACB48 /* PFThreadsafety.m in Sources */, - 97DAA182EA0457ECE6DF454FDFB50E71 /* PFURLConstructor.m in Sources */, - 1B3EB346D29198E022DC233258C133B7 /* PFURLSession.m in Sources */, - FF4D68C2DEC5B1C462849F1F5EC83C76 /* PFURLSessionCommandRunner.m in Sources */, - 448ED42670A895C7549BEB4765047AB3 /* PFURLSessionDataTaskDelegate.m in Sources */, - D1816449E827B54FC644A5285C5E79E7 /* PFURLSessionFileDownloadTaskDelegate.m in Sources */, - 457A1B73EB100DB2139DCBA29A6DB28A /* PFURLSessionJSONDataTaskDelegate.m in Sources */, - 3A83FC797677226A54553528FDC17526 /* PFURLSessionUploadTaskDelegate.m in Sources */, - A2245AAA5B2933D9DF90599CF9F14F1E /* PFUser.m in Sources */, - 73530A369BC0C71417737C7732EE4BE5 /* PFUserAuthenticationController.m in Sources */, - 53CB0FAB7D337B035394604A48E7A357 /* PFUserConstants.m in Sources */, - 16B523016828FB603F9E4D9DB07CD7AF /* PFUserController.m in Sources */, - 1EA53431B0411D64E969C75020D2253D /* PFUserFileCodingLogic.m in Sources */, - 192494CAD9AAE36D9D54BE9950D74FA4 /* PFUserState.m in Sources */, - 9566EE1DC82CDB9049D8D21CB842C386 /* PFWeakValue.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1E87252F689F2AC232EF6B3E48BFF1C2 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F33EECCDE7368710D4AB061B4D4EF441 /* Base64.m in Sources */, - B8184053368C7A9E1DC9520118C1E928 /* UNIBaseRequest.m in Sources */, - F4259C77CC1398618A0AB193BD065D6D /* UNIBodyRequest.m in Sources */, - 354857C6F33F12FCA2CFDB52898A2255 /* UNIHTTPBinaryResponse.m in Sources */, - AE6DA539CD6C6FFEFEB1CA40BF9998CE /* UNIHTTPClientHelper.m in Sources */, - 49DF183B1AF52E821ED5A77B97CF6DCB /* UNIHTTPJsonResponse.m in Sources */, - DC7BA7D1F02949DCEE942B23DFEEC45E /* UNIHTTPRequest.m in Sources */, - 8F43E873C338BF50D7914531236AAEDB /* UNIHTTPRequestWithBody.m in Sources */, - 1FC72C12CFE43E264EA429E7DB7C7787 /* UNIHTTPResponse.m in Sources */, - 5E13FE4DEC63873FCFEE5E3F62CF76B3 /* UNIHTTPStringResponse.m in Sources */, - 81CD1C3D3AEE6561FC8B25231388EDBA /* UNIJsonNode.m in Sources */, - E32B12CDAA8A832881EA08013F74B10A /* UNIRest.m in Sources */, - E94EB5FE3AAD983E3DEC7DC48A2A91A7 /* Unirest-dummy.m in Sources */, - B471B47E09E3665845AC1C686A63D6B0 /* UNISimpleRequest.m in Sources */, - BE7B9DCC1918965D09FCB459C6908AFF /* UNIUrlConnection.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1E97850B772151D7BBBEBFF2E00258F4 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 73468106D270D5373F13A88722F0F42B /* FlatUIKit-dummy.m in Sources */, - B535D14A88056AFF1A1B7CB70B9664B2 /* FUIAlertView.m in Sources */, - B69EFF69C1045685D6C9529BB5D56453 /* FUIButton.m in Sources */, - 8E3CAFDA290A60D8B3A289E6DAD97C53 /* FUICellBackgroundView.m in Sources */, - 3BC2F4893F897433C613EEEE5EE935A2 /* FUIPopoverBackgroundView.m in Sources */, - 04DBFADECB060B72536903FAD0684BBE /* FUISegmentedControl.m in Sources */, - F35BD45463573B117E40D3CAEEF20AC4 /* FUISwitch.m in Sources */, - 8FAC5B4DDD700682A6B3A9167F863290 /* FUITextField.m in Sources */, - F668EAE6CBB9ADC856DF7885478C3693 /* NSString+Icons.m in Sources */, - AD07E8D874E4871FF64FA7BDF298C678 /* UIBarButtonItem+FlatUI.m in Sources */, - F6CD1E97BE26915E38C4670CEB95CFAE /* UIColor+FlatUI.m in Sources */, - 58A62415FFD7B1782701548E67E4E8D0 /* UIFont+FlatUI.m in Sources */, - 63972B7F495EB80B6B9A732BCFFC62D0 /* UIImage+FlatUI.m in Sources */, - 4017F157B6276B31A37E281C033F7D41 /* UINavigationBar+FlatUI.m in Sources */, - 1EBA3D2F590571ADD7C4824FD35C6CD2 /* UIPopoverController+FlatUI.m in Sources */, - 5E1DA51B25F43C73FAEC3F35A34CF6D7 /* UIProgressView+FlatUI.m in Sources */, - 2D88653DF74717862CA3930405E6B1A6 /* UISlider+FlatUI.m in Sources */, - F5BA0DBEDD8F1AE74F6BF8E3AF1034EC /* UIStepper+FlatUI.m in Sources */, - 1B7B817BF37A32BD3EC434F3C36C4764 /* UITabBar+FlatUI.m in Sources */, - 80E0DE86061F5656E6CE5D4D06A38853 /* UITableViewCell+FlatUI.m in Sources */, - BD2D9BCFDCA527EA0CEBA86E82943CE0 /* UIToolbar+FlatUI.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 49D6EB242F9E9605EEC5CC9C048B0190 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 7879E7CFEED86DB1E505DC098A9897C6 /* ParseUI-dummy.m in Sources */, - 0925FC3D640ECBAF8B8D0AA184F95BEF /* PFActionButton.m in Sources */, - F816F1EB5E6293AEB6C05213922DD332 /* PFActivityIndicatorCollectionReusableView.m in Sources */, - D79592AB3645A0C669F9F71022E80008 /* PFActivityIndicatorTableViewCell.m in Sources */, - FA71321B6035542D5D30B828DB77FB8C /* PFCollectionViewCell.m in Sources */, - 1891EB569E88E565A1387A243A000F4A /* PFColor.m in Sources */, - D62B907A64D301A42B3CE20A27B9DD20 /* PFDismissButton.m in Sources */, - 244DC49E1540D69F3CF41F9E39418FD4 /* PFImage.m in Sources */, - DE0A0C5803FF6B8465951B95A6EE1AF8 /* PFImageCache.m in Sources */, - 881A85BA5B670D61BFD52254E3C8239C /* PFImageView.m in Sources */, - 049FE09CD66461A8ABBDCD0F41EA4532 /* PFLoadingView.m in Sources */, - 196100D6BA1B2CA2FC16F09196B9F48C /* PFLogInView.m in Sources */, - 8F17B1B66C878E45560A44574817D6E1 /* PFLogInViewController.m in Sources */, - 0BFBDC63C826F1DAD4758E0549141BE7 /* PFPrimaryButton.m in Sources */, - 8ACA8ACCF631EB59400D1E29CE40C30A /* PFProductTableViewController.m in Sources */, - A652CE778B758C13386CAA2CE8285644 /* PFPurchaseTableViewCell.m in Sources */, - 661AE9E6CC11D489ACDAA85361690949 /* PFQueryCollectionViewController.m in Sources */, - B90CAC2F3B9B544961A70A906B16CC1C /* PFQueryTableViewController.m in Sources */, - 9F3D52953CC0694BC6FDE81CD221A27C /* PFRect.m in Sources */, - 91498D9A5A6A6D196994EF09622612CF /* PFResources.m in Sources */, - 265EC3AA4B084F65A25382B691F9B3A7 /* PFSignUpView.m in Sources */, - AF27938E3A4D924379F07AD58990CC7F /* PFSignUpViewController.m in Sources */, - 1BE7576A9CF85332BF9CE0A20A4654FE /* PFTableViewCell.m in Sources */, - 424186E1571F6A9EA76817C716384271 /* PFTextButton.m in Sources */, - 8AF62FF179A471E00F0F81C59A82DFD2 /* PFTextField.m in Sources */, - F58ECDD2CAFE685F6DACB73F5451956A /* PFUIAlertView.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A0C03453344651888EB8D38AB148EE1B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - E67A6D29E52E288E8B60D39C878CF960 /* Chameleon_.m in Sources */, - D03E2E09CD4A257BF7CF59BC14F39774 /* ChameleonConstants.m in Sources */, - 525727E37B9DFED1CD3A18CFF752383C /* ChameleonFramework-dummy.m in Sources */, - 390E4C4935A539E3C35633049F4C4C0D /* NSArray+Chameleon.m in Sources */, - 0871B276C9E86024967A75834BF8BA6A /* UIButton+Chameleon.m in Sources */, - F05460F7ED57F04C670F8CF2A121BFD7 /* UIColor+Chameleon.m in Sources */, - 1443D972565FC29DF40A16022899A59D /* UIColor+ChameleonPrivate.m in Sources */, - 5630A2F69424A9E46E93DE4E4407AE1C /* UIImage+ChameleonPrivate.m in Sources */, - FB47B2B3700081A29B32CAB0B8361303 /* UILabel+Chameleon.m in Sources */, - FDCA64A498A1F1C61C0DE0342920FDB6 /* UINavigationController+Chameleon.m in Sources */, - 79D915DCC0E57B431C2DB968A7BB6674 /* UIView+ChameleonPrivate.m in Sources */, - 4CAADF796B7A0A57121A9E3C287127C5 /* UIViewController+Chameleon.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AA62F81298E1C83BC728A8E7CF9813D0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 056DDAB5F33D617C977BAE5F25ECD98C /* AFHTTPRequestOperation.m in Sources */, - DEEA2648058B3E6F40892B4E254501F9 /* AFHTTPRequestOperationManager.m in Sources */, - B97B1932591A9DC33101F6DC39CACFA0 /* AFHTTPSessionManager.m in Sources */, - 1F74418A1A844AD6F2D0BE55DB5A565B /* AFNetworkActivityIndicatorManager.m in Sources */, - 57595893801E77A08FC28462EA856C40 /* AFNetworking-dummy.m in Sources */, - 97328A6D629EDD7889FB3194C26619E4 /* AFNetworkReachabilityManager.m in Sources */, - 499795646572C0F4982F952399B79430 /* AFSecurityPolicy.m in Sources */, - 6195644CA3E3419A95951B95B12769B1 /* AFURLConnectionOperation.m in Sources */, - E11377D77F494E8D27302892123A6C88 /* AFURLRequestSerialization.m in Sources */, - 1A18FCCEB1D3BF943E9E049EC19EA46D /* AFURLResponseSerialization.m in Sources */, - 4E149934317AEC01048B753730F6EA9F /* AFURLSessionManager.m in Sources */, - 0FF92B7CA2702E3FB545DBC76EB8F7DD /* UIActivityIndicatorView+AFNetworking.m in Sources */, - CF20CC7E23BD16017EB85C1F6D100F8A /* UIAlertView+AFNetworking.m in Sources */, - 43F3A74CC45BE08D52C8BCDC56F58617 /* UIButton+AFNetworking.m in Sources */, - 7F514C48A1433CC4E7666EED8526EB82 /* UIImageView+AFNetworking.m in Sources */, - B67A0B1855A78C232CA8CA4193480797 /* UIProgressView+AFNetworking.m in Sources */, - 37A3F447E3723760E69C1AC533341CF4 /* UIRefreshControl+AFNetworking.m in Sources */, - 53EC95B96212B86A7482BE9466EB41BF /* UIWebView+AFNetworking.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B2727A62DF15F2486A82F69C0FF76993 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - E187E8D8CF825E41E24E4ECF043D165B /* Pods-FoodbLog-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D4B1C8AD04AB4A8712EB1F4D16D87BC7 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 09292E938D63ED03EE26FFF12249BDD0 /* BFCancellationToken.m in Sources */, - 03FDAA175EB6B999D72B4EB88E67B03E /* BFCancellationTokenRegistration.m in Sources */, - B6D5E48011E309C95B0D178AF8AA0494 /* BFCancellationTokenSource.m in Sources */, - 8D7B15921E081CC2B3191D35B5C4CEAF /* BFExecutor.m in Sources */, - 6CE0BDF4BC45D85351D65C54058ADCA8 /* BFTask.m in Sources */, - 8F8BD8F9E8C2408792AE189075B4B7BC /* BFTaskCompletionSource.m in Sources */, - 09FDD64FF016A46433ABC8E1A95CE5B6 /* Bolts.m in Sources */, - E9157D80838E300F27801069DA1BF917 /* Bolts-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FC1085334AE2AA872DB58D336C4A4D10 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B3F2988C9D5F3C144651BF0A698F6394 /* NSData+ImageContentType.m in Sources */, - 79227FA8FC3B6B7EA7D79083B641E36C /* SDImageCache.m in Sources */, - 16C9563FC522AFCBB4B9593E72899D21 /* SDWebImage-dummy.m in Sources */, - 63C8A6145BA13CC1357BACF7619571A9 /* SDWebImageCompat.m in Sources */, - 46A85D0B3E105715569CB1BC5C7C88C8 /* SDWebImageDecoder.m in Sources */, - 5CCE8599A31182489B7556A9A94C0CE7 /* SDWebImageDownloader.m in Sources */, - 4D78D87B1BB66CD942A878041185C7C0 /* SDWebImageDownloaderOperation.m in Sources */, - 21486DFB5F9A1C12F5615840459CF0E1 /* SDWebImageManager.m in Sources */, - 6117F0C2CD693D1223FF88671015CE8B /* SDWebImagePrefetcher.m in Sources */, - 7B7E112AD433BAF56C889FF2C8D8828F /* UIButton+WebCache.m in Sources */, - C1A609EC0AACF147369E9433683D4C1D /* UIImage+GIF.m in Sources */, - CF023CFF89B2E017CC525D92766B31C5 /* UIImage+MultiFormat.m in Sources */, - DF3181F400F49532145EAF90931261AB /* UIImageView+HighlightedWebCache.m in Sources */, - 244941FCFAF0AF23318B474B95FDC752 /* UIImageView+WebCache.m in Sources */, - AA217B621ABD283FBA8020E902BB96AD /* UIView+WebCacheOperation.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FC82330E982EC0FB6691A0ADFAB122E5 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CC1B6334BB55493205C13E94D92F3421 /* IQBarButtonItem.m in Sources */, - 4F8534F0CB4CD037ACE1B5BF6460999D /* IQKeyboardManager.m in Sources */, - D17AEA993640DA0427EAEEEBF50DA02F /* IQKeyboardManager-dummy.m in Sources */, - 50C18B976C17A2FBB0886EA75DF5BAAA /* IQKeyboardReturnKeyHandler.m in Sources */, - B5D2DB65CD96809A3E305A54A7A9D2D4 /* IQNSArray+Sort.m in Sources */, - 2FCE284E00285EE0D6C39B4039CD0621 /* IQPreviousNextView.m in Sources */, - 99BD144694112221EBA83A41C8D34F77 /* IQTextView.m in Sources */, - 40EE14623331B78066A61917BB957969 /* IQTitleBarButtonItem.m in Sources */, - 20E7C991D833842AC8BD7B3F676A5CCE /* IQToolbar.m in Sources */, - 519234A19A528D630BC6A20215E7B467 /* IQUIScrollView+Additions.m in Sources */, - 0918720A79F5B3CE0D7CCB713DCD4F16 /* IQUITextFieldView+Additions.m in Sources */, - CAC05D738F63DFDB78C95C9EE1E6FC8C /* IQUIView+Hierarchy.m in Sources */, - A8689F6902D3755B75C02E5ED73DD9DD /* IQUIView+IQKeyboardToolbar.m in Sources */, - 0D433D2B67E6C443BD7CE63B01107D09 /* IQUIViewController+Additions.m in Sources */, - 9B651075445D3C80AF9F6C538F4B04FE /* IQUIWindow+Hierarchy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 26BF577E7B6AB6B8E19156AB9DB4BA52 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = AFNetworking; - target = 0130B3724283586C0E9D2A112D4F2AA1 /* AFNetworking */; - targetProxy = E3C263ED9E54BDFD17A2DAECF7277C9D /* PBXContainerItemProxy */; - }; - 2796E28D440467C05BA6F4D2A79E232B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SDWebImage; - target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; - targetProxy = FDC3896FC173C665902C83FA3FA7B269 /* PBXContainerItemProxy */; - }; - 2805B3CE7B8E2979AA8738EFC581B4EF /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Parse; - target = 7F3FE5658AEC4AF2B296EDA73A218182 /* Parse */; - targetProxy = 6EC43FB8FA6F24A56C8B29A3321EE415 /* PBXContainerItemProxy */; - }; - 2CB5F1640B51D4E4170CF354596B5722 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FlatUIKit; - target = 923099EAAC66CBEDD533E3FE43830166 /* FlatUIKit */; - targetProxy = E1E69F9F813F9240A8C96E8C112A0D1C /* PBXContainerItemProxy */; - }; - 65F67EB6EC701BCE75030C640F9F851F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Bolts; - target = 42465A188431886AB035275F049824D3 /* Bolts */; - targetProxy = 85555F6EC589E33A03E90D2664B57C19 /* PBXContainerItemProxy */; - }; - 6CB9C230B737011EF57D334F2EA7B206 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Bolts; - target = 42465A188431886AB035275F049824D3 /* Bolts */; - targetProxy = 6C7FDBC1A588296B19BD2ECF54A19EC8 /* PBXContainerItemProxy */; - }; - 8286090C9B7C7B47BC58A472692A10D1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = IQKeyboardManager; - target = FBA456CB50E371584C11231929A0971E /* IQKeyboardManager */; - targetProxy = 5CB0E17673C4FF6B06461CFF4BE9F890 /* PBXContainerItemProxy */; - }; - A6C7988E73C1F39B88F674770DE63408 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Bolts; - target = 42465A188431886AB035275F049824D3 /* Bolts */; - targetProxy = 4534AFDCFE4E3F47A2AAF5DE9AA0B163 /* PBXContainerItemProxy */; - }; - D83A001559C85060CAF0B02C23E211DB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Parse; - target = 7F3FE5658AEC4AF2B296EDA73A218182 /* Parse */; - targetProxy = 8D628D385D9F5A838D8C30142748A1ED /* PBXContainerItemProxy */; - }; - E466FC4A03782CB442B9DB914BBB5B41 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ChameleonFramework; - target = 28BFDC89BA4363F4F3576DEC70EE10AE /* ChameleonFramework */; - targetProxy = 98BDC34B972C5A1BDCE7F5F879B31FBF /* PBXContainerItemProxy */; - }; - F2A7B5854CB8644CD1E570D37F1A7D83 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ParseUI; - target = 96F971576D7B3914510B0B2FB38F43A2 /* ParseUI */; - targetProxy = 725D87B5A2A247E05A8144C4ADDAFBE9 /* PBXContainerItemProxy */; - }; - FD01863452BB1B46FA0095C41DE220F5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Unirest; - target = DD9AC66E330E40497F19A867C63FBAAA /* Unirest */; - targetProxy = 791C3327C12F11ED3A0B6E43F941ECB7 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 08B18FA0B78A34282230CC927E31789D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 008FE4C757A98BF3F85D56B16B909C95 /* ParseUI.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ParseUI/ParseUI-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/ParseUI/ParseUI.modulemap"; - PRODUCT_MODULE_NAME = ParseUI; - PRODUCT_NAME = ParseUI; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 0D60DD6112F6671B16910B7B1747C274 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5E8A133C5B52375ED7ED0B08ADBD8537 /* Pods-FoodbLog.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 18EA0B983E6EB47AF0ACD58C619C7056 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 53AED7B37E59FD4C2906C8CD48F1549D /* Unirest.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Unirest/Unirest-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Unirest/Unirest-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Unirest/Unirest.modulemap"; - PRODUCT_MODULE_NAME = Unirest; - PRODUCT_NAME = Unirest; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 1A58A82F0ADB9BB12FD2E22EA42491CB /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 25AE04E3363DD54258BA17EE714BC7DE /* FlatUIKit.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FlatUIKit/FlatUIKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FlatUIKit/FlatUIKit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FlatUIKit/FlatUIKit.modulemap"; - PRODUCT_MODULE_NAME = FlatUIKit; - PRODUCT_NAME = FlatUIKit; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 1C5BBD4AB5852DA8628B9B0B467FC2D1 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BD8A148C1C76BD03BEFC12CCE8F7BB3E /* ChameleonFramework.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/ChameleonFramework/ChameleonFramework-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ChameleonFramework/ChameleonFramework-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/ChameleonFramework/ChameleonFramework.modulemap"; - PRODUCT_MODULE_NAME = ChameleonFramework; - PRODUCT_NAME = ChameleonFramework; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 25AD9454612BF454A1E3DC4CD4FA8C6D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Debug; - }; - 2ED5CD13F515BB46B86F73C5F9569190 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CD46520D8BCDA2FED7653A676AE1DB78 /* SDWebImage.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; - PRODUCT_MODULE_NAME = SDWebImage; - PRODUCT_NAME = SDWebImage; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 3DCA5EA2D1CF284CFB76122F415EC323 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 67A6FB7F80EB38941450A0B66E1843B4 /* Parse.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Parse/Parse-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Parse/Parse.modulemap"; - PRODUCT_MODULE_NAME = Parse; - PRODUCT_NAME = Parse; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 611349415B19BCC31ECDED761F0D6598 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4EEBB37503F5FF0C662950C8F1DECA80 /* IQKeyboardManager.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManager/IQKeyboardManager-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/IQKeyboardManager/IQKeyboardManager.modulemap"; - PRODUCT_MODULE_NAME = IQKeyboardManager; - PRODUCT_NAME = IQKeyboardManager; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 896E5365E81BD3F8C6C88FB93B68E518 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BE438FFCF26860EECC1343543A60226D /* Bolts.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts/Bolts-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts/Bolts.modulemap"; - PRODUCT_MODULE_NAME = Bolts; - PRODUCT_NAME = Bolts; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 8E7C2EF045FC4D43603B34ED3A15D8D5 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 59340BADC818D8D3EE97EF49C93B9657 /* AFNetworking.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AFNetworking/AFNetworking-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; - PRODUCT_MODULE_NAME = AFNetworking; - PRODUCT_NAME = AFNetworking; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - A0F3E496548323F9AAA4C6102BA74A51 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A04E1674F330FF3E8705ACDA5294CAF0 /* ParseUI.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/ParseUI/ParseUI-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ParseUI/ParseUI-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/ParseUI/ParseUI.modulemap"; - PRODUCT_MODULE_NAME = ParseUI; - PRODUCT_NAME = ParseUI; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - ABC30FFB3EDCDFCAC5B1A78670EF35E3 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C4239D037D62B4A06D9768E33ECD692F /* Parse.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Parse/Parse-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Parse/Parse-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Parse/Parse.modulemap"; - PRODUCT_MODULE_NAME = Parse; - PRODUCT_NAME = Parse; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - B1B099CA53143C14AB8ABB66233C5E16 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 80178C233F043FB5B04F2B531880B028 /* ChameleonFramework.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/ChameleonFramework/ChameleonFramework-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ChameleonFramework/ChameleonFramework-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/ChameleonFramework/ChameleonFramework.modulemap"; - PRODUCT_MODULE_NAME = ChameleonFramework; - PRODUCT_NAME = ChameleonFramework; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - BCF92E5B31213776C06023CF06FF4752 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4A6D3469A0C446BC153A71D249DD118C /* Unirest.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Unirest/Unirest-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Unirest/Unirest-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Unirest/Unirest.modulemap"; - PRODUCT_MODULE_NAME = Unirest; - PRODUCT_NAME = Unirest; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - BE81F1587DEF06899DC8A41C82965A3B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 22E30A762CBA7D97BB4E81283F3DACDA /* Bolts.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Bolts/Bolts-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts/Bolts-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts/Bolts.modulemap"; - PRODUCT_MODULE_NAME = Bolts; - PRODUCT_NAME = Bolts; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - C23C19FB5166B259C259D5E10A59B962 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9AC2743E8EC297C24BDC808D253215BC /* SDWebImage.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; - PRODUCT_MODULE_NAME = SDWebImage; - PRODUCT_NAME = SDWebImage; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - CA547D2C7E9A8A153DC2B27FBE00B112 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 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_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; - }; - CF5889134F93B4DBC3926DDBD180C95F /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 849E5A8317B6998E948A27507E902A90 /* Pods-FoodbLog.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-FoodbLog/Pods-FoodbLog.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - DA9EDB729F9EB20F25FDC5AF8A359308 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 564869040FE2AC538A52B329B2EE83BE /* FlatUIKit.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FlatUIKit/FlatUIKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FlatUIKit/FlatUIKit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FlatUIKit/FlatUIKit.modulemap"; - PRODUCT_MODULE_NAME = FlatUIKit; - PRODUCT_NAME = FlatUIKit; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - EBA37623EE3EB2AAB64FA97FE5883854 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B03124BAD3BD5D9AAEFF7FC003DC0B1C /* AFNetworking.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AFNetworking/AFNetworking-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; - PRODUCT_MODULE_NAME = AFNetworking; - PRODUCT_NAME = AFNetworking; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - FB6EAF2137BDA97B913D7E7834164A18 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 194C09CE6BAFEA2233F1C90D5FB06DE2 /* IQKeyboardManager.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManager/IQKeyboardManager-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/IQKeyboardManager/IQKeyboardManager.modulemap"; - PRODUCT_MODULE_NAME = IQKeyboardManager; - PRODUCT_NAME = IQKeyboardManager; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 225DCE9719E06BEB65BC55637D5998C0 /* Build configuration list for PBXNativeTarget "ParseUI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 08B18FA0B78A34282230CC927E31789D /* Debug */, - A0F3E496548323F9AAA4C6102BA74A51 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 45D24D7DA9B5391B128D06A688D5FFEB /* Build configuration list for PBXNativeTarget "Bolts" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 896E5365E81BD3F8C6C88FB93B68E518 /* Debug */, - BE81F1587DEF06899DC8A41C82965A3B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 25AD9454612BF454A1E3DC4CD4FA8C6D /* Debug */, - CA547D2C7E9A8A153DC2B27FBE00B112 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 51A78600708B12200B7613A059F264AD /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 2ED5CD13F515BB46B86F73C5F9569190 /* Debug */, - C23C19FB5166B259C259D5E10A59B962 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 525EE82D6B4EC9040F2C31DA0640A839 /* Build configuration list for PBXNativeTarget "Pods-FoodbLog" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CF5889134F93B4DBC3926DDBD180C95F /* Debug */, - 0D60DD6112F6671B16910B7B1747C274 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 572543452275637D1FC81DC359D9A50C /* Build configuration list for PBXNativeTarget "FlatUIKit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1A58A82F0ADB9BB12FD2E22EA42491CB /* Debug */, - DA9EDB729F9EB20F25FDC5AF8A359308 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 9C523E6143DB0C70A8B0FEB07F0A5E69 /* Build configuration list for PBXNativeTarget "Parse" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3DCA5EA2D1CF284CFB76122F415EC323 /* Debug */, - ABC30FFB3EDCDFCAC5B1A78670EF35E3 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - B61E8ABD6FC78810EA49DC0E9646BF83 /* Build configuration list for PBXNativeTarget "AFNetworking" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - EBA37623EE3EB2AAB64FA97FE5883854 /* Debug */, - 8E7C2EF045FC4D43603B34ED3A15D8D5 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D8BDCAEAFB484664860383CA2CC9C8F8 /* Build configuration list for PBXNativeTarget "ChameleonFramework" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1C5BBD4AB5852DA8628B9B0B467FC2D1 /* Debug */, - B1B099CA53143C14AB8ABB66233C5E16 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - DBB7F00CC890AE3895D236A12C324870 /* Build configuration list for PBXNativeTarget "IQKeyboardManager" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 611349415B19BCC31ECDED761F0D6598 /* Debug */, - FB6EAF2137BDA97B913D7E7834164A18 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - EA7ABE50FB6EA7A4A6CAA4A5C5380BD6 /* Build configuration list for PBXNativeTarget "Unirest" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 18EA0B983E6EB47AF0ACD58C619C7056 /* Debug */, - BCF92E5B31213776C06023CF06FF4752 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; -} diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/AFNetworking.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/AFNetworking.xcscheme deleted file mode 100644 index cc4be6f..0000000 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/AFNetworking.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Bolts.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Bolts.xcscheme deleted file mode 100644 index 538482e..0000000 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Bolts.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/ChameleonFramework.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/ChameleonFramework.xcscheme deleted file mode 100644 index 38f48b7..0000000 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/ChameleonFramework.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/FlatUIKit.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/FlatUIKit.xcscheme deleted file mode 100644 index 524990c..0000000 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/FlatUIKit.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/IQKeyboardManager.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/IQKeyboardManager.xcscheme deleted file mode 100644 index 0a86be4..0000000 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/IQKeyboardManager.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Parse.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Parse.xcscheme deleted file mode 100644 index 4168595..0000000 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Parse.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/ParseUI.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/ParseUI.xcscheme deleted file mode 100644 index 1575182..0000000 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/ParseUI.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Pods-FoodbLog.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Pods-FoodbLog.xcscheme deleted file mode 100644 index 4f3b7dc..0000000 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Pods-FoodbLog.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/SDWebImage.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/SDWebImage.xcscheme deleted file mode 100644 index 37ef74c..0000000 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/SDWebImage.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Unirest.xcscheme b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Unirest.xcscheme deleted file mode 100644 index 8e9edd2..0000000 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/Unirest.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/xcschememanagement.plist b/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 9c66a92..0000000 --- a/FoodbLog/Pods/Pods.xcodeproj/xcuserdata/esikmalazman.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,81 +0,0 @@ - - - - - SchemeUserState - - AFNetworking.xcscheme - - isShown - - orderHint - 0 - - Bolts.xcscheme - - isShown - - orderHint - 1 - - ChameleonFramework.xcscheme - - isShown - - orderHint - 2 - - FlatUIKit.xcscheme - - isShown - - orderHint - 3 - - IQKeyboardManager.xcscheme - - isShown - - orderHint - 4 - - Parse.xcscheme - - isShown - - orderHint - 5 - - ParseUI.xcscheme - - isShown - - orderHint - 6 - - Pods-FoodbLog.xcscheme - - isShown - - orderHint - 7 - - SDWebImage.xcscheme - - isShown - - orderHint - 8 - - Unirest.xcscheme - - isShown - - orderHint - 9 - - - SuppressBuildableAutocreation - - - diff --git a/FoodbLog/Pods/SDWebImage/LICENSE b/FoodbLog/Pods/SDWebImage/LICENSE deleted file mode 100644 index ae783e1..0000000 --- a/FoodbLog/Pods/SDWebImage/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2009 Olivier Poitrey - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - diff --git a/FoodbLog/Pods/SDWebImage/README.md b/FoodbLog/Pods/SDWebImage/README.md deleted file mode 100644 index bc47123..0000000 --- a/FoodbLog/Pods/SDWebImage/README.md +++ /dev/null @@ -1,315 +0,0 @@ -Web Image -========= -[![Build Status](http://img.shields.io/travis/rs/SDWebImage/master.svg?style=flat)](https://travis-ci.org/rs/SDWebImage) -[![Pod Version](http://img.shields.io/cocoapods/v/SDWebImage.svg?style=flat)](http://cocoadocs.org/docsets/SDWebImage/) -[![Pod Platform](http://img.shields.io/cocoapods/p/SDWebImage.svg?style=flat)](http://cocoadocs.org/docsets/SDWebImage/) -[![Pod License](http://img.shields.io/cocoapods/l/SDWebImage.svg?style=flat)](https://www.apache.org/licenses/LICENSE-2.0.html) -[![Dependency Status](https://www.versioneye.com/objective-c/sdwebimage/3.3/badge.svg?style=flat)](https://www.versioneye.com/objective-c/sdwebimage/3.3) -[![Reference Status](https://www.versioneye.com/objective-c/sdwebimage/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/sdwebimage/references) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/rs/SDWebImage) - -This library provides a category for UIImageView with support for remote images coming from the web. - -It provides: - -- An UIImageView category adding web image and cache management to the Cocoa Touch framework -- An asynchronous image downloader -- An asynchronous memory + disk image caching with automatic cache expiration handling -- Animated GIF support -- WebP format support -- A background image decompression -- A guarantee that the same URL won't be downloaded several times -- A guarantee that bogus URLs won't be retried again and again -- A guarantee that main thread will never be blocked -- Performances! -- Use GCD and ARC -- Arm64 support - -NOTE: The version 3.0 of SDWebImage isn't fully backward compatible with 2.0 and requires iOS 5.1.1 -minimum deployement version. If you need iOS < 5.0 support, please use the last [2.0 version](https://github.com/rs/SDWebImage/tree/2.0-compat). - -[How is SDWebImage better than X?](https://github.com/rs/SDWebImage/wiki/How-is-SDWebImage-better-than-X%3F) - -Who Use It ----------- - -Find out [who uses SDWebImage](https://github.com/rs/SDWebImage/wiki/Who-Uses-SDWebImage) and add your app to the list. - -How To Use ----------- - -API documentation is available at [CocoaDocs - SDWebImage](http://cocoadocs.org/docsets/SDWebImage/) - -### Using UIImageView+WebCache category with UITableView - -Just #import the UIImageView+WebCache.h header, and call the sd_setImageWithURL:placeholderImage: -method from the tableView:cellForRowAtIndexPath: UITableViewDataSource method. Everything will be -handled for you, from async downloads to caching management. - -```objective-c -#import - -... - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *MyIdentifier = @"MyIdentifier"; - - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; - - if (cell == nil) - { - cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault - reuseIdentifier:MyIdentifier] autorelease]; - } - - // Here we use the new provided sd_setImageWithURL: method to load the web image - [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] - placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; - - cell.textLabel.text = @"My Text"; - return cell; -} -``` - -### Using blocks - -With blocks, you can be notified about the image download progress and whenever the image retrival -has completed with success or not: - -```objective-c -// Here we use the new provided sd_setImageWithURL: method to load the web image -[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] - placeholderImage:[UIImage imageNamed:@"placeholder.png"] - completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {... completion code here ...}]; -``` - -Note: neither your success nor failure block will be call if your image request is canceled before completion. - -### Using SDWebImageManager - -The SDWebImageManager is the class behind the UIImageView+WebCache category. It ties the -asynchronous downloader with the image cache store. You can use this class directly to benefit -from web image downloading with caching in another context than a UIView (ie: with Cocoa). - -Here is a simple example of how to use SDWebImageManager: - -```objective-c -SDWebImageManager *manager = [SDWebImageManager sharedManager]; -[manager downloadImageWithURL:imageURL - options:0 - progress:^(NSInteger receivedSize, NSInteger expectedSize) { - // progression tracking code - } - completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (image) { - // do something with image - } - }]; -``` - -### Using Asynchronous Image Downloader Independently - -It's also possible to use the async image downloader independently: - -```objective-c -[SDWebImageDownloader.sharedDownloader downloadImageWithURL:imageURL - options:0 - progress:^(NSInteger receivedSize, NSInteger expectedSize) - { - // progression tracking code - } - completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) - { - if (image && finished) - { - // do something with image - } - }]; -``` - -### Using Asynchronous Image Caching Independently - -It is also possible to use the async based image cache store independently. SDImageCache -maintains a memory cache and an optional disk cache. Disk cache write operations are performed -asynchronous so it doesn't add unnecessary latency to the UI. - -The SDImageCache class provides a singleton instance for convenience but you can create your own -instance if you want to create separated cache namespace. - -To lookup the cache, you use the `queryDiskCacheForKey:done:` method. If the method returns nil, it means the cache -doesn't currently own the image. You are thus responsible for generating and caching it. The cache -key is an application unique identifier for the image to cache. It is generally the absolute URL of -the image. - -```objective-c -SDImageCache *imageCache = [[SDImageCache alloc] initWithNamespace:@"myNamespace"]; -[imageCache queryDiskCacheForKey:myCacheKey done:^(UIImage *image) -{ - // image is not nil if image was found -}]; -``` - -By default SDImageCache will lookup the disk cache if an image can't be found in the memory cache. -You can prevent this from happening by calling the alternative method `imageFromMemoryCacheForKey:`. - -To store an image into the cache, you use the storeImage:forKey: method: - -```objective-c -[[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey]; -``` - -By default, the image will be stored in memory cache as well as on disk cache (asynchronously). If -you want only the memory cache, use the alternative method storeImage:forKey:toDisk: with a negative -third argument. - -### Using cache key filter - -Sometime, you may not want to use the image URL as cache key because part of the URL is dynamic -(i.e.: for access control purpose). SDWebImageManager provides a way to set a cache key filter that -takes the NSURL as input, and output a cache key NSString. - -The following example sets a filter in the application delegate that will remove any query-string from -the URL before to use it as a cache key: - -```objective-c -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - SDWebImageManager.sharedManager.cacheKeyFilter = ^(NSURL *url) { - url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path]; - return [url absoluteString]; - }; - - // Your app init code... - return YES; -} -``` - - -Common Problems ---------------- - -### Using dynamic image size with UITableViewCell - -UITableView determines the size of the image by the first image set for a cell. If your remote images -don't have the same size as your placeholder image, you may experience strange anamorphic scaling issue. -The following article gives a way to workaround this issue: - -[http://www.wrichards.com/blog/2011/11/sdwebimage-fixed-width-cell-images/](http://www.wrichards.com/blog/2011/11/sdwebimage-fixed-width-cell-images/) - - -### Handle image refresh - -SDWebImage does very aggressive caching by default. It ignores all kind of caching control header returned by the HTTP server and cache the returned images with no time restriction. It implies your images URLs are static URLs pointing to images that never change. If the pointed image happen to change, some parts of the URL should change accordingly. - -If you don't control the image server you're using, you may not be able to change the URL when its content is updated. This is the case for Facebook avatar URLs for instance. In such case, you may use the `SDWebImageRefreshCached` flag. This will slightly degrade the performance but will respect the HTTP caching control headers: - -``` objective-c -[imageView sd_setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/olivier.poitrey/picture"] - placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"] - options:SDWebImageRefreshCached]; -``` - -### Add a progress indicator - -See this category: https://github.com/JJSaccolo/UIActivityIndicator-for-SDWebImage - -Installation ------------- - -There are three ways to use SDWebImage in your project: -- using Cocoapods -- copying all the files into your project -- importing the project as a static library - -### Installation with CocoaPods - -[CocoaPods](http://cocoapods.org/) is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries in your projects. See the [Get Started](http://cocoapods.org/#get_started) section for more details. - -#### Podfile -``` -platform :ios, '6.1' -pod 'SDWebImage', '~>3.7' -``` - -### Installation with Carthage (iOS 8+) - -[Carthage](https://github.com/Carthage/Carthage) is a lightweight dependency manager for Swift and Objective-C. It leverages CocoaTouch modules and ins less invasive than CocoaPods. - -To install with carthage, follow the instruction on [Carthage](https://github.com/Carthage/Carthage) - -#### Cartfile -``` -github "rs/SDWebImage" -``` - -#### Usage -Swift - -``` -import WebImage - -``` - -Objective-C - -``` -@import WebImage; -``` - -### Installation by cloning the repository - -In order to gain access to all the files from the repository, you should clone it. -``` -git clone --recursive https://github.com/rs/SDWebImage.git -``` - -### Add the SDWebImage project to your project - -- Download and unzip the last version of the framework from the [download page](https://github.com/rs/SDWebImage/releases) -- Right-click on the project navigator and select "Add Files to "Your Project": -- In the dialog, select SDWebImage.framework: -- Check the "Copy items into destination group's folder (if needed)" checkbox - -### Add dependencies - -- In you application project app’s target settings, find the "Build Phases" section and open the "Link Binary With Libraries" block: -- Click the "+" button again and select the "ImageIO.framework", this is needed by the progressive download feature: - -### Add Linker Flag - -Open the "Build Settings" tab, in the "Linking" section, locate the "Other Linker Flags" setting and add the "-ObjC" flag: - -![Other Linker Flags](http://dl.dropbox.com/u/123346/SDWebImage/10_other_linker_flags.jpg) - -Alternatively, if this causes compilation problems with frameworks that extend optional libraries, such as Parse, RestKit or opencv2, instead of the -ObjC flag use: -``` --force_load SDWebImage.framework/Versions/Current/SDWebImage -``` - -If you're using Cocoa Pods and have any frameworks that extend optional libraries, such as Parsen RestKit or opencv2, instead of the -ObjC flag use: -``` --force_load $(TARGET_BUILD_DIR)/libPods.a -``` - -### Import headers in your source files - -In the source files where you need to use the library, import the header file: - -```objective-c -#import -``` - -### Build Project - -At this point your workspace should build without error. If you are having problem, post to the Issue and the -community can help you solve it. - -Future Enhancements -------------------- - -- LRU memory cache cleanup instead of reset on memory warning - -## Licenses - -All source code is licensed under the [MIT License](https://raw.github.com/rs/SDWebImage/master/LICENSE). diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h b/FoodbLog/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h deleted file mode 100644 index 69c76dc..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// Created by Fabrice Aneche on 06/01/14. -// Copyright (c) 2014 Dailymotion. All rights reserved. -// - -#import - -@interface NSData (ImageContentType) - -/** - * Compute the content type for an image data - * - * @param data the input data - * - * @return the content type as string (i.e. image/jpeg, image/gif) - */ -+ (NSString *)sd_contentTypeForImageData:(NSData *)data; - -@end - - -@interface NSData (ImageContentTypeDeprecated) - -+ (NSString *)contentTypeForImageData:(NSData *)data __deprecated_msg("Use `sd_contentTypeForImageData:`"); - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m b/FoodbLog/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m deleted file mode 100644 index 0941cfa..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// Created by Fabrice Aneche on 06/01/14. -// Copyright (c) 2014 Dailymotion. All rights reserved. -// - -#import "NSData+ImageContentType.h" - - -@implementation NSData (ImageContentType) - -+ (NSString *)sd_contentTypeForImageData:(NSData *)data { - uint8_t c; - [data getBytes:&c length:1]; - switch (c) { - case 0xFF: - return @"image/jpeg"; - case 0x89: - return @"image/png"; - case 0x47: - return @"image/gif"; - case 0x49: - case 0x4D: - return @"image/tiff"; - case 0x52: - // R as RIFF for WEBP - if ([data length] < 12) { - return nil; - } - - NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding]; - if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) { - return @"image/webp"; - } - - return nil; - } - return nil; -} - -@end - - -@implementation NSData (ImageContentTypeDeprecated) - -+ (NSString *)contentTypeForImageData:(NSData *)data { - return [self sd_contentTypeForImageData:data]; -} - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/SDImageCache.h b/FoodbLog/Pods/SDWebImage/SDWebImage/SDImageCache.h deleted file mode 100644 index 8e08aa1..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/SDImageCache.h +++ /dev/null @@ -1,262 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" - -typedef NS_ENUM(NSInteger, SDImageCacheType) { - /** - * The image wasn't available the SDWebImage caches, but was downloaded from the web. - */ - SDImageCacheTypeNone, - /** - * The image was obtained from the disk cache. - */ - SDImageCacheTypeDisk, - /** - * The image was obtained from the memory cache. - */ - SDImageCacheTypeMemory -}; - -typedef void(^SDWebImageQueryCompletedBlock)(UIImage *image, SDImageCacheType cacheType); - -typedef void(^SDWebImageCheckCacheCompletionBlock)(BOOL isInCache); - -typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger totalSize); - -/** - * SDImageCache maintains a memory cache and an optional disk cache. Disk cache write operations are performed - * asynchronous so it doesn’t add unnecessary latency to the UI. - */ -@interface SDImageCache : NSObject - -/** - * Decompressing images that are downloaded and cached can improve peformance but can consume lot of memory. - * Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption. - */ -@property (assign, nonatomic) BOOL shouldDecompressImages; - -/** - * The maximum "total cost" of the in-memory image cache. The cost function is the number of pixels held in memory. - */ -@property (assign, nonatomic) NSUInteger maxMemoryCost; - -/** - * The maximum number of objects the cache should hold. - */ -@property (assign, nonatomic) NSUInteger maxMemoryCountLimit; - -/** - * The maximum length of time to keep an image in the cache, in seconds - */ -@property (assign, nonatomic) NSInteger maxCacheAge; - -/** - * The maximum size of the cache, in bytes. - */ -@property (assign, nonatomic) NSUInteger maxCacheSize; - -/** - * Returns global shared cache instance - * - * @return SDImageCache global instance - */ -+ (SDImageCache *)sharedImageCache; - -/** - * Init a new cache store with a specific namespace - * - * @param ns The namespace to use for this cache store - */ -- (id)initWithNamespace:(NSString *)ns; - -/** - * Init a new cache store with a specific namespace and directory - * - * @param ns The namespace to use for this cache store - * @param directory Directory to cache disk images in - */ -- (id)initWithNamespace:(NSString *)ns diskCacheDirectory:(NSString *)directory; - --(NSString *)makeDiskCachePath:(NSString*)fullNamespace; - -/** - * Add a read-only cache path to search for images pre-cached by SDImageCache - * Useful if you want to bundle pre-loaded images with your app - * - * @param path The path to use for this read-only cache path - */ -- (void)addReadOnlyCachePath:(NSString *)path; - -/** - * Store an image into memory and disk cache at the given key. - * - * @param image The image to store - * @param key The unique image cache key, usually it's image absolute URL - */ -- (void)storeImage:(UIImage *)image forKey:(NSString *)key; - -/** - * Store an image into memory and optionally disk cache at the given key. - * - * @param image The image to store - * @param key The unique image cache key, usually it's image absolute URL - * @param toDisk Store the image to disk cache if YES - */ -- (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk; - -/** - * Store an image into memory and optionally disk cache at the given key. - * - * @param image The image to store - * @param recalculate BOOL indicates if imageData can be used or a new data should be constructed from the UIImage - * @param imageData The image data as returned by the server, this representation will be used for disk storage - * instead of converting the given image object into a storable/compressed image format in order - * to save quality and CPU - * @param key The unique image cache key, usually it's image absolute URL - * @param toDisk Store the image to disk cache if YES - */ -- (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk; - -/** - * Query the disk cache asynchronously. - * - * @param key The unique key used to store the wanted image - */ -- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock; - -/** - * Query the memory cache synchronously. - * - * @param key The unique key used to store the wanted image - */ -- (UIImage *)imageFromMemoryCacheForKey:(NSString *)key; - -/** - * Query the disk cache synchronously after checking the memory cache. - * - * @param key The unique key used to store the wanted image - */ -- (UIImage *)imageFromDiskCacheForKey:(NSString *)key; - -/** - * Remove the image from memory and disk cache synchronously - * - * @param key The unique image cache key - */ -- (void)removeImageForKey:(NSString *)key; - - -/** - * Remove the image from memory and disk cache asynchronously - * - * @param key The unique image cache key - * @param completion An block that should be executed after the image has been removed (optional) - */ -- (void)removeImageForKey:(NSString *)key withCompletion:(SDWebImageNoParamsBlock)completion; - -/** - * Remove the image from memory and optionally disk cache asynchronously - * - * @param key The unique image cache key - * @param fromDisk Also remove cache entry from disk if YES - */ -- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk; - -/** - * Remove the image from memory and optionally disk cache asynchronously - * - * @param key The unique image cache key - * @param fromDisk Also remove cache entry from disk if YES - * @param completion An block that should be executed after the image has been removed (optional) - */ -- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion; - -/** - * Clear all memory cached images - */ -- (void)clearMemory; - -/** - * Clear all disk cached images. Non-blocking method - returns immediately. - * @param completion An block that should be executed after cache expiration completes (optional) - */ -- (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion; - -/** - * Clear all disk cached images - * @see clearDiskOnCompletion: - */ -- (void)clearDisk; - -/** - * Remove all expired cached image from disk. Non-blocking method - returns immediately. - * @param completionBlock An block that should be executed after cache expiration completes (optional) - */ -- (void)cleanDiskWithCompletionBlock:(SDWebImageNoParamsBlock)completionBlock; - -/** - * Remove all expired cached image from disk - * @see cleanDiskWithCompletionBlock: - */ -- (void)cleanDisk; - -/** - * Get the size used by the disk cache - */ -- (NSUInteger)getSize; - -/** - * Get the number of images in the disk cache - */ -- (NSUInteger)getDiskCount; - -/** - * Asynchronously calculate the disk cache's size. - */ -- (void)calculateSizeWithCompletionBlock:(SDWebImageCalculateSizeBlock)completionBlock; - -/** - * Async check if image exists in disk cache already (does not load the image) - * - * @param key the key describing the url - * @param completionBlock the block to be executed when the check is done. - * @note the completion block will be always executed on the main queue - */ -- (void)diskImageExistsWithKey:(NSString *)key completion:(SDWebImageCheckCacheCompletionBlock)completionBlock; - -/** - * Check if image exists in disk cache already (does not load the image) - * - * @param key the key describing the url - * - * @return YES if an image exists for the given key - */ -- (BOOL)diskImageExistsWithKey:(NSString *)key; - -/** - * Get the cache path for a certain key (needs the cache path root folder) - * - * @param key the key (can be obtained from url using cacheKeyForURL) - * @param path the cach path root folder - * - * @return the cache path - */ -- (NSString *)cachePathForKey:(NSString *)key inPath:(NSString *)path; - -/** - * Get the default cache path for a certain key - * - * @param key the key (can be obtained from url using cacheKeyForURL) - * - * @return the default cache path - */ -- (NSString *)defaultCachePathForKey:(NSString *)key; - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/SDImageCache.m b/FoodbLog/Pods/SDWebImage/SDWebImage/SDImageCache.m deleted file mode 100644 index 2202602..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/SDImageCache.m +++ /dev/null @@ -1,601 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDImageCache.h" -#import "SDWebImageDecoder.h" -#import "UIImage+MultiFormat.h" -#import - -// See https://github.com/rs/SDWebImage/pull/1141 for discussion -@interface AutoPurgeCache : NSCache -@end - -@implementation AutoPurgeCache - -- (id)init -{ - self = [super init]; - if (self) { - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(removeAllObjects) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; - } - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; - -} - -@end - -static const NSInteger kDefaultCacheMaxCacheAge = 60 * 60 * 24 * 7; // 1 week -// PNG signature bytes and data (below) -static unsigned char kPNGSignatureBytes[8] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A}; -static NSData *kPNGSignatureData = nil; - -BOOL ImageDataHasPNGPreffix(NSData *data); - -BOOL ImageDataHasPNGPreffix(NSData *data) { - NSUInteger pngSignatureLength = [kPNGSignatureData length]; - if ([data length] >= pngSignatureLength) { - if ([[data subdataWithRange:NSMakeRange(0, pngSignatureLength)] isEqualToData:kPNGSignatureData]) { - return YES; - } - } - - return NO; -} - -FOUNDATION_STATIC_INLINE NSUInteger SDCacheCostForImage(UIImage *image) { - return image.size.height * image.size.width * image.scale * image.scale; -} - -@interface SDImageCache () - -@property (strong, nonatomic) NSCache *memCache; -@property (strong, nonatomic) NSString *diskCachePath; -@property (strong, nonatomic) NSMutableArray *customPaths; -@property (SDDispatchQueueSetterSementics, nonatomic) dispatch_queue_t ioQueue; - -@end - - -@implementation SDImageCache { - NSFileManager *_fileManager; -} - -+ (SDImageCache *)sharedImageCache { - static dispatch_once_t once; - static id instance; - dispatch_once(&once, ^{ - instance = [self new]; - }); - return instance; -} - -- (id)init { - return [self initWithNamespace:@"default"]; -} - -- (id)initWithNamespace:(NSString *)ns { - NSString *path = [self makeDiskCachePath:ns]; - return [self initWithNamespace:ns diskCacheDirectory:path]; -} - -- (id)initWithNamespace:(NSString *)ns diskCacheDirectory:(NSString *)directory { - if ((self = [super init])) { - NSString *fullNamespace = [@"com.hackemist.SDWebImageCache." stringByAppendingString:ns]; - - // initialise PNG signature data - kPNGSignatureData = [NSData dataWithBytes:kPNGSignatureBytes length:8]; - - // Create IO serial queue - _ioQueue = dispatch_queue_create("com.hackemist.SDWebImageCache", DISPATCH_QUEUE_SERIAL); - - // Init default values - _maxCacheAge = kDefaultCacheMaxCacheAge; - - // Init the memory cache - _memCache = [[AutoPurgeCache alloc] init]; - _memCache.name = fullNamespace; - - // Init the disk cache - if (directory != nil) { - _diskCachePath = [directory stringByAppendingPathComponent:fullNamespace]; - } else { - NSString *path = [self makeDiskCachePath:ns]; - _diskCachePath = path; - } - - // Set decompression to YES - _shouldDecompressImages = YES; - - dispatch_sync(_ioQueue, ^{ - _fileManager = [NSFileManager new]; - }); - -#if TARGET_OS_IPHONE - // Subscribe to app events - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(clearMemory) - name:UIApplicationDidReceiveMemoryWarningNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(cleanDisk) - name:UIApplicationWillTerminateNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(backgroundCleanDisk) - name:UIApplicationDidEnterBackgroundNotification - object:nil]; -#endif - } - - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - SDDispatchQueueRelease(_ioQueue); -} - -- (void)addReadOnlyCachePath:(NSString *)path { - if (!self.customPaths) { - self.customPaths = [NSMutableArray new]; - } - - if (![self.customPaths containsObject:path]) { - [self.customPaths addObject:path]; - } -} - -- (NSString *)cachePathForKey:(NSString *)key inPath:(NSString *)path { - NSString *filename = [self cachedFileNameForKey:key]; - return [path stringByAppendingPathComponent:filename]; -} - -- (NSString *)defaultCachePathForKey:(NSString *)key { - return [self cachePathForKey:key inPath:self.diskCachePath]; -} - -#pragma mark SDImageCache (private) - -- (NSString *)cachedFileNameForKey:(NSString *)key { - const char *str = [key UTF8String]; - if (str == NULL) { - str = ""; - } - unsigned char r[CC_MD5_DIGEST_LENGTH]; - CC_MD5(str, (CC_LONG)strlen(str), r); - NSString *filename = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", - r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], r[11], r[12], r[13], r[14], r[15]]; - - return filename; -} - -#pragma mark ImageCache - -// Init the disk cache --(NSString *)makeDiskCachePath:(NSString*)fullNamespace{ - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); - return [paths[0] stringByAppendingPathComponent:fullNamespace]; -} - -- (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk { - if (!image || !key) { - return; - } - - NSUInteger cost = SDCacheCostForImage(image); - [self.memCache setObject:image forKey:key cost:cost]; - - if (toDisk) { - dispatch_async(self.ioQueue, ^{ - NSData *data = imageData; - - if (image && (recalculate || !data)) { -#if TARGET_OS_IPHONE - // We need to determine if the image is a PNG or a JPEG - // PNGs are easier to detect because they have a unique signature (http://www.w3.org/TR/PNG-Structure.html) - // The first eight bytes of a PNG file always contain the following (decimal) values: - // 137 80 78 71 13 10 26 10 - - // If the imageData is nil (i.e. if trying to save a UIImage directly or the image was transformed on download) - // and the image has an alpha channel, we will consider it PNG to avoid losing the transparency - int alphaInfo = CGImageGetAlphaInfo(image.CGImage); - BOOL hasAlpha = !(alphaInfo == kCGImageAlphaNone || - alphaInfo == kCGImageAlphaNoneSkipFirst || - alphaInfo == kCGImageAlphaNoneSkipLast); - BOOL imageIsPng = hasAlpha; - - // But if we have an image data, we will look at the preffix - if ([imageData length] >= [kPNGSignatureData length]) { - imageIsPng = ImageDataHasPNGPreffix(imageData); - } - - if (imageIsPng) { - data = UIImagePNGRepresentation(image); - } - else { - data = UIImageJPEGRepresentation(image, (CGFloat)1.0); - } -#else - data = [NSBitmapImageRep representationOfImageRepsInArray:image.representations usingType: NSJPEGFileType properties:nil]; -#endif - } - - if (data) { - if (![_fileManager fileExistsAtPath:_diskCachePath]) { - [_fileManager createDirectoryAtPath:_diskCachePath withIntermediateDirectories:YES attributes:nil error:NULL]; - } - - [_fileManager createFileAtPath:[self defaultCachePathForKey:key] contents:data attributes:nil]; - } - }); - } -} - -- (void)storeImage:(UIImage *)image forKey:(NSString *)key { - [self storeImage:image recalculateFromImage:YES imageData:nil forKey:key toDisk:YES]; -} - -- (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk { - [self storeImage:image recalculateFromImage:YES imageData:nil forKey:key toDisk:toDisk]; -} - -- (BOOL)diskImageExistsWithKey:(NSString *)key { - BOOL exists = NO; - - // this is an exception to access the filemanager on another queue than ioQueue, but we are using the shared instance - // from apple docs on NSFileManager: The methods of the shared NSFileManager object can be called from multiple threads safely. - exists = [[NSFileManager defaultManager] fileExistsAtPath:[self defaultCachePathForKey:key]]; - - return exists; -} - -- (void)diskImageExistsWithKey:(NSString *)key completion:(SDWebImageCheckCacheCompletionBlock)completionBlock { - dispatch_async(_ioQueue, ^{ - BOOL exists = [_fileManager fileExistsAtPath:[self defaultCachePathForKey:key]]; - if (completionBlock) { - dispatch_async(dispatch_get_main_queue(), ^{ - completionBlock(exists); - }); - } - }); -} - -- (UIImage *)imageFromMemoryCacheForKey:(NSString *)key { - return [self.memCache objectForKey:key]; -} - -- (UIImage *)imageFromDiskCacheForKey:(NSString *)key { - // First check the in-memory cache... - UIImage *image = [self imageFromMemoryCacheForKey:key]; - if (image) { - return image; - } - - // Second check the disk cache... - UIImage *diskImage = [self diskImageForKey:key]; - if (diskImage) { - NSUInteger cost = SDCacheCostForImage(diskImage); - [self.memCache setObject:diskImage forKey:key cost:cost]; - } - - return diskImage; -} - -- (NSData *)diskImageDataBySearchingAllPathsForKey:(NSString *)key { - NSString *defaultPath = [self defaultCachePathForKey:key]; - NSData *data = [NSData dataWithContentsOfFile:defaultPath]; - if (data) { - return data; - } - - NSArray *customPaths = [self.customPaths copy]; - for (NSString *path in customPaths) { - NSString *filePath = [self cachePathForKey:key inPath:path]; - NSData *imageData = [NSData dataWithContentsOfFile:filePath]; - if (imageData) { - return imageData; - } - } - - return nil; -} - -- (UIImage *)diskImageForKey:(NSString *)key { - NSData *data = [self diskImageDataBySearchingAllPathsForKey:key]; - if (data) { - UIImage *image = [UIImage sd_imageWithData:data]; - image = [self scaledImageForKey:key image:image]; - if (self.shouldDecompressImages) { - image = [UIImage decodedImageWithImage:image]; - } - return image; - } - else { - return nil; - } -} - -- (UIImage *)scaledImageForKey:(NSString *)key image:(UIImage *)image { - return SDScaledImageForKey(key, image); -} - -- (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompletedBlock)doneBlock { - if (!doneBlock) { - return nil; - } - - if (!key) { - doneBlock(nil, SDImageCacheTypeNone); - return nil; - } - - // First check the in-memory cache... - UIImage *image = [self imageFromMemoryCacheForKey:key]; - if (image) { - doneBlock(image, SDImageCacheTypeMemory); - return nil; - } - - NSOperation *operation = [NSOperation new]; - dispatch_async(self.ioQueue, ^{ - if (operation.isCancelled) { - return; - } - - @autoreleasepool { - UIImage *diskImage = [self diskImageForKey:key]; - if (diskImage) { - NSUInteger cost = SDCacheCostForImage(diskImage); - [self.memCache setObject:diskImage forKey:key cost:cost]; - } - - dispatch_async(dispatch_get_main_queue(), ^{ - doneBlock(diskImage, SDImageCacheTypeDisk); - }); - } - }); - - return operation; -} - -- (void)removeImageForKey:(NSString *)key { - [self removeImageForKey:key withCompletion:nil]; -} - -- (void)removeImageForKey:(NSString *)key withCompletion:(SDWebImageNoParamsBlock)completion { - [self removeImageForKey:key fromDisk:YES withCompletion:completion]; -} - -- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk { - [self removeImageForKey:key fromDisk:fromDisk withCompletion:nil]; -} - -- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion { - - if (key == nil) { - return; - } - - [self.memCache removeObjectForKey:key]; - - if (fromDisk) { - dispatch_async(self.ioQueue, ^{ - [_fileManager removeItemAtPath:[self defaultCachePathForKey:key] error:nil]; - - if (completion) { - dispatch_async(dispatch_get_main_queue(), ^{ - completion(); - }); - } - }); - } else if (completion){ - completion(); - } - -} - -- (void)setMaxMemoryCost:(NSUInteger)maxMemoryCost { - self.memCache.totalCostLimit = maxMemoryCost; -} - -- (NSUInteger)maxMemoryCost { - return self.memCache.totalCostLimit; -} - -- (NSUInteger)maxMemoryCountLimit { - return self.memCache.countLimit; -} - -- (void)setMaxMemoryCountLimit:(NSUInteger)maxCountLimit { - self.memCache.countLimit = maxCountLimit; -} - -- (void)clearMemory { - [self.memCache removeAllObjects]; -} - -- (void)clearDisk { - [self clearDiskOnCompletion:nil]; -} - -- (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion -{ - dispatch_async(self.ioQueue, ^{ - [_fileManager removeItemAtPath:self.diskCachePath error:nil]; - [_fileManager createDirectoryAtPath:self.diskCachePath - withIntermediateDirectories:YES - attributes:nil - error:NULL]; - - if (completion) { - dispatch_async(dispatch_get_main_queue(), ^{ - completion(); - }); - } - }); -} - -- (void)cleanDisk { - [self cleanDiskWithCompletionBlock:nil]; -} - -- (void)cleanDiskWithCompletionBlock:(SDWebImageNoParamsBlock)completionBlock { - dispatch_async(self.ioQueue, ^{ - NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES]; - NSArray *resourceKeys = @[NSURLIsDirectoryKey, NSURLContentModificationDateKey, NSURLTotalFileAllocatedSizeKey]; - - // This enumerator prefetches useful properties for our cache files. - NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtURL:diskCacheURL - includingPropertiesForKeys:resourceKeys - options:NSDirectoryEnumerationSkipsHiddenFiles - errorHandler:NULL]; - - NSDate *expirationDate = [NSDate dateWithTimeIntervalSinceNow:-self.maxCacheAge]; - NSMutableDictionary *cacheFiles = [NSMutableDictionary dictionary]; - NSUInteger currentCacheSize = 0; - - // Enumerate all of the files in the cache directory. This loop has two purposes: - // - // 1. Removing files that are older than the expiration date. - // 2. Storing file attributes for the size-based cleanup pass. - NSMutableArray *urlsToDelete = [[NSMutableArray alloc] init]; - for (NSURL *fileURL in fileEnumerator) { - NSDictionary *resourceValues = [fileURL resourceValuesForKeys:resourceKeys error:NULL]; - - // Skip directories. - if ([resourceValues[NSURLIsDirectoryKey] boolValue]) { - continue; - } - - // Remove files that are older than the expiration date; - NSDate *modificationDate = resourceValues[NSURLContentModificationDateKey]; - if ([[modificationDate laterDate:expirationDate] isEqualToDate:expirationDate]) { - [urlsToDelete addObject:fileURL]; - continue; - } - - // Store a reference to this file and account for its total size. - NSNumber *totalAllocatedSize = resourceValues[NSURLTotalFileAllocatedSizeKey]; - currentCacheSize += [totalAllocatedSize unsignedIntegerValue]; - [cacheFiles setObject:resourceValues forKey:fileURL]; - } - - for (NSURL *fileURL in urlsToDelete) { - [_fileManager removeItemAtURL:fileURL error:nil]; - } - - // If our remaining disk cache exceeds a configured maximum size, perform a second - // size-based cleanup pass. We delete the oldest files first. - if (self.maxCacheSize > 0 && currentCacheSize > self.maxCacheSize) { - // Target half of our maximum cache size for this cleanup pass. - const NSUInteger desiredCacheSize = self.maxCacheSize / 2; - - // Sort the remaining cache files by their last modification time (oldest first). - NSArray *sortedFiles = [cacheFiles keysSortedByValueWithOptions:NSSortConcurrent - usingComparator:^NSComparisonResult(id obj1, id obj2) { - return [obj1[NSURLContentModificationDateKey] compare:obj2[NSURLContentModificationDateKey]]; - }]; - - // Delete files until we fall below our desired cache size. - for (NSURL *fileURL in sortedFiles) { - if ([_fileManager removeItemAtURL:fileURL error:nil]) { - NSDictionary *resourceValues = cacheFiles[fileURL]; - NSNumber *totalAllocatedSize = resourceValues[NSURLTotalFileAllocatedSizeKey]; - currentCacheSize -= [totalAllocatedSize unsignedIntegerValue]; - - if (currentCacheSize < desiredCacheSize) { - break; - } - } - } - } - if (completionBlock) { - dispatch_async(dispatch_get_main_queue(), ^{ - completionBlock(); - }); - } - }); -} - -- (void)backgroundCleanDisk { - Class UIApplicationClass = NSClassFromString(@"UIApplication"); - if(!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) { - return; - } - UIApplication *application = [UIApplication performSelector:@selector(sharedApplication)]; - __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ - // Clean up any unfinished task business by marking where you - // stopped or ending the task outright. - [application endBackgroundTask:bgTask]; - bgTask = UIBackgroundTaskInvalid; - }]; - - // Start the long-running task and return immediately. - [self cleanDiskWithCompletionBlock:^{ - [application endBackgroundTask:bgTask]; - bgTask = UIBackgroundTaskInvalid; - }]; -} - -- (NSUInteger)getSize { - __block NSUInteger size = 0; - dispatch_sync(self.ioQueue, ^{ - NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:self.diskCachePath]; - for (NSString *fileName in fileEnumerator) { - NSString *filePath = [self.diskCachePath stringByAppendingPathComponent:fileName]; - NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil]; - size += [attrs fileSize]; - } - }); - return size; -} - -- (NSUInteger)getDiskCount { - __block NSUInteger count = 0; - dispatch_sync(self.ioQueue, ^{ - NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:self.diskCachePath]; - count = [[fileEnumerator allObjects] count]; - }); - return count; -} - -- (void)calculateSizeWithCompletionBlock:(SDWebImageCalculateSizeBlock)completionBlock { - NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES]; - - dispatch_async(self.ioQueue, ^{ - NSUInteger fileCount = 0; - NSUInteger totalSize = 0; - - NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtURL:diskCacheURL - includingPropertiesForKeys:@[NSFileSize] - options:NSDirectoryEnumerationSkipsHiddenFiles - errorHandler:NULL]; - - for (NSURL *fileURL in fileEnumerator) { - NSNumber *fileSize; - [fileURL getResourceValue:&fileSize forKey:NSURLFileSizeKey error:NULL]; - totalSize += [fileSize unsignedIntegerValue]; - fileCount += 1; - } - - if (completionBlock) { - dispatch_async(dispatch_get_main_queue(), ^{ - completionBlock(fileCount, totalSize); - }); - } - }); -} - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h b/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h deleted file mode 100644 index 9773545..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageCompat.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * (c) Jamie Pinkham - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import - -#ifdef __OBJC_GC__ -#error SDWebImage does not support Objective-C Garbage Collection -#endif - -#if __IPHONE_OS_VERSION_MIN_REQUIRED != 20000 && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0 -#error SDWebImage doesn't support Deployement Target version < 5.0 -#endif - -#if !TARGET_OS_IPHONE -#import -#ifndef UIImage -#define UIImage NSImage -#endif -#ifndef UIImageView -#define UIImageView NSImageView -#endif -#else - -#import - -#endif - -#ifndef NS_ENUM -#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type -#endif - -#ifndef NS_OPTIONS -#define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type -#endif - -#if OS_OBJECT_USE_OBJC - #undef SDDispatchQueueRelease - #undef SDDispatchQueueSetterSementics - #define SDDispatchQueueRelease(q) - #define SDDispatchQueueSetterSementics strong -#else -#undef SDDispatchQueueRelease -#undef SDDispatchQueueSetterSementics -#define SDDispatchQueueRelease(q) (dispatch_release(q)) -#define SDDispatchQueueSetterSementics assign -#endif - -extern UIImage *SDScaledImageForKey(NSString *key, UIImage *image); - -typedef void(^SDWebImageNoParamsBlock)(); - -extern NSString *const SDWebImageErrorDomain; - -#define dispatch_main_sync_safe(block)\ - if ([NSThread isMainThread]) {\ - block();\ - } else {\ - dispatch_sync(dispatch_get_main_queue(), block);\ - } - -#define dispatch_main_async_safe(block)\ - if ([NSThread isMainThread]) {\ - block();\ - } else {\ - dispatch_async(dispatch_get_main_queue(), block);\ - } diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m b/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m deleted file mode 100644 index 54fb60e..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageCompat.m +++ /dev/null @@ -1,51 +0,0 @@ -// -// SDWebImageCompat.m -// SDWebImage -// -// Created by Olivier Poitrey on 11/12/12. -// Copyright (c) 2012 Dailymotion. All rights reserved. -// - -#import "SDWebImageCompat.h" - -#if !__has_feature(objc_arc) -#error SDWebImage is ARC only. Either turn on ARC for the project or use -fobjc-arc flag -#endif - -inline UIImage *SDScaledImageForKey(NSString *key, UIImage *image) { - if (!image) { - return nil; - } - - if ([image.images count] > 0) { - NSMutableArray *scaledImages = [NSMutableArray array]; - - for (UIImage *tempImage in image.images) { - [scaledImages addObject:SDScaledImageForKey(key, tempImage)]; - } - - return [UIImage animatedImageWithImages:scaledImages duration:image.duration]; - } - else { - if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { - CGFloat scale = 1.0; - if (key.length >= 8) { - NSRange range = [key rangeOfString:@"@2x."]; - if (range.location != NSNotFound) { - scale = 2.0; - } - - range = [key rangeOfString:@"@3x."]; - if (range.location != NSNotFound) { - scale = 3.0; - } - } - - UIImage *scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation]; - image = scaledImage; - } - return image; - } -} - -NSString *const SDWebImageErrorDomain = @"SDWebImageErrorDomain"; diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.h b/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.h deleted file mode 100644 index 0176a7b..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * Created by james on 9/28/11. - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" - -@interface UIImage (ForceDecode) - -+ (UIImage *)decodedImageWithImage:(UIImage *)image; - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m b/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m deleted file mode 100644 index 79ddb30..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDecoder.m +++ /dev/null @@ -1,72 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * Created by james on 9/28/11. - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageDecoder.h" - -@implementation UIImage (ForceDecode) - -+ (UIImage *)decodedImageWithImage:(UIImage *)image { - if (image.images) { - // Do not decode animated images - return image; - } - - CGImageRef imageRef = image.CGImage; - CGSize imageSize = CGSizeMake(CGImageGetWidth(imageRef), CGImageGetHeight(imageRef)); - CGRect imageRect = (CGRect){.origin = CGPointZero, .size = imageSize}; - - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); - - int infoMask = (bitmapInfo & kCGBitmapAlphaInfoMask); - BOOL anyNonAlpha = (infoMask == kCGImageAlphaNone || - infoMask == kCGImageAlphaNoneSkipFirst || - infoMask == kCGImageAlphaNoneSkipLast); - - // CGBitmapContextCreate doesn't support kCGImageAlphaNone with RGB. - // https://developer.apple.com/library/mac/#qa/qa1037/_index.html - if (infoMask == kCGImageAlphaNone && CGColorSpaceGetNumberOfComponents(colorSpace) > 1) { - // Unset the old alpha info. - bitmapInfo &= ~kCGBitmapAlphaInfoMask; - - // Set noneSkipFirst. - bitmapInfo |= kCGImageAlphaNoneSkipFirst; - } - // Some PNGs tell us they have alpha but only 3 components. Odd. - else if (!anyNonAlpha && CGColorSpaceGetNumberOfComponents(colorSpace) == 3) { - // Unset the old alpha info. - bitmapInfo &= ~kCGBitmapAlphaInfoMask; - bitmapInfo |= kCGImageAlphaPremultipliedFirst; - } - - // It calculates the bytes-per-row based on the bitsPerComponent and width arguments. - CGContextRef context = CGBitmapContextCreate(NULL, - imageSize.width, - imageSize.height, - CGImageGetBitsPerComponent(imageRef), - 0, - colorSpace, - bitmapInfo); - CGColorSpaceRelease(colorSpace); - - // If failed, return undecompressed image - if (!context) return image; - - CGContextDrawImage(context, imageRect, imageRef); - CGImageRef decompressedImageRef = CGBitmapContextCreateImage(context); - - CGContextRelease(context); - - UIImage *decompressedImage = [UIImage imageWithCGImage:decompressedImageRef scale:image.scale orientation:image.imageOrientation]; - CGImageRelease(decompressedImageRef); - return decompressedImage; -} - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h b/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h deleted file mode 100644 index b8db86f..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h +++ /dev/null @@ -1,186 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" -#import "SDWebImageOperation.h" - -typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) { - SDWebImageDownloaderLowPriority = 1 << 0, - SDWebImageDownloaderProgressiveDownload = 1 << 1, - - /** - * By default, request prevent the of NSURLCache. With this flag, NSURLCache - * is used with default policies. - */ - SDWebImageDownloaderUseNSURLCache = 1 << 2, - - /** - * Call completion block with nil image/imageData if the image was read from NSURLCache - * (to be combined with `SDWebImageDownloaderUseNSURLCache`). - */ - - SDWebImageDownloaderIgnoreCachedResponse = 1 << 3, - /** - * In iOS 4+, continue the download of the image if the app goes to background. This is achieved by asking the system for - * extra time in background to let the request finish. If the background task expires the operation will be cancelled. - */ - - SDWebImageDownloaderContinueInBackground = 1 << 4, - - /** - * Handles cookies stored in NSHTTPCookieStore by setting - * NSMutableURLRequest.HTTPShouldHandleCookies = YES; - */ - SDWebImageDownloaderHandleCookies = 1 << 5, - - /** - * Enable to allow untrusted SSL ceriticates. - * Useful for testing purposes. Use with caution in production. - */ - SDWebImageDownloaderAllowInvalidSSLCertificates = 1 << 6, - - /** - * Put the image in the high priority queue. - */ - SDWebImageDownloaderHighPriority = 1 << 7, -}; - -typedef NS_ENUM(NSInteger, SDWebImageDownloaderExecutionOrder) { - /** - * Default value. All download operations will execute in queue style (first-in-first-out). - */ - SDWebImageDownloaderFIFOExecutionOrder, - - /** - * All download operations will execute in stack style (last-in-first-out). - */ - SDWebImageDownloaderLIFOExecutionOrder -}; - -extern NSString *const SDWebImageDownloadStartNotification; -extern NSString *const SDWebImageDownloadStopNotification; - -typedef void(^SDWebImageDownloaderProgressBlock)(NSInteger receivedSize, NSInteger expectedSize); - -typedef void(^SDWebImageDownloaderCompletedBlock)(UIImage *image, NSData *data, NSError *error, BOOL finished); - -typedef NSDictionary *(^SDWebImageDownloaderHeadersFilterBlock)(NSURL *url, NSDictionary *headers); - -/** - * Asynchronous downloader dedicated and optimized for image loading. - */ -@interface SDWebImageDownloader : NSObject - -/** - * Decompressing images that are downloaded and cached can improve peformance but can consume lot of memory. - * Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption. - */ -@property (assign, nonatomic) BOOL shouldDecompressImages; - -@property (assign, nonatomic) NSInteger maxConcurrentDownloads; - -/** - * Shows the current amount of downloads that still need to be downloaded - */ -@property (readonly, nonatomic) NSUInteger currentDownloadCount; - - -/** - * The timeout value (in seconds) for the download operation. Default: 15.0. - */ -@property (assign, nonatomic) NSTimeInterval downloadTimeout; - - -/** - * Changes download operations execution order. Default value is `SDWebImageDownloaderFIFOExecutionOrder`. - */ -@property (assign, nonatomic) SDWebImageDownloaderExecutionOrder executionOrder; - -/** - * Singleton method, returns the shared instance - * - * @return global shared instance of downloader class - */ -+ (SDWebImageDownloader *)sharedDownloader; - -/** - * Set username - */ -@property (strong, nonatomic) NSString *username; - -/** - * Set password - */ -@property (strong, nonatomic) NSString *password; - -/** - * Set filter to pick headers for downloading image HTTP request. - * - * This block will be invoked for each downloading image request, returned - * NSDictionary will be used as headers in corresponding HTTP request. - */ -@property (nonatomic, copy) SDWebImageDownloaderHeadersFilterBlock headersFilter; - -/** - * Set a value for a HTTP header to be appended to each download HTTP request. - * - * @param value The value for the header field. Use `nil` value to remove the header. - * @param field The name of the header field to set. - */ -- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field; - -/** - * Returns the value of the specified HTTP header field. - * - * @return The value associated with the header field field, or `nil` if there is no corresponding header field. - */ -- (NSString *)valueForHTTPHeaderField:(NSString *)field; - -/** - * Sets a subclass of `SDWebImageDownloaderOperation` as the default - * `NSOperation` to be used each time SDWebImage constructs a request - * operation to download an image. - * - * @param operationClass The subclass of `SDWebImageDownloaderOperation` to set - * as default. Passing `nil` will revert to `SDWebImageDownloaderOperation`. - */ -- (void)setOperationClass:(Class)operationClass; - -/** - * Creates a SDWebImageDownloader async downloader instance with a given URL - * - * The delegate will be informed when the image is finish downloaded or an error has happen. - * - * @see SDWebImageDownloaderDelegate - * - * @param url The URL to the image to download - * @param options The options to be used for this download - * @param progressBlock A block called repeatedly while the image is downloading - * @param completedBlock A block called once the download is completed. - * If the download succeeded, the image parameter is set, in case of error, - * error parameter is set with the error. The last parameter is always YES - * if SDWebImageDownloaderProgressiveDownload isn't use. With the - * SDWebImageDownloaderProgressiveDownload option, this block is called - * repeatedly with the partial image object and the finished argument set to NO - * before to be called a last time with the full image and finished argument - * set to YES. In case of error, the finished argument is always YES. - * - * @return A cancellable SDWebImageOperation - */ -- (id )downloadImageWithURL:(NSURL *)url - options:(SDWebImageDownloaderOptions)options - progress:(SDWebImageDownloaderProgressBlock)progressBlock - completed:(SDWebImageDownloaderCompletedBlock)completedBlock; - -/** - * Sets the download queue suspension state - */ -- (void)setSuspended:(BOOL)suspended; - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m b/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m deleted file mode 100644 index acda892..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m +++ /dev/null @@ -1,228 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageDownloader.h" -#import "SDWebImageDownloaderOperation.h" -#import - -static NSString *const kProgressCallbackKey = @"progress"; -static NSString *const kCompletedCallbackKey = @"completed"; - -@interface SDWebImageDownloader () - -@property (strong, nonatomic) NSOperationQueue *downloadQueue; -@property (weak, nonatomic) NSOperation *lastAddedOperation; -@property (assign, nonatomic) Class operationClass; -@property (strong, nonatomic) NSMutableDictionary *URLCallbacks; -@property (strong, nonatomic) NSMutableDictionary *HTTPHeaders; -// This queue is used to serialize the handling of the network responses of all the download operation in a single queue -@property (SDDispatchQueueSetterSementics, nonatomic) dispatch_queue_t barrierQueue; - -@end - -@implementation SDWebImageDownloader - -+ (void)initialize { - // Bind SDNetworkActivityIndicator if available (download it here: http://github.com/rs/SDNetworkActivityIndicator ) - // To use it, just add #import "SDNetworkActivityIndicator.h" in addition to the SDWebImage import - if (NSClassFromString(@"SDNetworkActivityIndicator")) { - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - id activityIndicator = [NSClassFromString(@"SDNetworkActivityIndicator") performSelector:NSSelectorFromString(@"sharedActivityIndicator")]; -#pragma clang diagnostic pop - - // Remove observer in case it was previously added. - [[NSNotificationCenter defaultCenter] removeObserver:activityIndicator name:SDWebImageDownloadStartNotification object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:activityIndicator name:SDWebImageDownloadStopNotification object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:activityIndicator - selector:NSSelectorFromString(@"startActivity") - name:SDWebImageDownloadStartNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:activityIndicator - selector:NSSelectorFromString(@"stopActivity") - name:SDWebImageDownloadStopNotification object:nil]; - } -} - -+ (SDWebImageDownloader *)sharedDownloader { - static dispatch_once_t once; - static id instance; - dispatch_once(&once, ^{ - instance = [self new]; - }); - return instance; -} - -- (id)init { - if ((self = [super init])) { - _operationClass = [SDWebImageDownloaderOperation class]; - _shouldDecompressImages = YES; - _executionOrder = SDWebImageDownloaderFIFOExecutionOrder; - _downloadQueue = [NSOperationQueue new]; - _downloadQueue.maxConcurrentOperationCount = 6; - _URLCallbacks = [NSMutableDictionary new]; -#ifdef SD_WEBP - _HTTPHeaders = [@{@"Accept": @"image/webp,image/*;q=0.8"} mutableCopy]; -#else - _HTTPHeaders = [@{@"Accept": @"image/*;q=0.8"} mutableCopy]; -#endif - _barrierQueue = dispatch_queue_create("com.hackemist.SDWebImageDownloaderBarrierQueue", DISPATCH_QUEUE_CONCURRENT); - _downloadTimeout = 15.0; - } - return self; -} - -- (void)dealloc { - [self.downloadQueue cancelAllOperations]; - SDDispatchQueueRelease(_barrierQueue); -} - -- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field { - if (value) { - self.HTTPHeaders[field] = value; - } - else { - [self.HTTPHeaders removeObjectForKey:field]; - } -} - -- (NSString *)valueForHTTPHeaderField:(NSString *)field { - return self.HTTPHeaders[field]; -} - -- (void)setMaxConcurrentDownloads:(NSInteger)maxConcurrentDownloads { - _downloadQueue.maxConcurrentOperationCount = maxConcurrentDownloads; -} - -- (NSUInteger)currentDownloadCount { - return _downloadQueue.operationCount; -} - -- (NSInteger)maxConcurrentDownloads { - return _downloadQueue.maxConcurrentOperationCount; -} - -- (void)setOperationClass:(Class)operationClass { - _operationClass = operationClass ?: [SDWebImageDownloaderOperation class]; -} - -- (id )downloadImageWithURL:(NSURL *)url options:(SDWebImageDownloaderOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageDownloaderCompletedBlock)completedBlock { - __block SDWebImageDownloaderOperation *operation; - __weak __typeof(self)wself = self; - - [self addProgressCallback:progressBlock andCompletedBlock:completedBlock forURL:url createCallback:^{ - NSTimeInterval timeoutInterval = wself.downloadTimeout; - if (timeoutInterval == 0.0) { - timeoutInterval = 15.0; - } - - // In order to prevent from potential duplicate caching (NSURLCache + SDImageCache) we disable the cache for image requests if told otherwise - NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:(options & SDWebImageDownloaderUseNSURLCache ? NSURLRequestUseProtocolCachePolicy : NSURLRequestReloadIgnoringLocalCacheData) timeoutInterval:timeoutInterval]; - request.HTTPShouldHandleCookies = (options & SDWebImageDownloaderHandleCookies); - request.HTTPShouldUsePipelining = YES; - if (wself.headersFilter) { - request.allHTTPHeaderFields = wself.headersFilter(url, [wself.HTTPHeaders copy]); - } - else { - request.allHTTPHeaderFields = wself.HTTPHeaders; - } - operation = [[wself.operationClass alloc] initWithRequest:request - options:options - progress:^(NSInteger receivedSize, NSInteger expectedSize) { - SDWebImageDownloader *sself = wself; - if (!sself) return; - __block NSArray *callbacksForURL; - dispatch_sync(sself.barrierQueue, ^{ - callbacksForURL = [sself.URLCallbacks[url] copy]; - }); - for (NSDictionary *callbacks in callbacksForURL) { - SDWebImageDownloaderProgressBlock callback = callbacks[kProgressCallbackKey]; - if (callback) callback(receivedSize, expectedSize); - } - } - completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) { - SDWebImageDownloader *sself = wself; - if (!sself) return; - __block NSArray *callbacksForURL; - dispatch_barrier_sync(sself.barrierQueue, ^{ - callbacksForURL = [sself.URLCallbacks[url] copy]; - if (finished) { - [sself.URLCallbacks removeObjectForKey:url]; - } - }); - for (NSDictionary *callbacks in callbacksForURL) { - SDWebImageDownloaderCompletedBlock callback = callbacks[kCompletedCallbackKey]; - if (callback) callback(image, data, error, finished); - } - } - cancelled:^{ - SDWebImageDownloader *sself = wself; - if (!sself) return; - dispatch_barrier_async(sself.barrierQueue, ^{ - [sself.URLCallbacks removeObjectForKey:url]; - }); - }]; - operation.shouldDecompressImages = wself.shouldDecompressImages; - - if (wself.username && wself.password) { - operation.credential = [NSURLCredential credentialWithUser:wself.username password:wself.password persistence:NSURLCredentialPersistenceForSession]; - } - - if (options & SDWebImageDownloaderHighPriority) { - operation.queuePriority = NSOperationQueuePriorityHigh; - } else if (options & SDWebImageDownloaderLowPriority) { - operation.queuePriority = NSOperationQueuePriorityLow; - } - - [wself.downloadQueue addOperation:operation]; - if (wself.executionOrder == SDWebImageDownloaderLIFOExecutionOrder) { - // Emulate LIFO execution order by systematically adding new operations as last operation's dependency - [wself.lastAddedOperation addDependency:operation]; - wself.lastAddedOperation = operation; - } - }]; - - return operation; -} - -- (void)addProgressCallback:(SDWebImageDownloaderProgressBlock)progressBlock andCompletedBlock:(SDWebImageDownloaderCompletedBlock)completedBlock forURL:(NSURL *)url createCallback:(SDWebImageNoParamsBlock)createCallback { - // The URL will be used as the key to the callbacks dictionary so it cannot be nil. If it is nil immediately call the completed block with no image or data. - if (url == nil) { - if (completedBlock != nil) { - completedBlock(nil, nil, nil, NO); - } - return; - } - - dispatch_barrier_sync(self.barrierQueue, ^{ - BOOL first = NO; - if (!self.URLCallbacks[url]) { - self.URLCallbacks[url] = [NSMutableArray new]; - first = YES; - } - - // Handle single download of simultaneous download request for the same URL - NSMutableArray *callbacksForURL = self.URLCallbacks[url]; - NSMutableDictionary *callbacks = [NSMutableDictionary new]; - if (progressBlock) callbacks[kProgressCallbackKey] = [progressBlock copy]; - if (completedBlock) callbacks[kCompletedCallbackKey] = [completedBlock copy]; - [callbacksForURL addObject:callbacks]; - self.URLCallbacks[url] = callbacksForURL; - - if (first) { - createCallback(); - } - }); -} - -- (void)setSuspended:(BOOL)suspended { - [self.downloadQueue setSuspended:suspended]; -} - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h b/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h deleted file mode 100644 index dd48b22..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageDownloader.h" -#import "SDWebImageOperation.h" - -extern NSString *const SDWebImageDownloadStartNotification; -extern NSString *const SDWebImageDownloadReceiveResponseNotification; -extern NSString *const SDWebImageDownloadStopNotification; -extern NSString *const SDWebImageDownloadFinishNotification; - -@interface SDWebImageDownloaderOperation : NSOperation - -/** - * The request used by the operation's connection. - */ -@property (strong, nonatomic, readonly) NSURLRequest *request; - - -@property (assign, nonatomic) BOOL shouldDecompressImages; - -/** - * Whether the URL connection should consult the credential storage for authenticating the connection. `YES` by default. - * - * This is the value that is returned in the `NSURLConnectionDelegate` method `-connectionShouldUseCredentialStorage:`. - */ -@property (nonatomic, assign) BOOL shouldUseCredentialStorage; - -/** - * The credential used for authentication challenges in `-connection:didReceiveAuthenticationChallenge:`. - * - * This will be overridden by any shared credentials that exist for the username or password of the request URL, if present. - */ -@property (nonatomic, strong) NSURLCredential *credential; - -/** - * The SDWebImageDownloaderOptions for the receiver. - */ -@property (assign, nonatomic, readonly) SDWebImageDownloaderOptions options; - -/** - * The expected size of data. - */ -@property (assign, nonatomic) NSInteger expectedSize; - -/** - * The response returned by the operation's connection. - */ -@property (strong, nonatomic) NSURLResponse *response; - -/** - * Initializes a `SDWebImageDownloaderOperation` object - * - * @see SDWebImageDownloaderOperation - * - * @param request the URL request - * @param options downloader options - * @param progressBlock the block executed when a new chunk of data arrives. - * @note the progress block is executed on a background queue - * @param completedBlock the block executed when the download is done. - * @note the completed block is executed on the main queue for success. If errors are found, there is a chance the block will be executed on a background queue - * @param cancelBlock the block executed if the download (operation) is cancelled - * - * @return the initialized instance - */ -- (id)initWithRequest:(NSURLRequest *)request - options:(SDWebImageDownloaderOptions)options - progress:(SDWebImageDownloaderProgressBlock)progressBlock - completed:(SDWebImageDownloaderCompletedBlock)completedBlock - cancelled:(SDWebImageNoParamsBlock)cancelBlock; - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m b/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m deleted file mode 100644 index 5a8bd11..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m +++ /dev/null @@ -1,466 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageDownloaderOperation.h" -#import "SDWebImageDecoder.h" -#import "UIImage+MultiFormat.h" -#import -#import "SDWebImageManager.h" - -NSString *const SDWebImageDownloadStartNotification = @"SDWebImageDownloadStartNotification"; -NSString *const SDWebImageDownloadReceiveResponseNotification = @"SDWebImageDownloadReceiveResponseNotification"; -NSString *const SDWebImageDownloadStopNotification = @"SDWebImageDownloadStopNotification"; -NSString *const SDWebImageDownloadFinishNotification = @"SDWebImageDownloadFinishNotification"; - -@interface SDWebImageDownloaderOperation () - -@property (copy, nonatomic) SDWebImageDownloaderProgressBlock progressBlock; -@property (copy, nonatomic) SDWebImageDownloaderCompletedBlock completedBlock; -@property (copy, nonatomic) SDWebImageNoParamsBlock cancelBlock; - -@property (assign, nonatomic, getter = isExecuting) BOOL executing; -@property (assign, nonatomic, getter = isFinished) BOOL finished; -@property (strong, nonatomic) NSMutableData *imageData; -@property (strong, nonatomic) NSURLConnection *connection; -@property (strong, atomic) NSThread *thread; - -#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 -@property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundTaskId; -#endif - -@end - -@implementation SDWebImageDownloaderOperation { - size_t width, height; - UIImageOrientation orientation; - BOOL responseFromCached; -} - -@synthesize executing = _executing; -@synthesize finished = _finished; - -- (id)initWithRequest:(NSURLRequest *)request - options:(SDWebImageDownloaderOptions)options - progress:(SDWebImageDownloaderProgressBlock)progressBlock - completed:(SDWebImageDownloaderCompletedBlock)completedBlock - cancelled:(SDWebImageNoParamsBlock)cancelBlock { - if ((self = [super init])) { - _request = request; - _shouldDecompressImages = YES; - _shouldUseCredentialStorage = YES; - _options = options; - _progressBlock = [progressBlock copy]; - _completedBlock = [completedBlock copy]; - _cancelBlock = [cancelBlock copy]; - _executing = NO; - _finished = NO; - _expectedSize = 0; - responseFromCached = YES; // Initially wrong until `connection:willCacheResponse:` is called or not called - } - return self; -} - -- (void)start { - @synchronized (self) { - if (self.isCancelled) { - self.finished = YES; - [self reset]; - return; - } - -#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 - Class UIApplicationClass = NSClassFromString(@"UIApplication"); - BOOL hasApplication = UIApplicationClass && [UIApplicationClass respondsToSelector:@selector(sharedApplication)]; - if (hasApplication && [self shouldContinueWhenAppEntersBackground]) { - __weak __typeof__ (self) wself = self; - UIApplication * app = [UIApplicationClass performSelector:@selector(sharedApplication)]; - self.backgroundTaskId = [app beginBackgroundTaskWithExpirationHandler:^{ - __strong __typeof (wself) sself = wself; - - if (sself) { - [sself cancel]; - - [app endBackgroundTask:sself.backgroundTaskId]; - sself.backgroundTaskId = UIBackgroundTaskInvalid; - } - }]; - } -#endif - - self.executing = YES; - self.connection = [[NSURLConnection alloc] initWithRequest:self.request delegate:self startImmediately:NO]; - self.thread = [NSThread currentThread]; - } - - [self.connection start]; - - if (self.connection) { - if (self.progressBlock) { - self.progressBlock(0, NSURLResponseUnknownLength); - } - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStartNotification object:self]; - }); - - if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_5_1) { - // Make sure to run the runloop in our background thread so it can process downloaded data - // Note: we use a timeout to work around an issue with NSURLConnection cancel under iOS 5 - // not waking up the runloop, leading to dead threads (see https://github.com/rs/SDWebImage/issues/466) - CFRunLoopRunInMode(kCFRunLoopDefaultMode, 10, false); - } - else { - CFRunLoopRun(); - } - - if (!self.isFinished) { - [self.connection cancel]; - [self connection:self.connection didFailWithError:[NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorTimedOut userInfo:@{NSURLErrorFailingURLErrorKey : self.request.URL}]]; - } - } - else { - if (self.completedBlock) { - self.completedBlock(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Connection can't be initialized"}], YES); - } - } - -#if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 - Class UIApplicationClass = NSClassFromString(@"UIApplication"); - if(!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) { - return; - } - if (self.backgroundTaskId != UIBackgroundTaskInvalid) { - UIApplication * app = [UIApplication performSelector:@selector(sharedApplication)]; - [app endBackgroundTask:self.backgroundTaskId]; - self.backgroundTaskId = UIBackgroundTaskInvalid; - } -#endif -} - -- (void)cancel { - @synchronized (self) { - if (self.thread) { - [self performSelector:@selector(cancelInternalAndStop) onThread:self.thread withObject:nil waitUntilDone:NO]; - } - else { - [self cancelInternal]; - } - } -} - -- (void)cancelInternalAndStop { - if (self.isFinished) return; - [self cancelInternal]; - CFRunLoopStop(CFRunLoopGetCurrent()); -} - -- (void)cancelInternal { - if (self.isFinished) return; - [super cancel]; - if (self.cancelBlock) self.cancelBlock(); - - if (self.connection) { - [self.connection cancel]; - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self]; - }); - - // As we cancelled the connection, its callback won't be called and thus won't - // maintain the isFinished and isExecuting flags. - if (self.isExecuting) self.executing = NO; - if (!self.isFinished) self.finished = YES; - } - - [self reset]; -} - -- (void)done { - self.finished = YES; - self.executing = NO; - [self reset]; -} - -- (void)reset { - self.cancelBlock = nil; - self.completedBlock = nil; - self.progressBlock = nil; - self.connection = nil; - self.imageData = nil; - self.thread = nil; -} - -- (void)setFinished:(BOOL)finished { - [self willChangeValueForKey:@"isFinished"]; - _finished = finished; - [self didChangeValueForKey:@"isFinished"]; -} - -- (void)setExecuting:(BOOL)executing { - [self willChangeValueForKey:@"isExecuting"]; - _executing = executing; - [self didChangeValueForKey:@"isExecuting"]; -} - -- (BOOL)isConcurrent { - return YES; -} - -#pragma mark NSURLConnection (delegate) - -- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { - - //'304 Not Modified' is an exceptional one - if (![response respondsToSelector:@selector(statusCode)] || ([((NSHTTPURLResponse *)response) statusCode] < 400 && [((NSHTTPURLResponse *)response) statusCode] != 304)) { - NSInteger expected = response.expectedContentLength > 0 ? (NSInteger)response.expectedContentLength : 0; - self.expectedSize = expected; - if (self.progressBlock) { - self.progressBlock(0, expected); - } - - self.imageData = [[NSMutableData alloc] initWithCapacity:expected]; - self.response = response; - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadReceiveResponseNotification object:self]; - }); - } - else { - NSUInteger code = [((NSHTTPURLResponse *)response) statusCode]; - - //This is the case when server returns '304 Not Modified'. It means that remote image is not changed. - //In case of 304 we need just cancel the operation and return cached image from the cache. - if (code == 304) { - [self cancelInternal]; - } else { - [self.connection cancel]; - } - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self]; - }); - - if (self.completedBlock) { - self.completedBlock(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:[((NSHTTPURLResponse *)response) statusCode] userInfo:nil], YES); - } - CFRunLoopStop(CFRunLoopGetCurrent()); - [self done]; - } -} - -- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { - [self.imageData appendData:data]; - - if ((self.options & SDWebImageDownloaderProgressiveDownload) && self.expectedSize > 0 && self.completedBlock) { - // The following code is from http://www.cocoaintheshell.com/2011/05/progressive-images-download-imageio/ - // Thanks to the author @Nyx0uf - - // Get the total bytes downloaded - const NSInteger totalSize = self.imageData.length; - - // Update the data source, we must pass ALL the data, not just the new bytes - CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)self.imageData, NULL); - - if (width + height == 0) { - CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL); - if (properties) { - NSInteger orientationValue = -1; - CFTypeRef val = CFDictionaryGetValue(properties, kCGImagePropertyPixelHeight); - if (val) CFNumberGetValue(val, kCFNumberLongType, &height); - val = CFDictionaryGetValue(properties, kCGImagePropertyPixelWidth); - if (val) CFNumberGetValue(val, kCFNumberLongType, &width); - val = CFDictionaryGetValue(properties, kCGImagePropertyOrientation); - if (val) CFNumberGetValue(val, kCFNumberNSIntegerType, &orientationValue); - CFRelease(properties); - - // When we draw to Core Graphics, we lose orientation information, - // which means the image below born of initWithCGIImage will be - // oriented incorrectly sometimes. (Unlike the image born of initWithData - // in connectionDidFinishLoading.) So save it here and pass it on later. - orientation = [[self class] orientationFromPropertyValue:(orientationValue == -1 ? 1 : orientationValue)]; - } - - } - - if (width + height > 0 && totalSize < self.expectedSize) { - // Create the image - CGImageRef partialImageRef = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL); - -#ifdef TARGET_OS_IPHONE - // Workaround for iOS anamorphic image - if (partialImageRef) { - const size_t partialHeight = CGImageGetHeight(partialImageRef); - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - CGContextRef bmContext = CGBitmapContextCreate(NULL, width, height, 8, width * 4, colorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst); - CGColorSpaceRelease(colorSpace); - if (bmContext) { - CGContextDrawImage(bmContext, (CGRect){.origin.x = 0.0f, .origin.y = 0.0f, .size.width = width, .size.height = partialHeight}, partialImageRef); - CGImageRelease(partialImageRef); - partialImageRef = CGBitmapContextCreateImage(bmContext); - CGContextRelease(bmContext); - } - else { - CGImageRelease(partialImageRef); - partialImageRef = nil; - } - } -#endif - - if (partialImageRef) { - UIImage *image = [UIImage imageWithCGImage:partialImageRef scale:1 orientation:orientation]; - NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL]; - UIImage *scaledImage = [self scaledImageForKey:key image:image]; - if (self.shouldDecompressImages) { - image = [UIImage decodedImageWithImage:scaledImage]; - } - else { - image = scaledImage; - } - CGImageRelease(partialImageRef); - dispatch_main_sync_safe(^{ - if (self.completedBlock) { - self.completedBlock(image, nil, nil, NO); - } - }); - } - } - - CFRelease(imageSource); - } - - if (self.progressBlock) { - self.progressBlock(self.imageData.length, self.expectedSize); - } -} - -+ (UIImageOrientation)orientationFromPropertyValue:(NSInteger)value { - switch (value) { - case 1: - return UIImageOrientationUp; - case 3: - return UIImageOrientationDown; - case 8: - return UIImageOrientationLeft; - case 6: - return UIImageOrientationRight; - case 2: - return UIImageOrientationUpMirrored; - case 4: - return UIImageOrientationDownMirrored; - case 5: - return UIImageOrientationLeftMirrored; - case 7: - return UIImageOrientationRightMirrored; - default: - return UIImageOrientationUp; - } -} - -- (UIImage *)scaledImageForKey:(NSString *)key image:(UIImage *)image { - return SDScaledImageForKey(key, image); -} - -- (void)connectionDidFinishLoading:(NSURLConnection *)aConnection { - SDWebImageDownloaderCompletedBlock completionBlock = self.completedBlock; - @synchronized(self) { - CFRunLoopStop(CFRunLoopGetCurrent()); - self.thread = nil; - self.connection = nil; - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self]; - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadFinishNotification object:self]; - }); - } - - if (![[NSURLCache sharedURLCache] cachedResponseForRequest:_request]) { - responseFromCached = NO; - } - - if (completionBlock) { - if (self.options & SDWebImageDownloaderIgnoreCachedResponse && responseFromCached) { - completionBlock(nil, nil, nil, YES); - } else if (self.imageData) { - UIImage *image = [UIImage sd_imageWithData:self.imageData]; - NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL]; - image = [self scaledImageForKey:key image:image]; - - // Do not force decoding animated GIFs - if (!image.images) { - if (self.shouldDecompressImages) { - image = [UIImage decodedImageWithImage:image]; - } - } - if (CGSizeEqualToSize(image.size, CGSizeZero)) { - completionBlock(nil, nil, [NSError errorWithDomain:SDWebImageErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Downloaded image has 0 pixels"}], YES); - } - else { - completionBlock(image, self.imageData, nil, YES); - } - } else { - completionBlock(nil, nil, [NSError errorWithDomain:SDWebImageErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey : @"Image data is nil"}], YES); - } - } - self.completionBlock = nil; - [self done]; -} - -- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { - @synchronized(self) { - CFRunLoopStop(CFRunLoopGetCurrent()); - self.thread = nil; - self.connection = nil; - dispatch_async(dispatch_get_main_queue(), ^{ - [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self]; - }); - } - - if (self.completedBlock) { - self.completedBlock(nil, nil, error, YES); - } - self.completionBlock = nil; - [self done]; -} - -- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse { - responseFromCached = NO; // If this method is called, it means the response wasn't read from cache - if (self.request.cachePolicy == NSURLRequestReloadIgnoringLocalCacheData) { - // Prevents caching of responses - return nil; - } - else { - return cachedResponse; - } -} - -- (BOOL)shouldContinueWhenAppEntersBackground { - return self.options & SDWebImageDownloaderContinueInBackground; -} - -- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection __unused *)connection { - return self.shouldUseCredentialStorage; -} - -- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge{ - if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { - if (!(self.options & SDWebImageDownloaderAllowInvalidSSLCertificates) && - [challenge.sender respondsToSelector:@selector(performDefaultHandlingForAuthenticationChallenge:)]) { - [challenge.sender performDefaultHandlingForAuthenticationChallenge:challenge]; - } else { - NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; - [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; - } - } else { - if ([challenge previousFailureCount] == 0) { - if (self.credential) { - [[challenge sender] useCredential:self.credential forAuthenticationChallenge:challenge]; - } else { - [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; - } - } else { - [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; - } - } -} - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageManager.h b/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageManager.h deleted file mode 100644 index 7f80e24..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageManager.h +++ /dev/null @@ -1,299 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" -#import "SDWebImageOperation.h" -#import "SDWebImageDownloader.h" -#import "SDImageCache.h" - -typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { - /** - * By default, when a URL fail to be downloaded, the URL is blacklisted so the library won't keep trying. - * This flag disable this blacklisting. - */ - SDWebImageRetryFailed = 1 << 0, - - /** - * By default, image downloads are started during UI interactions, this flags disable this feature, - * leading to delayed download on UIScrollView deceleration for instance. - */ - SDWebImageLowPriority = 1 << 1, - - /** - * This flag disables on-disk caching - */ - SDWebImageCacheMemoryOnly = 1 << 2, - - /** - * This flag enables progressive download, the image is displayed progressively during download as a browser would do. - * By default, the image is only displayed once completely downloaded. - */ - SDWebImageProgressiveDownload = 1 << 3, - - /** - * Even if the image is cached, respect the HTTP response cache control, and refresh the image from remote location if needed. - * The disk caching will be handled by NSURLCache instead of SDWebImage leading to slight performance degradation. - * This option helps deal with images changing behind the same request URL, e.g. Facebook graph api profile pics. - * If a cached image is refreshed, the completion block is called once with the cached image and again with the final image. - * - * Use this flag only if you can't make your URLs static with embeded cache busting parameter. - */ - SDWebImageRefreshCached = 1 << 4, - - /** - * In iOS 4+, continue the download of the image if the app goes to background. This is achieved by asking the system for - * extra time in background to let the request finish. If the background task expires the operation will be cancelled. - */ - SDWebImageContinueInBackground = 1 << 5, - - /** - * Handles cookies stored in NSHTTPCookieStore by setting - * NSMutableURLRequest.HTTPShouldHandleCookies = YES; - */ - SDWebImageHandleCookies = 1 << 6, - - /** - * Enable to allow untrusted SSL ceriticates. - * Useful for testing purposes. Use with caution in production. - */ - SDWebImageAllowInvalidSSLCertificates = 1 << 7, - - /** - * By default, image are loaded in the order they were queued. This flag move them to - * the front of the queue and is loaded immediately instead of waiting for the current queue to be loaded (which - * could take a while). - */ - SDWebImageHighPriority = 1 << 8, - - /** - * By default, placeholder images are loaded while the image is loading. This flag will delay the loading - * of the placeholder image until after the image has finished loading. - */ - SDWebImageDelayPlaceholder = 1 << 9, - - /** - * We usually don't call transformDownloadedImage delegate method on animated images, - * as most transformation code would mangle it. - * Use this flag to transform them anyway. - */ - SDWebImageTransformAnimatedImage = 1 << 10, - - /** - * By default, image is added to the imageView after download. But in some cases, we want to - * have the hand before setting the image (apply a filter or add it with cross-fade animation for instance) - * Use this flag if you want to manually set the image in the completion when success - */ - SDWebImageAvoidAutoSetImage = 1 << 11 -}; - -typedef void(^SDWebImageCompletionBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL); - -typedef void(^SDWebImageCompletionWithFinishedBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL); - -typedef NSString *(^SDWebImageCacheKeyFilterBlock)(NSURL *url); - - -@class SDWebImageManager; - -@protocol SDWebImageManagerDelegate - -@optional - -/** - * Controls which image should be downloaded when the image is not found in the cache. - * - * @param imageManager The current `SDWebImageManager` - * @param imageURL The url of the image to be downloaded - * - * @return Return NO to prevent the downloading of the image on cache misses. If not implemented, YES is implied. - */ -- (BOOL)imageManager:(SDWebImageManager *)imageManager shouldDownloadImageForURL:(NSURL *)imageURL; - -/** - * Allows to transform the image immediately after it has been downloaded and just before to cache it on disk and memory. - * NOTE: This method is called from a global queue in order to not to block the main thread. - * - * @param imageManager The current `SDWebImageManager` - * @param image The image to transform - * @param imageURL The url of the image to transform - * - * @return The transformed image object. - */ -- (UIImage *)imageManager:(SDWebImageManager *)imageManager transformDownloadedImage:(UIImage *)image withURL:(NSURL *)imageURL; - -@end - -/** - * The SDWebImageManager is the class behind the UIImageView+WebCache category and likes. - * It ties the asynchronous downloader (SDWebImageDownloader) with the image cache store (SDImageCache). - * You can use this class directly to benefit from web image downloading with caching in another context than - * a UIView. - * - * Here is a simple example of how to use SDWebImageManager: - * - * @code - -SDWebImageManager *manager = [SDWebImageManager sharedManager]; -[manager downloadImageWithURL:imageURL - options:0 - progress:nil - completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (image) { - // do something with image - } - }]; - - * @endcode - */ -@interface SDWebImageManager : NSObject - -@property (weak, nonatomic) id delegate; - -@property (strong, nonatomic, readonly) SDImageCache *imageCache; -@property (strong, nonatomic, readonly) SDWebImageDownloader *imageDownloader; - -/** - * The cache filter is a block used each time SDWebImageManager need to convert an URL into a cache key. This can - * be used to remove dynamic part of an image URL. - * - * The following example sets a filter in the application delegate that will remove any query-string from the - * URL before to use it as a cache key: - * - * @code - -[[SDWebImageManager sharedManager] setCacheKeyFilter:^(NSURL *url) { - url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path]; - return [url absoluteString]; -}]; - - * @endcode - */ -@property (nonatomic, copy) SDWebImageCacheKeyFilterBlock cacheKeyFilter; - -/** - * Returns global SDWebImageManager instance. - * - * @return SDWebImageManager shared instance - */ -+ (SDWebImageManager *)sharedManager; - -/** - * Downloads the image at the given URL if not present in cache or return the cached version otherwise. - * - * @param url The URL to the image - * @param options A mask to specify options to use for this request - * @param progressBlock A block called while image is downloading - * @param completedBlock A block called when operation has been completed. - * - * This parameter is required. - * - * This block has no return value and takes the requested UIImage as first parameter. - * In case of error the image parameter is nil and the second parameter may contain an NSError. - * - * The third parameter is an `SDImageCacheType` enum indicating if the image was retrived from the local cache - * or from the memory cache or from the network. - * - * The last parameter is set to NO when the SDWebImageProgressiveDownload option is used and the image is - * downloading. This block is thus called repetidly with a partial image. When image is fully downloaded, the - * block is called a last time with the full image and the last parameter set to YES. - * - * @return Returns an NSObject conforming to SDWebImageOperation. Should be an instance of SDWebImageDownloaderOperation - */ -- (id )downloadImageWithURL:(NSURL *)url - options:(SDWebImageOptions)options - progress:(SDWebImageDownloaderProgressBlock)progressBlock - completed:(SDWebImageCompletionWithFinishedBlock)completedBlock; - -/** - * Saves image to cache for given URL - * - * @param image The image to cache - * @param url The URL to the image - * - */ - -- (void)saveImageToCache:(UIImage *)image forURL:(NSURL *)url; - -/** - * Cancel all current opreations - */ -- (void)cancelAll; - -/** - * Check one or more operations running - */ -- (BOOL)isRunning; - -/** - * Check if image has already been cached - * - * @param url image url - * - * @return if the image was already cached - */ -- (BOOL)cachedImageExistsForURL:(NSURL *)url; - -/** - * Check if image has already been cached on disk only - * - * @param url image url - * - * @return if the image was already cached (disk only) - */ -- (BOOL)diskImageExistsForURL:(NSURL *)url; - -/** - * Async check if image has already been cached - * - * @param url image url - * @param completionBlock the block to be executed when the check is finished - * - * @note the completion block is always executed on the main queue - */ -- (void)cachedImageExistsForURL:(NSURL *)url - completion:(SDWebImageCheckCacheCompletionBlock)completionBlock; - -/** - * Async check if image has already been cached on disk only - * - * @param url image url - * @param completionBlock the block to be executed when the check is finished - * - * @note the completion block is always executed on the main queue - */ -- (void)diskImageExistsForURL:(NSURL *)url - completion:(SDWebImageCheckCacheCompletionBlock)completionBlock; - - -/** - *Return the cache key for a given URL - */ -- (NSString *)cacheKeyForURL:(NSURL *)url; - -@end - - -#pragma mark - Deprecated - -typedef void(^SDWebImageCompletedBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType) __deprecated_msg("Block type deprecated. Use `SDWebImageCompletionBlock`"); -typedef void(^SDWebImageCompletedWithFinishedBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) __deprecated_msg("Block type deprecated. Use `SDWebImageCompletionWithFinishedBlock`"); - - -@interface SDWebImageManager (Deprecated) - -/** - * Downloads the image at the given URL if not present in cache or return the cached version otherwise. - * - * @deprecated This method has been deprecated. Use `downloadImageWithURL:options:progress:completed:` - */ -- (id )downloadWithURL:(NSURL *)url - options:(SDWebImageOptions)options - progress:(SDWebImageDownloaderProgressBlock)progressBlock - completed:(SDWebImageCompletedWithFinishedBlock)completedBlock __deprecated_msg("Method deprecated. Use `downloadImageWithURL:options:progress:completed:`"); - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageManager.m b/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageManager.m deleted file mode 100644 index 3980ced..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageManager.m +++ /dev/null @@ -1,354 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageManager.h" -#import - -@interface SDWebImageCombinedOperation : NSObject - -@property (assign, nonatomic, getter = isCancelled) BOOL cancelled; -@property (copy, nonatomic) SDWebImageNoParamsBlock cancelBlock; -@property (strong, nonatomic) NSOperation *cacheOperation; - -@end - -@interface SDWebImageManager () - -@property (strong, nonatomic, readwrite) SDImageCache *imageCache; -@property (strong, nonatomic, readwrite) SDWebImageDownloader *imageDownloader; -@property (strong, nonatomic) NSMutableSet *failedURLs; -@property (strong, nonatomic) NSMutableArray *runningOperations; - -@end - -@implementation SDWebImageManager - -+ (id)sharedManager { - static dispatch_once_t once; - static id instance; - dispatch_once(&once, ^{ - instance = [self new]; - }); - return instance; -} - -- (id)init { - if ((self = [super init])) { - _imageCache = [self createCache]; - _imageDownloader = [SDWebImageDownloader sharedDownloader]; - _failedURLs = [NSMutableSet new]; - _runningOperations = [NSMutableArray new]; - } - return self; -} - -- (SDImageCache *)createCache { - return [SDImageCache sharedImageCache]; -} - -- (NSString *)cacheKeyForURL:(NSURL *)url { - if (self.cacheKeyFilter) { - return self.cacheKeyFilter(url); - } - else { - return [url absoluteString]; - } -} - -- (BOOL)cachedImageExistsForURL:(NSURL *)url { - NSString *key = [self cacheKeyForURL:url]; - if ([self.imageCache imageFromMemoryCacheForKey:key] != nil) return YES; - return [self.imageCache diskImageExistsWithKey:key]; -} - -- (BOOL)diskImageExistsForURL:(NSURL *)url { - NSString *key = [self cacheKeyForURL:url]; - return [self.imageCache diskImageExistsWithKey:key]; -} - -- (void)cachedImageExistsForURL:(NSURL *)url - completion:(SDWebImageCheckCacheCompletionBlock)completionBlock { - NSString *key = [self cacheKeyForURL:url]; - - BOOL isInMemoryCache = ([self.imageCache imageFromMemoryCacheForKey:key] != nil); - - if (isInMemoryCache) { - // making sure we call the completion block on the main queue - dispatch_async(dispatch_get_main_queue(), ^{ - if (completionBlock) { - completionBlock(YES); - } - }); - return; - } - - [self.imageCache diskImageExistsWithKey:key completion:^(BOOL isInDiskCache) { - // the completion block of checkDiskCacheForImageWithKey:completion: is always called on the main queue, no need to further dispatch - if (completionBlock) { - completionBlock(isInDiskCache); - } - }]; -} - -- (void)diskImageExistsForURL:(NSURL *)url - completion:(SDWebImageCheckCacheCompletionBlock)completionBlock { - NSString *key = [self cacheKeyForURL:url]; - - [self.imageCache diskImageExistsWithKey:key completion:^(BOOL isInDiskCache) { - // the completion block of checkDiskCacheForImageWithKey:completion: is always called on the main queue, no need to further dispatch - if (completionBlock) { - completionBlock(isInDiskCache); - } - }]; -} - -- (id )downloadImageWithURL:(NSURL *)url - options:(SDWebImageOptions)options - progress:(SDWebImageDownloaderProgressBlock)progressBlock - completed:(SDWebImageCompletionWithFinishedBlock)completedBlock { - // Invoking this method without a completedBlock is pointless - NSAssert(completedBlock != nil, @"If you mean to prefetch the image, use -[SDWebImagePrefetcher prefetchURLs] instead"); - - // Very common mistake is to send the URL using NSString object instead of NSURL. For some strange reason, XCode won't - // throw any warning for this type mismatch. Here we failsafe this error by allowing URLs to be passed as NSString. - if ([url isKindOfClass:NSString.class]) { - url = [NSURL URLWithString:(NSString *)url]; - } - - // Prevents app crashing on argument type error like sending NSNull instead of NSURL - if (![url isKindOfClass:NSURL.class]) { - url = nil; - } - - __block SDWebImageCombinedOperation *operation = [SDWebImageCombinedOperation new]; - __weak SDWebImageCombinedOperation *weakOperation = operation; - - BOOL isFailedUrl = NO; - @synchronized (self.failedURLs) { - isFailedUrl = [self.failedURLs containsObject:url]; - } - - if (!url || (!(options & SDWebImageRetryFailed) && isFailedUrl)) { - dispatch_main_sync_safe(^{ - NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorFileDoesNotExist userInfo:nil]; - completedBlock(nil, error, SDImageCacheTypeNone, YES, url); - }); - return operation; - } - - @synchronized (self.runningOperations) { - [self.runningOperations addObject:operation]; - } - NSString *key = [self cacheKeyForURL:url]; - - operation.cacheOperation = [self.imageCache queryDiskCacheForKey:key done:^(UIImage *image, SDImageCacheType cacheType) { - if (operation.isCancelled) { - @synchronized (self.runningOperations) { - [self.runningOperations removeObject:operation]; - } - - return; - } - - if ((!image || options & SDWebImageRefreshCached) && (![self.delegate respondsToSelector:@selector(imageManager:shouldDownloadImageForURL:)] || [self.delegate imageManager:self shouldDownloadImageForURL:url])) { - if (image && options & SDWebImageRefreshCached) { - dispatch_main_sync_safe(^{ - // If image was found in the cache bug SDWebImageRefreshCached is provided, notify about the cached image - // AND try to re-download it in order to let a chance to NSURLCache to refresh it from server. - completedBlock(image, nil, cacheType, YES, url); - }); - } - - // download if no image or requested to refresh anyway, and download allowed by delegate - SDWebImageDownloaderOptions downloaderOptions = 0; - if (options & SDWebImageLowPriority) downloaderOptions |= SDWebImageDownloaderLowPriority; - if (options & SDWebImageProgressiveDownload) downloaderOptions |= SDWebImageDownloaderProgressiveDownload; - if (options & SDWebImageRefreshCached) downloaderOptions |= SDWebImageDownloaderUseNSURLCache; - if (options & SDWebImageContinueInBackground) downloaderOptions |= SDWebImageDownloaderContinueInBackground; - if (options & SDWebImageHandleCookies) downloaderOptions |= SDWebImageDownloaderHandleCookies; - if (options & SDWebImageAllowInvalidSSLCertificates) downloaderOptions |= SDWebImageDownloaderAllowInvalidSSLCertificates; - if (options & SDWebImageHighPriority) downloaderOptions |= SDWebImageDownloaderHighPriority; - if (image && options & SDWebImageRefreshCached) { - // force progressive off if image already cached but forced refreshing - downloaderOptions &= ~SDWebImageDownloaderProgressiveDownload; - // ignore image read from NSURLCache if image if cached but force refreshing - downloaderOptions |= SDWebImageDownloaderIgnoreCachedResponse; - } - id subOperation = [self.imageDownloader downloadImageWithURL:url options:downloaderOptions progress:progressBlock completed:^(UIImage *downloadedImage, NSData *data, NSError *error, BOOL finished) { - if (weakOperation.isCancelled) { - // Do nothing if the operation was cancelled - // See #699 for more details - // if we would call the completedBlock, there could be a race condition between this block and another completedBlock for the same object, so if this one is called second, we will overwrite the new data - } - else if (error) { - dispatch_main_sync_safe(^{ - if (!weakOperation.isCancelled) { - completedBlock(nil, error, SDImageCacheTypeNone, finished, url); - } - }); - - BOOL shouldBeFailedURLAlliOSVersion = (error.code != NSURLErrorNotConnectedToInternet && error.code != NSURLErrorCancelled && error.code != NSURLErrorTimedOut); - BOOL shouldBeFailedURLiOS7 = (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1 && error.code != NSURLErrorInternationalRoamingOff && error.code != NSURLErrorCallIsActive && error.code != NSURLErrorDataNotAllowed); - if (shouldBeFailedURLAlliOSVersion || shouldBeFailedURLiOS7) { - @synchronized (self.failedURLs) { - [self.failedURLs addObject:url]; - } - } - } - else { - if ((options & SDWebImageRetryFailed)) { - @synchronized (self.failedURLs) { - [self.failedURLs removeObject:url]; - } - } - - BOOL cacheOnDisk = !(options & SDWebImageCacheMemoryOnly); - - if (options & SDWebImageRefreshCached && image && !downloadedImage) { - // Image refresh hit the NSURLCache cache, do not call the completion block - } - else if (downloadedImage && (!downloadedImage.images || (options & SDWebImageTransformAnimatedImage)) && [self.delegate respondsToSelector:@selector(imageManager:transformDownloadedImage:withURL:)]) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ - UIImage *transformedImage = [self.delegate imageManager:self transformDownloadedImage:downloadedImage withURL:url]; - - if (transformedImage && finished) { - BOOL imageWasTransformed = ![transformedImage isEqual:downloadedImage]; - [self.imageCache storeImage:transformedImage recalculateFromImage:imageWasTransformed imageData:(imageWasTransformed ? nil : data) forKey:key toDisk:cacheOnDisk]; - } - - dispatch_main_sync_safe(^{ - if (!weakOperation.isCancelled) { - completedBlock(transformedImage, nil, SDImageCacheTypeNone, finished, url); - } - }); - }); - } - else { - if (downloadedImage && finished) { - [self.imageCache storeImage:downloadedImage recalculateFromImage:NO imageData:data forKey:key toDisk:cacheOnDisk]; - } - - dispatch_main_sync_safe(^{ - if (!weakOperation.isCancelled) { - completedBlock(downloadedImage, nil, SDImageCacheTypeNone, finished, url); - } - }); - } - } - - if (finished) { - @synchronized (self.runningOperations) { - [self.runningOperations removeObject:operation]; - } - } - }]; - operation.cancelBlock = ^{ - [subOperation cancel]; - - @synchronized (self.runningOperations) { - [self.runningOperations removeObject:weakOperation]; - } - }; - } - else if (image) { - dispatch_main_sync_safe(^{ - if (!weakOperation.isCancelled) { - completedBlock(image, nil, cacheType, YES, url); - } - }); - @synchronized (self.runningOperations) { - [self.runningOperations removeObject:operation]; - } - } - else { - // Image not in cache and download disallowed by delegate - dispatch_main_sync_safe(^{ - if (!weakOperation.isCancelled) { - completedBlock(nil, nil, SDImageCacheTypeNone, YES, url); - } - }); - @synchronized (self.runningOperations) { - [self.runningOperations removeObject:operation]; - } - } - }]; - - return operation; -} - -- (void)saveImageToCache:(UIImage *)image forURL:(NSURL *)url { - if (image && url) { - NSString *key = [self cacheKeyForURL:url]; - [self.imageCache storeImage:image forKey:key toDisk:YES]; - } -} - -- (void)cancelAll { - @synchronized (self.runningOperations) { - NSArray *copiedOperations = [self.runningOperations copy]; - [copiedOperations makeObjectsPerformSelector:@selector(cancel)]; - [self.runningOperations removeObjectsInArray:copiedOperations]; - } -} - -- (BOOL)isRunning { - return self.runningOperations.count > 0; -} - -@end - - -@implementation SDWebImageCombinedOperation - -- (void)setCancelBlock:(SDWebImageNoParamsBlock)cancelBlock { - // check if the operation is already cancelled, then we just call the cancelBlock - if (self.isCancelled) { - if (cancelBlock) { - cancelBlock(); - } - _cancelBlock = nil; // don't forget to nil the cancelBlock, otherwise we will get crashes - } else { - _cancelBlock = [cancelBlock copy]; - } -} - -- (void)cancel { - self.cancelled = YES; - if (self.cacheOperation) { - [self.cacheOperation cancel]; - self.cacheOperation = nil; - } - if (self.cancelBlock) { - self.cancelBlock(); - - // TODO: this is a temporary fix to #809. - // Until we can figure the exact cause of the crash, going with the ivar instead of the setter -// self.cancelBlock = nil; - _cancelBlock = nil; - } -} - -@end - - -@implementation SDWebImageManager (Deprecated) - -// deprecated method, uses the non deprecated method -// adapter for the completion block -- (id )downloadWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedWithFinishedBlock)completedBlock { - return [self downloadImageWithURL:url - options:options - progress:progressBlock - completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType, finished); - } - }]; -} - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h b/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h deleted file mode 100644 index 71094ee..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImageOperation.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import - -@protocol SDWebImageOperation - -- (void)cancel; - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h b/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h deleted file mode 100644 index 7bb67ac..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageManager.h" - -@class SDWebImagePrefetcher; - -@protocol SDWebImagePrefetcherDelegate - -@optional - -/** - * Called when an image was prefetched. - * - * @param imagePrefetcher The current image prefetcher - * @param imageURL The image url that was prefetched - * @param finishedCount The total number of images that were prefetched (successful or not) - * @param totalCount The total number of images that were to be prefetched - */ -- (void)imagePrefetcher:(SDWebImagePrefetcher *)imagePrefetcher didPrefetchURL:(NSURL *)imageURL finishedCount:(NSUInteger)finishedCount totalCount:(NSUInteger)totalCount; - -/** - * Called when all images are prefetched. - * @param imagePrefetcher The current image prefetcher - * @param totalCount The total number of images that were prefetched (whether successful or not) - * @param skippedCount The total number of images that were skipped - */ -- (void)imagePrefetcher:(SDWebImagePrefetcher *)imagePrefetcher didFinishWithTotalCount:(NSUInteger)totalCount skippedCount:(NSUInteger)skippedCount; - -@end - -typedef void(^SDWebImagePrefetcherProgressBlock)(NSUInteger noOfFinishedUrls, NSUInteger noOfTotalUrls); -typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls, NSUInteger noOfSkippedUrls); - -/** - * Prefetch some URLs in the cache for future use. Images are downloaded in low priority. - */ -@interface SDWebImagePrefetcher : NSObject - -/** - * The web image manager - */ -@property (strong, nonatomic, readonly) SDWebImageManager *manager; - -/** - * Maximum number of URLs to prefetch at the same time. Defaults to 3. - */ -@property (nonatomic, assign) NSUInteger maxConcurrentDownloads; - -/** - * SDWebImageOptions for prefetcher. Defaults to SDWebImageLowPriority. - */ -@property (nonatomic, assign) SDWebImageOptions options; - -/** - * Queue options for Prefetcher. Defaults to Main Queue. - */ -@property (nonatomic, assign) dispatch_queue_t prefetcherQueue; - -@property (weak, nonatomic) id delegate; - -/** - * Return the global image prefetcher instance. - */ -+ (SDWebImagePrefetcher *)sharedImagePrefetcher; - -/** - * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching, - * currently one image is downloaded at a time, - * and skips images for failed downloads and proceed to the next image in the list - * - * @param urls list of URLs to prefetch - */ -- (void)prefetchURLs:(NSArray *)urls; - -/** - * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching, - * currently one image is downloaded at a time, - * and skips images for failed downloads and proceed to the next image in the list - * - * @param urls list of URLs to prefetch - * @param progressBlock block to be called when progress updates; - * first parameter is the number of completed (successful or not) requests, - * second parameter is the total number of images originally requested to be prefetched - * @param completionBlock block to be called when prefetching is completed - * first param is the number of completed (successful or not) requests, - * second parameter is the number of skipped requests - */ -- (void)prefetchURLs:(NSArray *)urls progress:(SDWebImagePrefetcherProgressBlock)progressBlock completed:(SDWebImagePrefetcherCompletionBlock)completionBlock; - -/** - * Remove and cancel queued list - */ -- (void)cancelPrefetching; - - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m b/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m deleted file mode 100644 index 8756bd0..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m +++ /dev/null @@ -1,145 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImagePrefetcher.h" - -#if (!defined(DEBUG) && !defined (SD_VERBOSE)) || defined(SD_LOG_NONE) -#define NSLog(...) -#endif - -@interface SDWebImagePrefetcher () - -@property (strong, nonatomic) SDWebImageManager *manager; -@property (strong, nonatomic) NSArray *prefetchURLs; -@property (assign, nonatomic) NSUInteger requestedCount; -@property (assign, nonatomic) NSUInteger skippedCount; -@property (assign, nonatomic) NSUInteger finishedCount; -@property (assign, nonatomic) NSTimeInterval startedTime; -@property (copy, nonatomic) SDWebImagePrefetcherCompletionBlock completionBlock; -@property (copy, nonatomic) SDWebImagePrefetcherProgressBlock progressBlock; - -@end - -@implementation SDWebImagePrefetcher - -+ (SDWebImagePrefetcher *)sharedImagePrefetcher { - static dispatch_once_t once; - static id instance; - dispatch_once(&once, ^{ - instance = [self new]; - }); - return instance; -} - -- (id)init { - if ((self = [super init])) { - _manager = [SDWebImageManager new]; - _options = SDWebImageLowPriority; - _prefetcherQueue = dispatch_get_main_queue(); - self.maxConcurrentDownloads = 3; - } - return self; -} - -- (void)setMaxConcurrentDownloads:(NSUInteger)maxConcurrentDownloads { - self.manager.imageDownloader.maxConcurrentDownloads = maxConcurrentDownloads; -} - -- (NSUInteger)maxConcurrentDownloads { - return self.manager.imageDownloader.maxConcurrentDownloads; -} - -- (void)startPrefetchingAtIndex:(NSUInteger)index { - if (index >= self.prefetchURLs.count) return; - self.requestedCount++; - [self.manager downloadImageWithURL:self.prefetchURLs[index] options:self.options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (!finished) return; - self.finishedCount++; - - if (image) { - if (self.progressBlock) { - self.progressBlock(self.finishedCount,[self.prefetchURLs count]); - } - NSLog(@"Prefetched %@ out of %@", @(self.finishedCount), @(self.prefetchURLs.count)); - } - else { - if (self.progressBlock) { - self.progressBlock(self.finishedCount,[self.prefetchURLs count]); - } - NSLog(@"Prefetched %@ out of %@ (Failed)", @(self.finishedCount), @(self.prefetchURLs.count)); - - // Add last failed - self.skippedCount++; - } - if ([self.delegate respondsToSelector:@selector(imagePrefetcher:didPrefetchURL:finishedCount:totalCount:)]) { - [self.delegate imagePrefetcher:self - didPrefetchURL:self.prefetchURLs[index] - finishedCount:self.finishedCount - totalCount:self.prefetchURLs.count - ]; - } - if (self.prefetchURLs.count > self.requestedCount) { - dispatch_async(self.prefetcherQueue, ^{ - [self startPrefetchingAtIndex:self.requestedCount]; - }); - } - else if (self.finishedCount == self.requestedCount) { - [self reportStatus]; - if (self.completionBlock) { - self.completionBlock(self.finishedCount, self.skippedCount); - self.completionBlock = nil; - } - self.progressBlock = nil; - } - }]; -} - -- (void)reportStatus { - NSUInteger total = [self.prefetchURLs count]; - NSLog(@"Finished prefetching (%@ successful, %@ skipped, timeElasped %.2f)", @(total - self.skippedCount), @(self.skippedCount), CFAbsoluteTimeGetCurrent() - self.startedTime); - if ([self.delegate respondsToSelector:@selector(imagePrefetcher:didFinishWithTotalCount:skippedCount:)]) { - [self.delegate imagePrefetcher:self - didFinishWithTotalCount:(total - self.skippedCount) - skippedCount:self.skippedCount - ]; - } -} - -- (void)prefetchURLs:(NSArray *)urls { - [self prefetchURLs:urls progress:nil completed:nil]; -} - -- (void)prefetchURLs:(NSArray *)urls progress:(SDWebImagePrefetcherProgressBlock)progressBlock completed:(SDWebImagePrefetcherCompletionBlock)completionBlock { - [self cancelPrefetching]; // Prevent duplicate prefetch request - self.startedTime = CFAbsoluteTimeGetCurrent(); - self.prefetchURLs = urls; - self.completionBlock = completionBlock; - self.progressBlock = progressBlock; - - if(urls.count == 0){ - if(completionBlock){ - completionBlock(0,0); - } - }else{ - // Starts prefetching from the very first image on the list with the max allowed concurrency - NSUInteger listCount = self.prefetchURLs.count; - for (NSUInteger i = 0; i < self.maxConcurrentDownloads && self.requestedCount < listCount; i++) { - [self startPrefetchingAtIndex:i]; - } - } -} - -- (void)cancelPrefetching { - self.prefetchURLs = nil; - self.skippedCount = 0; - self.requestedCount = 0; - self.finishedCount = 0; - [self.manager cancelAll]; -} - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h b/FoodbLog/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h deleted file mode 100644 index 48ad0d5..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h +++ /dev/null @@ -1,229 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" -#import "SDWebImageManager.h" - -/** - * Integrates SDWebImage async downloading and caching of remote images with UIButtonView. - */ -@interface UIButton (WebCache) - -/** - * Get the current image URL. - */ -- (NSURL *)sd_currentImageURL; - -/** - * Get the image URL for a control state. - * - * @param state Which state you want to know the URL for. The values are described in UIControlState. - */ -- (NSURL *)sd_imageURLForState:(UIControlState)state; - -/** - * Set the imageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - */ -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state; - -/** - * Set the imageView `image` with an `url` and a placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @see sd_setImageWithURL:placeholderImage:options: - */ -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - */ -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options; - -/** - * Set the imageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the backgroundImageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - */ -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state; - -/** - * Set the backgroundImageView `image` with an `url` and a placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @see sd_setImageWithURL:placeholderImage:options: - */ -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder; - -/** - * Set the backgroundImageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - */ -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options; - -/** - * Set the backgroundImageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the backgroundImageView `image` with an `url`, placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param state The state that uses the specified title. The values are described in UIControlState. - * @param placeholder The image to be set initially, until the image request finishes. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the backgroundImageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Cancel the current image download - */ -- (void)sd_cancelImageLoadForState:(UIControlState)state; - -/** - * Cancel the current backgroundImage download - */ -- (void)sd_cancelBackgroundImageLoadForState:(UIControlState)state; - -@end - - -@interface UIButton (WebCacheDeprecated) - -- (NSURL *)currentImageURL __deprecated_msg("Use `sd_currentImageURL`"); -- (NSURL *)imageURLForState:(UIControlState)state __deprecated_msg("Use `sd_imageURLForState:`"); - -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:`"); -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:`"); -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:options:`"); - -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:completed:`"); -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:completed:`"); -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:forState:placeholderImage:options:completed:`"); - -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:`"); -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:`"); -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:options:`"); - -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:completed:`"); -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:completed:`"); -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setBackgroundImageWithURL:forState:placeholderImage:options:completed:`"); - -- (void)cancelCurrentImageLoad __deprecated_msg("Use `sd_cancelImageLoadForState:`"); -- (void)cancelBackgroundImageLoadForState:(UIControlState)state __deprecated_msg("Use `sd_cancelBackgroundImageLoadForState:`"); - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/UIButton+WebCache.m b/FoodbLog/Pods/SDWebImage/SDWebImage/UIButton+WebCache.m deleted file mode 100644 index 33f7c29..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/UIButton+WebCache.m +++ /dev/null @@ -1,260 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIButton+WebCache.h" -#import "objc/runtime.h" -#import "UIView+WebCacheOperation.h" - -static char imageURLStorageKey; - -@implementation UIButton (WebCache) - -- (NSURL *)sd_currentImageURL { - NSURL *url = self.imageURLStorage[@(self.state)]; - - if (!url) { - url = self.imageURLStorage[@(UIControlStateNormal)]; - } - - return url; -} - -- (NSURL *)sd_imageURLForState:(UIControlState)state { - return self.imageURLStorage[@(state)]; -} - -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state { - [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil]; -} - -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil]; -} - -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil]; -} - -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock { - - [self setImage:placeholder forState:state]; - [self sd_cancelImageLoadForState:state]; - - if (!url) { - [self.imageURLStorage removeObjectForKey:@(state)]; - - dispatch_main_async_safe(^{ - NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; - if (completedBlock) { - completedBlock(nil, error, SDImageCacheTypeNone, url); - } - }); - - return; - } - - self.imageURLStorage[@(state)] = url; - - __weak __typeof(self)wself = self; - id operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (!wself) return; - dispatch_main_sync_safe(^{ - __strong UIButton *sself = wself; - if (!sself) return; - if (image) { - [sself setImage:image forState:state]; - } - if (completedBlock && finished) { - completedBlock(image, error, cacheType, url); - } - }); - }]; - [self sd_setImageLoadOperation:operation forState:state]; -} - -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil]; -} - -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil]; -} - -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil]; -} - -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:completedBlock]; -} - -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:completedBlock]; -} - -- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_cancelImageLoadForState:state]; - - [self setBackgroundImage:placeholder forState:state]; - - if (url) { - __weak __typeof(self)wself = self; - id operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (!wself) return; - dispatch_main_sync_safe(^{ - __strong UIButton *sself = wself; - if (!sself) return; - if (image) { - [sself setBackgroundImage:image forState:state]; - } - if (completedBlock && finished) { - completedBlock(image, error, cacheType, url); - } - }); - }]; - [self sd_setBackgroundImageLoadOperation:operation forState:state]; - } else { - dispatch_main_async_safe(^{ - NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; - if (completedBlock) { - completedBlock(nil, error, SDImageCacheTypeNone, url); - } - }); - } -} - -- (void)sd_setImageLoadOperation:(id)operation forState:(UIControlState)state { - [self sd_setImageLoadOperation:operation forKey:[NSString stringWithFormat:@"UIButtonImageOperation%@", @(state)]]; -} - -- (void)sd_cancelImageLoadForState:(UIControlState)state { - [self sd_cancelImageLoadOperationWithKey:[NSString stringWithFormat:@"UIButtonImageOperation%@", @(state)]]; -} - -- (void)sd_setBackgroundImageLoadOperation:(id)operation forState:(UIControlState)state { - [self sd_setImageLoadOperation:operation forKey:[NSString stringWithFormat:@"UIButtonBackgroundImageOperation%@", @(state)]]; -} - -- (void)sd_cancelBackgroundImageLoadForState:(UIControlState)state { - [self sd_cancelImageLoadOperationWithKey:[NSString stringWithFormat:@"UIButtonBackgroundImageOperation%@", @(state)]]; -} - -- (NSMutableDictionary *)imageURLStorage { - NSMutableDictionary *storage = objc_getAssociatedObject(self, &imageURLStorageKey); - if (!storage) - { - storage = [NSMutableDictionary dictionary]; - objc_setAssociatedObject(self, &imageURLStorageKey, storage, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - } - - return storage; -} - -@end - - -@implementation UIButton (WebCacheDeprecated) - -- (NSURL *)currentImageURL { - return [self sd_currentImageURL]; -} - -- (NSURL *)imageURLForState:(UIControlState)state { - return [self sd_imageURLForState:state]; -} - -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state { - [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil]; -} - -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil]; -} - -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil]; -} - -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setImageWithURL:url forState:state placeholderImage:nil options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setImageWithURL:url forState:state placeholderImage:placeholder options:options completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:nil]; -} - -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:nil]; -} - -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options completed:nil]; -} - -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:nil options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setBackgroundImageWithURL:url forState:state placeholderImage:placeholder options:options completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)cancelCurrentImageLoad { - // in a backwards compatible manner, cancel for current state - [self sd_cancelImageLoadForState:self.state]; -} - -- (void)cancelBackgroundImageLoadForState:(UIControlState)state { - [self sd_cancelBackgroundImageLoadForState:state]; -} - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/UIImage+GIF.h b/FoodbLog/Pods/SDWebImage/SDWebImage/UIImage+GIF.h deleted file mode 100755 index 084f424..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/UIImage+GIF.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// UIImage+GIF.h -// LBGIFImage -// -// Created by Laurin Brandner on 06.01.12. -// Copyright (c) 2012 __MyCompanyName__. All rights reserved. -// - -#import - -@interface UIImage (GIF) - -+ (UIImage *)sd_animatedGIFNamed:(NSString *)name; - -+ (UIImage *)sd_animatedGIFWithData:(NSData *)data; - -- (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size; - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/UIImage+GIF.m b/FoodbLog/Pods/SDWebImage/SDWebImage/UIImage+GIF.m deleted file mode 100755 index a703637..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/UIImage+GIF.m +++ /dev/null @@ -1,158 +0,0 @@ -// -// UIImage+GIF.m -// LBGIFImage -// -// Created by Laurin Brandner on 06.01.12. -// Copyright (c) 2012 __MyCompanyName__. All rights reserved. -// - -#import "UIImage+GIF.h" -#import - -@implementation UIImage (GIF) - -+ (UIImage *)sd_animatedGIFWithData:(NSData *)data { - if (!data) { - return nil; - } - - CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL); - - size_t count = CGImageSourceGetCount(source); - - UIImage *animatedImage; - - if (count <= 1) { - animatedImage = [[UIImage alloc] initWithData:data]; - } - else { - NSMutableArray *images = [NSMutableArray array]; - - NSTimeInterval duration = 0.0f; - - for (size_t i = 0; i < count; i++) { - CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL); - - duration += [self sd_frameDurationAtIndex:i source:source]; - - [images addObject:[UIImage imageWithCGImage:image scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp]]; - - CGImageRelease(image); - } - - if (!duration) { - duration = (1.0f / 10.0f) * count; - } - - animatedImage = [UIImage animatedImageWithImages:images duration:duration]; - } - - CFRelease(source); - - return animatedImage; -} - -+ (float)sd_frameDurationAtIndex:(NSUInteger)index source:(CGImageSourceRef)source { - float frameDuration = 0.1f; - CFDictionaryRef cfFrameProperties = CGImageSourceCopyPropertiesAtIndex(source, index, nil); - NSDictionary *frameProperties = (__bridge NSDictionary *)cfFrameProperties; - NSDictionary *gifProperties = frameProperties[(NSString *)kCGImagePropertyGIFDictionary]; - - NSNumber *delayTimeUnclampedProp = gifProperties[(NSString *)kCGImagePropertyGIFUnclampedDelayTime]; - if (delayTimeUnclampedProp) { - frameDuration = [delayTimeUnclampedProp floatValue]; - } - else { - - NSNumber *delayTimeProp = gifProperties[(NSString *)kCGImagePropertyGIFDelayTime]; - if (delayTimeProp) { - frameDuration = [delayTimeProp floatValue]; - } - } - - // Many annoying ads specify a 0 duration to make an image flash as quickly as possible. - // We follow Firefox's behavior and use a duration of 100 ms for any frames that specify - // a duration of <= 10 ms. See and - // for more information. - - if (frameDuration < 0.011f) { - frameDuration = 0.100f; - } - - CFRelease(cfFrameProperties); - return frameDuration; -} - -+ (UIImage *)sd_animatedGIFNamed:(NSString *)name { - CGFloat scale = [UIScreen mainScreen].scale; - - if (scale > 1.0f) { - NSString *retinaPath = [[NSBundle mainBundle] pathForResource:[name stringByAppendingString:@"@2x"] ofType:@"gif"]; - - NSData *data = [NSData dataWithContentsOfFile:retinaPath]; - - if (data) { - return [UIImage sd_animatedGIFWithData:data]; - } - - NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@"gif"]; - - data = [NSData dataWithContentsOfFile:path]; - - if (data) { - return [UIImage sd_animatedGIFWithData:data]; - } - - return [UIImage imageNamed:name]; - } - else { - NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@"gif"]; - - NSData *data = [NSData dataWithContentsOfFile:path]; - - if (data) { - return [UIImage sd_animatedGIFWithData:data]; - } - - return [UIImage imageNamed:name]; - } -} - -- (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size { - if (CGSizeEqualToSize(self.size, size) || CGSizeEqualToSize(size, CGSizeZero)) { - return self; - } - - CGSize scaledSize = size; - CGPoint thumbnailPoint = CGPointZero; - - CGFloat widthFactor = size.width / self.size.width; - CGFloat heightFactor = size.height / self.size.height; - CGFloat scaleFactor = (widthFactor > heightFactor) ? widthFactor : heightFactor; - scaledSize.width = self.size.width * scaleFactor; - scaledSize.height = self.size.height * scaleFactor; - - if (widthFactor > heightFactor) { - thumbnailPoint.y = (size.height - scaledSize.height) * 0.5; - } - else if (widthFactor < heightFactor) { - thumbnailPoint.x = (size.width - scaledSize.width) * 0.5; - } - - NSMutableArray *scaledImages = [NSMutableArray array]; - - UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); - - for (UIImage *image in self.images) { - [image drawInRect:CGRectMake(thumbnailPoint.x, thumbnailPoint.y, scaledSize.width, scaledSize.height)]; - UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); - - [scaledImages addObject:newImage]; - } - - UIGraphicsEndImageContext(); - - return [UIImage animatedImageWithImages:scaledImages duration:self.duration]; -} - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h b/FoodbLog/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h deleted file mode 100644 index 186ebc0..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UIImage+MultiFormat.h -// SDWebImage -// -// Created by Olivier Poitrey on 07/06/13. -// Copyright (c) 2013 Dailymotion. All rights reserved. -// - -#import - -@interface UIImage (MultiFormat) - -+ (UIImage *)sd_imageWithData:(NSData *)data; - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m b/FoodbLog/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m deleted file mode 100644 index a830754..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/UIImage+MultiFormat.m +++ /dev/null @@ -1,118 +0,0 @@ -// -// UIImage+MultiFormat.m -// SDWebImage -// -// Created by Olivier Poitrey on 07/06/13. -// Copyright (c) 2013 Dailymotion. All rights reserved. -// - -#import "UIImage+MultiFormat.h" -#import "UIImage+GIF.h" -#import "NSData+ImageContentType.h" -#import - -#ifdef SD_WEBP -#import "UIImage+WebP.h" -#endif - -@implementation UIImage (MultiFormat) - -+ (UIImage *)sd_imageWithData:(NSData *)data { - if (!data) { - return nil; - } - - UIImage *image; - NSString *imageContentType = [NSData sd_contentTypeForImageData:data]; - if ([imageContentType isEqualToString:@"image/gif"]) { - image = [UIImage sd_animatedGIFWithData:data]; - } -#ifdef SD_WEBP - else if ([imageContentType isEqualToString:@"image/webp"]) - { - image = [UIImage sd_imageWithWebPData:data]; - } -#endif - else { - image = [[UIImage alloc] initWithData:data]; - UIImageOrientation orientation = [self sd_imageOrientationFromImageData:data]; - if (orientation != UIImageOrientationUp) { - image = [UIImage imageWithCGImage:image.CGImage - scale:image.scale - orientation:orientation]; - } - } - - - return image; -} - - -+(UIImageOrientation)sd_imageOrientationFromImageData:(NSData *)imageData { - UIImageOrientation result = UIImageOrientationUp; - CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL); - if (imageSource) { - CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL); - if (properties) { - CFTypeRef val; - int exifOrientation; - val = CFDictionaryGetValue(properties, kCGImagePropertyOrientation); - if (val) { - CFNumberGetValue(val, kCFNumberIntType, &exifOrientation); - result = [self sd_exifOrientationToiOSOrientation:exifOrientation]; - } // else - if it's not set it remains at up - CFRelease((CFTypeRef) properties); - } else { - //NSLog(@"NO PROPERTIES, FAIL"); - } - CFRelease(imageSource); - } - return result; -} - -#pragma mark EXIF orientation tag converter -// Convert an EXIF image orientation to an iOS one. -// reference see here: http://sylvana.net/jpegcrop/exif_orientation.html -+ (UIImageOrientation) sd_exifOrientationToiOSOrientation:(int)exifOrientation { - UIImageOrientation orientation = UIImageOrientationUp; - switch (exifOrientation) { - case 1: - orientation = UIImageOrientationUp; - break; - - case 3: - orientation = UIImageOrientationDown; - break; - - case 8: - orientation = UIImageOrientationLeft; - break; - - case 6: - orientation = UIImageOrientationRight; - break; - - case 2: - orientation = UIImageOrientationUpMirrored; - break; - - case 4: - orientation = UIImageOrientationDownMirrored; - break; - - case 5: - orientation = UIImageOrientationLeftMirrored; - break; - - case 7: - orientation = UIImageOrientationRightMirrored; - break; - default: - break; - } - return orientation; -} - - - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h b/FoodbLog/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h deleted file mode 100644 index 57f708f..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageCompat.h" -#import "SDWebImageManager.h" - -/** - * Integrates SDWebImage async downloading and caching of remote images with UIImageView for highlighted state. - */ -@interface UIImageView (HighlightedWebCache) - -/** - * Set the imageView `highlightedImage` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - */ -- (void)sd_setHighlightedImageWithURL:(NSURL *)url; - -/** - * Set the imageView `highlightedImage` with an `url` and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - */ -- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options; - -/** - * Set the imageView `highlightedImage` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the imageView `highlightedImage` with an `url` and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the imageView `highlightedImage` with an `url` and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param progressBlock A block called while image is downloading - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Cancel the current download - */ -- (void)sd_cancelCurrentHighlightedImageLoad; - -@end - - -@interface UIImageView (HighlightedWebCacheDeprecated) - -- (void)setHighlightedImageWithURL:(NSURL *)url __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:`"); -- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:options:`"); -- (void)setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:completed:`"); -- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:options:completed:`"); -- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setHighlightedImageWithURL:options:progress:completed:`"); - -- (void)cancelCurrentHighlightedImageLoad __deprecated_msg("Use `sd_cancelCurrentHighlightedImageLoad`"); - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m b/FoodbLog/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m deleted file mode 100644 index eed798f..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.m +++ /dev/null @@ -1,107 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIImageView+HighlightedWebCache.h" -#import "UIView+WebCacheOperation.h" - -#define UIImageViewHighlightedWebCacheOperationKey @"highlightedImage" - -@implementation UIImageView (HighlightedWebCache) - -- (void)sd_setHighlightedImageWithURL:(NSURL *)url { - [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:nil]; -} - -- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options { - [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:nil]; -} - -- (void)sd_setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:completedBlock]; -} - -- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:completedBlock]; -} - -- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_cancelCurrentHighlightedImageLoad]; - - if (url) { - __weak __typeof(self)wself = self; - id operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (!wself) return; - dispatch_main_sync_safe (^ - { - if (!wself) return; - if (image) { - wself.highlightedImage = image; - [wself setNeedsLayout]; - } - if (completedBlock && finished) { - completedBlock(image, error, cacheType, url); - } - }); - }]; - [self sd_setImageLoadOperation:operation forKey:UIImageViewHighlightedWebCacheOperationKey]; - } else { - dispatch_main_async_safe(^{ - NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; - if (completedBlock) { - completedBlock(nil, error, SDImageCacheTypeNone, url); - } - }); - } -} - -- (void)sd_cancelCurrentHighlightedImageLoad { - [self sd_cancelImageLoadOperationWithKey:UIImageViewHighlightedWebCacheOperationKey]; -} - -@end - - -@implementation UIImageView (HighlightedWebCacheDeprecated) - -- (void)setHighlightedImageWithURL:(NSURL *)url { - [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:nil]; -} - -- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options { - [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:nil]; -} - -- (void)setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setHighlightedImageWithURL:url options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setHighlightedImageWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setHighlightedImageWithURL:url options:0 progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)cancelCurrentHighlightedImageLoad { - [self sd_cancelCurrentHighlightedImageLoad]; -} - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h b/FoodbLog/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h deleted file mode 100644 index e7489f4..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h +++ /dev/null @@ -1,201 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "SDWebImageCompat.h" -#import "SDWebImageManager.h" - -/** - * Integrates SDWebImage async downloading and caching of remote images with UIImageView. - * - * Usage with a UITableViewCell sub-class: - * - * @code - -#import - -... - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *MyIdentifier = @"MyIdentifier"; - - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; - - if (cell == nil) { - cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] - autorelease]; - } - - // Here we use the provided sd_setImageWithURL: method to load the web image - // Ensure you use a placeholder image otherwise cells will be initialized with no image - [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://example.com/image.jpg"] - placeholderImage:[UIImage imageNamed:@"placeholder"]]; - - cell.textLabel.text = @"My Text"; - return cell; -} - - * @endcode - */ -@interface UIImageView (WebCache) - -/** - * Get the current image URL. - * - * Note that because of the limitations of categories this property can get out of sync - * if you use sd_setImage: directly. - */ -- (NSURL *)sd_imageURL; - -/** - * Set the imageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - */ -- (void)sd_setImageWithURL:(NSURL *)url; - -/** - * Set the imageView `image` with an `url` and a placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @see sd_setImageWithURL:placeholderImage:options: - */ -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - */ -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options; - -/** - * Set the imageView `image` with an `url`. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url`, placeholder and custom options. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param progressBlock A block called while image is downloading - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Set the imageView `image` with an `url` and a optionaly placeholder image. - * - * The download is asynchronous and cached. - * - * @param url The url for the image. - * @param placeholder The image to be set initially, until the image request finishes. - * @param options The options to use when downloading the image. @see SDWebImageOptions for the possible values. - * @param progressBlock A block called while image is downloading - * @param completedBlock A block called when operation has been completed. This block has no return value - * and takes the requested UIImage as first parameter. In case of error the image parameter - * is nil and the second parameter may contain an NSError. The third parameter is a Boolean - * indicating if the image was retrived from the local cache or from the network. - * The fourth parameter is the original image url. - */ -- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url andPlaceholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock; - -/** - * Download an array of images and starts them in an animation loop - * - * @param arrayOfURLs An array of NSURL - */ -- (void)sd_setAnimationImagesWithURLs:(NSArray *)arrayOfURLs; - -/** - * Cancel the current download - */ -- (void)sd_cancelCurrentImageLoad; - -- (void)sd_cancelCurrentAnimationImagesLoad; - -@end - - -@interface UIImageView (WebCacheDeprecated) - -- (NSURL *)imageURL __deprecated_msg("Use `sd_imageURL`"); - -- (void)setImageWithURL:(NSURL *)url __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:`"); -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:`"); -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options`"); - -- (void)setImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:completed:`"); -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:completed:`"); -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options:completed:`"); -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock __deprecated_msg("Method deprecated. Use `sd_setImageWithURL:placeholderImage:options:progress:completed:`"); - -- (void)setAnimationImagesWithURLs:(NSArray *)arrayOfURLs __deprecated_msg("Use `sd_setAnimationImagesWithURLs:`"); - -- (void)cancelCurrentArrayLoad __deprecated_msg("Use `sd_cancelCurrentAnimationImagesLoad`"); - -- (void)cancelCurrentImageLoad __deprecated_msg("Use `sd_cancelCurrentImageLoad`"); - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m b/FoodbLog/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m deleted file mode 100644 index 162c49a..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m +++ /dev/null @@ -1,202 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIImageView+WebCache.h" -#import "objc/runtime.h" -#import "UIView+WebCacheOperation.h" - -static char imageURLKey; - -@implementation UIImageView (WebCache) - -- (void)sd_setImageWithURL:(NSURL *)url { - [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder { - [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil]; -} - -- (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:completedBlock]; -} - -- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock { - [self sd_cancelCurrentImageLoad]; - objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - - if (!(options & SDWebImageDelayPlaceholder)) { - dispatch_main_async_safe(^{ - self.image = placeholder; - }); - } - - if (url) { - __weak __typeof(self)wself = self; - id operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (!wself) return; - dispatch_main_sync_safe(^{ - if (!wself) return; - if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock) - { - completedBlock(image, error, cacheType, url); - return; - } - else if (image) { - wself.image = image; - [wself setNeedsLayout]; - } else { - if ((options & SDWebImageDelayPlaceholder)) { - wself.image = placeholder; - [wself setNeedsLayout]; - } - } - if (completedBlock && finished) { - completedBlock(image, error, cacheType, url); - } - }); - }]; - [self sd_setImageLoadOperation:operation forKey:@"UIImageViewImageLoad"]; - } else { - dispatch_main_async_safe(^{ - NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}]; - if (completedBlock) { - completedBlock(nil, error, SDImageCacheTypeNone, url); - } - }); - } -} - -- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url andPlaceholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock { - NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:url]; - UIImage *lastPreviousCachedImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:key]; - - [self sd_setImageWithURL:url placeholderImage:lastPreviousCachedImage ?: placeholder options:options progress:progressBlock completed:completedBlock]; -} - -- (NSURL *)sd_imageURL { - return objc_getAssociatedObject(self, &imageURLKey); -} - -- (void)sd_setAnimationImagesWithURLs:(NSArray *)arrayOfURLs { - [self sd_cancelCurrentAnimationImagesLoad]; - __weak __typeof(self)wself = self; - - NSMutableArray *operationsArray = [[NSMutableArray alloc] init]; - - for (NSURL *logoImageURL in arrayOfURLs) { - id operation = [SDWebImageManager.sharedManager downloadImageWithURL:logoImageURL options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (!wself) return; - dispatch_main_sync_safe(^{ - __strong UIImageView *sself = wself; - [sself stopAnimating]; - if (sself && image) { - NSMutableArray *currentImages = [[sself animationImages] mutableCopy]; - if (!currentImages) { - currentImages = [[NSMutableArray alloc] init]; - } - [currentImages addObject:image]; - - sself.animationImages = currentImages; - [sself setNeedsLayout]; - } - [sself startAnimating]; - }); - }]; - [operationsArray addObject:operation]; - } - - [self sd_setImageLoadOperation:[NSArray arrayWithArray:operationsArray] forKey:@"UIImageViewAnimationImages"]; -} - -- (void)sd_cancelCurrentImageLoad { - [self sd_cancelImageLoadOperationWithKey:@"UIImageViewImageLoad"]; -} - -- (void)sd_cancelCurrentAnimationImagesLoad { - [self sd_cancelImageLoadOperationWithKey:@"UIImageViewAnimationImages"]; -} - -@end - - -@implementation UIImageView (WebCacheDeprecated) - -- (NSURL *)imageURL { - return [self sd_imageURL]; -} - -- (void)setImageWithURL:(NSURL *)url { - [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil]; -} - -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder { - [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil]; -} - -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil]; -} - -- (void)setImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock { - [self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - if (completedBlock) { - completedBlock(image, error, cacheType); - } - }]; -} - -- (void)cancelCurrentArrayLoad { - [self sd_cancelCurrentAnimationImagesLoad]; -} - -- (void)cancelCurrentImageLoad { - [self sd_cancelCurrentImageLoad]; -} - -- (void)setAnimationImagesWithURLs:(NSArray *)arrayOfURLs { - [self sd_setAnimationImagesWithURLs:arrayOfURLs]; -} - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h b/FoodbLog/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h deleted file mode 100644 index 6719036..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import -#import "SDWebImageManager.h" - -@interface UIView (WebCacheOperation) - -/** - * Set the image load operation (storage in a UIView based dictionary) - * - * @param operation the operation - * @param key key for storing the operation - */ -- (void)sd_setImageLoadOperation:(id)operation forKey:(NSString *)key; - -/** - * Cancel all operations for the current UIView and key - * - * @param key key for identifying the operations - */ -- (void)sd_cancelImageLoadOperationWithKey:(NSString *)key; - -/** - * Just remove the operations corresponding to the current UIView and key without cancelling them - * - * @param key key for identifying the operations - */ -- (void)sd_removeImageLoadOperationWithKey:(NSString *)key; - -@end diff --git a/FoodbLog/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m b/FoodbLog/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m deleted file mode 100644 index 9219478..0000000 --- a/FoodbLog/Pods/SDWebImage/SDWebImage/UIView+WebCacheOperation.m +++ /dev/null @@ -1,55 +0,0 @@ -/* - * This file is part of the SDWebImage package. - * (c) Olivier Poitrey - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -#import "UIView+WebCacheOperation.h" -#import "objc/runtime.h" - -static char loadOperationKey; - -@implementation UIView (WebCacheOperation) - -- (NSMutableDictionary *)operationDictionary { - NSMutableDictionary *operations = objc_getAssociatedObject(self, &loadOperationKey); - if (operations) { - return operations; - } - operations = [NSMutableDictionary dictionary]; - objc_setAssociatedObject(self, &loadOperationKey, operations, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - return operations; -} - -- (void)sd_setImageLoadOperation:(id)operation forKey:(NSString *)key { - [self sd_cancelImageLoadOperationWithKey:key]; - NSMutableDictionary *operationDictionary = [self operationDictionary]; - [operationDictionary setObject:operation forKey:key]; -} - -- (void)sd_cancelImageLoadOperationWithKey:(NSString *)key { - // Cancel in progress downloader from queue - NSMutableDictionary *operationDictionary = [self operationDictionary]; - id operations = [operationDictionary objectForKey:key]; - if (operations) { - if ([operations isKindOfClass:[NSArray class]]) { - for (id operation in operations) { - if (operation) { - [operation cancel]; - } - } - } else if ([operations conformsToProtocol:@protocol(SDWebImageOperation)]){ - [(id) operations cancel]; - } - [operationDictionary removeObjectForKey:key]; - } -} - -- (void)sd_removeImageLoadOperationWithKey:(NSString *)key { - NSMutableDictionary *operationDictionary = [self operationDictionary]; - [operationDictionary removeObjectForKey:key]; -} - -@end diff --git a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-Info.plist b/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-Info.plist deleted file mode 100644 index a0a9b99..0000000 --- a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 2.6.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-dummy.m b/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-dummy.m deleted file mode 100644 index 6a29cf8..0000000 --- a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_AFNetworking : NSObject -@end -@implementation PodsDummy_AFNetworking -@end diff --git a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch b/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch deleted file mode 100644 index 9c25d83..0000000 --- a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch +++ /dev/null @@ -1,19 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#ifndef TARGET_OS_IOS - #define TARGET_OS_IOS TARGET_OS_IPHONE -#endif - -#ifndef TARGET_OS_WATCH - #define TARGET_OS_WATCH 0 -#endif diff --git a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-umbrella.h b/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-umbrella.h deleted file mode 100644 index acd0aca..0000000 --- a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking-umbrella.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "AFNetworking.h" -#import "AFURLConnectionOperation.h" -#import "AFHTTPRequestOperation.h" -#import "AFHTTPRequestOperationManager.h" -#import "AFHTTPSessionManager.h" -#import "AFURLSessionManager.h" -#import "AFNetworkReachabilityManager.h" -#import "AFSecurityPolicy.h" -#import "AFURLRequestSerialization.h" -#import "AFURLResponseSerialization.h" -#import "AFNetworkActivityIndicatorManager.h" -#import "UIActivityIndicatorView+AFNetworking.h" -#import "UIAlertView+AFNetworking.h" -#import "UIButton+AFNetworking.h" -#import "UIImage+AFNetworking.h" -#import "UIImageView+AFNetworking.h" -#import "UIKit+AFNetworking.h" -#import "UIProgressView+AFNetworking.h" -#import "UIRefreshControl+AFNetworking.h" -#import "UIWebView+AFNetworking.h" - -FOUNDATION_EXPORT double AFNetworkingVersionNumber; -FOUNDATION_EXPORT const unsigned char AFNetworkingVersionString[]; - diff --git a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.debug.xcconfig b/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.debug.xcconfig deleted file mode 100644 index f72265f..0000000 --- a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/AFNetworking -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.modulemap b/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.modulemap deleted file mode 100644 index 5892cd3..0000000 --- a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module AFNetworking { - umbrella header "AFNetworking-umbrella.h" - - export * - module * { export * } -} diff --git a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.release.xcconfig b/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.release.xcconfig deleted file mode 100644 index f72265f..0000000 --- a/FoodbLog/Pods/Target Support Files/AFNetworking/AFNetworking.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/AFNetworking -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/Bolts/Bolts-Info.plist b/FoodbLog/Pods/Target Support Files/Bolts/Bolts-Info.plist deleted file mode 100644 index b6b2813..0000000 --- a/FoodbLog/Pods/Target Support Files/Bolts/Bolts-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.3.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/FoodbLog/Pods/Target Support Files/Bolts/Bolts-dummy.m b/FoodbLog/Pods/Target Support Files/Bolts/Bolts-dummy.m deleted file mode 100644 index aeabf61..0000000 --- a/FoodbLog/Pods/Target Support Files/Bolts/Bolts-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Bolts : NSObject -@end -@implementation PodsDummy_Bolts -@end diff --git a/FoodbLog/Pods/Target Support Files/Bolts/Bolts-prefix.pch b/FoodbLog/Pods/Target Support Files/Bolts/Bolts-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/FoodbLog/Pods/Target Support Files/Bolts/Bolts-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/FoodbLog/Pods/Target Support Files/Bolts/Bolts-umbrella.h b/FoodbLog/Pods/Target Support Files/Bolts/Bolts-umbrella.h deleted file mode 100644 index b697538..0000000 --- a/FoodbLog/Pods/Target Support Files/Bolts/Bolts-umbrella.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "BFCancellationToken.h" -#import "BFCancellationTokenRegistration.h" -#import "BFCancellationTokenSource.h" -#import "BFDefines.h" -#import "BFExecutor.h" -#import "BFTask.h" -#import "BFTaskCompletionSource.h" -#import "Bolts.h" -#import "BoltsVersion.h" - -FOUNDATION_EXPORT double BoltsVersionNumber; -FOUNDATION_EXPORT const unsigned char BoltsVersionString[]; - diff --git a/FoodbLog/Pods/Target Support Files/Bolts/Bolts.debug.xcconfig b/FoodbLog/Pods/Target Support Files/Bolts/Bolts.debug.xcconfig deleted file mode 100644 index feadecb..0000000 --- a/FoodbLog/Pods/Target Support Files/Bolts/Bolts.debug.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Bolts -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Bolts -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/Bolts/Bolts.modulemap b/FoodbLog/Pods/Target Support Files/Bolts/Bolts.modulemap deleted file mode 100644 index 712e2c8..0000000 --- a/FoodbLog/Pods/Target Support Files/Bolts/Bolts.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Bolts { - umbrella header "Bolts-umbrella.h" - - export * - module * { export * } -} diff --git a/FoodbLog/Pods/Target Support Files/Bolts/Bolts.release.xcconfig b/FoodbLog/Pods/Target Support Files/Bolts/Bolts.release.xcconfig deleted file mode 100644 index feadecb..0000000 --- a/FoodbLog/Pods/Target Support Files/Bolts/Bolts.release.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Bolts -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Bolts -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-Info.plist b/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-Info.plist deleted file mode 100644 index d13cf5d..0000000 --- a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 2.0.4 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-dummy.m b/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-dummy.m deleted file mode 100644 index 1fd1a46..0000000 --- a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_ChameleonFramework : NSObject -@end -@implementation PodsDummy_ChameleonFramework -@end diff --git a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-prefix.pch b/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-umbrella.h b/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-umbrella.h deleted file mode 100644 index 5b339aa..0000000 --- a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework-umbrella.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "Chameleon.h" -#import "ChameleonConstants.h" -#import "ChameleonEnums.h" -#import "ChameleonMacros.h" -#import "Chameleon_.h" -#import "NSArray+Chameleon.h" -#import "UIButton+Chameleon.h" -#import "UIColor+Chameleon.h" -#import "UIColor+ChameleonPrivate.h" -#import "UIImage+ChameleonPrivate.h" -#import "UILabel+Chameleon.h" -#import "UINavigationController+Chameleon.h" -#import "UIView+ChameleonPrivate.h" -#import "UIViewController+Chameleon.h" -#import "Chameleon.h" -#import "ChameleonConstants.h" -#import "ChameleonEnums.h" -#import "ChameleonMacros.h" -#import "Chameleon_.h" -#import "NSArray+Chameleon.h" -#import "UIButton+Chameleon.h" -#import "UIColor+Chameleon.h" -#import "UIColor+ChameleonPrivate.h" -#import "UIImage+ChameleonPrivate.h" -#import "UILabel+Chameleon.h" -#import "UINavigationController+Chameleon.h" -#import "UIView+ChameleonPrivate.h" -#import "UIViewController+Chameleon.h" - -FOUNDATION_EXPORT double ChameleonFrameworkVersionNumber; -FOUNDATION_EXPORT const unsigned char ChameleonFrameworkVersionString[]; - diff --git a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.debug.xcconfig b/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.debug.xcconfig deleted file mode 100644 index f20df9b..0000000 --- a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "QuartzCore" -framework "UIKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/ChameleonFramework -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.modulemap b/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.modulemap deleted file mode 100644 index d60f497..0000000 --- a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module ChameleonFramework { - umbrella header "ChameleonFramework-umbrella.h" - - export * - module * { export * } -} diff --git a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.release.xcconfig b/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.release.xcconfig deleted file mode 100644 index f20df9b..0000000 --- a/FoodbLog/Pods/Target Support Files/ChameleonFramework/ChameleonFramework.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "QuartzCore" -framework "UIKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/ChameleonFramework -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-Info.plist b/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-Info.plist deleted file mode 100644 index 1040bc4..0000000 --- a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.6.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-dummy.m b/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-dummy.m deleted file mode 100644 index fbb8421..0000000 --- a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_FlatUIKit : NSObject -@end -@implementation PodsDummy_FlatUIKit -@end diff --git a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-prefix.pch b/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-umbrella.h b/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-umbrella.h deleted file mode 100644 index eb791ac..0000000 --- a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit-umbrella.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "FlatUIKit.h" -#import "FUIAlertView.h" -#import "FUIButton.h" -#import "FUICellBackgroundView.h" -#import "FUIPopoverBackgroundView.h" -#import "FUISegmentedControl.h" -#import "FUISwitch.h" -#import "FUITextField.h" -#import "NSString+Icons.h" -#import "UIBarButtonItem+FlatUI.h" -#import "UIColor+FlatUI.h" -#import "UIFont+FlatUI.h" -#import "UIImage+FlatUI.h" -#import "UINavigationBar+FlatUI.h" -#import "UIPopoverController+FlatUI.h" -#import "UIProgressView+FlatUI.h" -#import "UISlider+FlatUI.h" -#import "UIStepper+FlatUI.h" -#import "UITabBar+FlatUI.h" -#import "UITableViewCell+FlatUI.h" -#import "UIToolbar+FlatUI.h" - -FOUNDATION_EXPORT double FlatUIKitVersionNumber; -FOUNDATION_EXPORT const unsigned char FlatUIKitVersionString[]; - diff --git a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.debug.xcconfig b/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.debug.xcconfig deleted file mode 100644 index 2ff6734..0000000 --- a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FlatUIKit -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "CoreText" -framework "QuartzCore" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FlatUIKit -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.modulemap b/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.modulemap deleted file mode 100644 index 89a360d..0000000 --- a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FlatUIKit { - umbrella header "FlatUIKit-umbrella.h" - - export * - module * { export * } -} diff --git a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.release.xcconfig b/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.release.xcconfig deleted file mode 100644 index 2ff6734..0000000 --- a/FoodbLog/Pods/Target Support Files/FlatUIKit/FlatUIKit.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FlatUIKit -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "CoreText" -framework "QuartzCore" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FlatUIKit -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist deleted file mode 100644 index b6ba043..0000000 --- a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 4.0.11 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-dummy.m b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-dummy.m deleted file mode 100644 index 1d8d5d2..0000000 --- a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_IQKeyboardManager : NSObject -@end -@implementation PodsDummy_IQKeyboardManager -@end diff --git a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-prefix.pch b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-umbrella.h b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-umbrella.h deleted file mode 100644 index 4d6aae4..0000000 --- a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager-umbrella.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "IQNSArray+Sort.h" -#import "IQUIScrollView+Additions.h" -#import "IQUITextFieldView+Additions.h" -#import "IQUIView+Hierarchy.h" -#import "IQUIViewController+Additions.h" -#import "IQUIWindow+Hierarchy.h" -#import "IQKeyboardManagerConstants.h" -#import "IQKeyboardManagerConstantsInternal.h" -#import "IQKeyboardManager.h" -#import "IQKeyboardReturnKeyHandler.h" -#import "IQTextView.h" -#import "IQBarButtonItem.h" -#import "IQPreviousNextView.h" -#import "IQTitleBarButtonItem.h" -#import "IQToolbar.h" -#import "IQUIView+IQKeyboardToolbar.h" - -FOUNDATION_EXPORT double IQKeyboardManagerVersionNumber; -FOUNDATION_EXPORT const unsigned char IQKeyboardManagerVersionString[]; - diff --git a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.debug.xcconfig b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.debug.xcconfig deleted file mode 100644 index 98e1bb3..0000000 --- a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/IQKeyboardManager -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.modulemap b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.modulemap deleted file mode 100644 index 027250d..0000000 --- a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module IQKeyboardManager { - umbrella header "IQKeyboardManager-umbrella.h" - - export * - module * { export * } -} diff --git a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.release.xcconfig b/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.release.xcconfig deleted file mode 100644 index 98e1bb3..0000000 --- a/FoodbLog/Pods/Target Support Files/IQKeyboardManager/IQKeyboardManager.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/IQKeyboardManager -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/Parse/Parse-Info.plist b/FoodbLog/Pods/Target Support Files/Parse/Parse-Info.plist deleted file mode 100644 index 62cf7b2..0000000 --- a/FoodbLog/Pods/Target Support Files/Parse/Parse-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.9.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/FoodbLog/Pods/Target Support Files/Parse/Parse-dummy.m b/FoodbLog/Pods/Target Support Files/Parse/Parse-dummy.m deleted file mode 100644 index 3f17a64..0000000 --- a/FoodbLog/Pods/Target Support Files/Parse/Parse-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Parse : NSObject -@end -@implementation PodsDummy_Parse -@end diff --git a/FoodbLog/Pods/Target Support Files/Parse/Parse-prefix.pch b/FoodbLog/Pods/Target Support Files/Parse/Parse-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/FoodbLog/Pods/Target Support Files/Parse/Parse-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/FoodbLog/Pods/Target Support Files/Parse/Parse-umbrella.h b/FoodbLog/Pods/Target Support Files/Parse/Parse-umbrella.h deleted file mode 100644 index e57a250..0000000 --- a/FoodbLog/Pods/Target Support Files/Parse/Parse-umbrella.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "Parse.h" -#import "PFACL.h" -#import "PFAnalytics.h" -#import "PFAnonymousUtils.h" -#import "PFCloud.h" -#import "PFConfig.h" -#import "PFConstants.h" -#import "PFFile.h" -#import "PFGeoPoint.h" -#import "PFInstallation.h" -#import "PFNetworkActivityIndicatorManager.h" -#import "PFNullability.h" -#import "PFObject+Subclass.h" -#import "PFObject.h" -#import "PFProduct.h" -#import "PFPurchase.h" -#import "PFPush.h" -#import "PFQuery.h" -#import "PFRelation.h" -#import "PFRole.h" -#import "PFSession.h" -#import "PFSubclassing.h" -#import "PFUser.h" -#import "PFUserAuthenticationDelegate.h" - -FOUNDATION_EXPORT double ParseVersionNumber; -FOUNDATION_EXPORT const unsigned char ParseVersionString[]; - diff --git a/FoodbLog/Pods/Target Support Files/Parse/Parse.debug.xcconfig b/FoodbLog/Pods/Target Support Files/Parse/Parse.debug.xcconfig deleted file mode 100644 index 46df157..0000000 --- a/FoodbLog/Pods/Target Support Files/Parse/Parse.debug.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Parse -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "Bolts" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -weak_framework "Accounts" -weak_framework "Social" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Parse -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/Parse/Parse.modulemap b/FoodbLog/Pods/Target Support Files/Parse/Parse.modulemap deleted file mode 100644 index 2499731..0000000 --- a/FoodbLog/Pods/Target Support Files/Parse/Parse.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Parse { - umbrella header "Parse-umbrella.h" - - export * - module * { export * } -} diff --git a/FoodbLog/Pods/Target Support Files/Parse/Parse.release.xcconfig b/FoodbLog/Pods/Target Support Files/Parse/Parse.release.xcconfig deleted file mode 100644 index 46df157..0000000 --- a/FoodbLog/Pods/Target Support Files/Parse/Parse.release.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Parse -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "AudioToolbox" -framework "Bolts" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -weak_framework "Accounts" -weak_framework "Social" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Parse -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-Info.plist b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-Info.plist deleted file mode 100644 index 2a9158a..0000000 --- a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.2.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-dummy.m b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-dummy.m deleted file mode 100644 index c204211..0000000 --- a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_ParseUI : NSObject -@end -@implementation PodsDummy_ParseUI -@end diff --git a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-prefix.pch b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-umbrella.h b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-umbrella.h deleted file mode 100644 index e831663..0000000 --- a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI-umbrella.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "PFLogInView.h" -#import "PFLogInViewController.h" -#import "PFLogInView_Private.h" -#import "PFSignUpView.h" -#import "PFSignUpViewController.h" -#import "PFQueryTableViewController.h" -#import "PFQueryCollectionViewController.h" -#import "PFProductTableViewController.h" -#import "PFImageView.h" -#import "PFTextField.h" -#import "PFCollectionViewCell.h" -#import "PFPurchaseTableViewCell.h" -#import "PFTableViewCell.h" -#import "ParseUI.h" -#import "ParseUIConstants.h" - -FOUNDATION_EXPORT double ParseUIVersionNumber; -FOUNDATION_EXPORT const unsigned char ParseUIVersionString[]; - diff --git a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.debug.xcconfig b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.debug.xcconfig deleted file mode 100644 index 072f025..0000000 --- a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.debug.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ParseUI -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" "${PODS_CONFIGURATION_BUILD_DIR}/Parse" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "AudioToolbox" -framework "Bolts" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "Foundation" -framework "Parse" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "Accounts" -weak_framework "Social" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/ParseUI -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.modulemap b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.modulemap deleted file mode 100644 index 96cd7f5..0000000 --- a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module ParseUI { - umbrella header "ParseUI-umbrella.h" - - export * - module * { export * } -} diff --git a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.release.xcconfig b/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.release.xcconfig deleted file mode 100644 index 072f025..0000000 --- a/FoodbLog/Pods/Target Support Files/ParseUI/ParseUI.release.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ParseUI -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" "${PODS_CONFIGURATION_BUILD_DIR}/Parse" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "AudioToolbox" -framework "Bolts" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "Foundation" -framework "Parse" -framework "QuartzCore" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "Accounts" -weak_framework "Social" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/ParseUI -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-Info.plist b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-Info.plist deleted file mode 100644 index 2243fe6..0000000 --- a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.markdown b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.markdown deleted file mode 100644 index 1359783..0000000 --- a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.markdown +++ /dev/null @@ -1,211 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: - -## AFNetworking - -Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -## Bolts - -BSD License - -For Bolts software - -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name Facebook nor the names of its contributors may be used to - endorse or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -## ChameleonFramework - -##The MIT License (MIT) - -> Copyright (c) 2014-2015 Vicc Alexander - -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: - -> The above copyright notice and this permission notice shall be included in all -> copies or substantial portions of the Software. - -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -> SOFTWARE. - - -## FlatUIKit - -The MIT License (MIT) - -Copyright (c) 2013 Grouper, Inc - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -## IQKeyboardManager - -IQKeyboardManager license -========================= - -The MIT License (MIT) - -Copyright (c) 2013-16 Iftekhar Qurashi - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -## Parse - -See https://www.parse.com/about/terms - -## ParseUI - -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. - - -## SDWebImage - -Copyright (c) 2009 Olivier Poitrey - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - - -## Unirest - -The MIT License - -Copyright (c) 2013-2015 Mashape (https://www.mashape.com) - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Generated by CocoaPods - https://cocoapods.org diff --git a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.plist b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.plist deleted file mode 100644 index ee40b92..0000000 --- a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-acknowledgements.plist +++ /dev/null @@ -1,291 +0,0 @@ - - - - - PreferenceSpecifiers - - - FooterText - This application makes use of the following third party libraries: - Title - Acknowledgements - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - License - MIT - Title - AFNetworking - Type - PSGroupSpecifier - - - FooterText - BSD License - -For Bolts software - -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name Facebook nor the names of its contributors may be used to - endorse or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - License - BSD - Title - Bolts - Type - PSGroupSpecifier - - - FooterText - ##The MIT License (MIT) - -> Copyright (c) 2014-2015 Vicc Alexander - -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: - -> The above copyright notice and this permission notice shall be included in all -> copies or substantial portions of the Software. - -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -> SOFTWARE. - - License - MIT - Title - ChameleonFramework - Type - PSGroupSpecifier - - - FooterText - The MIT License (MIT) - -Copyright (c) 2013 Grouper, Inc - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - License - MIT - Title - FlatUIKit - Type - PSGroupSpecifier - - - FooterText - IQKeyboardManager license -========================= - -The MIT License (MIT) - -Copyright (c) 2013-16 Iftekhar Qurashi - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - License - MIT - Title - IQKeyboardManager - Type - PSGroupSpecifier - - - FooterText - See https://www.parse.com/about/terms - License - Commercial - Title - Parse - Type - PSGroupSpecifier - - - FooterText - 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. - - License - SDK - Title - ParseUI - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2009 Olivier Poitrey <rs@dailymotion.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - - License - MIT - Title - SDWebImage - Type - PSGroupSpecifier - - - FooterText - The MIT License - -Copyright (c) 2013-2015 Mashape (https://www.mashape.com) - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - License - MIT - Title - Unirest - Type - PSGroupSpecifier - - - FooterText - Generated by CocoaPods - https://cocoapods.org - Title - - Type - PSGroupSpecifier - - - StringsTable - Acknowledgements - Title - Acknowledgements - - diff --git a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-dummy.m b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-dummy.m deleted file mode 100644 index 16bfe18..0000000 --- a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_FoodbLog : NSObject -@end -@implementation PodsDummy_Pods_FoodbLog -@end diff --git a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-frameworks.sh b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-frameworks.sh deleted file mode 100755 index 4e09628..0000000 --- a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-frameworks.sh +++ /dev/null @@ -1,202 +0,0 @@ -#!/bin/sh -set -e -set -u -set -o pipefail - -function on_error { - echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" -} -trap 'on_error $LINENO' ERR - -if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then - # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy - # frameworks to, so exit 0 (signalling the script phase was successful). - exit 0 -fi - -echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" -mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - -COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" -SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" -BCSYMBOLMAP_DIR="BCSymbolMaps" - - -# This protects against multiple targets copying the same framework dependency at the same time. The solution -# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html -RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") - -# Copies and strips a vendored framework -install_framework() -{ - if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then - local source="${BUILT_PRODUCTS_DIR}/$1" - elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then - local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" - elif [ -r "$1" ]; then - local source="$1" - fi - - local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - - if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink "${source}")" - fi - - if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then - # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied - find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do - echo "Installing $f" - install_bcsymbolmap "$f" "$destination" - rm "$f" - done - rmdir "${source}/${BCSYMBOLMAP_DIR}" - fi - - # Use filter instead of exclude so missing patterns don't throw errors. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" - - local basename - basename="$(basename -s .framework "$1")" - binary="${destination}/${basename}.framework/${basename}" - - if ! [ -r "$binary" ]; then - binary="${destination}/${basename}" - elif [ -L "${binary}" ]; then - echo "Destination binary is symlinked..." - dirname="$(dirname "${binary}")" - binary="${dirname}/$(readlink "${binary}")" - fi - - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then - strip_invalid_archs "$binary" - fi - - # Resign the code if required by the build settings to avoid unstable apps - code_sign_if_enabled "${destination}/$(basename "$1")" - - # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. - if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then - local swift_runtime_libs - swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) - for lib in $swift_runtime_libs; do - echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" - rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" - code_sign_if_enabled "${destination}/${lib}" - done - fi -} -# Copies and strips a vendored dSYM -install_dsym() { - local source="$1" - warn_missing_arch=${2:-true} - if [ -r "$source" ]; then - # Copy the dSYM into the targets temp dir. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" - - local basename - basename="$(basename -s .dSYM "$source")" - binary_name="$(ls "$source/Contents/Resources/DWARF")" - binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" - - # Strip invalid architectures from the dSYM. - if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then - strip_invalid_archs "$binary" "$warn_missing_arch" - fi - if [[ $STRIP_BINARY_RETVAL == 0 ]]; then - # Move the stripped file into its final destination. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" - else - # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. - mkdir -p "${DWARF_DSYM_FOLDER_PATH}" - touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" - fi - fi -} - -# Used as a return value for each invocation of `strip_invalid_archs` function. -STRIP_BINARY_RETVAL=0 - -# Strip invalid architectures -strip_invalid_archs() { - binary="$1" - warn_missing_arch=${2:-true} - # Get architectures for current target binary - binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" - # Intersect them with the architectures we are building for - intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" - # If there are no archs supported by this binary then warn the user - if [[ -z "$intersected_archs" ]]; then - if [[ "$warn_missing_arch" == "true" ]]; then - echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." - fi - STRIP_BINARY_RETVAL=1 - return - fi - stripped="" - for arch in $binary_archs; do - if ! [[ "${ARCHS}" == *"$arch"* ]]; then - # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$binary" "$binary" - stripped="$stripped $arch" - fi - done - if [[ "$stripped" ]]; then - echo "Stripped $binary of architectures:$stripped" - fi - STRIP_BINARY_RETVAL=0 -} - -# Copies the bcsymbolmap files of a vendored framework -install_bcsymbolmap() { - local bcsymbolmap_path="$1" - local destination="${BUILT_PRODUCTS_DIR}" - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" -} - -# Signs a framework with the provided identity -code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then - # Use the current code_sign_identity - echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" - - if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - code_sign_cmd="$code_sign_cmd &" - fi - echo "$code_sign_cmd" - eval "$code_sign_cmd" - fi -} - -if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Bolts/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/ChameleonFramework/ChameleonFramework.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FlatUIKit/FlatUIKit.framework" - install_framework "${BUILT_PRODUCTS_DIR}/IQKeyboardManager/IQKeyboardManager.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Parse/Parse.framework" - install_framework "${BUILT_PRODUCTS_DIR}/ParseUI/ParseUI.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Unirest/Unirest.framework" -fi -if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Bolts/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/ChameleonFramework/ChameleonFramework.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FlatUIKit/FlatUIKit.framework" - install_framework "${BUILT_PRODUCTS_DIR}/IQKeyboardManager/IQKeyboardManager.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Parse/Parse.framework" - install_framework "${BUILT_PRODUCTS_DIR}/ParseUI/ParseUI.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Unirest/Unirest.framework" -fi -if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - wait -fi diff --git a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-umbrella.h b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-umbrella.h deleted file mode 100644 index 008023d..0000000 --- a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double Pods_FoodbLogVersionNumber; -FOUNDATION_EXPORT const unsigned char Pods_FoodbLogVersionString[]; - diff --git a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.debug.xcconfig b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.debug.xcconfig deleted file mode 100644 index 6d41e44..0000000 --- a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" "${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework" "${PODS_CONFIGURATION_BUILD_DIR}/FlatUIKit" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/Parse" "${PODS_CONFIGURATION_BUILD_DIR}/ParseUI" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/Unirest" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts/Bolts.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework/ChameleonFramework.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FlatUIKit/FlatUIKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager/IQKeyboardManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Parse/Parse.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ParseUI/ParseUI.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Unirest/Unirest.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "AFNetworking" -framework "AudioToolbox" -framework "Bolts" -framework "CFNetwork" -framework "ChameleonFramework" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreText" -framework "FlatUIKit" -framework "Foundation" -framework "IQKeyboardManager" -framework "ImageIO" -framework "MobileCoreServices" -framework "Parse" -framework "ParseUI" -framework "QuartzCore" -framework "SDWebImage" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -framework "Unirest" -weak_framework "Accounts" -weak_framework "Social" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.modulemap b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.modulemap deleted file mode 100644 index f40c690..0000000 --- a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pods_FoodbLog { - umbrella header "Pods-FoodbLog-umbrella.h" - - export * - module * { export * } -} diff --git a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.release.xcconfig b/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.release.xcconfig deleted file mode 100644 index 6d41e44..0000000 --- a/FoodbLog/Pods/Target Support Files/Pods-FoodbLog/Pods-FoodbLog.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts" "${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework" "${PODS_CONFIGURATION_BUILD_DIR}/FlatUIKit" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/Parse" "${PODS_CONFIGURATION_BUILD_DIR}/ParseUI" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/Unirest" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts/Bolts.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ChameleonFramework/ChameleonFramework.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FlatUIKit/FlatUIKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager/IQKeyboardManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Parse/Parse.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ParseUI/ParseUI.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Unirest/Unirest.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "AFNetworking" -framework "AudioToolbox" -framework "Bolts" -framework "CFNetwork" -framework "ChameleonFramework" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreText" -framework "FlatUIKit" -framework "Foundation" -framework "IQKeyboardManager" -framework "ImageIO" -framework "MobileCoreServices" -framework "Parse" -framework "ParseUI" -framework "QuartzCore" -framework "SDWebImage" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -framework "Unirest" -weak_framework "Accounts" -weak_framework "Social" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist b/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist deleted file mode 100644 index 4429822..0000000 --- a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.7.3 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m b/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m deleted file mode 100644 index 86d2b5f..0000000 --- a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_SDWebImage : NSObject -@end -@implementation PodsDummy_SDWebImage -@end diff --git a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch b/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-umbrella.h b/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-umbrella.h deleted file mode 100644 index 01738a5..0000000 --- a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage-umbrella.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "NSData+ImageContentType.h" -#import "SDImageCache.h" -#import "SDWebImageCompat.h" -#import "SDWebImageDecoder.h" -#import "SDWebImageDownloader.h" -#import "SDWebImageDownloaderOperation.h" -#import "SDWebImageManager.h" -#import "SDWebImageOperation.h" -#import "SDWebImagePrefetcher.h" -#import "UIButton+WebCache.h" -#import "UIImage+GIF.h" -#import "UIImage+MultiFormat.h" -#import "UIImageView+HighlightedWebCache.h" -#import "UIImageView+WebCache.h" -#import "UIView+WebCacheOperation.h" - -FOUNDATION_EXPORT double SDWebImageVersionNumber; -FOUNDATION_EXPORT const unsigned char SDWebImageVersionString[]; - diff --git a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig b/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig deleted file mode 100644 index f4625a7..0000000 --- a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "ImageIO" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap b/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap deleted file mode 100644 index 91545be..0000000 --- a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module SDWebImage { - umbrella header "SDWebImage-umbrella.h" - - export * - module * { export * } -} diff --git a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig b/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig deleted file mode 100644 index f4625a7..0000000 --- a/FoodbLog/Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "ImageIO" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/Unirest/Unirest-Info.plist b/FoodbLog/Pods/Target Support Files/Unirest/Unirest-Info.plist deleted file mode 100644 index 02abef5..0000000 --- a/FoodbLog/Pods/Target Support Files/Unirest/Unirest-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.1.4 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/FoodbLog/Pods/Target Support Files/Unirest/Unirest-dummy.m b/FoodbLog/Pods/Target Support Files/Unirest/Unirest-dummy.m deleted file mode 100644 index c6d5126..0000000 --- a/FoodbLog/Pods/Target Support Files/Unirest/Unirest-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Unirest : NSObject -@end -@implementation PodsDummy_Unirest -@end diff --git a/FoodbLog/Pods/Target Support Files/Unirest/Unirest-prefix.pch b/FoodbLog/Pods/Target Support Files/Unirest/Unirest-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/FoodbLog/Pods/Target Support Files/Unirest/Unirest-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/FoodbLog/Pods/Target Support Files/Unirest/Unirest-umbrella.h b/FoodbLog/Pods/Target Support Files/Unirest/Unirest-umbrella.h deleted file mode 100644 index 1c9af41..0000000 --- a/FoodbLog/Pods/Target Support Files/Unirest/Unirest-umbrella.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "Base64.h" -#import "UNIHTTPClientHelper.h" -#import "UNIHTTPRequest.h" -#import "UNIHTTPRequestWithBody.h" -#import "UNIRest.h" -#import "UNIUrlConnection.h" -#import "HttpRequest/UNIBaseRequest.h" -#import "HttpRequest/UNIBodyRequest.h" -#import "HttpRequest/UNISimpleRequest.h" -#import "HttpResponse/UNIHTTPBinaryResponse.h" -#import "HttpResponse/UNIHTTPJsonResponse.h" -#import "HttpResponse/UNIHTTPResponse.h" -#import "HttpResponse/UNIHTTPStringResponse.h" -#import "HttpResponse/UNIJsonNode.h" - -FOUNDATION_EXPORT double UnirestVersionNumber; -FOUNDATION_EXPORT const unsigned char UnirestVersionString[]; - diff --git a/FoodbLog/Pods/Target Support Files/Unirest/Unirest.debug.xcconfig b/FoodbLog/Pods/Target Support Files/Unirest/Unirest.debug.xcconfig deleted file mode 100644 index a13dd26..0000000 --- a/FoodbLog/Pods/Target Support Files/Unirest/Unirest.debug.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Unirest -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Unirest -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Target Support Files/Unirest/Unirest.modulemap b/FoodbLog/Pods/Target Support Files/Unirest/Unirest.modulemap deleted file mode 100644 index d269e27..0000000 --- a/FoodbLog/Pods/Target Support Files/Unirest/Unirest.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Unirest { - umbrella header "Unirest-umbrella.h" - - export * - module * { export * } -} diff --git a/FoodbLog/Pods/Target Support Files/Unirest/Unirest.release.xcconfig b/FoodbLog/Pods/Target Support Files/Unirest/Unirest.release.xcconfig deleted file mode 100644 index a13dd26..0000000 --- a/FoodbLog/Pods/Target Support Files/Unirest/Unirest.release.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Unirest -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Unirest -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/FoodbLog/Pods/Unirest/LICENSE b/FoodbLog/Pods/Unirest/LICENSE deleted file mode 100644 index 78fe11e..0000000 --- a/FoodbLog/Pods/Unirest/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License - -Copyright (c) 2013-2015 Mashape (https://www.mashape.com) - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/FoodbLog/Pods/Unirest/README.md b/FoodbLog/Pods/Unirest/README.md deleted file mode 100644 index a0e9a74..0000000 --- a/FoodbLog/Pods/Unirest/README.md +++ /dev/null @@ -1,281 +0,0 @@ -# Unirest for Objective-C [![Build Status][travis-image]][travis-url] [![version][cocoapods-version]][cocoapods-url] - -[![License][cocoapods-license]][license-url] -[![Code Climate][codeclimate-quality]][codeclimate-url] -[![Coverage Status][codeclimate-coverage]][codeclimate-url] -[![Gitter][gitter-image]][gitter-url] - -Unirest is a set of lightweight HTTP libraries available in [multiple languages](http://unirest.io). - -## Features - -* Make `GET`, `POST`, `PUT`, `PATCH`, `DELETE` requests -* Both syncronous and asynchronous (non-blocking) requests -* It supports form parameters, file uploads and custom body entities -* Supports gzip -* Supports Basic Authentication natively -* Customizable timeout -* Customizable default headers for every request (DRY) -* Automatic JSON parsing into native object (`NSDictionary` or `NSArray`) for JSON responses - -## Installing -Download the Objective-C Unirest Library from GitHub (or clone the repo) and import the folder into your project. You can also install Unirest-obj-c with [CocoaPods](http://cocoapods.org/). - -### CocoaPods - -If you decide to use CocoaPods, create a `Podfile` file in your project's folder: - -```bash -$ edit Podfile -platform :ios, '5.0' -pod 'Unirest', '~> 1.1.3' -``` - -and then execute `pod install`. Make sure to always open the Xcode **workspace** instead of the project file when building your project: - -```bash -$ open App.xcworkspace -``` - -Now you can import your dependencies: - -```objective-c -#import -``` - -### Requirements - -The Unirest-Obj-C client library requires ARC (Automatic Reference Counting) to be enabled in your Xcode project. To enable ARC select your project or target and then go to Build Settings and under the section Apple LLVM compiler 3.0 - Language you will see the option Objective-C Automatic Reference Counting: - -Enable ARC in Xcode - -For existing projects, fortunately Xcode offers a tool to convert existing code to ARC, which is available at Edit -> Refactor -> Convert to Objective-C ARC - -## Creating Request -So you're probably wondering how using Unirest makes creating requests in Objective-C easier, let's look at a working example: - -```objective-c -NSDictionary* headers = @{@"accept": @"application/json"}; -NSDictionary* parameters = @{@"parameter": @"value", @"foo": @"bar"}; - -UNIHTTPJsonResponse *response = [[UNIRest post:^(UNISimpleRequest *request) { - [request setUrl:@"http://httpbin.org/post"]; - [request setHeaders:headers]; - [request setParameters:parameters]; -}] asJson]; -``` - -Just like in the Unirest Java library the Objective-C library supports multiple response types given as the last parameter. In the example above we use `asJson` to get a JSON response, likewise there are `asBinary` and `asString` for responses of other nature such as file data and hypermedia responses. - -## Asynchronous Requests -For non-blocking requests you will want to make an asychronous request to keep your application going while data is fetched or updated in the background, doing so with unirest is extremely easy with barely any code change from the previous example: - -```objective-c -NSDictionary *headers = @{@"accept": @"application/json"}; -NSDictionary *parameters = @{@"parameter": @"value", @"foo": @"bar"}; - -[[UNIRest post:^(UNISimpleRequest *request) { - [request setUrl:@"http://httpbin.org/post"]; - [request setHeaders:headers]; - [request setParameters:parameters]; -}] asJsonAsync:^(UNIHTTPJsonResponse* response, NSError *error) { - // This is the asyncronous callback block - NSInteger code = response.code; - NSDictionary *responseHeaders = response.headers; - UNIJsonNode *body = response.body; - NSData *rawBody = response.rawBody; -}]; -``` - -### Cancel Asynchronous Request - -You can cancel an asyncronous request by invoking the `cancel` method on the `UNIUrlConnection` object: - -```objective-c -UNIUrlConnection *asyncConnection = [[UNIRest get:^(UNISimpleRequest *simpleRequest) { - [request setUrl:@"http://httpbin.org/get"]; -}] asJsonAsync:^(UNIHTTPJsonResponse *response, NSError *error) { - // Do something -}]; - -[asyncConnection cancel]; // Cancel request -``` - -## File Uploads -Transferring files through request with unirest in Objective-C can be done by creating a `NSURL` object and passing it along as a parameter value with a `UNISimpleRequest` like so: - -```objective-c -NSDictionary* headers = @{@"accept": @"application/json"}; -NSURL* file = nil; -NSDictionary* parameters = @{@"parameter": @"value", @"file": file}; - -UNIHTTPJsonResponse *response = [[UNIRest post:^(UNISimpleRequest *request) { - [request setUrl:@"http://httpbin.org/post"]; - [request setHeaders:headers]; - [request setParameters:parameters]; -}] asJson]; -``` - -## Custom Entity Body -To send a custom body such as JSON simply serialize your data utilizing the `NSJSONSerialization` with a `BodyRequest` and `[method]Entity` instead of just `[method]` block like so: - -```objective-c -NSDictionary *headers = @{@"accept": @"application/json"}; -NSDictionary *parameters = @{@"parameter": @"value", @"foo": @"bar"}; - -UNIHTTPJsonResponse *response = [[UNIRest postEntity:^(UNIBodyRequest *request) { - [request setUrl:@"http://httpbin.org/post"]; - [request setHeaders:headers]; - // Converting NSDictionary to JSON: - [request setBody:[NSJSONSerialization dataWithJSONObject:parameters options:0 error:nil]]; -}] asJson]; -``` - -## Basic Authentication - -Authenticating the request with basic authentication can be done by setting the `username` and `password` properties in the builder: - -```objective-c -UNIHTTPJsonResponse *response = [[UNIRest get:^(UNISimpleRequest *request) { - [request setUrl:@"http://httpbin.org/get"]; - [request setUsername:@"user"]; - [request setPassword:@"password"]; -}] asJson]; -``` - -# Request -The Objective-C unirest library uses configuration blocks of type UNISimpleRequest and UNIBodyRequest to configure the URL, Headers, and Parameters / Body of the request. - -```objective-c -+(UNIHTTPRequest*) get:(void (^)(UNISimpleRequestBlock*)) config; - -+(UNIHTTPRequestWithBody*) post:(void (^)(UNISimpleRequestBlock*)) config; -+(UNIHTTPRequestWithBody*) postEntity:(void (^)(UNIBodyRequestBlock*)) config; - -+(UNIHTTPRequestWithBody*) put:(void (^)(UNISimpleRequestBlock*)) config; -+(UNIHTTPRequestWithBody*) putEntity:(void (^)(UNIBodyRequestBlock*)) config; - -+(UNIHTTPRequestWithBody*) patch:(void (^)(UNISimpleRequestBlock*)) config; -+(UNIHTTPRequestWithBody*) patchEntity:(void (^)(UNIBodyRequestBlock*)) config; - -+(UNIHTTPRequestWithBody*) delete:(void (^)(UNISimpleRequestBlock*)) config; -+(UNIHTTPRequestWithBody*) deleteEntity:(void (^)(UNIBodyRequestBlock*)) config; -``` - -- `UNIHTTPRequest` `[UNIRest get:` `(void (^)(UNISimpleRequestBlock*))] config;` - - Sends equivalent request with method type to given URL -- `UNIHTTPRequestWithBody` `[UNIRest (post|postEntity):` `(void (^)(UNISimpleRequestBlock|UNIBodyRequestBlock)(*))] config;` - - Sends equivalent request with method type to given URL -- `UNIHTTPRequestWithBody` `[UNIRest (put|putEntity):` `(void (^)(UNISimpleRequestBlock|UNIBodyRequestBlock)(*))] config;` - - Sends equivalent request with method type to given URL -- `UNIHTTPRequestWithBody` `[UNIRest (patch|patchEntity):` `(void (^)(UNISimpleRequestBlock|UNIBodyRequestBlock)(*))] config;` - - Sends equivalent request with method type to given URL -- `UNIHTTPRequestWithBody` `[UNIRest (delete|deleteEntity):` `(void (^)(UNISimpleRequestBlock|UNIBodyRequestBlock)(*))] config;` - - Sends equivalent request with method type to given URL - -# Response -The `UNIHTTPRequest` and `UNIHTTPRequestWithBody` can then be executed by calling one of: - -```objective-c --(UNIHTTPStringResponse*) asString; --(UNIHTTPStringResponse*) asString:(NSError**) error; --(UNIUrlConnection*) asStringAsync:(UNIHTTPStringResponseBlock) response; - --(UNIHTTPBinaryResponse*) asBinary; --(UNIHTTPBinaryResponse*) asBinary:(NSError**) error; --(UNIUrlConnection*) asBinaryAsync:(UNIHTTPBinaryResponseBlock) response; - --(UNIHTTPJsonResponse*) asJson; --(UNIHTTPJsonResponse*) asJson:(NSError**) error; --(UNIUrlConnection*) asJsonAsync:(UNIHTTPJsonResponseBlock) response; -``` - -- `-(UNIHTTPStringResponse*)` `asString;` - - Blocking request call with response returned as string for Hypermedia APIs or other. - -- `-(UNIHTTPStringResponse*) asString:(NSError**) error;` - - Blocking request call with response returned as string and error handling. - -- `-(UNIUrlConnection*) asStringAsync:(UNIHTTPStringResponseBlock) response;` - - Asynchronous request call with response returned as string for Hypermedia APIs or other. - -- `-(UNIHTTPBinaryResponse*)` `asBinary;` - - Blocking request call with response returned as binary output for files and other media. - -- `-(UNIHTTPBinaryResponse*) asBinary:(NSError**) error;` - - Blocking request call with response returned as binary output and error handling. - -- `-(UNIUrlConnection*) asBinaryAsync:(UNIHTTPBinaryResponseBlock) response;` - - Asynchronous request call with response returned as binary output for files and other media. - -- `-(UNIHTTPJsonResponse*)` `asJson;` - - Blocking request call with response returned as JSON. - -- `-(UNIHTTPJsonResponse*) asString:(NSError**) error;` - - Blocking request call with response returned as JSON and error handling. - -- `-(UNIUrlConnection*) asJsonAsync:(UNIHTTPJsonResponseBlock) response;` - - Asynchronous request call with response returned as JSON. - -# Advanced Configuration - -You can set some advanced configuration to tune Unirest-Obj-C: - -### Timeout - -You can set a custom timeout value (in **seconds**): - -```objective-c -[UNIRest timeout:2]; -``` - -By default the timeout is `60`. - -### Default Request Headers - -You can set default headers that will be sent on every request: - -```objective-c -[UNIRest defaultHeader:@"Header1" value:@"Value1"]; -[UNIRest defaultHeader:@"Header2" value:@"Value2"]; -``` - -You can clear the default headers anytime with: - -```objective-c -[UNIRest clearDefaultHeaders]; -``` - ----- - -Made with ♥ from the [Mashape](https://www.mashape.com/) team - -[license-url]: https://github.com/Mashape/unirest-obj-c/blob/master/LICENSE - -[gitter-url]: https://gitter.im/Mashape/unirest-obj-c -[gitter-image]: https://img.shields.io/badge/Gitter-Join%20Chat-blue.svg?style=flat - -[travis-url]: https://travis-ci.org/Mashape/unirest-obj-c -[travis-image]: https://img.shields.io/travis/Mashape/unirest-obj-c.svg?style=flat - -[cocoapods-url]: http://cocoadocs.org/docsets/Unirest -[cocoapods-license]: https://img.shields.io/cocoapods/l/Unirest.svg?style=flat -[cocoapods-version]: https://img.shields.io/cocoapods/v/Unirest.svg?style=flat - -[codeclimate-url]: https://codeclimate.com/github/Mashape/unirest-obj-c -[codeclimate-quality]: https://img.shields.io/codeclimate/github/Mashape/unirest-obj-c.svg?style=flat -[codeclimate-coverage]: https://img.shields.io/codeclimate/coverage/github/Mashape/unirest-obj-c.svg?style=flat diff --git a/FoodbLog/Pods/Unirest/Unirest/Base64.h b/FoodbLog/Pods/Unirest/Unirest/Base64.h deleted file mode 100644 index 80ed56d..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/Base64.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -@interface Base64 : NSObject - -+ (NSString *)base64String:(NSString *)str; - -@end \ No newline at end of file diff --git a/FoodbLog/Pods/Unirest/Unirest/Base64.m b/FoodbLog/Pods/Unirest/Unirest/Base64.m deleted file mode 100644 index e474a6e..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/Base64.m +++ /dev/null @@ -1,63 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "Base64.h" - -@implementation Base64 - -+ (NSString *)base64String:(NSString *)str -{ - NSData *theData = [str dataUsingEncoding: NSASCIIStringEncoding]; - const uint8_t* input = (const uint8_t*)[theData bytes]; - NSInteger length = [theData length]; - - static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - - NSMutableData* data = [NSMutableData dataWithLength:((length + 2) / 3) * 4]; - uint8_t* output = (uint8_t*)data.mutableBytes; - - NSInteger i; - for (i=0; i < length; i += 3) { - NSInteger value = 0; - NSInteger j; - for (j = i; j < (i + 3); j++) { - value <<= 8; - - if (j < length) { - value |= (0xFF & input[j]); - } - } - - NSInteger theIndex = (i / 3) * 4; - output[theIndex + 0] = table[(value >> 18) & 0x3F]; - output[theIndex + 1] = table[(value >> 12) & 0x3F]; - output[theIndex + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '='; - output[theIndex + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '='; - } - - return [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; -} - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNIBaseRequest.h b/FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNIBaseRequest.h deleted file mode 100644 index a4c9775..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNIBaseRequest.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -@interface UNIBaseRequest : NSObject { - NSError* _error; -} - -@property(readwrite, strong) NSString* url; -@property(readwrite, strong) NSDictionary* headers; -@property(readwrite, strong) NSString* username; -@property(readwrite, strong) NSString* password; - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNIBaseRequest.m b/FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNIBaseRequest.m deleted file mode 100644 index 69e0037..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNIBaseRequest.m +++ /dev/null @@ -1,30 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNIBaseRequest.h" - -@implementation UNIBaseRequest - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNIBodyRequest.h b/FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNIBodyRequest.h deleted file mode 100644 index ebbd268..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNIBodyRequest.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNIBaseRequest.h" - -@interface UNIBodyRequest : UNIBaseRequest - -@property(readwrite, strong) NSData* body; - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNIBodyRequest.m b/FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNIBodyRequest.m deleted file mode 100644 index 7a8e3b2..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNIBodyRequest.m +++ /dev/null @@ -1,30 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNIBodyRequest.h" - -@implementation UNIBodyRequest - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNISimpleRequest.h b/FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNISimpleRequest.h deleted file mode 100644 index e9f7e4d..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNISimpleRequest.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNIBaseRequest.h" - -@interface UNISimpleRequest : UNIBaseRequest - -@property(readwrite, strong) NSDictionary* parameters; - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNISimpleRequest.m b/FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNISimpleRequest.m deleted file mode 100644 index 57eac9d..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/HttpRequest/UNISimpleRequest.m +++ /dev/null @@ -1,30 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNISimpleRequest.h" - -@implementation UNISimpleRequest - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPBinaryResponse.h b/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPBinaryResponse.h deleted file mode 100644 index deec67b..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPBinaryResponse.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNIHTTPResponse.h" - -@interface UNIHTTPBinaryResponse : UNIHTTPResponse - -@property(readwrite, strong) NSData* body; - --(instancetype) initWithSimpleResponse:(UNIHTTPResponse*) httpResponse; - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPBinaryResponse.m b/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPBinaryResponse.m deleted file mode 100644 index 3a6f973..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPBinaryResponse.m +++ /dev/null @@ -1,41 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNIHTTPBinaryResponse.h" - -@implementation UNIHTTPBinaryResponse - --(instancetype) initWithSimpleResponse:(UNIHTTPResponse*) httpResponse { - self = [super init]; - if (self) { - [self setCode:[httpResponse code]]; - [self setHeaders:[httpResponse headers]]; - [self setRawBody:[httpResponse rawBody]]; - [self setBody:[httpResponse rawBody]]; - } - return self; -} - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPJsonResponse.h b/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPJsonResponse.h deleted file mode 100644 index edf35b9..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPJsonResponse.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNIHTTPResponse.h" -#import "UNIJsonNode.h" - -@interface UNIHTTPJsonResponse : UNIHTTPResponse - -@property(readwrite, strong) UNIJsonNode* body; - --(instancetype) initWithSimpleResponse:(UNIHTTPResponse*) httpResponse; - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPJsonResponse.m b/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPJsonResponse.m deleted file mode 100644 index 74c6c40..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPJsonResponse.m +++ /dev/null @@ -1,53 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNIHTTPJsonResponse.h" - -@implementation UNIHTTPJsonResponse - --(instancetype) initWithSimpleResponse:(UNIHTTPResponse*) httpResponse { - self = [super init]; - if (self) { - [self setCode:[httpResponse code]]; - [self setHeaders:[httpResponse headers]]; - [self setRawBody:[httpResponse rawBody]]; - - UNIJsonNode* body = [[UNIJsonNode alloc] init]; - NSError * error = nil; - id json = [NSJSONSerialization JSONObjectWithData:[httpResponse rawBody] options:NSJSONReadingMutableLeaves error:&error]; - - if ([json isKindOfClass:[NSArray class]]) { - [body setArray:json]; - } else { - [body setObject:json]; - } - - [self setBody:body]; - - } - return self; -} - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPResponse.h b/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPResponse.h deleted file mode 100644 index 59f7d61..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPResponse.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -@interface UNIHTTPResponse : NSObject - -@property(readwrite) NSInteger code; -@property(readwrite, strong) NSDictionary* headers; -@property(readwrite, strong) NSData* rawBody; - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPResponse.m b/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPResponse.m deleted file mode 100644 index e1b641e..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPResponse.m +++ /dev/null @@ -1,30 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNIHTTPResponse.h" - -@implementation UNIHTTPResponse - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPStringResponse.h b/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPStringResponse.h deleted file mode 100644 index 75aef16..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPStringResponse.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNIHTTPResponse.h" - -@interface UNIHTTPStringResponse : UNIHTTPResponse - -@property(readwrite, strong) NSString* body; - --(instancetype) initWithSimpleResponse:(UNIHTTPResponse*) httpResponse; - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPStringResponse.m b/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPStringResponse.m deleted file mode 100644 index 55d00ab..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIHTTPStringResponse.m +++ /dev/null @@ -1,44 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNIHTTPStringResponse.h" - -@implementation UNIHTTPStringResponse - --(instancetype) initWithSimpleResponse:(UNIHTTPResponse*) httpResponse { - self = [super init]; - if (self) { - [self setCode:[httpResponse code]]; - [self setHeaders:[httpResponse headers]]; - [self setRawBody:[httpResponse rawBody]]; - - NSString* body = [[NSString alloc] initWithData:[httpResponse rawBody] encoding:NSUTF8StringEncoding]; - [self setBody:body]; - - } - return self; -} - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIJsonNode.h b/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIJsonNode.h deleted file mode 100644 index 4a9b7ca..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIJsonNode.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -@interface UNIJsonNode : NSObject - --(BOOL) isArray; - -@property(readwrite, strong) NSDictionary* object; -@property(readwrite, strong) NSArray* array; - --(NSDictionary*) JSONObject; - --(NSArray*) JSONArray; - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIJsonNode.m b/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIJsonNode.m deleted file mode 100644 index d7258ac..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/HttpResponse/UNIJsonNode.m +++ /dev/null @@ -1,42 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNIJsonNode.h" - -@implementation UNIJsonNode - --(BOOL) isArray { - return _array != nil; -} - --(NSDictionary*) JSONObject { - return [self object]; -} - --(NSArray*) JSONArray { - return [self array]; -} - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/UNIHTTPClientHelper.h b/FoodbLog/Pods/Unirest/Unirest/UNIHTTPClientHelper.h deleted file mode 100644 index b2ddcfc..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/UNIHTTPClientHelper.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "HttpResponse/UNIHTTPResponse.h" -#import "UNIHTTPRequest.h" -#import "UNIHTTPRequestWithBody.h" -#import "HttpRequest/UNISimpleRequest.h" -#import "UNIUrlConnection.h" - -#define BOUNDARY @"---------------------------17237809831461299884346131229" - -typedef void (^UNIAsyncResponse)(UNIHTTPJsonResponse* jsonResponse, NSError* error); - -@interface UNIHTTPClientHelper : NSObject - -+(UNIHTTPResponse*) requestSync:(UNIHTTPRequest*) request error:(NSError**) error; - -+(UNIUrlConnection*) requestAsync:(UNIHTTPRequest*) request handler:(void (^)(UNIHTTPResponse*, NSError*))handler; - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/UNIHTTPClientHelper.m b/FoodbLog/Pods/Unirest/Unirest/UNIHTTPClientHelper.m deleted file mode 100644 index 7cb9ca9..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/UNIHTTPClientHelper.m +++ /dev/null @@ -1,239 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNIHTTPClientHelper.h" -#import "Base64.h" -#import "UNIRest.h" - -@interface UNIHTTPClientHelper() -+ (NSString*) encodeURI:(NSString*)value; -+ (NSString*) dictionaryToQuerystring:(NSDictionary*) parameters; -+ (BOOL) hasBinaryParameters:(NSDictionary*) parameters; -+ (NSMutableURLRequest*) prepareRequest:(UNIHTTPRequest*) request; -+ (UNIHTTPResponse*) getResponse:(NSURLResponse*) response data:(NSData*) data; -@end - -@implementation UNIHTTPClientHelper - -+ (BOOL) hasBinaryParameters:(NSDictionary*) parameters { - for(id key in parameters) { - id value = [parameters objectForKey:key]; - if ([value isKindOfClass:[NSURL class]]) { - return true; - } - } - return false; -} - -+ (NSString*) encodeURI:(NSString*)value { - NSString* result = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes( - NULL, - (CFStringRef)value, - NULL, - (CFStringRef)@"!*'();:@&=+$,/?%#[]", - kCFStringEncodingUTF8)); - return result; -} - -+ (NSString*) dictionaryToQuerystring:(NSDictionary*) parameters { - NSString* result = @""; - - BOOL firstParameter = YES; - for(id key in parameters) { - id value = [parameters objectForKey:key]; - if (!([value isKindOfClass:[NSURL class]] || value == nil)) { // Don't encode files and null values - NSString* parameter = [NSString stringWithFormat:@"%@%@%@", [UNIHTTPClientHelper encodeURI:key], @"=", [UNIHTTPClientHelper encodeURI:value]]; - if (firstParameter) { - result = [NSString stringWithFormat:@"%@%@", result, parameter]; - } else { - result = [NSString stringWithFormat:@"%@&%@", result, parameter]; - } - firstParameter = NO; - } - } - - return result; -} - -+ (NSMutableURLRequest*) prepareRequest:(UNIHTTPRequest*) request { - UNIHTTPMethod httpMethod = [request httpMethod]; - NSMutableDictionary* headers = [[request headers] mutableCopy]; - - NSString* url = [request url]; - - if (httpMethod == GET) { - UNISimpleRequest* simpleRequest = (UNISimpleRequest*) request; - NSDictionary* parameters = [simpleRequest parameters]; - if ([parameters count] > 0) { - // Add additional parameters if any - NSMutableString* finalUrl = [[NSMutableString alloc] initWithString:url]; - if([url rangeOfString:@"?"].location == NSNotFound) { - [finalUrl appendString:@"?"]; - } else { - [finalUrl appendString:@"&"]; - } - - [finalUrl appendString:[self dictionaryToQuerystring:parameters]]; - url = [NSString stringWithString:finalUrl]; - } - } - - NSMutableURLRequest *requestObj = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:[UNIRest timeout]]; - NSMutableData* body = [[NSMutableData alloc] init]; - - if (httpMethod != GET) { - // Add body - UNIHTTPRequestWithBody* requestWithBody = (UNIHTTPRequestWithBody*) request; - - if ([requestWithBody body] == nil) { - // Has parameters - NSDictionary* parameters = [requestWithBody parameters]; - bool isBinary = [UNIHTTPClientHelper hasBinaryParameters:parameters]; - if (isBinary) { - - [headers setObject:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", BOUNDARY] forKey:@"content-type"]; - - for(id key in parameters) { - id value = [parameters objectForKey:key]; - if ([value isKindOfClass:[NSURL class]] && value != nil) { // Don't encode files and null values - [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", BOUNDARY] dataUsingEncoding:NSUTF8StringEncoding]]; - NSString* filename = [[value absoluteString] lastPathComponent]; - - NSData* data = [NSData dataWithContentsOfURL:value]; - - [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", key, filename] dataUsingEncoding:NSUTF8StringEncoding]]; - [body appendData:[[NSString stringWithFormat:@"Content-Length: %d\r\n\r\n", data.length] dataUsingEncoding:NSUTF8StringEncoding]]; - [body appendData:data]; - } else { - [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", BOUNDARY] dataUsingEncoding:NSUTF8StringEncoding]]; - [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; - [body appendData:[[NSString stringWithFormat:@"%@", value] dataUsingEncoding:NSUTF8StringEncoding]]; - } - } - - // Close - [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", BOUNDARY] dataUsingEncoding:NSUTF8StringEncoding]]; - } else { - NSString* querystring = [UNIHTTPClientHelper dictionaryToQuerystring:parameters]; - body = [NSMutableData dataWithData:[querystring dataUsingEncoding:NSUTF8StringEncoding]]; - - [headers setValue:@"application/x-www-form-urlencoded" forKey:@"content-type"]; - } - } else { - // Has a body - body = [NSMutableData dataWithData:[requestWithBody body]]; - } - - [requestObj setHTTPBody:body]; - } - - // Set method - switch ([request httpMethod]) { - case GET: - [requestObj setHTTPMethod:@"GET"]; - break; - case POST: - [requestObj setHTTPMethod:@"POST"]; - break; - case PUT: - [requestObj setHTTPMethod:@"PUT"]; - break; - case DELETE: - [requestObj setHTTPMethod:@"DELETE"]; - break; - case PATCH: - [requestObj setHTTPMethod:@"PATCH"]; - break; - } - - // Add headers - [headers setValue:@"unirest-objc/1.1" forKey:@"user-agent"]; - [headers setValue:@"gzip" forKey:@"accept-encoding"]; - - // Add cookies to the headers - [headers setValuesForKeysWithDictionary:[NSHTTPCookie requestHeaderFieldsWithCookies:[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:url]]]]; - - // Basic Auth - if ([request username] != nil || [request password] != nil) { - NSString* user = ([request username] == nil) ? @"" : [request username]; - NSString* pass = ([request password] == nil) ? @"" : [request password]; - NSString *credentials = [NSString stringWithFormat: @"%@:%@", user, pass]; - - NSString* header = [NSString stringWithFormat:@"Basic %@", [Base64 base64String:credentials]]; - [headers setValue:header forKey:@"authorization"]; - } - - // Default headers - NSMutableDictionary* defaultHeaders = [UNIRest defaultHeaders]; - for(NSString* key in defaultHeaders) { - NSString *value = [defaultHeaders objectForKey:key]; - [requestObj addValue:value forHTTPHeaderField:key]; - } - - for (NSString *key in headers) { - NSString *value = [headers objectForKey:key]; - [requestObj addValue:value forHTTPHeaderField:key]; - } - return requestObj; -} - -+(UNIHTTPResponse*) requestSync:(UNIHTTPRequest*) request error:(NSError**) error { - NSMutableURLRequest* requestObj = [self prepareRequest:request]; - - NSHTTPURLResponse * response = nil; - NSData * data = [NSURLConnection sendSynchronousRequest:requestObj returningResponse:&response error:error]; - return [self getResponse:response data:data]; -} - -+(UNIUrlConnection*) requestAsync:(UNIHTTPRequest*) request handler:(void (^)(UNIHTTPResponse*, NSError*))handler { - NSMutableURLRequest* requestObj = [self prepareRequest:request]; - NSOperationQueue *mainQueue = [[NSOperationQueue alloc] init]; - - UNIUrlConnection* connection = [UNIUrlConnection sendAsynchronousRequest:requestObj queue:mainQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { - - UNIHTTPResponse* res = [self getResponse:response data:data]; - handler(res, connectionError); - - }]; - - return connection; -} - -+ (UNIHTTPResponse*) getResponse:(NSURLResponse*) response data:(NSData*) data { - if (data == nil) { - return nil; - } - - NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*) response; - - UNIHTTPResponse* res = [[UNIHTTPResponse alloc] init]; - [res setCode:[httpResponse statusCode]]; - [res setHeaders:[httpResponse allHeaderFields]]; - [res setRawBody:data]; - - return res; -} - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/UNIHTTPRequest.h b/FoodbLog/Pods/Unirest/Unirest/UNIHTTPRequest.h deleted file mode 100644 index 3007742..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/UNIHTTPRequest.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "HttpResponse/UNIHTTPStringResponse.h" -#import "HttpResponse/UNIHTTPBinaryResponse.h" -#import "HttpResponse/UNIHTTPJsonResponse.h" -#import "UNIUrlConnection.h" - -typedef NS_ENUM(NSInteger, UNIHTTPMethod) { - GET, - POST, - PUT, - DELETE, - PATCH -}; - -typedef void (^UNIHTTPStringResponseBlock)(UNIHTTPStringResponse* stringResponse, NSError* error); -typedef void (^UNIHTTPBinaryResponseBlock)(UNIHTTPBinaryResponse* binaryResponse, NSError* error); -typedef void (^UNIHTTPJsonResponseBlock)(UNIHTTPJsonResponse* jsonResponse, NSError* error); - -@interface UNIHTTPRequest : NSObject - -@property(readwrite, strong) NSDictionary* headers; -@property(readwrite, strong) NSString* url; -@property(readwrite, strong) NSError* error; -@property(readwrite, strong) NSString* username; -@property(readwrite, strong) NSString* password; -@property(readwrite) UNIHTTPMethod httpMethod; - --(instancetype) initWithSimpleRequest:(UNIHTTPMethod) httpMethod url:(NSString*) url headers:(NSDictionary*) headers username:(NSString*) username password:(NSString*) password; - --(UNIHTTPStringResponse*) asString; --(UNIHTTPStringResponse*) asString:(NSError**) error; --(UNIUrlConnection*) asStringAsync:(UNIHTTPStringResponseBlock) response; - --(UNIHTTPBinaryResponse*) asBinary; --(UNIHTTPBinaryResponse*) asBinary:(NSError**) error; --(UNIUrlConnection*) asBinaryAsync:(UNIHTTPBinaryResponseBlock) response; - --(UNIHTTPJsonResponse*) asJson; --(UNIHTTPJsonResponse*) asJson:(NSError**) error; --(UNIUrlConnection*) asJsonAsync:(UNIHTTPJsonResponseBlock) response; - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/UNIHTTPRequest.m b/FoodbLog/Pods/Unirest/Unirest/UNIHTTPRequest.m deleted file mode 100644 index 4938a02..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/UNIHTTPRequest.m +++ /dev/null @@ -1,110 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNIHTTPRequest.h" -#import "UNIHTTPClientHelper.h" - -@implementation UNIHTTPRequest - --(instancetype) initWithSimpleRequest:(UNIHTTPMethod) httpMethod url:(NSString*) url headers:(NSDictionary*) headers username:(NSString*) username password:(NSString*) password { - self = [super init]; - if (self) { - [self setHttpMethod:httpMethod]; - [self setUrl:url]; - [self setUsername:username]; - [self setPassword:password]; - NSMutableDictionary* lowerCaseHeaders = [[NSMutableDictionary alloc] init]; - if (headers != nil) { - for(id key in headers) { - id value = [headers objectForKey:key]; - [lowerCaseHeaders setObject:value forKey:[key lowercaseString]]; - } - } - [self setHeaders:lowerCaseHeaders]; - } - return self; -} - --(UNIHTTPStringResponse*) asString { - return [self asString:nil]; -} - --(UNIHTTPStringResponse*) asString:(NSError**) error { - UNIHTTPResponse* response = [UNIHTTPClientHelper requestSync:self error:error]; - if (response == nil) return nil; - return [[UNIHTTPStringResponse alloc] initWithSimpleResponse:response]; -} - --(UNIUrlConnection*) asStringAsync:(UNIHTTPStringResponseBlock) response { - return [UNIHTTPClientHelper requestAsync:self handler:^(UNIHTTPResponse * res, NSError * error) { - if (error != nil) { - response(nil, error); - } else { - response([[UNIHTTPStringResponse alloc] initWithSimpleResponse:res], error); - } - }]; -} - --(UNIHTTPBinaryResponse*) asBinary { - return [self asBinary:nil]; -} - --(UNIHTTPBinaryResponse*) asBinary:(NSError**) error { - UNIHTTPResponse* response = [UNIHTTPClientHelper requestSync:self error:error]; - if (response == nil) return nil; - return [[UNIHTTPBinaryResponse alloc] initWithSimpleResponse:response]; -} - --(UNIUrlConnection*) asBinaryAsync:(UNIHTTPBinaryResponseBlock) response { - return [UNIHTTPClientHelper requestAsync:self handler:^(UNIHTTPResponse * res, NSError * error) { - if (error != nil) { - response(nil, error); - } else { - response([[UNIHTTPBinaryResponse alloc] initWithSimpleResponse:res], error); - } - }]; -} - --(UNIHTTPJsonResponse*) asJson { - return [self asJson:nil]; -} - --(UNIHTTPJsonResponse*) asJson:(NSError**) error { - UNIHTTPResponse* response = [UNIHTTPClientHelper requestSync:self error:error]; - if (response == nil) return nil; - return [[UNIHTTPJsonResponse alloc] initWithSimpleResponse:response]; -} - --(UNIUrlConnection*) asJsonAsync:(UNIHTTPJsonResponseBlock) response { - return [UNIHTTPClientHelper requestAsync:self handler:^(UNIHTTPResponse * res, NSError * error) { - if (error != nil) { - response(nil, error); - } else { - response([[UNIHTTPJsonResponse alloc] initWithSimpleResponse:res], error); - } - }]; -} - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/UNIHTTPRequestWithBody.h b/FoodbLog/Pods/Unirest/Unirest/UNIHTTPRequestWithBody.h deleted file mode 100644 index 94979ac..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/UNIHTTPRequestWithBody.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNIHTTPRequest.h" - -@interface UNIHTTPRequestWithBody : UNIHTTPRequest - -@property(readwrite, strong) NSData* body; -@property(readwrite, strong) NSDictionary* parameters; - --(instancetype) initWithMultipartRequest:(UNIHTTPMethod) httpMethod url:(NSString*) url headers:(NSDictionary*) headers parameters:(NSDictionary*) parameters username:(NSString*) username password:(NSString*) password; - --(instancetype) initWithBodyRequest:(UNIHTTPMethod) httpMethod url:(NSString*) url headers:(NSDictionary*) headers body:(NSData*) body username:(NSString*) username password:(NSString*) password; - -@end \ No newline at end of file diff --git a/FoodbLog/Pods/Unirest/Unirest/UNIHTTPRequestWithBody.m b/FoodbLog/Pods/Unirest/Unirest/UNIHTTPRequestWithBody.m deleted file mode 100644 index 6b8beb2..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/UNIHTTPRequestWithBody.m +++ /dev/null @@ -1,45 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNIHTTPRequestWithBody.h" - -@implementation UNIHTTPRequestWithBody - --(instancetype) initWithMultipartRequest:(UNIHTTPMethod) httpMethod url:(NSString*) url headers:(NSDictionary*) headers parameters:(NSDictionary*) parameters username:(NSString*) username password:(NSString*) password { - self = [super initWithSimpleRequest:httpMethod url:url headers:headers username:username password:password]; - if (parameters == nil) { - parameters = [[NSDictionary alloc] init]; - } - [self setParameters:[parameters mutableCopy]]; - return self; -} - --(instancetype) initWithBodyRequest:(UNIHTTPMethod) httpMethod url:(NSString*) url headers:(NSDictionary*) headers body:(NSData*) body username:(NSString*) username password:(NSString*) password { - self = [super initWithSimpleRequest:httpMethod url:url headers:headers username:username password:password]; - [self setBody:body]; - return self; -} - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/UNIRest.h b/FoodbLog/Pods/Unirest/Unirest/UNIRest.h deleted file mode 100644 index 06780d2..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/UNIRest.h +++ /dev/null @@ -1,61 +0,0 @@ -/* -The MIT License - -Copyright (c) 2013 Mashape (http://mashape.com) - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#import -#import "UNIHTTPRequest.h" -#import "UNIHTTPRequestWithBody.h" -#import "HttpRequest/UNISimpleRequest.h" -#import "HttpRequest/UNIBodyRequest.h" -#import "HttpResponse/UNIHTTPBinaryResponse.h" -#import "HttpResponse/UNIHTTPJsonResponse.h" -#import "HttpResponse/UNIHTTPStringResponse.h" - -typedef void (^UNISimpleRequestBlock)(UNISimpleRequest* simpleRequest); -typedef void (^UNIBodyRequestBlock)(UNIBodyRequest* unibodyRequest); - -@interface UNIRest : NSObject - -+(void) timeout:(int) seconds; -+(int) timeout; - -+(void) defaultHeader:(NSString*) name value:(NSString*) value; -+(void) clearDefaultHeaders; -+(NSMutableDictionary*) defaultHeaders; - -+(UNIHTTPRequest*) get:(UNISimpleRequestBlock) config; - -+(UNIHTTPRequestWithBody*) post:(UNISimpleRequestBlock) config; -+(UNIHTTPRequestWithBody*) postEntity:(UNIBodyRequestBlock) config; - -+(UNIHTTPRequestWithBody*) put:(UNISimpleRequestBlock) config; -+(UNIHTTPRequestWithBody*) putEntity:(UNIBodyRequestBlock) config; - -+(UNIHTTPRequestWithBody*) patch:(UNISimpleRequestBlock) config; -+(UNIHTTPRequestWithBody*) patchEntity:(UNIBodyRequestBlock) config; - -+(UNIHTTPRequestWithBody*) delete:(UNISimpleRequestBlock) config; -+(UNIHTTPRequestWithBody*) deleteEntity:(UNIBodyRequestBlock) config; - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/UNIRest.m b/FoodbLog/Pods/Unirest/Unirest/UNIRest.m deleted file mode 100644 index cd094e5..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/UNIRest.m +++ /dev/null @@ -1,126 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNIRest.h" - -@interface UNIRest() -+ (id) getConfig:instance config:(void (^)(id)) config; -@end - -static NSMutableDictionary* defaultHeaders = nil; -static int UNIRestTimeout = 60; - -@implementation UNIRest - -+(void) timeout:(int) seconds { - UNIRestTimeout = seconds; -} - -+(int) timeout { - return UNIRestTimeout; -} - -+(void) defaultHeader:(NSString*) name value:(NSString*) value { - if (defaultHeaders == nil) { - defaultHeaders = [NSMutableDictionary dictionary]; - } - [defaultHeaders setObject:value forKey:name]; -} - -+(NSMutableDictionary*) defaultHeaders { - if (defaultHeaders == nil) { - defaultHeaders = [NSMutableDictionary dictionary]; - } - return defaultHeaders; -} - -+(void) clearDefaultHeaders { - if (defaultHeaders == nil) { - defaultHeaders = [NSMutableDictionary dictionary]; - } - [defaultHeaders removeAllObjects]; -} - -+ (id) getConfig:instance config:(void (^)(id)) config { - if (config) { - config(instance); - } - return instance; -} - -+(UNIHTTPRequest*) get:(UNISimpleRequestBlock) config { - UNISimpleRequest* _config = [self getConfig:[[UNISimpleRequest alloc] init] config:config]; - return [[UNIHTTPRequestWithBody alloc] initWithMultipartRequest:GET url:[_config url] headers:[_config headers] parameters:[_config parameters] username:[_config username] password:[_config password]]; -} - -+(UNIHTTPRequestWithBody*) post:(UNISimpleRequestBlock) config { - UNISimpleRequest* _config = [self getConfig:[[UNISimpleRequest alloc] init] config:config]; - - return [[UNIHTTPRequestWithBody alloc] initWithMultipartRequest:POST url:[_config url] headers:[_config headers] parameters:[_config parameters] username:[_config username] password:[_config password]]; -} - -+(UNIHTTPRequestWithBody*) postEntity:(UNIBodyRequestBlock) config { - UNIBodyRequest* _config = [self getConfig:[[UNIBodyRequest alloc] init] config:config]; - - return [[UNIHTTPRequestWithBody alloc] initWithBodyRequest:POST url:[_config url] headers:[_config headers] body:[_config body] username:[_config username] password:[_config password]]; -} - -+(UNIHTTPRequestWithBody*) put:(UNISimpleRequestBlock) config { - UNISimpleRequest* _config = [self getConfig:[[UNISimpleRequest alloc] init] config:config]; - - return [[UNIHTTPRequestWithBody alloc] initWithMultipartRequest:PUT url:[_config url] headers:[_config headers] parameters:[_config parameters] username:[_config username] password:[_config password]]; -} - -+(UNIHTTPRequestWithBody*) putEntity:(UNIBodyRequestBlock) config { - UNIBodyRequest* _config = [self getConfig:[[UNIBodyRequest alloc] init] config:config]; - - return [[UNIHTTPRequestWithBody alloc] initWithBodyRequest:PUT url:[_config url] headers:[_config headers] body:[_config body] username:[_config username] password:[_config password]]; -} - -+(UNIHTTPRequestWithBody*) patch:(UNISimpleRequestBlock) config { - UNISimpleRequest* _config = [self getConfig:[[UNISimpleRequest alloc] init] config:config]; - - return [[UNIHTTPRequestWithBody alloc] initWithMultipartRequest:PATCH url:[_config url] headers:[_config headers] parameters:[_config parameters] username:[_config username] password:[_config password]]; -} - -+(UNIHTTPRequestWithBody*) patchEntity:(UNIBodyRequestBlock) config { - UNIBodyRequest* _config = [self getConfig:[[UNIBodyRequest alloc] init] config:config]; - - return [[UNIHTTPRequestWithBody alloc] initWithBodyRequest:PATCH url:[_config url] headers:[_config headers] body:[_config body] username:[_config username] password:[_config password]]; -} - -+(UNIHTTPRequestWithBody*) delete:(UNISimpleRequestBlock) config { - UNISimpleRequest* _config = [self getConfig:[[UNISimpleRequest alloc] init] config:config]; - - return [[UNIHTTPRequestWithBody alloc] initWithMultipartRequest:DELETE url:[_config url] headers:[_config headers] parameters:[_config parameters] username:[_config username] password:[_config password]]; -} - -+(UNIHTTPRequestWithBody*) deleteEntity:(UNIBodyRequestBlock) config { - UNIBodyRequest* _config = [self getConfig:[[UNIBodyRequest alloc] init] config:config]; - - return [[UNIHTTPRequestWithBody alloc] initWithBodyRequest:DELETE url:[_config url] headers:[_config headers] body:[_config body] username:[_config username] password:[_config password]]; -} - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/UNIUrlConnection.h b/FoodbLog/Pods/Unirest/Unirest/UNIUrlConnection.h deleted file mode 100644 index 9541bbe..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/UNIUrlConnection.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import - -@interface UNIUrlConnection : NSObject - -@property (nonatomic, strong) NSURLRequest *request; -@property (nonatomic, strong) NSOperationQueue *queue; -@property (nonatomic, copy) void(^completionHandler)(NSURLResponse *response, NSData *data, NSError *error); - -+ (UNIUrlConnection *)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void(^)(NSURLResponse *response, NSData *data, NSError *error))completionHandler; -- (void)start; -- (void)cancel; - -@end diff --git a/FoodbLog/Pods/Unirest/Unirest/UNIUrlConnection.m b/FoodbLog/Pods/Unirest/Unirest/UNIUrlConnection.m deleted file mode 100644 index df4d393..0000000 --- a/FoodbLog/Pods/Unirest/Unirest/UNIUrlConnection.m +++ /dev/null @@ -1,113 +0,0 @@ -/* - The MIT License - - Copyright (c) 2013 Mashape (http://mashape.com) - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#import "UNIUrlConnection.h" - -@implementation UNIUrlConnection { - NSURLConnection *connection; - NSHTTPURLResponse *response; - NSMutableData *responseData; -} - -@synthesize request, queue, completionHandler; - -+ (UNIUrlConnection *)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void(^)(NSURLResponse *response, NSData *data, NSError *error))completionHandler -{ - UNIUrlConnection *result = [[UNIUrlConnection alloc] init]; - result.request = request; - result.queue = queue; - result.completionHandler = completionHandler; - [result start]; - return result; -} - -- (void)dealloc -{ - [self cancel]; -} - -- (void)start -{ - connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]; - [connection scheduleInRunLoop:NSRunLoop.mainRunLoop forMode:NSDefaultRunLoopMode]; - if (connection) { - [connection start]; - } else { - if (completionHandler) completionHandler(nil, nil, nil); completionHandler = nil; - } -} - -- (void)cancel -{ - [connection cancel]; connection = nil; - completionHandler = nil; -} - -- (void)connection:(NSURLConnection *)_connection didReceiveResponse:(NSHTTPURLResponse *)_response -{ - response = _response; -} - -- (void)connection:(NSURLConnection *)_connection didReceiveData:(NSData *)data -{ - if (!responseData) { - responseData = [NSMutableData dataWithData:data]; - } else { - [responseData appendData:data]; - } -} - -- (void)connectionDidFinishLoading:(NSURLConnection *)_connection -{ - connection = nil; - if (completionHandler) { - void(^b)(NSURLResponse *response, NSData *data, NSError *error) = completionHandler; - completionHandler = nil; - [queue addOperationWithBlock:^{b(self->response, self->responseData, nil);}]; - } -} - -- (void)connection:(NSURLConnection *)_connection didFailWithError:(NSError *)error -{ - connection = nil; - if (completionHandler) { - void(^b)(NSURLResponse *response, NSData *data, NSError *error) = completionHandler; - completionHandler = nil; - [queue addOperationWithBlock:^{b(self->response, self->responseData, error);}]; - } -} - -#if TARGET_IPHONE_SIMULATOR -- (BOOL)connection:(NSURLConnection *)_connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace -{ - return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]; -} -- (void)connection:(NSURLConnection *)_connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge -{ - [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; -} -#endif - -@end From e241b0355e9ad7f68cf0ac1e2f06cd3ca94cee88 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Fri, 14 Apr 2023 22:16:42 +0100 Subject: [PATCH 26/29] refactor RestaurantPickerTableVC to Swift --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 16 +- FoodbLog/FoodbLog/Base.lproj/Main.storyboard | 4 +- FoodbLog/FoodbLog/CreateLogVC.swift | 11 +- FoodbLog/FoodbLog/CreateLogViewController.h | 13 - FoodbLog/FoodbLog/CreateLogViewController.m | 551 ------------------ FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h | 2 - .../FoodbLog/RestaurantPickerTableVC.swift | 48 ++ .../RestaurantPickerTableViewController.h | 23 - .../RestaurantPickerTableViewController.m | 49 -- 9 files changed, 58 insertions(+), 659 deletions(-) delete mode 100644 FoodbLog/FoodbLog/CreateLogViewController.h delete mode 100644 FoodbLog/FoodbLog/CreateLogViewController.m create mode 100644 FoodbLog/FoodbLog/RestaurantPickerTableVC.swift delete mode 100644 FoodbLog/FoodbLog/RestaurantPickerTableViewController.h delete mode 100644 FoodbLog/FoodbLog/RestaurantPickerTableViewController.m diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index 3d7c998..3427cbf 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -11,7 +11,6 @@ 29E25D531BCAB8480015A16F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 29E25D511BCAB8480015A16F /* Main.storyboard */; }; 29E25D551BCAB8480015A16F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 29E25D541BCAB8480015A16F /* Assets.xcassets */; }; 29E25D6E1BCAB8490015A16F /* FoodbLogUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 29E25D6D1BCAB8490015A16F /* FoodbLogUITests.m */; }; - 29E25D801BCAC9D50015A16F /* CreateLogViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 29E25D7F1BCAC9D50015A16F /* CreateLogViewController.m */; }; 29F703611BCB923F009B7A82 /* FoodbLogCustomCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 29F703601BCB923F009B7A82 /* FoodbLogCustomCell.m */; }; 29F703A31BD08C5C009B7A82 /* FoodLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 29F703A21BD08C5C009B7A82 /* FoodLog.m */; }; 507F55891BD965B10059C2B3 /* RecipeTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 507F55881BD965B10059C2B3 /* RecipeTableViewCell.m */; }; @@ -20,7 +19,6 @@ 50967FD41BD6F6930029D6AB /* RecipeTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 50967FD31BD6F6930029D6AB /* RecipeTableViewController.m */; }; 50A3C2C41BCAE4AD0077F79B /* InstagramImagePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 50A3C2C31BCAE4AD0077F79B /* InstagramImagePicker.m */; }; 50D767B81BCC895900C82B8B /* FoodFeedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 50D767B71BCC895900C82B8B /* FoodFeedViewController.m */; }; - 50EC0D181BD0545C0045B513 /* RestaurantPickerTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 50EC0D171BD0545C0045B513 /* RestaurantPickerTableViewController.m */; }; 50F7C6781BCAF72B00A969D1 /* InstagramImagePickerCustomCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F7C6771BCAF72B00A969D1 /* InstagramImagePickerCustomCell.m */; }; 50F7C67E1BCB08BA00A969D1 /* FoodFeedCustomCVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F7C67D1BCB08BA00A969D1 /* FoodFeedCustomCVC.m */; }; 5D2957241BD3F8FE0029FD65 /* FoodFeedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D2957231BD3F8FE0029FD65 /* FoodFeedObject.m */; }; @@ -33,6 +31,7 @@ 7F5B461129E9CAAB00EC67FC /* Secrets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F5B461029E9CAAB00EC67FC /* Secrets.swift */; }; 7F5B461329E9CB1800EC67FC /* SearchFoods.json in Resources */ = {isa = PBXBuildFile; fileRef = 7F5B461229E9CB1800EC67FC /* SearchFoods.json */; }; 7F5B461529E9CD4C00EC67FC /* Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F5B461429E9CD4C00EC67FC /* Tag.swift */; }; + 7F5B461729E9D96A00EC67FC /* RestaurantPickerTableVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F5B461629E9D96A00EC67FC /* RestaurantPickerTableVC.swift */; }; 7F6967B229E2B5E600A8A71B /* HttpClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F6967B129E2B5E600A8A71B /* HttpClient.swift */; }; 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */; }; 7F8CC93E29DDB3200050C281 /* CreateLogVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */; }; @@ -78,8 +77,6 @@ 29E25D691BCAB8490015A16F /* FoodbLogUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FoodbLogUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 29E25D6D1BCAB8490015A16F /* FoodbLogUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FoodbLogUITests.m; sourceTree = ""; }; 29E25D6F1BCAB8490015A16F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 29E25D7E1BCAC9D50015A16F /* CreateLogViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CreateLogViewController.h; sourceTree = ""; }; - 29E25D7F1BCAC9D50015A16F /* CreateLogViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CreateLogViewController.m; sourceTree = ""; }; 29F7035F1BCB923F009B7A82 /* FoodbLogCustomCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodbLogCustomCell.h; sourceTree = ""; }; 29F703601BCB923F009B7A82 /* FoodbLogCustomCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodbLogCustomCell.m; sourceTree = ""; }; 29F703A11BD08C5C009B7A82 /* FoodLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodLog.h; sourceTree = ""; }; @@ -94,8 +91,6 @@ 50A3C2C31BCAE4AD0077F79B /* InstagramImagePicker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InstagramImagePicker.m; sourceTree = ""; }; 50D767B61BCC895900C82B8B /* FoodFeedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodFeedViewController.h; sourceTree = ""; }; 50D767B71BCC895900C82B8B /* FoodFeedViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodFeedViewController.m; sourceTree = ""; }; - 50EC0D161BD0545C0045B513 /* RestaurantPickerTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RestaurantPickerTableViewController.h; sourceTree = ""; }; - 50EC0D171BD0545C0045B513 /* RestaurantPickerTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RestaurantPickerTableViewController.m; sourceTree = ""; }; 50F7C6761BCAF72B00A969D1 /* InstagramImagePickerCustomCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InstagramImagePickerCustomCell.h; sourceTree = ""; }; 50F7C6771BCAF72B00A969D1 /* InstagramImagePickerCustomCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InstagramImagePickerCustomCell.m; sourceTree = ""; }; 50F7C67C1BCB08BA00A969D1 /* FoodFeedCustomCVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodFeedCustomCVC.h; sourceTree = ""; }; @@ -112,6 +107,7 @@ 7F5B461029E9CAAB00EC67FC /* Secrets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Secrets.swift; sourceTree = ""; }; 7F5B461229E9CB1800EC67FC /* SearchFoods.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = SearchFoods.json; sourceTree = ""; }; 7F5B461429E9CD4C00EC67FC /* Tag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tag.swift; sourceTree = ""; }; + 7F5B461629E9D96A00EC67FC /* RestaurantPickerTableVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestaurantPickerTableVC.swift; sourceTree = ""; }; 7F6967B129E2B5E600A8A71B /* HttpClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HttpClient.swift; sourceTree = ""; }; 7F8CC93B29DDAC540050C281 /* FoodLogDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogDetailVC.swift; sourceTree = ""; }; 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateLogVC.swift; sourceTree = ""; }; @@ -225,8 +221,6 @@ isa = PBXGroup; children = ( 7F8CC93D29DDB3200050C281 /* CreateLogVC.swift */, - 29E25D7E1BCAC9D50015A16F /* CreateLogViewController.h */, - 29E25D7F1BCAC9D50015A16F /* CreateLogViewController.m */, 294C32C51C95DD6700795520 /* Pick Image From Instagram */, 294C32C61C95DD7500795520 /* Pick Restaurant */, 294C32C71C95DD8100795520 /* Pick Recipe */, @@ -268,8 +262,7 @@ 294C32C61C95DD7500795520 /* Pick Restaurant */ = { isa = PBXGroup; children = ( - 50EC0D161BD0545C0045B513 /* RestaurantPickerTableViewController.h */, - 50EC0D171BD0545C0045B513 /* RestaurantPickerTableViewController.m */, + 7F5B461629E9D96A00EC67FC /* RestaurantPickerTableVC.swift */, ); name = "Pick Restaurant"; sourceTree = ""; @@ -602,7 +595,6 @@ 50F7C6781BCAF72B00A969D1 /* InstagramImagePickerCustomCell.m in Sources */, 7FB90DF329DD756000A50433 /* FoodLogCollectionViewVC.swift in Sources */, 7F8CC93E29DDB3200050C281 /* CreateLogVC.swift in Sources */, - 50EC0D181BD0545C0045B513 /* RestaurantPickerTableViewController.m in Sources */, 7F8CC96C29DDF2D10050C281 /* URLSessionContract.swift in Sources */, 50A3C2C41BCAE4AD0077F79B /* InstagramImagePicker.m in Sources */, 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */, @@ -619,8 +611,8 @@ 7F5B461129E9CAAB00EC67FC /* Secrets.swift in Sources */, 7F6967B229E2B5E600A8A71B /* HttpClient.swift in Sources */, 7FDC776129E335FC002E6677 /* FoodbLogInteractor.swift in Sources */, + 7F5B461729E9D96A00EC67FC /* RestaurantPickerTableVC.swift in Sources */, 50F7C67E1BCB08BA00A969D1 /* FoodFeedCustomCVC.m in Sources */, - 29E25D801BCAC9D50015A16F /* CreateLogViewController.m in Sources */, 7F5B461529E9CD4C00EC67FC /* Tag.swift in Sources */, 7F1217C429E477E0007913F1 /* Recipe.swift in Sources */, 7F003D3529E358EA00439CF8 /* APIService.swift in Sources */, diff --git a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard index dd71219..c303ae5 100644 --- a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard +++ b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard @@ -651,10 +651,10 @@ - + - + diff --git a/FoodbLog/FoodbLog/CreateLogVC.swift b/FoodbLog/FoodbLog/CreateLogVC.swift index 8ba8e32..078eb01 100644 --- a/FoodbLog/FoodbLog/CreateLogVC.swift +++ b/FoodbLog/FoodbLog/CreateLogVC.swift @@ -166,8 +166,8 @@ extension CreateLogVC : UIImagePickerControllerDelegate, UINavigationControllerD } } -extension CreateLogVC : RestaurantPickerTableViewDelegate { - func didSelectRestaurant(_ restaurant: String!) { +extension CreateLogVC : RestaurantPickerTableVCDelegate { + func didSelectRestaurant(_ restaurant: String) { restaurantSearchTextField.text = restaurant } } @@ -178,7 +178,6 @@ extension CreateLogVC : RecipeTableViewDelegate { recipeIngredientsToSave = ingredients navigationController?.popViewController(animated: true) } - } extension CreateLogVC : InstagramImagePickerDelegate { @@ -220,14 +219,12 @@ extension CreateLogVC { func displaySearchResults(_ results : [Restaurant]) { DispatchQueue.main.async { - let restaurantPickerTVC = self.storyboard?.instantiateViewController(withIdentifier: "RestaurantPickerTableViewController") as! RestaurantPickerTableViewController -#warning("replace with restaurant object once this refactoringt complete") - restaurantPickerTVC.restaurantData = [[:]] + let restaurantPickerTVC = self.storyboard?.instantiateViewController(withIdentifier: "RestaurantPickerTableViewController") as! RestaurantPickerTableVC + restaurantPickerTVC.data = results restaurantPickerTVC.delegate = self self.navigationController?.pushViewController(restaurantPickerTVC, animated: true) } - } // MARK: Recipes API Request method diff --git a/FoodbLog/FoodbLog/CreateLogViewController.h b/FoodbLog/FoodbLog/CreateLogViewController.h deleted file mode 100644 index 11421d0..0000000 --- a/FoodbLog/FoodbLog/CreateLogViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// CreateLogViewController.h -// FoodbLog -// -// Created by Ayuna Vogel on 10/11/15. -// Copyright © 2015 Ayuna Vogel. All rights reserved. -// - -#import - -@interface CreateLogViewController : UIViewController - -@end diff --git a/FoodbLog/FoodbLog/CreateLogViewController.m b/FoodbLog/FoodbLog/CreateLogViewController.m deleted file mode 100644 index 3812147..0000000 --- a/FoodbLog/FoodbLog/CreateLogViewController.m +++ /dev/null @@ -1,551 +0,0 @@ -// -// CreateLogViewController.m -// FoodbLog -// -// Created by Ayuna Vogel on 10/11/15. -// Copyright © 2015 Ayuna Vogel. All rights reserved. -// - -#import -#import -#import -#import -#import -#import -#import - -#import "FoodLog.h" -#import "FoodFeedObject.h" -#import "CreateLogViewController.h" -#import "InstagramImagePicker.h" -#import "RestaurantPickerTableViewController.h" -#import "RecipeTableViewController.h" - -@interface CreateLogViewController () - -< -UITextFieldDelegate, -UIImagePickerControllerDelegate, -UINavigationControllerDelegate, -UITextViewDelegate, -CLLocationManagerDelegate, -UIActionSheetDelegate, -InstagramImagePickerDelegate, -RestaurantPickerTableViewDelegate, -RecipeTableViewDelegate -> - -// from top to bottom, as on the screen - -@property (nonatomic) IBOutlet UITextField *foodLogTitleTextField; - -@property (weak, nonatomic) IBOutlet UIButton *snapAPhotoButton; -@property (weak, nonatomic) IBOutlet UIButton *searchAPicButton; -@property (weak, nonatomic) IBOutlet UIImageView *foodLogImageView; - - -@property (nonatomic) IBOutlet UITextField *restaurantSearchTextField; -@property (weak, nonatomic) IBOutlet UITextField *recipeSearchTextField; -@property (weak, nonatomic) IBOutlet UITextView *foodExperienceTextView; - -@property (strong, nonatomic) UIImage *foodLogImage; -@property (nonatomic) NSString *recipeIngredientsToSave; -@property (nonatomic) UIImagePickerController *imagePickerController; -@property (copy, nonatomic) NSString *lastChosenMediaType; -- (BOOL)shouldPresentPhotoCaptureController; - -@property (nonatomic, strong) CLLocationManager* locationManager; -@property (nonatomic) CLLocation* userLocation; - -@property (nonatomic, assign) UIBackgroundTaskIdentifier fileUploadBackgroundTaskId; -@property (nonatomic, assign) UIBackgroundTaskIdentifier photoPostBackgroundTaskId; - -- (void)setupNavigationBar; -- (void)saveButtonTapped; - -@end - - -@implementation CreateLogViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - [self setupNavigationBar]; - [self setupDelegates]; - -} - -- (void)setupDelegates { - - // location manager - - self.locationManager = [[CLLocationManager alloc]init]; - [self.locationManager setDelegate:self]; - self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; - [self.locationManager requestAlwaysAuthorization]; - [self.locationManager startUpdatingLocation]; - - // all the text fields on the screen - - self.foodLogTitleTextField.delegate = self; - self.restaurantSearchTextField.delegate = self; - self.recipeSearchTextField.delegate = self; - self.foodExperienceTextView.delegate = self; - - // added formatting to text fields - [self textFieldFormatting:self.foodLogTitleTextField]; - [self textFieldFormatting:self.restaurantSearchTextField]; - [self textFieldFormatting:self.recipeSearchTextField]; - - // camera - - self.imagePickerController = [[UIImagePickerController alloc]init]; - self.imagePickerController.delegate = self; - - self.snapAPhotoButton.backgroundColor = [UIColor whiteColor]; - self.searchAPicButton.backgroundColor = [UIColor whiteColor]; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:YES]; - - self.foodLogImageView.layer.masksToBounds = YES; - self.foodLogImageView.layer.cornerRadius = 10; -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - - [self.view endEditing:YES]; -} - -#pragma mark - TextField Formatting - -- (void)textFieldFormatting:(UITextField *)textField { - - textField.layer.borderWidth = 1.0f; - textField.layer.cornerRadius = 3.0; - textField.layer.masksToBounds = YES; - textField.layer.borderColor = [[UIColor flatOrangeColor] CGColor]; - textField.inputAccessoryView = [[UIView alloc] init]; - -} - -#pragma mark - Navigation Bar - -- (void)setupNavigationBar { - - self.navigationItem.title = @"🍴🍜🍟🍤🍴"; - - self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelButtonTapped)]; - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(saveButtonTapped)]; - - self.navigationItem.leftBarButtonItem.tintColor = [UIColor whiteColor]; - self.navigationItem.rightBarButtonItem.tintColor = [UIColor whiteColor]; -} - -#pragma mark - CoreLocation Delegate methods - -- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { - - UIAlertView *errorAlert = [[UIAlertView alloc]initWithTitle:@"Error" - message:@"There was an error retrieving your location" - delegate:nil - cancelButtonTitle:@"OK" - otherButtonTitles: nil]; - [errorAlert show]; - NSLog(@"Error: %@",error.description); - -} - -- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { - - CLLocation *crnLoc = [locations lastObject]; - self.userLocation = crnLoc; -} - - -#pragma mark - API requests methods - -#pragma mark - Fousquare API Request method - -- (void)foursquareRequestForRestaurantName:(NSString *)restaurantName { - - NSString *urlString = [NSString stringWithFormat:@"https://api.foursquare.com/v2/venues/search?client_id=VENOVOCEM4E1QVRTGNOCNO40V32YHQ4FMRD0M3K4WBMYQWPS&client_secret=QVM22AMEWXEZ54VBHMGOHYE2JNMMLTQYKOKOSAK0JTGDQBLT&v=20130815&ll=%f,%f&query=%@&radius=2000", self.userLocation.coordinate.latitude, self.userLocation.coordinate.longitude, restaurantName]; - - AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc]init]; - - [manager GET:urlString - parameters:nil - success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { - - NSArray *venues = responseObject[@"response"][@"venues"]; - NSMutableArray *restaurantData = [[NSMutableArray alloc]init]; - - for (NSDictionary *venue in venues) { - - NSMutableDictionary *restaurantNamesAndAddresses = [[NSMutableDictionary alloc]init]; - - [restaurantNamesAndAddresses setObject:venue[@"name"] forKey:@"restaurantName"]; - - [restaurantNamesAndAddresses setObject:venue[@"location"][@"address"] forKey:@"restaurantAddress"]; - - [restaurantData addObject:restaurantNamesAndAddresses]; - - } - - RestaurantPickerTableViewController *restaurantPickerTVC = [self.storyboard instantiateViewControllerWithIdentifier:@"RestaurantPickerTableViewController"]; - - restaurantPickerTVC.restaurantData = [NSArray arrayWithArray:restaurantData]; - - restaurantPickerTVC.delegate = self; - - [self.navigationController pushViewController:restaurantPickerTVC animated:YES]; - - } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) { - - NSLog(@"%@", error); - NSLog(@"you are at %f and %f", self.userLocation.coordinate.latitude, self.userLocation.coordinate.longitude); - - }]; - -} - -- (void)didSelectRestaurant:(NSString *)restaurant { - self.restaurantSearchTextField.text = restaurant; - [self.navigationController popViewControllerAnimated:YES]; -} - -#pragma mark - Recipes API Request method - -- (void)recipeRequestForString:(NSString *)string { - - NSString *formattedInputString = [string stringByReplacingOccurrencesOfString:@" " withString:@"%20"]; - - NSString *URLString = [NSString stringWithFormat:@"https://forkify-api.herokuapp.com/api/get?rId=%@", formattedInputString]; - - AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc]init]; - - manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"]; - - [manager GET:URLString parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { - - NSArray *recipes = responseObject[@"recipes"]; - - NSMutableArray *recipeResultsArray = [[NSMutableArray alloc]init]; - - for (NSDictionary *recipe in recipes) { - - FoodFeedObject *recipeResultObject = [[FoodFeedObject alloc]init]; - recipeResultObject.imageURLString = recipe[@"image_url"]; - recipeResultObject.recipeID = recipe[@"recipe_id"]; - recipeResultObject.recipeTitle = recipe[@"title"]; - - [recipeResultsArray addObject:recipeResultObject]; - - } - - RecipeTableViewController *recipeTVC = [self.storyboard instantiateViewControllerWithIdentifier:@"RecipeTableViewController"]; - - recipeTVC.recipeResultsArray = recipeResultsArray; - recipeTVC.delegate = self; - - [self.navigationController pushViewController:recipeTVC animated:YES]; - - - } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) { - - NSLog(@"failure"); - }]; - -} - -- (void)didSelectRecipe:(NSString *)recipe withIngredients:(NSString *)ingredients { - - self.recipeSearchTextField.text = recipe; - self.recipeIngredientsToSave = ingredients; - NSLog(@"%@", self.recipeIngredientsToSave); - [self.navigationController popViewControllerAnimated:YES]; - -} - - - -#pragma mark - Take Photo or Choose Photo From Library - -- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { - if (buttonIndex == 0) { - [self shouldStartCameraController]; - } else if (buttonIndex == 1) { - [self shouldStartPhotoLibraryPickerController]; - } -} - - -#pragma mark - Search a Pic on Instagram - -- (IBAction)searchAPicOnInstagramButtonTapped:(UIButton *)sender { - - [self instagramRequestForTag:self.foodLogTitleTextField.text]; - -} - -#pragma mark - Instagram Image API Request method - -- (void)instagramRequestForTag:(NSString *)foodName { - - foodName = [foodName stringByReplacingOccurrencesOfString:@" " withString:@""]; - - NSString *urlString = [NSString stringWithFormat:@"https://api.instagram.com/v1/tags/%@/media/recent?client_id=ac0ee52ebb154199bfabfb15b498c067", foodName]; - - - AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc]init]; - [manager GET:urlString - parameters:nil - success:^(AFHTTPRequestOperation *_Nonnull operation, id _Nonnull responseObject) { - - NSArray *results = responseObject[@"data"]; - - - NSMutableArray *searchResults = [[NSMutableArray alloc] init]; - - // loop through all json posts - for (NSDictionary *result in results) { - [searchResults addObject:result[@"images"][@"standard_resolution"][@"url"]]; - } - - //pass the searchResults over to the CollectionViewController - InstagramImagePicker *instagramPicker = [self.storyboard instantiateViewControllerWithIdentifier:@"InstagramImagePickerViewController"]; - - instagramPicker.delegate = self; - instagramPicker.imageURLArray = searchResults; - - [self.navigationController pushViewController:instagramPicker animated:YES]; - - NSLog(@"%@", searchResults); - - - - } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) { - NSLog(@"%@", error); - - }]; - -} - -- (void)imagePickerDidSelectImageWithURL:(NSString *)url { - - [self.foodLogImageView sd_setImageWithURL:[NSURL URLWithString:url] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - - self.foodLogImageView.image = image; - - }]; - -} - - -#pragma mark - (Camera) Image Picker Controller Delegate methods - -- (IBAction)snapAPhotoButtonTapped:(UIButton *)sender { - - BOOL cameraDeviceAvailable = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]; - BOOL photoLibraryAvailable = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]; - - if (cameraDeviceAvailable && photoLibraryAvailable) { - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil - message:nil - preferredStyle:UIAlertControllerStyleActionSheet]; - - UIAlertAction *takePhoto; - UIAlertAction *choosePhoto; - UIAlertAction *cancelFoodLogPhotoTaking; - - takePhoto = [UIAlertAction actionWithTitle:@"Take Photo" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction *action) { - [self shouldStartCameraController]; - }]; - choosePhoto = [UIAlertAction actionWithTitle:@"Choose Photo" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction *action) { - [self shouldStartPhotoLibraryPickerController]; - }]; - - cancelFoodLogPhotoTaking = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { - //NSLog(@"canceled"); - }]; - - [alertController addAction:takePhoto]; - [alertController addAction:choosePhoto]; - [alertController addAction:cancelFoodLogPhotoTaking]; - - [self presentViewController:alertController animated:YES completion:nil]; - } else { - // if we don't have at least two options, we automatically show whichever is available (camera or roll) - [self shouldPresentPhotoCaptureController]; - } - -} - -- (BOOL)shouldPresentPhotoCaptureController { - BOOL presentedPhotoCaptureController = [self shouldStartCameraController]; - - if (!presentedPhotoCaptureController) { - presentedPhotoCaptureController = [self shouldStartPhotoLibraryPickerController]; - } - - return presentedPhotoCaptureController; -} - -- (BOOL)shouldStartCameraController { - - if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == NO) { - return NO; - } - - UIImagePickerController *cameraUI = [[UIImagePickerController alloc] init]; - - if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] - && [[UIImagePickerController availableMediaTypesForSourceType: - UIImagePickerControllerSourceTypeCamera] containsObject:(NSString *)kUTTypeImage]) { - - cameraUI.mediaTypes = [NSArray arrayWithObject:(NSString *) kUTTypeImage]; - cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera; - - if ([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear]) { - cameraUI.cameraDevice = UIImagePickerControllerCameraDeviceRear; - } else if ([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront]) { - cameraUI.cameraDevice = UIImagePickerControllerCameraDeviceFront; - } - - } else { - return NO; - } - - cameraUI.showsCameraControls = YES; - cameraUI.delegate = self; - - [self presentViewController:cameraUI animated:YES completion:nil]; - - return YES; -} - -- (BOOL)shouldStartPhotoLibraryPickerController { - - if (([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary] == NO - && [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum] == NO)) { - return NO; - } - - UIImagePickerController *cameraUI = [[UIImagePickerController alloc] init]; - - if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary] - && [[UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypePhotoLibrary] containsObject:(NSString *)kUTTypeImage]) { - - cameraUI.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; - cameraUI.mediaTypes = [NSArray arrayWithObject:(NSString *) kUTTypeImage]; - - } else if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum] - && [[UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeSavedPhotosAlbum] containsObject:(NSString *)kUTTypeImage]) { - - cameraUI.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; - cameraUI.mediaTypes = [NSArray arrayWithObject:(NSString *) kUTTypeImage]; - - } else { - return NO; - } - - cameraUI.delegate = self; - - [self presentViewController:cameraUI animated:YES completion:nil]; - - return YES; -} - -- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { - - UIImage *foodPhotoImage = [info valueForKey:UIImagePickerControllerOriginalImage]; - self.foodLogImageView.image = foodPhotoImage; - self.foodLogImageView.layer.masksToBounds = YES; - self.foodLogImageView.layer.cornerRadius = 10; - - [self dismissViewControllerAnimated:YES completion:nil]; - -} - -- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { - [self dismissViewControllerAnimated:YES completion:nil]; -} - - -#pragma mark - TextField Return and Editing methods - -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - - [textField endEditing:YES]; - - if (textField.tag == 1) { - NSString *stringToSearch = [textField.text stringByReplacingOccurrencesOfString:@" " withString:@"%20"]; - [self foursquareRequestForRestaurantName:stringToSearch]; - } else if (textField.tag == 2) { - NSLog(@"tag is 2!"); - [self recipeRequestForString:textField.text]; - } else { - NSLog(@"what"); - } - - return YES; -} - -- (void)textViewDidBeginEditing:(UITextView *)textView { - [textView setText:@""]; - textView.textColor = [UIColor blackColor]; -} - -- (void)textViewDidEndEditing:(UITextView *)textView { - - if ([textView.text isEqualToString:@""]) { - textView.textColor = [UIColor lightGrayColor]; - [textView setText:@"Wanna Save Some Notes?"]; - } -} - -#pragma mark - Save button - -- (void)saveButtonTapped { - - UIImage *foodLogImageToBeSaved = self.foodLogImageView.image; - // Convert to JPEG with 50% quality - NSData *data = UIImageJPEGRepresentation(foodLogImageToBeSaved, 0.5f); - PFFile *imageFileToBeSavedOnParse = [PFFile fileWithData:data contentType:@"image/png"]; - - // sending data to and storing it on Parse - FoodLog *foodLog = [[FoodLog alloc] init]; - foodLog.name = self.foodLogTitleTextField.text; - foodLog.image = imageFileToBeSavedOnParse; - foodLog.notes = self.foodExperienceTextView.text; - foodLog.restaurantName = self.restaurantSearchTextField.text; - foodLog.recipeName = self.recipeSearchTextField.text; - - // Request a background execution task to allow us to finish uploading the photo even if the app is in the background - self.fileUploadBackgroundTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ - [[UIApplication sharedApplication] endBackgroundTask:self.fileUploadBackgroundTaskId]; - }]; - - [foodLog saveInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) { - [self dismissViewControllerAnimated:YES completion:nil]; - }]; - - [foodLog saveInBackground]; - - // saves a snapped photo to the camera roll on user's device - UIImageWriteToSavedPhotosAlbum(foodLogImageToBeSaved, nil, nil, nil); - -} - -- (void)cancelButtonTapped { - [self dismissViewControllerAnimated:YES completion:nil]; -} - -@end diff --git a/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h b/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h index 9722e0c..969fa6f 100644 --- a/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h +++ b/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h @@ -5,8 +5,6 @@ #import "FoodLog.h" #import "FoodFeedViewController.h" #import "FoodbLogCustomCell.h" -#import "CreateLogViewController.h" -#import "RestaurantPickerTableViewController.h" #import "RecipeTableViewController.h" #import "InstagramImagePicker.h" #import "FoodLog.h" diff --git a/FoodbLog/FoodbLog/RestaurantPickerTableVC.swift b/FoodbLog/FoodbLog/RestaurantPickerTableVC.swift new file mode 100644 index 0000000..a468402 --- /dev/null +++ b/FoodbLog/FoodbLog/RestaurantPickerTableVC.swift @@ -0,0 +1,48 @@ +// +// RestaurantPickerTableVC.swift +// FoodbLog +// +// Created by Ikmal Azman on 14/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import UIKit + +protocol RestaurantPickerTableVCDelegate : AnyObject { + func didSelectRestaurant(_ restaurant : String) +} + +final class RestaurantPickerTableVC: UITableViewController { + + weak var delegate : RestaurantPickerTableVCDelegate? + var data : [Restaurant] = [] + + override func viewDidLoad() { + super.viewDidLoad() + } +} + +extension RestaurantPickerTableVC { + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return data.count + } + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let restaurant = data[indexPath.row] + + let cell = tableView.dequeueReusableCell(withIdentifier: "RestaurantNameCell", for: indexPath) + cell.textLabel?.text = restaurant.name + cell.detailTextLabel?.text = restaurant.location?.formattedAddress + + return cell + } +} + +extension RestaurantPickerTableVC { + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + guard let selectedRestaurant = data[indexPath.row].name else {return} + + delegate?.didSelectRestaurant(selectedRestaurant) + navigationController?.popViewController(animated: true) + } +} diff --git a/FoodbLog/FoodbLog/RestaurantPickerTableViewController.h b/FoodbLog/FoodbLog/RestaurantPickerTableViewController.h deleted file mode 100644 index 00cb9a7..0000000 --- a/FoodbLog/FoodbLog/RestaurantPickerTableViewController.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// RestaurantPickerTableViewController.h -// FoodbLog -// -// Created by Jovanny Espinal on 10/15/15. -// Copyright © 2015 Ayuna Vogel. All rights reserved. -// - -#import - -@protocol RestaurantPickerTableViewDelegate - -- (void) didSelectRestaurant:(NSString *)restaurant; - -@end - - -@interface RestaurantPickerTableViewController : UITableViewController - -@property (nonatomic, weak) id delegate; -@property (nonatomic) NSArray *restaurantData; - -@end diff --git a/FoodbLog/FoodbLog/RestaurantPickerTableViewController.m b/FoodbLog/FoodbLog/RestaurantPickerTableViewController.m deleted file mode 100644 index 0f75489..0000000 --- a/FoodbLog/FoodbLog/RestaurantPickerTableViewController.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// RestaurantPickerTableViewController.m -// FoodbLog -// -// Created by Jovanny Espinal on 10/15/15. -// Copyright © 2015 Ayuna Vogel. All rights reserved. -// - -#import "RestaurantPickerTableViewController.h" - -@interface RestaurantPickerTableViewController () - -@end - - -@implementation RestaurantPickerTableViewController - -- (void)viewDidLoad { - [super viewDidLoad]; -} - -#pragma mark - Table view data source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return self.restaurantData.count; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RestaurantNameCell" forIndexPath:indexPath]; - - cell.textLabel.text = self.restaurantData[indexPath.row][@"restaurantName"]; - cell.detailTextLabel.text = self.restaurantData[indexPath.row][@"restaurantAddress"]; - - return cell; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - - NSString *restaurant = self.restaurantData[indexPath.row][@"restaurantName"]; - [self.delegate didSelectRestaurant:restaurant]; - -} - -@end From 153c634934792a367de42d0fb6e4c442e7d11987 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Fri, 14 Apr 2023 22:52:00 +0100 Subject: [PATCH 27/29] Refactor InstagramImagePicker to Swift --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 12 ++-- FoodbLog/FoodbLog/Base.lproj/Main.storyboard | 2 +- FoodbLog/FoodbLog/CreateLogVC.swift | 12 ++-- FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h | 2 +- FoodbLog/FoodbLog/InstagramImagePicker.h | 23 ------- FoodbLog/FoodbLog/InstagramImagePicker.m | 61 ------------------- FoodbLog/FoodbLog/UnsplashImagePickerVC.swift | 59 ++++++++++++++++++ 7 files changed, 71 insertions(+), 100 deletions(-) delete mode 100644 FoodbLog/FoodbLog/InstagramImagePicker.h delete mode 100644 FoodbLog/FoodbLog/InstagramImagePicker.m create mode 100644 FoodbLog/FoodbLog/UnsplashImagePickerVC.swift diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index 3427cbf..b3ff00e 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -17,7 +17,6 @@ 50967FC71BD5C8F40029D6AB /* SignPainter-HouseScript.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 50967FC61BD5C8F40029D6AB /* SignPainter-HouseScript.ttf */; }; 50967FD11BD5E36F0029D6AB /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 50967FD01BD5E36F0029D6AB /* Launch Screen.storyboard */; }; 50967FD41BD6F6930029D6AB /* RecipeTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 50967FD31BD6F6930029D6AB /* RecipeTableViewController.m */; }; - 50A3C2C41BCAE4AD0077F79B /* InstagramImagePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 50A3C2C31BCAE4AD0077F79B /* InstagramImagePicker.m */; }; 50D767B81BCC895900C82B8B /* FoodFeedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 50D767B71BCC895900C82B8B /* FoodFeedViewController.m */; }; 50F7C6781BCAF72B00A969D1 /* InstagramImagePickerCustomCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F7C6771BCAF72B00A969D1 /* InstagramImagePickerCustomCell.m */; }; 50F7C67E1BCB08BA00A969D1 /* FoodFeedCustomCVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F7C67D1BCB08BA00A969D1 /* FoodFeedCustomCVC.m */; }; @@ -26,6 +25,7 @@ 7F003D3529E358EA00439CF8 /* APIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F003D3429E358EA00439CF8 /* APIService.swift */; }; 7F003D3A29E35E0E00439CF8 /* SearchRestaurant.json in Resources */ = {isa = PBXBuildFile; fileRef = 7F003D3929E35E0E00439CF8 /* SearchRestaurant.json */; }; 7F003D3C29E35FA300439CF8 /* Restaurant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F003D3B29E35FA300439CF8 /* Restaurant.swift */; }; + 7F1163DA29E9FBBE002F3DB8 /* UnsplashImagePickerVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1163D929E9FBBE002F3DB8 /* UnsplashImagePickerVC.swift */; }; 7F1217C229E4757D007913F1 /* SearchRecipe.json in Resources */ = {isa = PBXBuildFile; fileRef = 7F1217C129E4757D007913F1 /* SearchRecipe.json */; }; 7F1217C429E477E0007913F1 /* Recipe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1217C329E477E0007913F1 /* Recipe.swift */; }; 7F5B461129E9CAAB00EC67FC /* Secrets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F5B461029E9CAAB00EC67FC /* Secrets.swift */; }; @@ -87,8 +87,6 @@ 50967FD01BD5E36F0029D6AB /* Launch Screen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = ""; }; 50967FD21BD6F6930029D6AB /* RecipeTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecipeTableViewController.h; sourceTree = ""; }; 50967FD31BD6F6930029D6AB /* RecipeTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecipeTableViewController.m; sourceTree = ""; }; - 50A3C2C21BCAE4AD0077F79B /* InstagramImagePicker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InstagramImagePicker.h; sourceTree = ""; }; - 50A3C2C31BCAE4AD0077F79B /* InstagramImagePicker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InstagramImagePicker.m; sourceTree = ""; }; 50D767B61BCC895900C82B8B /* FoodFeedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodFeedViewController.h; sourceTree = ""; }; 50D767B71BCC895900C82B8B /* FoodFeedViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodFeedViewController.m; sourceTree = ""; }; 50F7C6761BCAF72B00A969D1 /* InstagramImagePickerCustomCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InstagramImagePickerCustomCell.h; sourceTree = ""; }; @@ -102,6 +100,7 @@ 7F003D3429E358EA00439CF8 /* APIService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIService.swift; sourceTree = ""; }; 7F003D3929E35E0E00439CF8 /* SearchRestaurant.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = SearchRestaurant.json; sourceTree = ""; }; 7F003D3B29E35FA300439CF8 /* Restaurant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Restaurant.swift; sourceTree = ""; }; + 7F1163D929E9FBBE002F3DB8 /* UnsplashImagePickerVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnsplashImagePickerVC.swift; sourceTree = ""; }; 7F1217C129E4757D007913F1 /* SearchRecipe.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = SearchRecipe.json; sourceTree = ""; }; 7F1217C329E477E0007913F1 /* Recipe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Recipe.swift; sourceTree = ""; }; 7F5B461029E9CAAB00EC67FC /* Secrets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Secrets.swift; sourceTree = ""; }; @@ -253,8 +252,7 @@ 294C32C51C95DD6700795520 /* Pick Image From Instagram */ = { isa = PBXGroup; children = ( - 50A3C2C21BCAE4AD0077F79B /* InstagramImagePicker.h */, - 50A3C2C31BCAE4AD0077F79B /* InstagramImagePicker.m */, + 7F1163D929E9FBBE002F3DB8 /* UnsplashImagePickerVC.swift */, ); name = "Pick Image From Instagram"; sourceTree = ""; @@ -304,9 +302,9 @@ 7F003D3629E35DC200439CF8 /* Stubs */, 7F8CC93F29DDF15D0050C281 /* Service */, 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */, + 7FB90DF029DD668400A50433 /* RootTabBarVC.swift */, 7FB90DE729DD5E6500A50433 /* FoodbLog-Bridging-Header.h */, 29E25D511BCAB8480015A16F /* Main.storyboard */, - 7FB90DF029DD668400A50433 /* RootTabBarVC.swift */, 294C32BC1C93182200795520 /* Model */, 294C32BD1C93183F00795520 /* Views */, 294C32BB1C93181400795520 /* Controllers */, @@ -596,7 +594,6 @@ 7FB90DF329DD756000A50433 /* FoodLogCollectionViewVC.swift in Sources */, 7F8CC93E29DDB3200050C281 /* CreateLogVC.swift in Sources */, 7F8CC96C29DDF2D10050C281 /* URLSessionContract.swift in Sources */, - 50A3C2C41BCAE4AD0077F79B /* InstagramImagePicker.m in Sources */, 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */, 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */, 7F003D3C29E35FA300439CF8 /* Restaurant.swift in Sources */, @@ -614,6 +611,7 @@ 7F5B461729E9D96A00EC67FC /* RestaurantPickerTableVC.swift in Sources */, 50F7C67E1BCB08BA00A969D1 /* FoodFeedCustomCVC.m in Sources */, 7F5B461529E9CD4C00EC67FC /* Tag.swift in Sources */, + 7F1163DA29E9FBBE002F3DB8 /* UnsplashImagePickerVC.swift in Sources */, 7F1217C429E477E0007913F1 /* Recipe.swift in Sources */, 7F003D3529E358EA00439CF8 /* APIService.swift in Sources */, 7FB90DE929DD5E6600A50433 /* AppDelegate.swift in Sources */, diff --git a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard index c303ae5..80f1aff 100644 --- a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard +++ b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard @@ -537,7 +537,7 @@ - + diff --git a/FoodbLog/FoodbLog/CreateLogVC.swift b/FoodbLog/FoodbLog/CreateLogVC.swift index 078eb01..4bf2c0d 100644 --- a/FoodbLog/FoodbLog/CreateLogVC.swift +++ b/FoodbLog/FoodbLog/CreateLogVC.swift @@ -180,12 +180,10 @@ extension CreateLogVC : RecipeTableViewDelegate { } } -extension CreateLogVC : InstagramImagePickerDelegate { - func imagePickerDidSelectImage(withURL url: String!) { +extension CreateLogVC : UnsplashImagePickerVCDelegate { + func didSelectImageWithURL(_ url: String) { guard let url = URL(string: url) else {return} - self.foodLogImageView.setImageWith(url, placeholderImage: UIImage()) { image, error, _ in - self.foodLogImageView.image = image - } + foodLogImageView.sd_setImage(with: url) } } @@ -267,11 +265,11 @@ extension CreateLogVC { func displayTagResults(_ tags : [Tag]) { DispatchQueue.main.async { - let instagramPickerVC = self.storyboard?.instantiateViewController(withIdentifier: "InstagramImagePicker") as! InstagramImagePicker + let instagramPickerVC = self.storyboard?.instantiateViewController(withIdentifier: "InstagramImagePicker") as! UnsplashImagePickerVC #warning("replace with tags object once this refactoringt complete") - instagramPickerVC.imageURLArray = [] + instagramPickerVC.data = tags instagramPickerVC.delegate = self self.navigationController?.pushViewController(instagramPickerVC, animated: true) diff --git a/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h b/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h index 969fa6f..81c73c2 100644 --- a/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h +++ b/FoodbLog/FoodbLog/FoodbLog-Bridging-Header.h @@ -6,7 +6,7 @@ #import "FoodFeedViewController.h" #import "FoodbLogCustomCell.h" #import "RecipeTableViewController.h" -#import "InstagramImagePicker.h" +#import "InstagramImagePickerCustomCell.h" #import "FoodLog.h" #import "FoodFeedObject.h" #import "FoodLog.m" diff --git a/FoodbLog/FoodbLog/InstagramImagePicker.h b/FoodbLog/FoodbLog/InstagramImagePicker.h deleted file mode 100644 index f5ba825..0000000 --- a/FoodbLog/FoodbLog/InstagramImagePicker.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// InstagramImagePicker.h -// FoodbLog -// -// Created by Jovanny Espinal on 10/11/15. -// Copyright © 2015 Ayuna Vogel. All rights reserved. -// - -#import - -@protocol InstagramImagePickerDelegate - -- (void)imagePickerDidSelectImageWithURL:(NSString*)url; - -@end - - -@interface InstagramImagePicker : UICollectionViewController - -@property (nonatomic, weak) id delegate; -@property (nonatomic) NSArray *imageURLArray; - -@end diff --git a/FoodbLog/FoodbLog/InstagramImagePicker.m b/FoodbLog/FoodbLog/InstagramImagePicker.m deleted file mode 100644 index 17c8589..0000000 --- a/FoodbLog/FoodbLog/InstagramImagePicker.m +++ /dev/null @@ -1,61 +0,0 @@ -// -// InstagramImagePicker.m -// FoodbLog -// -// Created by Jovanny Espinal on 10/11/15. -// Copyright © 2015 Ayuna Vogel. All rights reserved. -// - -#import -#import - -#import "InstagramImagePicker.h" -#import "InstagramImagePickerCustomCell.h" - -@implementation InstagramImagePicker - -- (void)viewDidLoad { - - CGFloat leftAndRightPaddings = 6.0; - CGFloat numberOfItemsPerRow = 3.0; - - CGFloat heightAdjustment = 30.0; - CGFloat width = (CGRectGetWidth(self.collectionView.frame) - leftAndRightPaddings)/numberOfItemsPerRow; - - UICollectionViewFlowLayout *layout = self.collectionViewLayout; - layout.itemSize = CGSizeMake(width, width + heightAdjustment); - -} - -- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { - return 1; -} - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return self.imageURLArray.count; -} - -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - - InstagramImagePickerCustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"InstagramImagePickerCustomCell" forIndexPath:indexPath]; - - [cell.foodImage sd_setImageWithURL:[NSURL URLWithString:self.imageURLArray[indexPath.row]] - completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - - cell.foodImage.image = image; - - }]; - - return cell; -} - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - - [self.delegate imagePickerDidSelectImageWithURL:self.imageURLArray[indexPath.row]]; - - InstagramImagePickerCustomCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; - cell.alpha = 0.3; - -} - -@end diff --git a/FoodbLog/FoodbLog/UnsplashImagePickerVC.swift b/FoodbLog/FoodbLog/UnsplashImagePickerVC.swift new file mode 100644 index 0000000..5e406da --- /dev/null +++ b/FoodbLog/FoodbLog/UnsplashImagePickerVC.swift @@ -0,0 +1,59 @@ +// +// UnsplashImagePickerCollectionVC.swift +// FoodbLog +// +// Created by Ikmal Azman on 14/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import UIKit + +protocol UnsplashImagePickerVCDelegate : AnyObject { + func didSelectImageWithURL(_ url : String) +} + +final class UnsplashImagePickerVC: UICollectionViewController { + + weak var delegate : UnsplashImagePickerVCDelegate? + var data : [Tag] = [] + + override func viewDidLoad() { + super.viewDidLoad() + + let horizontalPadding : CGFloat = 6 + let numberOfItemsPerRow : CGFloat = 3 + let width = (collectionView.frame.width - horizontalPadding) / numberOfItemsPerRow + let cellHeight : CGFloat = 30 + + + let layout = UICollectionViewFlowLayout() + layout.itemSize = CGSize(width: width, height: width + cellHeight) + collectionView.collectionViewLayout = layout + } +} + +extension UnsplashImagePickerVC { + override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return data.count + } + + override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let tag = data[indexPath.row] + + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "InstagramImagePickerCustomCell", for: indexPath) as! InstagramImagePickerCustomCell + cell.foodImage.sd_setImage(with: URL(string: tag.URL.thumbnailResolution)) + return cell + } +} + +extension UnsplashImagePickerVC { + override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + let cell = collectionView.cellForItem(at: indexPath) + cell?.alpha = 0.3 + + let selectedImage = data[indexPath.row] + + self.delegate?.didSelectImageWithURL(selectedImage.URL.standardResolution) + navigationController?.popViewController(animated: true) + } +} From 8a4542146f429df7bb1046a8ca77450b8160b854 Mon Sep 17 00:00:00 2001 From: Ikmal Azman Date: Sat, 15 Apr 2023 15:06:01 +0100 Subject: [PATCH 28/29] Refactor RecipeTableViewController to Swift --- FoodbLog/FoodbLog.xcodeproj/project.pbxproj | 10 +-- FoodbLog/FoodbLog/Base.lproj/Main.storyboard | 2 +- FoodbLog/FoodbLog/CreateLogVC.swift | 15 ++-- FoodbLog/FoodbLog/RecipeTableVC.swift | 51 +++++++++++ FoodbLog/FoodbLog/RecipeTableViewController.h | 25 ------ FoodbLog/FoodbLog/RecipeTableViewController.m | 84 ------------------- 6 files changed, 61 insertions(+), 126 deletions(-) create mode 100644 FoodbLog/FoodbLog/RecipeTableVC.swift delete mode 100644 FoodbLog/FoodbLog/RecipeTableViewController.h delete mode 100644 FoodbLog/FoodbLog/RecipeTableViewController.m diff --git a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj index b3ff00e..469d003 100644 --- a/FoodbLog/FoodbLog.xcodeproj/project.pbxproj +++ b/FoodbLog/FoodbLog.xcodeproj/project.pbxproj @@ -16,7 +16,6 @@ 507F55891BD965B10059C2B3 /* RecipeTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 507F55881BD965B10059C2B3 /* RecipeTableViewCell.m */; }; 50967FC71BD5C8F40029D6AB /* SignPainter-HouseScript.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 50967FC61BD5C8F40029D6AB /* SignPainter-HouseScript.ttf */; }; 50967FD11BD5E36F0029D6AB /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 50967FD01BD5E36F0029D6AB /* Launch Screen.storyboard */; }; - 50967FD41BD6F6930029D6AB /* RecipeTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 50967FD31BD6F6930029D6AB /* RecipeTableViewController.m */; }; 50D767B81BCC895900C82B8B /* FoodFeedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 50D767B71BCC895900C82B8B /* FoodFeedViewController.m */; }; 50F7C6781BCAF72B00A969D1 /* InstagramImagePickerCustomCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F7C6771BCAF72B00A969D1 /* InstagramImagePickerCustomCell.m */; }; 50F7C67E1BCB08BA00A969D1 /* FoodFeedCustomCVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F7C67D1BCB08BA00A969D1 /* FoodFeedCustomCVC.m */; }; @@ -39,6 +38,7 @@ 7F8CC96C29DDF2D10050C281 /* URLSessionContract.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC96B29DDF2D10050C281 /* URLSessionContract.swift */; }; 7F8CC96E29DDF3630050C281 /* MockURLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC96D29DDF3630050C281 /* MockURLSession.swift */; }; 7F8CC97029DDF91E0050C281 /* FoodLogServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F8CC96F29DDF91E0050C281 /* FoodLogServiceTests.swift */; }; + 7FB139F929EAE0AB0061BD9C /* RecipeTableVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB139F829EAE0AB0061BD9C /* RecipeTableVC.swift */; }; 7FB90DE929DD5E6600A50433 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */; }; 7FB90DEB29DD630F00A50433 /* ParseDBAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */; }; 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB90DEC29DD635600A50433 /* ChemeleonAppDelegate.swift */; }; @@ -85,8 +85,6 @@ 507F55881BD965B10059C2B3 /* RecipeTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecipeTableViewCell.m; sourceTree = ""; }; 50967FC61BD5C8F40029D6AB /* SignPainter-HouseScript.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SignPainter-HouseScript.ttf"; sourceTree = ""; }; 50967FD01BD5E36F0029D6AB /* Launch Screen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = ""; }; - 50967FD21BD6F6930029D6AB /* RecipeTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecipeTableViewController.h; sourceTree = ""; }; - 50967FD31BD6F6930029D6AB /* RecipeTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecipeTableViewController.m; sourceTree = ""; }; 50D767B61BCC895900C82B8B /* FoodFeedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodFeedViewController.h; sourceTree = ""; }; 50D767B71BCC895900C82B8B /* FoodFeedViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodFeedViewController.m; sourceTree = ""; }; 50F7C6761BCAF72B00A969D1 /* InstagramImagePickerCustomCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InstagramImagePickerCustomCell.h; sourceTree = ""; }; @@ -115,6 +113,7 @@ 7F8CC96B29DDF2D10050C281 /* URLSessionContract.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLSessionContract.swift; sourceTree = ""; }; 7F8CC96D29DDF3630050C281 /* MockURLSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockURLSession.swift; sourceTree = ""; }; 7F8CC96F29DDF91E0050C281 /* FoodLogServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodLogServiceTests.swift; sourceTree = ""; }; + 7FB139F829EAE0AB0061BD9C /* RecipeTableVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipeTableVC.swift; sourceTree = ""; }; 7FB90DE729DD5E6500A50433 /* FoodbLog-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FoodbLog-Bridging-Header.h"; sourceTree = ""; }; 7FB90DE829DD5E6600A50433 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7FB90DEA29DD630F00A50433 /* ParseDBAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseDBAppDelegate.swift; sourceTree = ""; }; @@ -268,8 +267,7 @@ 294C32C71C95DD8100795520 /* Pick Recipe */ = { isa = PBXGroup; children = ( - 50967FD21BD6F6930029D6AB /* RecipeTableViewController.h */, - 50967FD31BD6F6930029D6AB /* RecipeTableViewController.m */, + 7FB139F829EAE0AB0061BD9C /* RecipeTableVC.swift */, ); name = "Pick Recipe"; sourceTree = ""; @@ -595,10 +593,10 @@ 7F8CC93E29DDB3200050C281 /* CreateLogVC.swift in Sources */, 7F8CC96C29DDF2D10050C281 /* URLSessionContract.swift in Sources */, 7F8CC93C29DDAC540050C281 /* FoodLogDetailVC.swift in Sources */, + 7FB139F929EAE0AB0061BD9C /* RecipeTableVC.swift in Sources */, 7FB90DED29DD635600A50433 /* ChemeleonAppDelegate.swift in Sources */, 7F003D3C29E35FA300439CF8 /* Restaurant.swift in Sources */, 5D2957241BD3F8FE0029FD65 /* FoodFeedObject.m in Sources */, - 50967FD41BD6F6930029D6AB /* RecipeTableViewController.m in Sources */, 29F703A31BD08C5C009B7A82 /* FoodLog.m in Sources */, 29F703611BCB923F009B7A82 /* FoodbLogCustomCell.m in Sources */, 507F55891BD965B10059C2B3 /* RecipeTableViewCell.m in Sources */, diff --git a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard index 80f1aff..c5edf1a 100644 --- a/FoodbLog/FoodbLog/Base.lproj/Main.storyboard +++ b/FoodbLog/FoodbLog/Base.lproj/Main.storyboard @@ -590,7 +590,7 @@ - + diff --git a/FoodbLog/FoodbLog/CreateLogVC.swift b/FoodbLog/FoodbLog/CreateLogVC.swift index 4bf2c0d..d0cceba 100644 --- a/FoodbLog/FoodbLog/CreateLogVC.swift +++ b/FoodbLog/FoodbLog/CreateLogVC.swift @@ -139,7 +139,6 @@ extension CreateLogVC : UITextFieldDelegate { return true } - } extension CreateLogVC : UITextViewDelegate { @@ -172,11 +171,10 @@ extension CreateLogVC : RestaurantPickerTableVCDelegate { } } -extension CreateLogVC : RecipeTableViewDelegate { - func didSelectRecipe(_ recipe: String!, withIngredients ingredients: String!) { +extension CreateLogVC : RecipeTableVCDelegate { + func didSelecteRecipe(_ recipe: String, withIngredients ingredients: String) { recipeSearchTextField.text = recipe recipeIngredientsToSave = ingredients - navigationController?.popViewController(animated: true) } } @@ -232,6 +230,7 @@ extension CreateLogVC { foodbLogInteractor.requestRecipes(formattedInputString) { result in switch result { case .success(let data): + print(data.results) self.displayRecipeResults(data.results) case .failure(let failure): print("Failure to fetch recipes : \(failure.localizedDescription)") @@ -241,9 +240,8 @@ extension CreateLogVC { func displayRecipeResults(_ recipes : [Recipe]) { DispatchQueue.main.async { - let recipeTVC = self.storyboard?.instantiateViewController(withIdentifier: "RecipeTableViewController") as! RecipeTableViewController -#warning("replace with recipe object once this refactoringt complete") - recipeTVC.recipeResultsArray = [] + let recipeTVC = self.storyboard?.instantiateViewController(withIdentifier: "RecipeTableViewController") as! RecipeTableVC + recipeTVC.data = recipes recipeTVC.delegate = self self.navigationController?.pushViewController(recipeTVC, animated: true) @@ -266,9 +264,6 @@ extension CreateLogVC { func displayTagResults(_ tags : [Tag]) { DispatchQueue.main.async { let instagramPickerVC = self.storyboard?.instantiateViewController(withIdentifier: "InstagramImagePicker") as! UnsplashImagePickerVC - - -#warning("replace with tags object once this refactoringt complete") instagramPickerVC.data = tags instagramPickerVC.delegate = self diff --git a/FoodbLog/FoodbLog/RecipeTableVC.swift b/FoodbLog/FoodbLog/RecipeTableVC.swift new file mode 100644 index 0000000..abe3140 --- /dev/null +++ b/FoodbLog/FoodbLog/RecipeTableVC.swift @@ -0,0 +1,51 @@ +// +// RecipeTableVC.swift +// FoodbLog +// +// Created by Ikmal Azman on 15/04/2023. +// Copyright © 2023 Ayuna Vogel. All rights reserved. +// + +import UIKit + +protocol RecipeTableVCDelegate : AnyObject { + func didSelecteRecipe(_ recipe : String, withIngredients ingredients : String) +} + +final class RecipeTableVC: UITableViewController { + + weak var delegate : RecipeTableVCDelegate? + var data : [Recipe] = [] + + override func viewDidLoad() { + super.viewDidLoad() + } +} + +extension RecipeTableVC { + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return data.count + } + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let recipe = data[indexPath.row] + + let cell = tableView.dequeueReusableCell(withIdentifier: "RecipeCell", for: indexPath) as! RecipeTableViewCell + cell.recipeName.text = recipe.title + if let imageURL = URL(string: recipe.imageURL) { + cell.recipeImage.sd_setImage(with: imageURL) + } + + return cell + } +} + +extension RecipeTableVC { + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let selectedRecipe = data[indexPath.row] + let ingredients = selectedRecipe.ingredients.joined(separator: ", ") + + delegate?.didSelecteRecipe(selectedRecipe.title, withIngredients: ingredients) + navigationController?.popViewController(animated: true) + } +} diff --git a/FoodbLog/FoodbLog/RecipeTableViewController.h b/FoodbLog/FoodbLog/RecipeTableViewController.h deleted file mode 100644 index 5d0dfff..0000000 --- a/FoodbLog/FoodbLog/RecipeTableViewController.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// RecipeTableViewController.h -// FoodbLog -// -// Created by Jovanny Espinal on 10/20/15. -// Copyright © 2015 Ayuna Vogel. All rights reserved. -// - -#import - -#import "FoodFeedObject.h" - -@protocol RecipeTableViewDelegate - -- (void) didSelectRecipe:(NSString *)recipe withIngredients:(NSString *)ingredients; - -@end - - -@interface RecipeTableViewController : UITableViewController - -@property (nonatomic) id delegate; -@property (nonatomic) NSArray *recipeResultsArray; - -@end diff --git a/FoodbLog/FoodbLog/RecipeTableViewController.m b/FoodbLog/FoodbLog/RecipeTableViewController.m deleted file mode 100644 index c3bad2f..0000000 --- a/FoodbLog/FoodbLog/RecipeTableViewController.m +++ /dev/null @@ -1,84 +0,0 @@ -// -// RecipeTableViewController.m -// FoodbLog -// -// Created by Jovanny Espinal on 10/20/15. -// Copyright © 2015 Ayuna Vogel. All rights reserved. -// - -#import -#import - -#import "RecipeTableViewController.h" -#import "RecipeTableViewCell.h" - -@interface RecipeTableViewController () - -@end - - -@implementation RecipeTableViewController - -- (void)viewDidLoad { - [super viewDidLoad]; -} - -#pragma mark - Table view data source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return self.recipeResultsArray.count; -} - - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - - RecipeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RecipeCell" forIndexPath:indexPath]; - - cell.recipeName.text = self.recipeResultsArray[indexPath.row].recipeTitle; - - [cell.recipeImage sd_setImageWithURL:[NSURL URLWithString:self.recipeResultsArray[indexPath.row].imageURLString] - completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - - cell.recipeImage.image = image; - - }]; - - return cell; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - - [self getIngredientsOfRecipe:self.recipeResultsArray[indexPath.row]]; - - [self.delegate didSelectRecipe:self.recipeResultsArray[indexPath.row].recipeTitle - withIngredients:self.recipeResultsArray[indexPath.row].caption]; - -} - -- (void)getIngredientsOfRecipe:(FoodFeedObject *)recipe { - - AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc]init]; - - manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"]; - - NSString *recipeString = [NSString stringWithFormat:@"http://food2fork.com/api/get?key=1c8230d5345097e5019e288eb8203983&rId=%@", recipe.recipeID]; - - [manager GET:recipeString parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { - - NSArray *ingredientsArray = responseObject[@"recipe"][@"ingredients"]; - NSString *ingredientsString = [ingredientsArray componentsJoinedByString:@"\n \n"]; - recipe.caption = ingredientsString; - - } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) { - - NSLog(@"banana"); - - }]; - -} - -@end From 64edb4d9b35efe7767dc5e395d9cc0d4cb52560e Mon Sep 17 00:00:00 2001 From: Ikmal Azman <59039044+esikmalazman@users.noreply.github.com> Date: Sat, 15 Apr 2023 16:18:01 +0100 Subject: [PATCH 29/29] Update .gitattributes --- .gitattributes | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitattributes b/.gitattributes index 9ff2b36..697e5d5 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,3 @@ -FoodbLog filter=lfs diff=lfs merge=lfs -text -*.gitattributes filter=lfs diff=lfs merge=lfs -text -*.gif filter=lfs diff=lfs merge=lfs -text +# FoodbLog filter=lfs diff=lfs merge=lfs -text +# *.gitattributes filter=lfs diff=lfs merge=lfs -text +# *.gif filter=lfs diff=lfs merge=lfs -text